DSH Hub
dsh-easyvision cover

s3yf1337/dsh-easyvision

dsh-easyvision

UIVision0 GitHub stars· updated 2026-08-16

DeepSeek Harness plugin: describe images through a dedicated vision model from the dsh model list, called over the harness's own LLM runtime

Install

npx @deepseek-ai/dsh plugin --profile NAME add dsh-easyvision`).

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-easyvision DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-easyvision.svg)](https://dshhub.dev/plugins/dsh-easyvision)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from s3yf1337/dsh-easyvision, cleaned of badges and images.

dsh-easyvision

Give your text-only agent eyes — with one command and zero extra APIs.

A DeepSeek Harness (dsh) plugin that lets a text-only conversation model "see" images by delegating them to a vision model from your own dsh model list, called over the harness's own LLM runtime.

Why

Your main model (e.g. deepseek-v4-flash) is text-only, so dsh's built-in read_image tool refuses to send image blocks to it. dsh-easyvision fixes that in two complementary ways:

  • Attached images in the web chat just work. When you drop an image into the composer and send it, the message is admitted and the image is described through the vision model — no more "The current model does not support images; switch to a model that does" refusal. This happens only while the plugin is active, configured, and resolves a vision-capable model; if anything is wrong with the plugin you get an actionable "configure EasyVision" error instead.
  • describe_image tool — the model can also inspect image files on its own by calling the tool, which hands the picture to the vision-capable model and returns the description as plain text.

No external API keys. No extra plumbing. Just a model that can see, picked from the models you already have.

Features

  • One command install — idempotent, safe to re-run
  • Zero external APIs — the vision call goes through ctx.llm, the exact same runtime the agent loop uses: your keys, your retry policy, your middleware
  • Any vision model — pick anything from your dsh model list in Settings → EasyVision; no vendor lock-in
  • Live configuration — model changes apply immediately, no restart
  • Multiple images per call — validated PNG/JPEG/WebP/GIF, same attachment pipeline as read_image
  • Composer image drops — images attached to a chat message are described automatically when the conversation model is text-only

Screenshots

Configure the vision model in the dsh Settings UI — no file editing:

Quick start

curl -fsSL https://raw.githubusercontent.com/s3yf1337/dsh-easyvision/main/install.sh | bash

That's it. Then open Settings → EasyVision and pick a vision-capable model from your list (the default is qwen3.7-plus on opencode-go).

Only models that declare image input work — a text-only pick is refused by the tool with a clear message.

Demo

$ dsh "what's in testpics/1.jpg?"

  ✦ describe_image(file_paths=["testpics/1.jpg"])
  ✓ qwen3.7-plus (opencode-go) · 1024×1024

  A futuristic cityscape at night — glowing cyan and blue towers
  under three moons, rendered in a digital painting style.

How it works

Two entry points, one pipeline:

Related plugins