Eyes for text-only DSH agents: paste an image and it just works, with a built-in free vision chain (no key, no Python) plus ten pixel-level tools. DeepSeek keeps doing the reasoning while the vision model does the seeing, and image turns behave like ordinary tool-calling turns.
dsh plugin --profile web add dsh-vision-router
The name after --profile is a profile name you choose yourself — swap in whichever one you use.
Most DSH vision plugins bridge an image into a text description and feed that to DeepSeek — lossy, one-shot and blind to pixels. This plugin inverts that: the original pixels stay on the vision model's side, DeepSeek stays on the reasoning side, and looking at an image becomes an ordinary tool call. Installation is one command: the package ships its own `dsh.bundle.patch`, so `dsh plugin add` wires the route row, the admission wrapper and the attachment limits (relaxed to 20MB / 100MP) automatically — purely additive, never touching the core rows, with no manual file edits. Taking over the official DeepSeek route is an optional stealth setting, off by default. Free by default: the vision chain starts with a built-in OVHcloud anonymous endpoint (Qwen2.5-VL-72B-Instruct, no account, no key, 2 requests/min per IP), with OpenRouter, Pi-AI providers or any OpenAI-compatible endpoint as optional upgrades. No Python anywhere — downscale, grounding, crop, pixel diff, palette, OCR, SVG trace, cutout and HTML screenshot all run on sharp, potrace, tesseract and system Chrome. Because seeing is a tool call, the work can be continuous and multi-step: `vision_ground` → `vision_crop` → `vision_describe` → `vision_pixel_diff` → fix → screenshot again, iterating until it's done. Text turns are untouched in model, cost and context; the vision model is called only on demand and answers are cached by image content. It stays transparent to the user too: uploaded images keep rendering as images in the conversation UI, and the rewrite that points the model at the vision tools happens only inside the model call, never in the session log. Since v1.1.0 Extra vision wrappers let any custom text route (opencode, for instance) send images out of the box, alongside long-screenshot OCR, a connection-test button and artifact preview cards.
- ▸One-command install: the bundle patch wires the route row, admission wrapper and attachment limits (20MB / 100MP) — purely additive, core rows untouched
- ▸Free by default via a built-in OVHcloud anonymous endpoint (Qwen2.5-VL-72B, no account or key); paid chains are optional upgrades, and no Python is needed
- ▸Seeing is an ordinary tool call, so work is multi-step: ground → crop → describe → pixel_diff → fix → screenshot again, iterating to completion
- ▸Text turns keep their model, cost and context; uploaded images still render as images, and the rewrite lives inside the model call, never the session log
视觉路由:默认免费端点开箱即用、逐供应商降级,issue 8/8 全回应
Drop it into your README — it links back to this page.
