ysr666/dsh-vision-router
ysr666/dsh-vision-router为纯文本 Agent 提供视觉能力:内置免 Key 视觉链 + 像素级视觉工具(看图问答、定位、裁剪、像素对比、取色、OCR、矢量化、抠图、截图);粘贴图片即可用。
纯文本 dsh 模型的识图插件:粘贴图片自动由你配置的多模态模型转成文字——透明孪生路由、模型可自主调用识图工具、无内置密钥与中转。
Vision for text-only models inside DeepSeek Harness — paste an image, and a configured multimodal model transcribes it to text automatically. No model switching, no built-in keys, no relay.
dsh-autovision gives text-only models (DeepSeek, GLM, …) real image support in the DeepSeek Harness web UI. It registers a transparent twin provider for every pure-text model, routes image-bearing requests to a multimodal model you configure yourself, and feeds the transcription back as text — so the text model "sees" the image without you switching models or touching the request.
⭐ If this plugin saves you time, please star the repo — it helps other dsh users find it.
DeepSeek Harness only lets a model receive images when that model declares image input (inputModalities). Pure-text models (e.g. deepseek-*, glm-*) reject image messages — pasting a screenshot into a session either fails silently or errors out.
Existing workarounds made you switch models, use a third-party relay, or hardcode a key. dsh-autovision keeps your setup: the plugin never ships a key, never proxies through a relay, and never touches your model config. It simply borrows the multimodal model you already configured in dsh settings to transcribe images to text.
<provider>-autovision twin registered at runtime. agent/request auto-redirects each request to the twin, so you never switch models and never edit settings.yaml.listModels returns [], so the model picker shows only your real models. No noise.autovision_read_image tool — the model can actively read an image file during a run, with its own per-task prompt (e.g. "transcribe every word", "describe the UI state").opencode-go, minimax-m3). No API key, no relay URL, nothing hardcoded.dsh upgrade — pure plugin implementation, zero patches to dsh core, zero config rewrites.Requires dsh web ≥ 0.1.0-rc.6.
dsh plugin --profile web add @iroam2375/dsh-autovision
The npm package is published as
@iroam2375/dsh-autovision(the bare namedsh-autovisionis unavailable on npm — too similar to the existingdsh-auto-vision). The plugin itself is still addressed by its bundle iddsh-autovision.
Restart dsh web, open 设置 → 插件 (plugin settings) → Autovision, and pick a default vision model (any multimodal model available in your LLM providers, e.g. minimax-m3 / opencode-go). That model does all the transcribing; nothing else is configured.
If you develop locally, the standard bundle wiring is used: add
"dsh-autovision"todsh.profile.bundlesin your profile'spackage.json. Do not also manuallyinsertit intocordis.patch.yml— that producesduplicate loader entry id: autovisionat boot.
autovision_read_image with a file path (and its own instruction) and act on the result.| Setting | Meaning |
|---|---|
defaultVisionModel | Multimodal model used for transcription (from your LLM providers). No vision model → transcription degrades to a fixed placeholder instead of crashing. |
prompt | Optional custom instruction for the vision model. Empty → an open-ended description prompt (text, colors, shapes, UI elements, layout, state). |
targetProviders | Optional whitelist of providers to wrap (default: all). |
<provider>-autovision) that declares inputModalities: ['text', 'image'].agent/request (prepended) redirects each request to the twin; the twin's stream() walks every image block in the wire messages (including tool-result nesting), transcribes each via the configured vision model (LRU-cached), and forwards text upstream.read_image tool calls pass because the twin declares image input.ctx.llm.resolveModelInfo lets you manually switch to any wrapped text model mid-session without rejection — the request still routes through the twin.minimax-m3), mitigated by an LRU cache.opencode-go-autovision) with no address — cosmetic only, does not affect function.