Preface¶
DeepSeek Harness (dsh) treats models, tools, skills, sessions, sandboxes, storage, loops, scheduling, and interfaces all as plugins, with the official slogan “Everything is a plugin”. The developer preview version has already published its source code at deepseek-ai/deepseek-harness, and the local web interface runs by default on 127.0.0.1:3080.
No matter how many plugins you install, if the main model is still pure text, screenshots, PDFs, or meeting recordings dragged into the chat box are only paths or attachment metadata to it. It cannot see pixels or hear sound waves. As a result, a group of plugins has emerged in the community to “add visual capabilities to pure text models”: some build structured OCR, some perform UI restoration, and some route visual requests to another multimodal pipeline.
dsh-vision-complete takes a different approach: it does not build in a “vision” model itself, but packages a skill, MCP tools, and a Windows screenshot script, and by default calls the cloud multimodal API of Qwen. This article is organized after cross-checking with the plugin directory page, GitHub README, SKILL.md, and the installation script: what it is, what it can do after installation, and which steps cannot be skipped.
The community directory DeepSeek Harness Plugin Library is an independent site and has no affiliation or endorsement relationship with DeepSeek / HyperMind. The following introduction is also about an open-source plugin maintained by the community, not the “official vision” in the official app store.
What It Is¶
dsh-vision-complete is a development and runtime plugin for DeepSeek Harness, maintained by GitHub user Yts1919, with the MIT license (the LICENSE copyright line is marked as 2026 Yonnn). The directory page categorizes it under “Development & Runtime”. As of the writing of this article (2026-08-17), the star count read from the GitHub API is 36.
The problem it aims to solve is very specific: the main DeepSeek model in Harness is pure text and cannot view images or listen to audio. This plugin installs the following components into ~/.dsh, so that the model knows which tool to call when encountering images, videos, audio, or PDFs:
| Component | Function |
|---|---|
skills/vision-multimodal |
Core skill: teaches the model to select tools based on tasks. Comes with a zero-third-party-dependency vision.py that can connect to any OpenAI-compatible vision interface |
tools/screenshot-tool |
Windows screenshot monitor: after taking a screenshot, the clipboard will be replaced with the PNG path, and you can paste it to let the model read the image |
| qwen-mm-plugins MCP | Written to ~/.dsh/profiles/web/cordis.patch.yml during installation, registers three MCP servers: core / api / video-memory |
references/ |
API Key configuration and multi-provider switching instructions |
The repository README clearly states: the plugin itself does not contain a vision model. It calls the cloud-based Qwen (Alibaba Cloud Bailian DashScope) by default. Without an API Key, it will be unusable after installation.
Platform limitations are also written in the repository badges and installation instructions: one-click installation requires Windows + PowerShell. The screenshot tool also only supports Windows clipboard.
Core Features¶
The repository divides its capabilities into two channels. The rules in SKILL.md are: if there is already mcp__qwen-mm-plugins-* in the tool list, use Method A; if there is no MCP or you need to switch to another vendor, use Method B.
Method A: MCP (Default)¶
install.ps1 will use uvx to start three MCP servers pulled from QwenLM/Qwen-MM-Plugins, with versions pinned in the script:
- qwen-mm-plugins-core (tag qwen-mm-plugins-core-v1.0.2): local image/video reading, cropping, bounding box drawing, file visualization, and viewing media metadata
- qwen-mm-plugins-api (tag qwen-mm-plugins-api-v1.0.3): call Qwen multimodal models for understanding, OCR, detection, video+audio fusion, speech-to-text, music analysis, and image segmentation
- qwen-mm-plugins-video-memory (tag qwen-mm-plugins-video-memory-v1.0.1): semantic memory and retrieval for long videos over 30 minutes
SKILL.md specifies the default model names: qwen3.7-plus for vision, and qwen3.5-omni-plus for Omni. No manual overwriting is generally needed.
Method B: vision.py¶
The vision.py in the same directory uses the OpenAI-compatible chat/completions interface, requires Python 3.7+, and does not need additional packages. The provider option in config.example.json can be openai / glm / kimi / qwen / siliconflow / ollama. Local Ollama does not require an API Key.
Capability List¶
The capabilities listed in the README and SKILL.md are as follows. Except for image segmentation, all can be directly triggered with natural language after configuring the API Key:
| Capability | Description |
|---|---|
| Image understanding / QA | Description, question answering, image captioning |
| OCR text extraction | Extract text from screenshots, receipts, and document photos |
| Object detection and localization | Locate targets, draw bounding boxes, crop images; grounding coordinates are normalized to 0–1000, not pixels |
| Video understanding | Audio+visual timeline, event-based positioning, counting |
| Speech-to-text | Basic transcription, timestamped transcription, multi-speaker separation |
| Music analysis | Style, emotion, instruments, tonality |
| Document visualization | PDF / Office / CSV / code / 3D / notebook |
| Direct screenshot reading | Automatically save screenshots and replace the clipboard with the file path |
| Image segmentation | Extract targets; advanced feature, requires starting a SAM3 service separately |
| Long videos | Use video-memory for videos over 30 minutes, do not send the entire video in a single tool call |
Installation and Activation¶
The installation command given on the directory page is as follows. Run it in the DeepSeek Harness terminal, and the dsh CLI will parse the plugin from GitHub and install it to the current configuration:
dsh plugin add github:Yts1919/dsh-vision-complete
The directory page also reminds that for reproducible installations, you should pin the commit hash:
dsh plugin add github:Yts1919/dsh-vision-complete#commit
Replace #commit with the SHA of a specific commit in the repository. The plugin runs with the permissions of the current dsh process, and may execute code during installation. You should check the source code and license before installing.
The author’s README also provides a more complete Windows installation path. The dsh plugin add from the directory page is responsible for registering the repository into Harness; to copy the skill to ~/.dsh/skills, write the three MCPs into cordis.patch.yml, and place the screenshot tool in ~/.dsh/tools, you need to run the installation script in the repository again. The README states that the whole process takes about 5 minutes, and the environment is Windows + PowerShell.
- Clone or download the repository. When GitHub access is unstable in mainland China, the README provides a Gitee mirror
https://gitee.com/yonnn/dsh-vision-complete:
git clone https://github.com/Yts1919/dsh-vision-complete.git
# or
git clone https://gitee.com/yonnn/dsh-vision-complete.git
It does not matter which drive you clone to or what the folder name is, you just need to enter that directory later.
- Double-click
install.bat. Do not right-clickinstall.ps1and select “Run with PowerShell” — the window will close immediately after the script finishes, and you will not see error messages.install.batwill install the skill, register the MCPs, copy the screenshot tool, and check foruvx/ Python / ffmpeg /DASHSCOPE_API_KEY. The equivalent command line syntax:
cd C:\DeepSeek-Vision
powershell -ExecutionPolicy Bypass -File .\install.ps1
Replace the path with your actual location. If the self-check prompts that uvx is missing, the MCP of Method A will not be available temporarily. You need to install uv first and then re-run the script.
- Configure the API Key. Open the generated documentation file after installation:
C:\Users\YourUsername\.dsh\skills\vision-multimodal\references\api-key-setup.md
Go to Alibaba Cloud Bailian to create an API-KEY, then run this in PowerShell:
setx DASHSCOPE_API_KEY "sk-your-key"
setx only affects newly started processes afterwards. You must completely exit and restart DeepSeek Harness for the Key to be loaded into the MCP process. You can also create a new user variable DASHSCOPE_API_KEY in “Edit environment variables for your account”.
Store the API Key only in environment variables, do not write it into config.json. The repository has already added this file to .gitignore.
- Verify. Drag an image into the chat box and say “Describe this image”. If it returns the content of the image, the installation is successful. If it reports 401 / no API Key, go back to the previous step and confirm that you have restarted Harness. If the model says there is no
mcp__qwen-mm-plugins-*tool, first confirm thatuvis installed, then completely exit and restart Harness — the MCP servers will only load after a restart.
Uninstallation: Double-click uninstall.bat in the repository.
Typical Usage¶
After installation, you do not need to remember tool names. The README states: just talk to DeepSeek directly, and the model will trigger vision-multimodal and select the tool by itself. Examples in the documentation include:
- “Describe this image” and send the image
- “Extract the text from this screenshot”
- “Where is the cat in the image, help me draw a bounding box”
- “Summarize what this video is about” and send the video
- “Convert this meeting recording to text”
- “What is on page 2 of this PDF”
SKILL.md requires that images and videos must be passed as absolute paths, relative paths will not be found. Chinese paths can be passed directly. Before processing a video, you should first call the core’s media_info to get the duration, resolution, fps, audio tracks, and rotation, then decide whether to extract frames or use Omni.
Screenshot Direct Reading¶
The screenshot tool is neither a skill nor an MCP, but a Windows background script: it will take over the clipboard only when the local 127.0.0.1:3080 is listening.
To enable monitoring (do this once and keep the window open):
1. Open C:\Users\YourUsername\.dsh\tools\screenshot-tool\
2. Double-click start-screenshot-autosave.bat, do not close the popped-up black window
3. Optional: Double-click install-autostart.bat to run the script automatically on boot
After that, press Win+Shift+S (or PRTSC / Alt+PRTSC) to take a screenshot, then go back to the chat box and press Ctrl+V. What you paste will be the text of the .png file path, not the image itself, which is expected behavior. Then just say “Read this image” to proceed.
The default save directory is %USERPROFILE%\Pictures\DeepSeek-Shots. You can change the location with the environment variable DS_SHOT_DIR. If Harness is not running on port 3080, set DS_PORT or modify the default value in the script. After DeepSeek is closed, the script will no longer modify the clipboard, and screenshots can be normally pasted into WeChat, Word, etc.
Command-line Call to vision.py¶
When there is no MCP or you need to switch vendors, copy config.example.json to config.json, modify the provider, set the corresponding environment variables, then run:
python vision.py chat --image image.png --prompt "Describe this image"
python vision.py ocr --image image.png --lang zh
python vision.py grounding --image image.png --prompt "All cats"
python vision.py compare --image image.png --prompt "Describe this image" --models qwen,glm,kimi
python vision.py providers
The base_url, model names, and Key environment variables for each vendor are written in skills/vision-multimodal/references/providers.md. You can temporarily override them with --provider / --model / --base-url / --api-key.
Applicable Scenarios and Notes¶
It is suitable for users who are running the DeepSeek Harness Web UI on Windows and can apply for an Alibaba Cloud Bailian Key. Typical tasks include: reading screenshots and receipts, drawing bounding boxes for targets in images, transcribing meeting recordings, asking what a short video is about, opening a local PDF and asking about a specific page. Method B can also connect the same skill to OpenAI, Zhipu AI, Kimi, SiliconFlow, or local Ollama.
The following restrictions come from the repository documentation and installation scripts, not speculation:
- You cannot use cloud models without a Key. This is the step that the README marks as “the only unavoidable one”. The README mentions that you can temporarily paste the Key into the current conversation, but that will only be valid for this session, and you will need to configure the environment variables again after restarting.
- One-click installation and screenshot direct reading are tied to Windows. The repository badges state Platform: Windows. install.ps1, install.bat, and the screenshot monitor are all written for the user directory ~/.dsh and PowerShell.
- Method A depends on uvx. If uv is not installed, the MCP registration will still be written into the patch file, but the servers will not start. Video transcription may also require adding ffmpeg to the PATH.
- Image segmentation is not out-of-the-box. SKILL.md clearly states that segmentation requires a SAM3 service.
- Do not send entire long videos in a single call. For videos over 30 minutes, use qwen-mm-plugins-video-memory: first call get_summary / get_super_events, then retrieve subframes or ASR/OCR text when details are needed. The default video frame extraction is about 1 fps and 448² resolution, and the documentation does not recommend increasing the fps unnecessarily.
- The plugin runs with the permissions of the current dsh process. The installation script will modify ~/.dsh/profiles/web/cordis.patch.yml and copy files to the user directory. Check the source code and MIT license before installing; the dependent qwen-mm-plugins is provided by QwenLM and used under their respective licenses. Cloud calls will send images, audio, and video to the Bailian interface, which will process them according to each platform’s privacy and billing rules.
- Grounding coordinates are normalized to 0–1000. Bounding box drawing and cropping must use the same coordinate system, do not convert them to pixels on your own.
Common errors correspond to the README: 401 is mostly due to an unconfigured Key or a failed restart; missing MCP tools means checking uv and restarting Harness; vision.py reporting SSL / _ssl errors is common in damaged Anaconda environments, try switching to an officially installed Python.
Summary¶
dsh-vision-complete does not replace DeepSeek with a multimodal model, but connects a set of switchable visual/auditory tools to the pure-text Harness: the default MCP uses Qwen, the backup vision.py uses any OpenAI-compatible interface, plus a Windows screenshot path bridge. What usually blocks users from using it is not the installation script, but the API Key, uvx, and a full process restart.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-vision-complete/
GitHub: https://github.com/Yts1919/dsh-vision-complete