DSH Hub

Renji004/dsh-omni-vision

dsh-omni-vision

UIVision0 GitHub stars· updated 2026-08-18

Local eyes for text-only DSH models: render/paste/OCR/analyze images

Install

npx @deepseek-ai/dsh plugin --profile web add link:<你的工作区>\dsh-omni-vision

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

README badge

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

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

From the README

Excerpt from Renji004/dsh-omni-vision, cleaned of badges and images.

dsh-omni-vision

本插件全由 DeepSeek v4 Flash(deepseek-v4-flash)编写。

让 Agent 自己"看见"文字与图形的 DSH 插件,全程本地、不依赖视觉模型:

  • eyes_render — 在 Web GUI 对话流里渲染画布(文字、线条、矩形、圆形、椭圆),PNG 落盘到工作区 renders/(读完即焚),并一式两份另存永久副本到 pics/
  • eyes_paste — 让用户把剪贴板图片(截图/照片)直接 Ctrl+V 粘贴或拖进页面:浏览器捕获图片、归一化为 PNG 存到工作区,供本地 OCR/像素分析读取。只写 renders/(读完即焚,不留 pics/ 永久副本)。全本地读图路径(不限流、离线),独立于 DSH 原生发图链路(DSH 输入框本身支持图片粘贴/拖放,但发图需要选择支持图片的模型,见"限制")。
  • eyes_ocr — 用 Windows 自带 OCR(Windows.Media.Ocr,完全离线)把 PNG 里的文字读回成文本。这是 Agent "看见文字"的途径:DeepSeek 是纯文本模型,但识别出的文本可以原样喂回给模型引用。
  • eyes_analyze — 把 PNG 解码成像素数据(N×N 颜色网格、主色占比、内容包围盒)。这是 Agent "看见图形/颜色"的途径:无需视觉模型,图形以结构化数据呈现。

全程本地闭环:浏览器 canvas → 本机 HTTP → 本机磁盘 → Windows OCR / 像素分析。所有下载均按需、不盲目下载(详见"下载策略");出网环节仅限:模型推理本身,以及(可选)首次渲染 Mermaid 图且本地无副本时按需获取一次 Mermaid 库。

平台要求

仅支持 Windows。 eyes_ocr 通过 PowerShell 调用 Windows 自带 OCR 引擎(Windows.Media.Ocr,完全离线);eyes_render / eyes_paste / eyes_analyze 本身不依赖 Windows 特性,但整个插件在非 Windows 上无法提供"读字"能力,按 Windows 平台维护。

下载策略:全部按需,不盲目下载

安装与启动阶段零下载;所有获取均按需发生:

  • 插件本体:本地 link: / file: 安装,无任何下载。
  • Mermaid 库:唯一可能发生的运行时下载——仅在首次实际渲染 Mermaid 图且本地无副本时,浏览器按需从 CDN 获取一次(成功后缓存);不渲染 Mermaid 就完全不会下载。
  • 其余全部本地:渲染、OCR、像素分析、图片接收,均不产生任何网络下载。

工作原理

模型 ──eyes_render──▶ 服务端工具 execute
  │                      │ 按 callId 注册"待渲染"承诺(15s 超时)
  │                      ▼
  │          会话事件流(tool/call 事件实时推送浏览器)
  │                      ▼
  │          浏览器 keyed tool.call.toolview 卡片
  │                      │ 解析命令 → canvas 绘制 → toBlob → PNG base64
  │                      ▼
  │          POST /eyes/render(同源校验,按 callId 匹配)
  │                      ▼
  │          工具恢复:写 <workspace>/renders/eyes-<callId>.png(读完即焚)
  │                    + 永久副本 <workspace>/pics/eyes-<callId>.png
  │                    + attachments.saveImage(内容寻址存储)
  │                      ▼
  │          工具结果 = 文本信封(路径/尺寸/命令数/OCR 文本)
  └──────────────────────(模型声明支持图片时,结果额外带 image 图片块)

模型 "看见"文字:eyes_render(或任意 PNG)→ eyes_ocr ──▶ 行文本
模型 "看见"图形:PNG → eyes_analyze ──▶ 颜色网格 / 主色 / 内容包围盒

用户图片进来:模型 ──eyes_paste──▶ 粘贴卡片(Ctrl+V 提示)
  │                      │ 浏览器捕获剪贴板图片 → canvas → PNG base64
  │                      ▼
  │          POST /eyes/paste(同源校验,按 callId 匹配)
  │                      ▼
  │          写 <workspace>/renders/paste-<callId>.png(读完即焚,无永久副本)
  └────────── 之后 eyes_ocr / eyes_analyze 读取
  • 图片能力探测 + 降级:执行时探测当前模型路由是否声明 image 输入(llm.resolveModelInfo().inputModalities)。支持 → 结果带 {type:'image', attachment} 图片块,模型下一轮起能看见;不支持(如 DeepSeek API,适配器声明 ["text"] 且遇图片块抛 UNSUPPORTED_CONTENT)→ 只返回文本信封,会话绝不报错。画布仍渲染在 GUI 里,用户可见。
  • 本地感知(文字)eyes_ocr 通过 PowerShell 5.1 调用 Windows 自带 OCR 引擎,离线识别,支持已安装的语言包(如 zh-Hans-CN 中文简体)。识别结果按行返回文本。
  • 本地感知(图形)eyes_analyze 自带纯 Node PNG 解码器(zlib + 反滤波,支持 8-bit RGB/RGBA 非交错 PNG),输出网格平均色、主色直方图、内容包围盒。
  • 渲染匹配:客户端把工具调用的 callId 随 PNG 一起 POST 回来,服务端按 exec.callId 匹配待渲染条目,天然支持并行调用与多标签页(先到先得,其余 404 被客户端静默忽略)。
  • 重放:刷新页面后,历史会话里的卡片从工具参数(block.call.argsRaw)重放绘制,不再上传。
  • 读完即焚 + 一式两份eyes_render 每次产出都写两份——renders/ 下的临时副本在 eyes_ocr / eyes_analyze 读取成功后自动删除(返回结果带 fileDeleted 标记,renders/ 不会越积越多);pics/ 下的永久副本(返回结果带 keptPath不会被删除,用户随时可以打开查看。eyes_paste 只写 renders/(读完即焚),不保留 pics/ 永久副本。用户放在其他目录的图片(截图、照片等)绝不会被删除。

安装

cd <你的工作区>
dsh plugin --profile web add link:<你的工作区>\dsh-omni-vision
# 若链接失败:dsh plugin --profile web add file:<你的工作区>\dsh-omni-vision

Related plugins