What Is dsh-vision-router? Pixel Vision for Text-Only Agents
dsh-vision-router is a vision routing plugin for DeepSeek Harness (DSH) that gives text-only agents eyes: image input becomes ordinary tool calls, backed by a free built-in vision chain and 14 pixel-level vision tools—one-command install, no Python, with DeepSeek always the reasoning brain. This guide explains what dsh-vision-router is, its core features, install/update/uninstall commands, typical usage and troubleshooting, so you can let your agent see images and work on them step by step in the DSH Plugin ecosystem.
What Is dsh-vision-router?
dsh-vision-router solves the problem of DeepSeek text-only models not being able to see images: it routes the image turn directly to a vision model, pixel-faithful, while DeepSeek stays the reasoning brain. The positioning and facts below all come from the official README (source):
dsh-vision-router (GitHub repository ysr666/dsh-vision-router) is maintained by ysr666 and open-sourced under the MIT license. Most DSH vision plugins convert images into text descriptions for DeepSeek—a lossy description bridge; dsh-vision-router uses a routing bridge instead, handing the image turn directly to a vision model at pixel fidelity. It ships a built-in free vision chain (a five-model OVHcloud anonymous fallback, no account or key) and 14 pixel-level vision tools. Its tool layer draws on community projects such as Anionex's dsh-vision-toolkit, but all code is independently implemented. It is part of the DSH Plugin ecosystem, in the tools category.
What Are the Core Features of dsh-vision-router?
dsh-vision-router's core capabilities revolve around routing-bridge image turns, a free vision chain, 14 pixel-level tools and continuous multi-step image work: DeepSeek is always the brain, and the vision model is only the eyes called on demand. These capabilities all come from the official README (source):
- Routing bridge, not description bridge: image turns go straight to a vision model at pixel fidelity; DeepSeek reasons, and text turns stay untouched in model, cost and context.
- Free built-in vision chain: a five-model OVHcloud anonymous fallback by default, no account or key (2 requests/minute per IP per model, about 10 RPM in theory); user-configured vision models run first.
- 14 pixel-level vision tools: Q&A, grounding, element detection, cropping, pixel diff, color extraction, OCR, SVG tracing, cutout, HTML screenshot and long-screenshot OCR, all running on sharp, potrace, tesseract and system Chrome—no Python.
- Continuous multi-step image work: an image turn is a text turn that calls tools, e.g. vision_ground → vision_crop → vision_describe → vision_pixel_diff; the agent iterates until the task is done.
- Capability-aware auto routing: optionally enable Auto mode to prioritize already-configured models using measured capability evidence, never inferring capability from model names.
- A verifiable pixel loop: reference → vision_html_screenshot → vision_pixel_diff (diff ratio plus worst 8×8-grid regions) → fix → re-check, making UI restoration measurable (the README example ends at a 2.54% final diff).
How to Install and Enable dsh-vision-router?
Installing dsh-vision-router is a single command; the package wires its own composition patch, and after enabling the "👁 Vision" control in the composer you can use image turns like ordinary tool-calling turns. Requirements: a DeepSeek Harness Web profile and Node ≥ 22 (source):
1. Install dsh-vision-router: run the install command in your DSH terminal to add the plugin to the current profile:
npx @deepseek-ai/dsh plugin --profile web add dsh-vision-router
Wait for the command to finish; from a Harness source checkout use pnpm dsh plugin --profile web add dsh-vision-router.
2. Verify the installation: check that a vision-router line appears in the config:
npx @deepseek-ai/dsh --profile web --dump-config | grep vision-router
If vision-router shows up, the install succeeded; after first adding it to a long-lived Web process, let that process reload once so the plugin bundle is discovered.
3. Enable the "👁 Vision" control: when you need image input, click "👁 Vision" next to the composer until it shows "👁 Vision ✓", then paste or upload the image—pasting or uploading does not enable Vision automatically (source).
4. Update dsh-vision-router: a plain npx @deepseek-ai/dsh plugin --profile web update dsh-vision-router also updates, but pnpm v11 silently holds back releases younger than 24 hours; specify the version explicitly to be safe:
npx @deepseek-ai/dsh plugin --profile web add dsh-vision-router@<version>
You can also use the one-click update in Settings → Vision Router; settings live in the profile and survive upgrades.
5. Uninstall dsh-vision-router: run the remove command to drop the dependency and the bundle layer:
npx @deepseek-ai/dsh plugin --profile web remove dsh-vision-router
If you manually disabled the official DeepSeek row, re-enable it in your profile patch.
Typical dsh-vision-router Usage
dsh-vision-router is enabled by default after installation; daily use is four steps: turn on the Vision control, send an image, let the agent call vision tools, and iterate until you are satisfied. The following four steps cover typical usage from image Q&A to pixel-level restoration.
1. Enable "👁 Vision" and send an image: click "👁 Vision" in the composer until a checkmark appears, then paste or upload the image and send. The mode persists across sends and does not auto-reset; choosing a different ordinary model turns Vision off.
2. Ask the agent to look at the image or ground elements: just ask, and the agent calls tools such as vision_describe; use vision_ground when you need to locate something:
vision_ground image="ref.png" target="the send button"
vision_describe paths=["ref.png","impl.png"] question="list the differences" json=true
3. Verify with a pixel diff: after restoring a UI, compare against the reference with vision_pixel_diff:
vision_pixel_diff original="ref.png" rebuilt="screenshot.png"
The output reports a diff ratio plus the worst 8×8-grid regions; keep fixing until it converges.
4. Take local HTML screenshots and transcribe long screenshots: use vision_html_screenshot for local HTML pages and vision_long_screenshot_ocr for long captures:
vision_html_screenshot source="page.html" width=1200 height=720 fullPage=true
vision_long_screenshot_ocr image="chat-log.png" chunkHeight=1200 overlap=120
dsh-vision-router Troubleshooting
The four issues below come from the official README's Troubleshooting section: coexistence with dsh-web-ui, a UTF-8 BOM startup failure, a fresh release not taking effect, and a stale sharp conflict—the commands are copy-paste ready (source):
1. Images get rewritten when using dsh-web-ui / dsh-web-ui-all together: symptom: with both plugins installed, image uploads are converted into describe-image references and the vision plugin never receives the original image. cause: dsh-web-ui's send hook rewrites image uploads. Fix: open Settings → Plugin config → Image understanding and turn off "Rewrite images to describe-image references on send" (or set interceptImageSend: false); the switch is read on every send, so no hook reinstall or DSH restart is needed.
2. Startup fails with Unexpected token ... is not valid JSON: symptom: dsh web exits immediately at startup with a JSON.parse error. cause: the profile's package.json was saved as UTF-8 with BOM by an editor, and the invisible character makes JSON.parse fail. Fix: run the repair command, which removes the BOM and validates the JSON again:
npx dsh-vision-router repair --profile web
Use npx dsh-vision-router doctor --profile web to diagnose without modifying the file.
3. A fresh release does not take effect (downloaded 0 / added 0): symptom: updating reports 0 downloaded and 0 added, and nothing changes. cause: pnpm v11 silently holds back versions younger than 24 hours. Fix: install the target version explicitly (dsh plugin --profile web add dsh-vision-router@<version>) or run npx dsh-vision-router repair to lift the version pin.
4. Pixel tools fail with colourspace: parameter space not set after an upgrade: symptom: vision_* pixel tools report a colorspace error after upgrading from an early version. cause: a stale sharp 0.34.0 still sits in the profile and conflicts with the host's sharp 0.35.3 in the same process. Fix: delete node_modules/sharp and node_modules/@img under the profile and restart, or run pnpm install inside the profile.
Use Cases and Notes
dsh-vision-router fits every scenario where DeepSeek needs to see an image: UI restoration and verification, screenshot Q&A, icon or element grounding, OCR extraction, color picking and SVG tracing. Typical use cases include front-end restoration (quantified with the pixel loop), visual checks after UI automation, text extraction from long screenshots, and design-file Q&A with element grounding (source). Notes: the free chain is rate-limited by default (2 requests/minute per IP per model). For heavier use, configure a free key channel or a local Ollama backend; the vision_screenshot desktop capture is off by default and requires an explicit opt-in; vision_html_screenshot needs system Chrome while every other tool works without a browser; image text is treated as untrusted evidence, and the agent never executes instructions found inside images (source).
Project Links
dsh-vision-router is an MIT open-source project maintained by ysr666. Plugin details page: dsh-vision-router plugin details.
This page is an independent guide rewritten from the plugin's official README — for the authoritative documentation and the latest changes, defer to the source: ysr666/dsh-vision-router. A plugin is third-party code that runs on your machine once installed; inclusion is not an endorsement — review the source before installing.
FAQ
dsh-vision-router's free vision chain defaults to a five-model OVHcloud anonymous fallback with no account or key, limited to 2 requests per minute per IP per model (about 10 RPM in theory). User-provided vision models run first and are not subject to this limit.
Enable the Vision control in the DSH composer to process images: dsh-vision-router then routes image turns to the vision model like ordinary tool-calling turns, automatically executing tools such as vision_ground and vision_crop.
dsh-vision-router provides 14 pixel-level vision tools: visual Q&A, grounding, cropping, pixel diff, color extraction, OCR, SVG tracing, cutout, HTML screenshot and long-screenshot OCR, supporting continuous multi-step image work like vision_ground, vision_crop, vision_describe and vision_pixel_diff.
dsh-vision-router needs no Python after installation: the whole vision pipeline (downscale, grounding, crop, pixel diff, palette, OCR, SVG trace, cutout, HTML screenshot) runs on sharp, potrace, tesseract and system Chrome, and the composition patch is wired automatically.
Most DSH vision plugins convert images into text descriptions for DeepSeek (description bridge, lossy); dsh-vision-router hands the image turn directly to a vision model (routing bridge, pixel-faithful), keeping DeepSeek as the reasoning brain and leaving text turns untouched.
A fresh dsh-vision-router release may not take effect because pnpm v11 silently holds back versions younger than 24 hours (downloaded 0 / added 0); install the target version explicitly or run npx dsh-vision-router repair to lift the version pin.
Related Terms
- dsh-vision-router
- dsh-vision-router is a vision routing plugin for DeepSeek Harness (DSH) that gives text-only agents eyes by turning image turns into ordinary tool calls.— dsh-vision-router README
- Routing bridge
- Routing bridge is dsh-vision-router's core mechanism: the image turn goes straight to a vision model, pixel-faithful, while DeepSeek stays the reasoning brain.— dsh-vision-router README
- Vision tools
- Vision tools are the 14 pixel-level capabilities shipped by dsh-vision-router, such as vision_describe, vision_ground, vision_crop and vision_pixel_diff.— dsh-vision-router README
- Free vision chain
- Free vision chain is dsh-vision-router's built-in anonymous vision backend, a five-model OVHcloud fallback that needs no account or key.— dsh-vision-router README
- Pixel loop
- Pixel loop is dsh-vision-router's verifiable restoration workflow: reference image, HTML screenshot, pixel diff, fix, and re-check.— dsh-vision-router README