Blog · Guide

DeepSeek Harness vision: giving a text-only agent eyes

August 14, 2026 · dshbase

DeepSeek's own models are text-only — they have no vision modality, so they literally cannot "see" an image you upload. That single fact spawned the richest corner of the dsh plugin ecosystem: a race to give a blind agent eyes, hands, and a drop target. Here's what actually works on dsh 0.1.0-rc.6, and what to do when image upload just gets rejected.

The upload problem: why your image gets rejected

Before you install anything, understand the failure mode. The most common complaint in the official repo is that vision-capable third-party models (gpt-5.4, kimi, o1/o3/o4, grok) cannot upload images — the request round-trips through dsh's gateway and the vision modality doesn't survive, so the model never actually receives the pixels. DeepSeek's own first-party models are unaffected because they're text-only: the frontend shouldn't offer them image upload in the first place. The fix is twofold: pick a vision-capable model that survives the round-trip, or — more reliably — hand the image to a dedicated vision plugin that describes it back in text.

Delegation vs. native modality: two philosophies

There are two ways to give a text-only model vision, and the plugins split cleanly along the line. The delegation approach sends the image to a separate vision-capable model — usually an OpenAI-compatible endpoint — and brings back a text or JSON description for the text model to reason over. That's modlens and dsh-vision-toolkit. The native approach keeps everything inside dsh and adds structured overlays (like Set-of-Mark numbering) so the text model can "see" by reference rather than by pixels — that's dsh-vision-primitives. Neither is strictly better: delegation gives you richer recognition (a real vision model did the looking), while native gives you lower latency, no external API key, and no data leaving your box. Most setups end up using both.

modlens: the first, and still the reference

modlens was the first vision plugin for DeepSeek Harness, and at nearly a thousand stars it's still the benchmark. The model: paste an image and get back structured JSON evidence — OCR, layout, and semantics — which your text-only model can then reason over. Instead of trying to force pixels into a model that can't read them, modlens converts the image into something the model can consume. It's the most-starred vision plugin in the plugin directory and verified ok on dsh 0.1.0-rc.6.

dsh-vision-toolkit: the full toolbox

If modlens is the reference implementation, dsh-vision-toolkit is the kitchen sink. It "helps text-only models handle vision tasks" across a much wider surface: intent-aware image Q&A, long-screenshot OCR, UI restoration, grounding, pixel diff, and Artifacts. That's the difference between "read this screenshot" and "read this 4000px scrolling screenshot, then diff it against the last one and tell me what changed in the UI." It builds from source (git-build) on dsh 0.1.0-rc.6 and carries real community weight.

dsh-vision-primitives: native grounding, zero MCP

dsh-vision-primitives is the newer, more opinionated entry. It's a "native interactive visual-reasoning plugin" built around a Set-of-Mark numbered grid overlay for precise visual grounding, with "zero external MCP." The Set-of-Mark technique overlays numbered markers on image regions so the model can say "click #7" instead of "click the button that's sort of in the upper left." For UI automation and precise pointing, that's the mechanism you want. It's listed not-on-npm, so install from source.

dsh-drop-to-path: keep the drag-and-drop

The UX glue is dsh-drop-to-path: it "lets you drag images and files straight to text-only models, keeping the native attachment UX and auto-converting to a path on send." The point is subtle but real — with a text-only model, a raw image paste is meaningless, but a path to the file is something the model can hand off to a vision tool or read directly. This plugin preserves the familiar drag-and-drop gesture while converting the payload into something a text model can actually use.

How to choose

A rough rule of thumb: pick based on how much structure you need, not on star count. If you just need a reliable description of a single image, modlens is the fastest install and the most battle-tested. If your tasks involve long scrolling screenshots, UI diffs, or restoring a design from a picture, dsh-vision-toolkit earns its complexity. If you're automating a UI and need the model to point at exact regions, dsh-vision-primitives is the only one built for that. And regardless of which you pick, dsh-drop-to-path is a cheap companion that fixes the drag-and-drop flow.

  • Quickest path to "read this image"modlens, paste and get JSON evidence.
  • Heavy-duty vision workflows (screenshots, diffs, UI restoration) → dsh-vision-toolkit.
  • Precise pointing / UI automationdsh-vision-primitives and its Set-of-Mark overlay.
  • Just want drag-and-drop backdsh-drop-to-path.

The bottom line

Until DeepSeek ships a native vision model, the playbook is: don't fight the upload gate, route images through a plugin that turns pixels into text or structured JSON. modlens and dsh-vision-toolkit cover almost every case, dsh-vision-primitives adds precise grounding, and dsh-drop-to-path keeps the ergonomics. Start with modlens for a single-image read, add dsh-vision-toolkit when you need long-screenshot OCR or pixel diffs, and layer in dsh-vision-primitives only when you need precise Set-of-Mark pointing. For the current, test-verified lineup of all four — with exact install commands — head to the plugin directory.

All articles →

🌐 中文