dsh-vision-router README

The project's README from github.com/ysr666/dsh-vision-router. As one markdown file: README.md.

DSH Vision Router — eyes for text-only DeepSeek Harness agents

dsh-vision-router

Turn vision on when you need it — eyes for text-only agents on DeepSeek Harness. Free out of the box, no key, no Python, one command.

DeepSeek keeps thinking; the built-in free vision chain and fourteen deep tools do the seeing. When an image matters, enable the composer’s “👁 Vision” control and use image turns like ordinary tool-calling turns — grounded, measurable, repeatable.

awesome · DSH plugin dsh-recommend 🏅 certified dshbase install-tested DeepGuard audit clean featured on dsh-suite

Release v2.1.5 Verified: Node 22 + 24 License: MIT Node.js >=22 No Python

Ecosystem: DSHPlugin.app · Awesome Omni DSH Plugins · dshpluginhub.ai · dsh.plus · dshplugins.ai · dsh-market

English · 中文

💬 QQ community group: 1105463028

[!WARNING] 📌 Announcement (v2.1.5)

v2.1.5: Supports the current DSH stable 0.1.5-rc.1, reconciles Vision twins as providers change live, preserves Vision across wrapped-model switches, and hardens Web activation plus the release/security pipeline. What’s new →

Demo: paste an image, the agent locates the send button with vision_ground / vision_crop / vision_pixel_diff and answers with coordinates

Contents

Why this exists

Most DSH vision plugins bridge images to DeepSeek as text descriptions — lossy, one-shot, and blind to pixels. This plugin keeps the Host-canonical image pixels on the vision model's side and DeepSeek on the reasoning side, and makes looking at an image an ordinary tool call:

How it compares

One-line take: most dsh vision plugins turn images into text descriptions for DeepSeek (description bridge — lossy); this plugin hands the image turn straight to a vision model (routing bridge — pixel-level), with a built-in keyless free fallback.

[!NOTE] On DSH 0.1.2-alpha.1+, attachments remain Host-owned. Vision Router consumes the Host-persisted canonical image: clean single-frame 8-bit sRGB/sRGBA images inside the configured normalization limits can pass through byte-identically, while images that need orientation, color-space, metadata, animation, or size normalization may be re-encoded. Pixel tools therefore promise the Host-canonical raster, not preservation of the uploader's original encoded bytes.

Manual model switching MCP vision bridge dsh-vision-router
Image pixels ✅ available (when switched) ❌ text description only ✅ Host-canonical raster, on the image turn
Automatic ❌ ✅ ✅
Daily model untouched ❌ (whole session swapped) ✅ ✅
Provider failure recovery ❌ ❌ ✅ fallback chains
Reusable structured queries — partial ✅ JSON mode + caching
Free out-of-the-box ❌ ❌ ✅ built-in keyless endpoint
Fits dsh composition — external server ✅ one plugin row

Difference from existing dsh community projects (all excellent, each with its own focus; descriptions reflect their READMEs as of 2026-08):

Project Approach What this plugin adds
dsh-vision-sidecar Pre-describes images with an external VLM; the description joins the session as a message to DeepSeek; LLM7.io anonymous endpoint by default (OVHcloud listed as a no-key alternative) Description bridge; this plugin adds image routing, with vision_describe covering descriptions on demand
dsh-vision-proxy Wraps a provider route and transcribes images into text in the request stream Transcription bridge; this plugin wraps no provider — it rewrites routing through agent/request waterfalls
dsh-vision-provider Registers DeepSeek + Vision combined routes: images are described by the chosen vision model before reaching DeepSeek Two-model bridge idea; this plugin adds automatic routing, fallback chains and tools on top
modlens The first dsh vision plugin; reuses local Claude Code/Codex/OpenCode/Pi logins as vision engines Engine-reuse idea; this plugin ships its own provider chain and depends on no other local CLI
dsh-vision-toolkit Ten intent-aware visual tools (Q&A/OCR/pixel verification/UI restoration), called explicitly on demand Broader tool set; this plugin adds whole-turn auto-routing and a keyless free fallback
dsh-tool-vision An inspect_image tool plus an agent/pre-step waterfall bridge (pasted images become tool hints before entering the log) Similar waterfall bridge; this plugin adds turn routing, fallback chains, caching and the free endpoint

Design lineage

The deep-vision tool layer and UI-restoration workflow in this project were informed by Anionex/agent-vision-toolkit and its native DSH implementation Anionex/dsh-vision-toolkit. In particular, this project drew on their intent-driven tool selection, progressive tool exposure, pixel-diff verification loop, and parts of the visual-tool decomposition and naming, including long-screenshot OCR, foreground extraction, and HTML screenshot tooling.

All code in dsh-vision-router is independently implemented. On top of those referenced design ideas, this project independently developed its turn-level/tools-first vision routing, DSH admission/wrapper integration, multi-backend provider and failure fallback chains, built-in free vision chain, attachment/image-memory handling, caching, and related runtime resilience mechanisms.

We appreciate Anionex's prior work and the broader DSH community. Clear attribution and independent iteration can coexist; both help keep the DSH ecosystem open, collaborative, and healthy.

Acknowledgements

This project borrows ideas from all of the above — especially the keyless free-endpoint exploration (LLM7.io and OVHcloud anonymous tiers) by dsh-vision-sidecar. Thanks to the authors of dsh-vision-proxy, dsh-vision-provider, modlens, dsh-vision-toolkit, and dsh-tool-vision.

Quick start

1. Install the plugin

For normal npm/npx installs, installation is a single command:

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

[!WARNING] If this profile already loads community plugins manually through cordis.patch.yml, do not mix that legacy setup with dsh plugin add / dsh plugin list: current DSH CLI behavior can also append bundle-patch dependencies to dsh.profile.bundles, causing those plugins to register twice. Migrate the existing manual plugin rows to bundle-managed loading first, or keep using the manual installation path. See deepseek-harness discussion #2889.

[!NOTE] Third-party dsh-web-plugin-manager / dshpm v0.4.2+ is also compatible: its quality gate now correctly allows @deepseek-ai/schemastery as a runtime dependency. The official DSH CLI above remains the recommended install path.

If you run DeepSeek Harness from a source checkout with pnpm, use the workspace script instead — dsh is not necessarily on your shell PATH:

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

If you already installed the DSH CLI globally and dsh is on PATH, the shorter dsh ... form works too. After installation, start or reload DSH Web as you normally do.

[!NOTE] If you install the plugin into a Web process that was already running long-term, let that DSH Web process reload once so the plugin bundle itself is discovered. After the plugin is loaded, adding/removing models or changing wrapper scope hot-updates without further DSH restarts.

2. Pick your normal model, then enable “👁 Vision” when needed

The stock model selector in the lower-right corner still chooses your brain/conversation model — DeepSeek, Qwen, or any other ordinary route. Vision Router’s generated “+ Auto Vision” wrappers remain real Host routes for image admission, but are hidden from the stock picker and /model when ownership can be established safely.

When you need image input, explicitly click “👁 Vision” beside the composer:

[!IMPORTANT] Pasting or uploading an image does not enable Vision automatically. Before sending an image, make sure the control shows 👁 Vision ✓.

The real wrapper route is still present underneath to satisfy DSH image admission. Hiding is presentation-only and fails open: if the browser cannot confidently prove a route belongs to Vision Router, that route remains visible rather than risking hiding a third-party provider.

3. Paste or upload the image

With “👁 Vision” enabled, paste or upload an image normally. By default the complete vision tool schema is stable from session start, so the agent can immediately use vision_describe, vision_ground, vision_crop, and the rest across multiple steps when needed.

If the session already contains images, DSH may reject switching from a vision wrapper back to a text-only route. Vision Router does not bypass that Host rule: it shows a transient error using the same interaction style as the stock model selector, keeps the real current model unchanged, and leaves 👁 Vision ✓ reflecting the actual state so the session stays usable.

The built-in anonymous OVH vision fallback is already configured, so normal image use needs no signup or API key. The lower-right chat picker selects only the brain/conversation model; vision backends do not belong there. Advanced options live under Settings → Vision Router: each vision-backend row may select any callable generative user model already configured under Settings → Models. DSH image-capability metadata is advisory only: undeclared or text-only-labelled models remain selectable and show a warning. At runtime Vision Router always tries the provider's registered DSH adapter first — including WebSocket, RPC and private transports — and falls through on a real failure. The direct compatibility bridge is used only when an http(s) OpenAI Chat Completions endpoint is positively identified. Leaving every user row empty is valid; the OVH chain remains the final fallback. Vision HTTP is an internal transport route, not a model group users should select.

See it in action

Left: an image turn — the user sends a picture, the agent calls vision_describe through the free chain and answers. Right: the finished structured answer.

A conversation turn in which the agent looks at an uploaded image through vision_describe. The agent's structured answer describing the image content.

Free vision key channels

The built-in OVH fallback is anonymous by design, and OVH caps anonymous use at 2 requests/minute per IP per model. If that feels tight, every channel below offers free vision models with much higher quotas — all of them are free to register, and none charges for the free tier. Free policies rotate often; treat this table as an August 2026 snapshot and double-check each provider's console before relying on it.

Channel Free vision model(s) Free quota CN direct? Where to get the key
OVHcloud AI Endpoints (access key) Qwen2.5-VL-72B-Instruct — the same endpoint the built-in fallback uses 400 req/min per project per model (vs 2 anonymous) ✅ OVH account → Public Cloud project (attach a payment method; free models are not charged) → AI Endpoints access key
Zhipu (bigmodel.cn) glm-4.6v-flash · glm-4.1v-thinking-flash · glm-4v-flash — three permanently free models; chaining them triples capacity uncapped tokens ✅ open.bigmodel.cn → API keys
DashScope (Aliyun) qwen3-vl-flash (limited-time free) and the Qwen-VL series new users: 1M tokens per model series / 90 days ✅ bailian.console.aliyun.com
Intern AI (Shanghai AI Lab) internvl-latest · internvl3.5-latest 30 RPM, 90M tokens/month ✅ chat.intern-ai.org.cn
Groq meta-llama/llama-4-scout-17b-16e-instruct (native multimodal, up to 5 images) 30 RPM / 14,400 req/day, no card ❌ proxy console.groq.com
Google AI Studio gemini-2.5-flash · gemini-2.5-flash-lite 10–30 RPM / 500–1,500 req/day ❌ proxy aistudio.google.com
NVIDIA NIM meta/llama-3.2-11b-vision-instruct · nvidia/nemotron-nano-12b-v2-vl 40 RPM, no card ⚠️ build.nvidia.com
OpenCode Zen mimo-v2.5-free (vision + code) 30 RPM / 500 req/day ⚠️ opencode.ai/zen
OpenRouter google/gemma-4-26b-a4b-it:free · google/gemma-4-31b-it:free 50 req/day on unpaid accounts ❌ proxy openrouter.ai

Any of these channels can join the vision chain as an httpProviders entry (key in the matching environment variable or ~/.dsh/.credentials.yaml), and the chain tries your entries before the anonymous fallback.

[!NOTE] Free-tier policies change without notice — Cerebras retired its free tier in July 2026 (now a one-time $5 credit), SambaNova's free tier is down to 20 requests/day, and Hugging Face's is $0.10/month. Third-party “:free relay” aggregators are deliberately not listed: they rotate quickly, lack SLAs, and some resell quota in ways that violate upstream terms.

Highlights

dsh-vision-router (ysr666/dsh-vision-router)

Searching Database…

这是什么?dsh-vision-router 是一个 DeepSeek Harness(DSH)插件,让纯文本的 DeepSeek 智能体获得「看」图像的能力。它把图像轮次路由到一条免费的内建视觉链路和十四个像素级工具(问答、定位、裁剪、像素差异、取色、OCR、SVG 描摹、抠图、截图),而推理仍由 DeepSeek 完成。
这是独立应用,还是加到 DeepSeek Harness 上的插件?它是一个用 'dsh plugin add' 安装的 DSH 插件,不是单独的应用——它会修补 DSH 的组合逻辑,加入一个视觉包装器、输入框中的「Vision」开关,并把图像轮次路由到视觉工具。
怎么安装并启用它?通过官方 DSH CLI 运行 'dsh plugin add'(或从源码检出中运行 pnpm workspace 脚本),重新加载一次 DSH Web,之后想在何时发送图片,就点击输入框旁边的「👁 Vision」开关。
视觉工具要工作需要 Python 或 API 密钥吗?不需要。整条流水线(降采样、定位、裁剪、像素差异、调色板、OCR、SVG 描摹、抠图、HTML 截图)都基于 sharp/potrace/tesseract/系统 Chrome 运行,而且内建的 OVHcloud 匿名端点无需任何账号或密钥即可使用。
免费的视觉回退是无限制的吗?不是,内建的无密钥 OVHcloud 回退被限制为每个 IP 每个模型每分钟 2 次请求(五个模型合计约每分钟 10 次);如果这个限额太紧,你可以注册免费的提供商密钥,配额要高得多。
它和其他 DSH 视觉插件有什么不同?大多数 DSH 视觉插件把图像描述成文字再交给 DeepSeek(有损、一次性);dsh-vision-router 则是把整个图像轮次路由给真正的视觉模型,并让智能体迭代地持续调用视觉工具,而 DeepSeek 的文本轮次完全不受影响。
开启 Vision 后,推理还是由 DeepSeek 来做吗?是的——视觉模型只在图像轮次按需充当「眼睛」;DeepSeek 本身仍是推理模型,纯文本轮次在模型、成本和上下文上都不受影响。
启用 Vision 后智能体能用到哪些工具?十四个像素级工具,包括 visiondescribe、visionground、visioncrop 和 visionpixeldiff,外加 OCR、SVG 描摹、抠图、调色板提取和 HTML 截图,智能体可以把它们串成多步调用。
我可以用自己的视觉模型代替免费回退吗?可以——在 Settings → Vision Router 下,你可以指定 Settings → Models 中已配置的任何可调用生成模型;用户提供的模型会被优先尝试,OVH 链路只是最终回退。
Creator
ysr666
Size
8.3 MB
Stars
1.2K
Age
2mo
Commits · 90 Days