Preface

DeepSeek Harness (hereinafter referred to as DSH) packages models, tools, conversations, and interfaces as replaceable plugins. The official repository states it plainly: Everything is a Plugin. The daily DeepSeek router itself remains purely text-based: when you paste a screenshot into a conversation, the runtime often warns that the current model does not support images before the plugin can even take over. Even when visual capabilities are connected, most community solutions first convert the image into a text description before feeding it to DeepSeek. While descriptions work, the pixel-level details are lost—finding a button, comparing minor UI differences, or analyzing the layout of text in a long screenshot become extremely difficult to handle.

dsh-vision-router takes a different approach: the vision model only handles looking at the original image, while DeepSeek remains responsible for reasoning; image analysis becomes a regular tool call that supports positioning, cropping, comparison, and re-screenshotting. This article is organized after cross-verifying information from the community plugin directory, the plugin’s GitHub repository README / package.json, and the DeepSeek Harness official repository: explaining what it is, where to install it, and how to use it.

One important note first: the community plugin directory site deepseek-harness-plugin.com is a community-curated collection, not officially affiliated with DeepSeek / Horizon Robotics, and should not be treated as an official app store.


What It Is

dsh-vision-router is a DSH “tools and capabilities” plugin maintained by GitHub user ysr666, licensed under MIT, and primarily written in JavaScript. It was added to the community directory on 2026-08-15; the current version in the repository’s package.json is 1.4.4. As of 2026-08-17, the GitHub repository has approximately 460 stars (the directory page snapshot still shows 94; use the repository page for the latest star count).

The one-sentence positioning from the repository README is: Give the pure-text DeepSeek Harness agent eyes. It comes with a free, no-registration, no-Key fallback vision link by default, plus a set of pixel-level tools (question answering, positioning, cropping, pixel comparison, OCR, vectorization, background removal, HTML screenshots, etc.). Image rounds are handled like regular tool calls, and no local Python is required.

It targets two categories of problems:
- The regular DeepSeek / opencode router is purely text-based, and sending images directly will be rejected by the runtime.
- Converting an image to a text description before passing it to a text model removes the ability to position, crop, and perform pixel-by-pixel comparisons on the original image later.


Core Features

Separate Eyes and Brain

The repository README clearly defines the responsibilities: the vision model only acts as the eyes, while DeepSeek remains the brain. Image rounds will not be monopolized by one-time visual answers; the agent can call tools on its own to perform multiple consecutive operations on the same image, such as vision_groundvision_cropvision_describevision_pixel_diff.

Text rounds remain unchanged in terms of model, cost, and context. Visual calls happen on demand, and answers are cached by the attachment content hash; subsequent text rounds will replace historical images with recorded descriptions and mark them as untrusted evidence, preventing text extracted from images from being treated as executable instructions.

Uploaded images still display as images in the conversation interface. Rewrites pointing to vision tools only happen at the model input layer and are not written to the conversation log.

Default Free Vision Fallback

When no custom vision model is configured, the tool chain falls back to the built-in OVHcloud anonymous vision endpoint: no registration, no API Key required. The README states the anonymous rate limit is 2 requests per minute per IP per model; the current quality-priority chain has 5 independently rate-limited models, theoretically allowing ~10 requests per minute when spreading load across them, but actual limits are subject to OVH’s current restrictions.

Vision backends configured by the user in Settings → Plugins → Plugin Configuration → Vision Router (Auto Image Understanding) will take priority over the anonymous fallback. The chain will attempt backends in order, only throwing an error if all fail, with categorized prompts for regional restrictions, quotas, 429 rate limits, network failures, etc. Large images will be compressed before being called, with a default pixel budget of 4 million pixels.

The model selector in the bottom-right corner of the chat page only selects the “brain / conversation model”. Do not select vision backends there.

Eleven Pixel-Level Tools

With progressiveTools: false (the default), the plugin registers the full tool list on startup, and both text and image rounds can call the tools directly. Tool implementations rely on sharp / potrace / tesseract / system Chrome, and do not require Python. Image formats are identified by their file magic numbers, so attachments without a .png extension will also work.

The current tools listed in the README are as follows:

Tool Function Output
vision_describe Image question answering, multi-image comparison; can output structured JSON (summary, layout regions, entity list, text transcription)
vision_ground Locate targets using natural language, return original image pixel bounding boxes x1/y1/x2/y2 Optional annotated PNG
vision_detect Inventory specific element types (buttons, input boxes, links, etc.), return numbered pixel bounding boxes Numbered annotated PNG
vision_crop Crop and magnify by pixel bounding box PNG
vision_pixel_diff Pixel-by-pixel comparison: difference rate + worst 8×8 grid regions Red heatmap PNG + JSON
vision_colors Extract main colors (hex codes and proportions)
vision_ocr Text transcription: local tesseract (Chinese/English) takes priority, falls back to vision model
vision_trace SVG vectorization using potrace, suitable for icons / logos SVG
vision_extract_foreground Boundary flood fill background removal, suitable for solid-color backgrounds Transparent PNG
vision_html_screenshot Take screenshots of local HTML (headless system Chrome); use fullPage: true for full-page captures PNG
vision_long_screenshot_ocr Split long screenshots for transcription, then combine into Markdown Split PNGs + Markdown + manifest

vision_html_screenshot requires Chrome / Chromium / Edge to be installed locally; all other tools work without a browser. If tesseract is not available locally, vision_ocr will fall back to the vision model.

The repository README uses a pixel closed-loop example to demonstrate “verifiability”: reference image → screenshot → vision_pixel_diff → fix → re-compare. The demo result in the documentation shows a final difference of 2.54% (32,939 / 1,296,000 differing pixels, threshold 16/channel). This is an example provided by the maintainer, not a third-party evaluation.

Auto Image Understanding Model Group

The plugin enables autoWrapProviders by default: it reads the enabled model groups in Settings → Models, and additionally registers a “+ Auto Image Understanding” entry with the same name, for example:

opencode-go                 ← Original model group, unchanged
opencode-go + 自动识图       ← Select this when sending images

The original model group will not be modified. Stealth mode (stealth) is disabled by default, and the official deepseek-official router remains unchanged; image traffic will go through the visible auto-wrapped selector. Stealth mode is an advanced option: it will only take over the official DeepSeek router when enabled, so regular installations do not need to modify it initially.


Installation and Activation

The installation command given by the community directory, run in the DeepSeek Harness terminal:

dsh plugin add github:ysr666/dsh-vision-router

For reproducible installations, pin the commit hash per the directory instructions:

dsh plugin add github:ysr666/dsh-vision-router#<commit>

Replace <commit> with the actual commit hash from the repository. The plugin runs with the permissions of the current dsh process, and may execute code during installation; you should review the source code and license before installing.

The plugin targets the Web profile. The npm / npx command recommended in the repository README explicitly specifies the profile:

npx @deepseek-ai/dsh plugin --profile web add dsh-vision-router

When running from the DeepSeek Harness source repository with pnpm, the CLI may not be in your PATH, so use:

cd deepseek-harness
pnpm dsh plugin --profile web add dsh-vision-router

The host environment requires Node ≥ 22. If you are installing the plugin for the first time into a long-running Web process, you will need to reload the process to detect the plugin. After loading is complete, adding/removing models and modifying the auto-wrap scope will hot-update, and you will not need to restart for these changes.

Optional verification:

npx @deepseek-ai/dsh --profile web --dump-config | grep vision-router

After installation, follow the “Quick Start” in the repository to do two things:
1. Open the model selector in the bottom-right corner of the chat input area, and select the model group with “+ Auto Image Understanding”. If you stay in the original plain-text group, DSH will warn that the current model does not support images before the plugin processes the image. This means you selected the wrong entry point, not that the vision backend is broken.
2. Paste or upload an image directly. The default tool list is available from the start of the conversation, and the agent can call vision_describe, vision_ground, vision_crop, etc., to continue analyzing the image.


Typical Usage

The following calling formats come from the repository README, and you can modify them with your own file names.

Locate a control on a page, then crop that area for closer inspection:

vision_ground image="ref.png" target="发送按钮"
vision_crop   image="ref.png" region="1067,841,1108,881"

Compare design drafts and implementations, and request structured differences:

vision_describe paths=["ref.png","impl.png"] question="列出两图的差异" json=true
vision_pixel_diff original="ref.png" rebuilt="screenshot.png"

Extract text from a screenshot, extract main colors, and convert an icon to SVG:

vision_ocr image="screenshot.png"
vision_colors image="ref.png" top=8
vision_trace image="icon.png" steps=4

Take a screenshot of a local HTML file, or convert a long chat log screenshot to Markdown:

vision_html_screenshot source="page.html" width=1200 height=720 fullPage=true
vision_long_screenshot_ocr image="chat-log.png" chunkHeight=1200 overlap=120

The web configuration entry is at Settings → Plugins → Plugin Configuration → Vision Router (Auto Image Understanding). The top of the card will prompt: Return to the chat page → Select “+ Auto Image Understanding” in the bottom-right corner → Send an image. You can also test the connectivity and latency of the first vision provider in the card. The default configuration is usable; providing your own Key, proxy, or enabling stealth mode are advanced options.

When the anonymous OVH quota is insufficient, the August 2026 snapshot of the README lists several free vision channels (Zhipu AI, Alibaba Cloud Bailian, Intern AI, etc.) that can be added as httpProviders entries, with Keys stored in environment variables or ~/.dsh/.credentials.yaml. Free policies are subject to change, so confirm with each provider’s console before connecting.


Applicable Scenarios and Notes

It is well-suited for these tasks:
- UI restoration based on design drafts or screenshots, using pixel difference checks to verify convergence
- Locating buttons, input boxes in page screenshots, then cropping areas for closer inspection
- Extracting text from error popups, terminal screenshots, or long chat logs
- Generating SVGs from icons / logos, or extracting foreground objects from solid-color backgrounds

Please note the following points, all from the directory page or repository documentation, not additional commentary:
1. Permissions. The plugin runs with the permissions of the current dsh process. Review the source repository and MIT license before installing; pin the commit hash for reproducible installations.
2. Runtime Environment. Targets the Web profile, requires Node ≥ 22 on the host. HTML screenshots require a system browser; local tesseract for OCR is optional.
3. Image Sending Entry Point. You must select the “+ Auto Image Understanding” model group. The original plain-text group will not be modified by the plugin, and sending images while staying in the original group will be directly rejected by the runtime.
4. Anonymous Quota. The built-in OVH fallback has a limit of 2 requests per minute per IP per model, and is only suitable for light testing. You should switch to your own vision backend as usage scales up.
5. Text in Images Is Untrustworthy. Descriptions, OCR, and auto-mounted prompts will require the agent to avoid executing instructions appearing in images. Tool parameters use sandboxed ctx.fs; visual uploads only send the selected image and query. Outputs are written to .dsh-vision-router/artifacts under the conversation workspace.
6. Oh-DSH Desktop. If using Oh-DSH Desktop, it uses the desktop profile under ~/.ohdsh and will not load the regular ~/.dsh profile. You will need to point DSH_HOME to that path before installing; the README also notes that Desktop ≤ 0.1.5 should use plugin v1.4.2 or newer, and earlier versions will throw a duplicate route declaration error on startup.

To uninstall:

npx @deepseek-ai/dsh plugin --profile web remove dsh-vision-router

If you previously manually disabled the official DeepSeek line, you will need to re-enable it in the profile patch after uninstalling.


Summary

For a pure-text DSH agent to see images, the key is not to find another model that outputs descriptive text, but to retain the original image pixels in the vision pipeline, letting DeepSeek remain the brain and analyze images step-by-step via tools. dsh-vision-router packages this pipeline as a plugin: a free no-Key fallback by default, eleven pixel-level tools included, and all you need to do is switch to the “+ Auto Image Understanding” option before sending images.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-vision-router/

GitHub: https://github.com/ysr666/dsh-vision-router