dsh-media-skills โ€” free image reading & generation for DeepSeek Harness
# ๐ŸŽจ dsh-media-skills ### *Give DeepSeek Harness eyes โ€” and a brush. Read images in any chat, generate new ones, all with free models.* [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-blue.svg)](https://python.org) [![DeepSeek Harness](https://img.shields.io/badge/DeepSeek%20Harness-Skill-4D6BFE)](https://github.com/topics/dsh-plugin) [![Free vision](https://img.shields.io/badge/vision-GLM%2BGemini-2EA44F)](docs/SETUP_VISION_EN.md) [![Free generation](https://img.shields.io/badge/generation-Kolors-2EA44F)](docs/FREE_VISION_PROVIDERS_EN.md) [![No hardcoded keys](https://img.shields.io/badge/keys-never%20in%20repo-8B5CF6)](README.md#-keys--privacy) [![Docs](https://img.shields.io/badge/docs-9%20languages-4D6BFE)](docs/lang/README_ZH.md)
DeepSeek Harness is brilliant at reasoning โ€” but a text-only model can't see the image you just dragged into the chat. This bundle fixes that with **two free skills**, a **free vision model route**, and a **vision engine failover chain**: - ๐Ÿ“Ž **Paste to read** โ€” paste, drag, or pick an image in any session; the free vision model turns it into text your current model understands. *(Powered by the DeepSeek Harness core auto-description path โ€” see [docs/HARNESS_PATCH_EN.md](docs/HARNESS_PATCH_EN.md); this bundle contributes the vision model route and the skill it relies on.)* - ๐Ÿ‘๏ธ **`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 โ†’ SiliconFlow Qwen3-VL โ†’ Google Gemini ([AI Studio](https://aistudio.google.com)) โ†’ any OpenAI-compatible endpoint, with ModLens-style structured evidence output. No hardcoded keys, no paid API, no file saving, no session switching. [Why](#-why) ยท [Quick start](#-quick-start) ยท [See it in action](#-see-it-in-action) ยท [Usage](#-usage) ยท [Keys & privacy](#-keys--privacy) ยท [FAQ](#-faq) ยท [Examples](#-examples) [**English**](README.md) ยท [**็ฎ€ไฝ“ไธญๆ–‡**](docs/lang/README_ZH.md) ยท [**็น้ซ”ไธญๆ–‡**](docs/lang/README_ZH_TW.md) ยท [**ๆ—ฅๆœฌ่ชž**](docs/lang/README_JA.md) ยท [**ํ•œ๊ตญ์–ด**](docs/lang/README_KO.md) ยท [**Espaรฑol**](docs/lang/README_ES.md) ยท [**Deutsch**](docs/lang/README_DE.md) ยท [**Portuguรชs**](docs/lang/README_PT.md) ยท [**ะ ัƒััะบะธะน**](docs/lang/README_RU.md)
--- ## ๐Ÿค” 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 for free | โœ… Zhipu GLM-4V-Flash | โœ… | | **Generate** images for free | โœ… SiliconFlow Kolors | โŒ usually absent | | Auto model route in the picker | โœ… installed automatically | 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. ## โœจ What you get | Capability | What it does | Model | Cost | |---|---|---|---| | ๐Ÿ“Ž Paste-image reading | In a **text-only** session, the input bar gains an โ€œAdd imageโ€ button (paperclip); pasted images are auto-described by the vision model and handed to the current model as text. *(Harness-core feature: requires the core api-proxy admission patch; this bundle supplies the vision route + skill it depends on)* | Zhipu GLM-4V-Flash | Free | | ๐Ÿง  Vision model route | ใ€Œๆ™บ่ฐฑ GLM-4V-Flash๏ผˆ่ง†่ง‰๏ผ‰ใ€ appears in the model selector automatically โ€” pick it for a new conversation and talk about images directly | Zhipu GLM-4V-Flash | Free | | ๐Ÿ‘๏ธ `vision-review` | Analyze / recognize / describe images & screenshots; catch UI visual bugs (overlap, overflow, misalignment); detect watermarks/logos; turn images into text. Optional `--structured` mode returns ModLens-style evidence JSON (summary, full OCR, reading-order layout, entities/relations, uncertainty). Engine failover chain: GLM-4V-Flash โ†’ SiliconFlow Qwen3-VL / Google Gemini (auto-join with free keys) โ†’ any OpenAI-compatible endpoint | GLM-4V-Flash + Qwen3-VL + Gemini | Free | | ๐ŸŽจ `media-tools` | Generate images, illustrations, avatars, backgrounds, banners | SiliconFlow Kolors | Free, no watermark | ## โšก Quick start ```sh dsh plugin --profile add github:akqwpeter-prog/dsh-media-skills ``` 1. **Get two free keys** (~2 minutes, no payment): - Zhipu โ€” [open.bigmodel.cn](https://open.bigmodel.cn) โ†’ **API Keys** (`glm-4v-flash` is free) - SiliconFlow โ€” [siliconflow.cn](https://siliconflow.cn) โ†’ **API Keys** (Kolors is free) - *(optional third)* Google Gemini โ€” [aistudio.google.com](https://aistudio.google.com) โ†’ **Get API key**; joins the vision failover chain automatically 2. **Add them** in the Web GUI (**Settings โ†’ Models** โ†’ the zhipu-vision provider's **API Key** field), or use the credentials file: ```sh # ~/.dsh/.credentials.yaml (chmod 600) GLM_API_KEY: ``` 3. **Restart** `dsh web`, then hard-refresh (`Cmd+Shift+R`). Verify: the model selector shows **ๆ™บ่ฐฑ GLM-4V-Flash๏ผˆ่ง†่ง‰๏ผ‰**. If your Harness build supports paste-image reading, the input bar also has a ๐Ÿ“Ž **Add image** button โ€” paste an image in any session and it arrives as a text description. Full walkthrough and troubleshooting: [docs/SETUP_VISION_EN.md](docs/SETUP_VISION_EN.md). ## ๐Ÿ“ธ See it in action *Paste an image in a text-only session โ†’ the free vision model describes it โ†’ your model answers. The same bundle also generates new images on demand.* Demo: paste an image into a text-only DeepSeek Harness session, the vision model reads it, and the model answers; the same bundle can also generate images *How it works in one picture:* How paste-image reading works: paste โ†’ vision model describes โ†’ text description arrives at the current model ## ๐Ÿš€ Usage Three ways to read images: | Way | How | When | |---|---|---| | **A. Paste directly (recommended)** | In any session, click the ๐Ÿ“Ž button / drag / paste an image and send | Everyday image questions โ€” no file saving, no model switching | | **B. Vision model session** | New conversation, pick ๆ™บ่ฐฑ GLM-4V-Flash๏ผˆ่ง†่ง‰๏ผ‰, paste images and chat | Multi-turn image conversations, native `read_image` | | **C. Files + skill** | Put the image in the workspace and say โ€œread this image with vision-reviewโ€ | Batch review, scripted workflows | Descriptions follow your message language (Chinese message โ†’ Chinese description; English message โ†’ English description; no text โ†’ Chinese). 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. Where to get the keys (all free): Zhipu โ€” [open.bigmodel.cn](https://open.bigmodel.cn) โ†’ API Keys (glm-4v-flash). SiliconFlow โ€” [siliconflow.cn](https://siliconflow.cn) โ†’ API Keys (Kolors). Google (optional, joins the vision failover chain automatically) โ€” [aistudio.google.com](https://aistudio.google.com) โ†’ Get API key. ```sh # ~/.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 paste-image reading require a DeepSeek Harness core patch?** The auto-describe pipeline lives in the Harness **core** (`api-proxy` image-admission logic; see [docs/HARNESS_PATCH_EN.md](docs/HARNESS_PATCH_EN.md)). This bundle ships the **model route + skills**: the vision model works on any DSH build, but paste-image reading requires a Harness build with that core support โ€” see FAQ Q1 in [docs/SETUP_VISION_EN.md](docs/SETUP_VISION_EN.md). **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: โ†’ [examples/README.md](examples/README.md) ## ๐Ÿ—บ๏ธ Layout ``` dsh-media-skills/ โ”œโ”€โ”€ package.json # dsh.bundle manifest โ”œโ”€โ”€ cordis.patch.yml # plugin layer โ”œโ”€โ”€ index.js # registers skills + seeds the zhipu-vision model route โ”œโ”€โ”€ 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? Both this bundle and [ModLens](https://github.com/liustack/modlens) give text-only models vision. Installed together they do not conflict: ModLens intercepts pastes first (path โ†’ `modlens_read_image` tool), and this bundle's api-proxy fallback handles anything it doesn't take over. See [docs/COMPARE_MODLENS.md](docs/COMPARE_MODLENS.md) (ไธญๆ–‡) for the full comparison, the paste routing order, and how to point ModLens at the same free Zhipu endpoint. ## ๐Ÿค 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](https://github.com/topics/dsh-plugin) - [Quickstart](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart) - [DeepSeek Harness repo](https://github.com/deepseek-ai/deepseek-harness) > This repo is tagged [`dsh-plugin`](https://github.com/topics/dsh-plugin) and listed in the [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) curated list. PRs, issues and translations are welcome. ## ๐Ÿ“„ License [MIT](LICENSE)