Vision & Multimodal
dsh-media-skills
akqwpeter-prog/dsh-media-skills · ★ 24
Free vision bridge and image generation for text-only models: paste-image reading, GLM-4V-Flash and Gemini engine failover, ModLens-style structured evidence, and a seeded free vision model route.
安装
dsh plugin --profile web add github:akqwpeter-prog/dsh-media-skillsGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
🎨 dsh-media-skills
Give DeepSeek Harness reusable image-review and image-generation skills — verified with desktop 0.2.0-rc.2.
DeepSeek Harness is brilliant at reasoning, but image input depends on the active model's modalities. This bundle contributes two runtime skills plus a bring-your-own-key vision failover chain, runtime-verified against desktop 0.2.0-rc.2, with the latest tag dsh-v0.2.1-alpha.2 source-checked for the same skill contract:
- 📎 Native image attachments — on desktop 0.2 / v0.1.6+, paste, drag, or pick an image when the current model supports images (the default
deepseek-flashdoes). Text-only routes reject image admission instead of using the old auto-transcription hook. - 👁️
vision-review— analyze images and screenshots, catch UI visual bugs, detect watermarks, turn images into text. - 🎨
media-tools— generate illustrations, avatars, backgrounds and banners with a free, watermark-free model. - 🔀 Engine failover — GLM-4V-Flash (free) → DeepSeek-V4-Flash-Vision-Exp (same key as your agent, higher quality) → SiliconFlow Qwen3-VL → SenseNova → Google Gemini (AI Studio) → any OpenAI-compatible endpoint, with ModLens-style structured evidence output.
No hardcoded keys, no core patches, and no hidden settings writes on desktop 0.2; generated files are saved only where the skill is asked to write them.
Why · Quick start · See it in action · Usage · Keys & privacy · FAQ · Examples
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Deutsch · Português · Русский
🤔 Why
Most DSH vision plugins only read images — and many push you through a shared third-party endpoint. dsh-media-skills takes a different stance:
| This bundle | Typical vision-only plugin | |
|---|---|---|
| Read images | ✅ Desktop 0.2 uses the selected image-capable route; vision-review adds GLM-4V-Flash and optional provider failover for scripted QA |
✅ |
| Generate images for free | ✅ SenseNova U1 Fast → SiliconFlow Kolors | ❌ usually absent |
| Model-route management | ✅ Never writes settings on desktop 0.2 / v0.1.6+ — choose routes in Settings → Models; old auto-seeding only exists in historical builds | sometimes |
| Keys committed to the repo | ❌ never — keys stay local | ⚠️ often required |
| Docs in multiple languages | ✅ 9 languages | ❌ usually English only |
| Privacy | ✅ you choose the provider; images only go to your provider | shared free endpoints can see your images |
Why bring your own free key instead of a built-in anonymous endpoint? Privacy and reliability. Your images go only to the provider you choose, under your account and your rate limits — no shared third-party service in the middle.
New-version adaptation:
| DSH build | Status |
|---|---|
| Desktop 0.2.0-rc.2 | Runtime verified. Standard runtime plugin; both skills register through ctx.skills.registerProvider(). Native attachments are admitted only when the active model advertises inputModalities: ["text", "image"]; the default deepseek-flash route does. No core patches or settings writes. |
| Tag dsh-v0.2.1-alpha.2 | Source checked. @deepseek-ai/dsh-skill@0.2.1-alpha.2 keeps the same provider factory, array/{candidates, complete} observation, candidate fields, and image-admission behavior. No alpha desktop build was available locally for a full boot test. |
| v0.1.6 | Same supported provider lifecycle. Configure optional GLM/SiliconFlow/SenseNova/Gemini routes yourself in Settings → Models. |
| v0.1.1 and older preview builds | Historical behavior/docs only. Do not apply the old core patches to signed desktop 0.2 builds. |
See Desktop 0.2 compatibility notes for the exact verification checklist and the MODEL_DOES_NOT_SUPPORT_IMAGES behavior.
✨ What you get
| Capability | What it does on desktop 0.2 | Model / engine | Cost |
|---|---|---|---|
| 🖼️ Native image attachment | Paste, drag, or use the attachment button while an image-capable route is selected. DSH checks the active model's inputModalities; text-only routes return MODEL_DOES_NOT_SUPPORT_IMAGES instead of invoking the old auto-transcription pipeline. |
Default deepseek-flash, or a vision route you configure |
Subject to the selected provider |
👁️ vision-review |
Analyze / recognize / describe local image files and screenshots, catch UI visual bugs (overlap, overflow, misalignment), detect watermarks/logos, OCR, or emit structured JSON evidence. Optional failover chain: GLM-4V-Flash → DeepSeek vision → SiliconFlow Qwen3-VL → SenseNova → Google Gemini → custom OpenAI-compatible endpoints. | GLM-4V-Flash + optional DeepSeek/Qwen/SenseNova/Gemini | GLM/SiliconFlow free tiers; other providers optional |
🎨 media-tools |
Generate images, illustrations, avatars, backgrounds, and banners to an explicit output path. | SenseNova U1 Fast → SiliconFlow Kolors | Provider free tier/terms; no bundled key |
⚡ Quick start
Install from the DSH Plugin Manager (dsh-media-skills) or the CLI:
dsh plugin --profile <name> add dsh-media-skills
Or straight from GitHub: dsh plugin --profile <name> add github:MJorgin/dsh-media-skills.
Keys:
- Desktop 0.2 / v0.1.6+: no keys are needed to install — the two skills register at runtime. The default
deepseek-flashroute supports native image chat. Skill keys (GLM_API_KEY,SILICONFLOW_API_KEY, optionalGEMINI_API_KEY) go in~/.dsh/secrets/media-tools.env; extra model routes are configured in Settings → Models. - v0.1.1-rc.1+: zero extra keys — paste reading and the vision route run on your agent's existing
DEEPSEEK_API_KEY(DeepSeek-V4-Flash-Vision-Exp). - rc.7 / rc.8 (or to add the free engines): Zhipu — open.bigmodel.cn → API Keys (
glm-4v-flashis free); SiliconFlow — siliconflow.cn → API Keys (Kolors is free); (optional) Google Gemini — aistudio.google.com → Get API key; joins the vision failover chain automatically
- Desktop 0.2 / v0.1.6+: no keys are needed to install — the two skills register at runtime. The default
Add them in the Web GUI (Settings → Models), or use the credentials file:
# ~/.dsh/.credentials.yaml (chmod 600) GLM_API_KEY: <your key>Restart DSH (or the desktop app), then hard-refresh an open browser tab (
Cmd+Shift+R).
Verify: the skills vision-review and media-tools show up in the skill list. On desktop 0.2, also select an image-capable route such as the default deepseek-flash before sending a native attachment; a text-only route returns MODEL_DOES_NOT_SUPPORT_IMAGES.
Full walkthrough and troubleshooting: docs/SETUP_VISION_EN.md.
📸 See it in action
Send an image to an image-capable DSH route, or pass a file path to vision-review for scripted QA. The same bundle also generates new images on demand.
How it works in one picture:
🚀 Usage
Three ways to read images:
| Way | How | When |
|---|---|---|
| A. Native attachment (recommended) | Select an image-capable route (default deepseek-flash), then click the attachment button / drag / paste an image and send |
Everyday multi-modal image questions |
| B. Image-capable model session | New conversation, pick deepseek-flash or a configured GLM/Qwen/SenseNova vision route, then paste images and chat |
Multi-turn native image conversations |
| C. Files + skill | Put the image in the workspace and say “read this image with vision-review”, or call scripts/vision.py with a path |
Batch review, structured OCR/QA, and text-only routes |
Native attachments are sent directly to the selected image-capable model. For vision-review, set the desired language or output format in the prompt (or use --structured).
Also just say:
- “Look at this image / check this screenshot for visual bugs” →
vision-review - “Generate an image of …” →
media-tools
🔑 Keys & privacy
Keys are never stored in this repo. Skill scripts read, in order: environment variables → ~/.dsh/secrets/media-tools.env → ~/.codex/secrets/media-tools.env (legacy fallback). The vision model route reads GLM_API_KEY from DSH's credential store (≤ v0.1.1; on v0.1.6 routes are yours to configure in Settings → Models).
Where to get the keys (all free): Zhipu — open.bigmodel.cn → API Keys (glm-4v-flash). SiliconFlow — siliconflow.cn → API Keys (Kolors). Google (optional, joins the vision failover chain automatically) — aistudio.google.com → Get API key.
# ~/.dsh/secrets/media-tools.env (chmod 600, one KEY=value per line)
GLM_API_KEY=...
SILICONFLOW_API_KEY=...
GEMINI_API_KEY=... # optional
Your images are sent only to the provider you configure — never to this repo, never to a shared anonymous endpoint.
Privacy note on Gemini: Google's free-tier key comes with data-use terms — requests may be used to improve Google products. For sensitive images (IDs, internal docs, customer data), prefer the direct domestic engines (Zhipu / SiliconFlow).
❓ FAQ
Does desktop 0.2 need a core patch?
No. Desktop 0.2.0-rc.2 loads this bundle through the standard runtime plugin/provider lifecycle, and image admission is based on the active model's inputModalities. Do not patch the signed app.asar; old alpha/rc patches are historical only. If a text-only route is selected, DSH returns MODEL_DOES_NOT_SUPPORT_IMAGES; choose an image-capable route or invoke vision-review with a file path.
Why not just use a built-in free endpoint with no key at all? We prefer to let you own the route: your images go to the provider you pick, under your rate limits, with no shared middleman. The keys are free and take about two minutes to create.
Is media-tools really free?
Yes — SiliconFlow Kolors is free and watermark-free. If a model is temporarily disabled, the skill lists available models and you can switch.
🎁 Examples
Sample material to try instantly — 6 AI-generated images with their prompts, plus a purpose-built vision test card (title, buttons, bar-chart values) for checking reading accuracy:
🗺️ Layout
dsh-media-skills/
├── package.json # dsh.bundle manifest
├── cordis.patch.yml # plugin layer
├── index.js # registers the two skills via the DSH v0.1.6 provider lifecycle
├── skills/
│ ├── vision-review/ # image reading
│ └── media-tools/ # image generation
├── examples/ # sample images + vision test card
├── docs/
│ ├── screenshots/ # demo mockup & how-it-works diagram
│ ├── SETUP_VISION_EN.md # detailed setup guide (English)
│ ├── SETUP_VISION.md # 详细配置指南(中文)
│ ├── HARNESS_PATCH_EN.md# core patch notes (English)
│ ├── HARNESS_PATCH.md # 本体补丁说明(中文)
│ ├── COMPARE_MODLENS.md # 与 ModLens 的对比/共存(中文)
│ └── lang/ # READMEs in 9 languages
├── scripts/make-banner.py # regenerates docs/social-preview.png
└── docs/social-preview.png
🧩 Using ModLens alongside?
This bundle and ModLens can be installed together, but desktop 0.2 does not provide the old api-proxy auto-transcription fallback. Choose one paste behavior deliberately: keep ModLens paste-to-path interception for file-path tool workflows, or set pasteToPath: false so DSH uses native image attachments with an image-capable route. See docs/COMPARE_MODLENS.md (中文) for the historical comparison and configuration.
🤝 Join the DSH plugin ecosystem
DeepSeek Harness developer preview is still in its testing phase for Harness developers; core plugins and base APIs will keep iterating. We look forward to exploring the upper limits of intelligence together with developers worldwide, on top of open-source, open, reusable, and composable infrastructure.
- dsh-plugin topic
- Quickstart
- DeepSeek Harness repo
- dsh-agent-conductor — 同作者的指挥家:在 DSH 里派活给 11 种外部 agent CLI(Codex / Claude Code / TraeCode…)
This repo is tagged
dsh-pluginand listed in the curated list. PRs, issues and translations are welcome.