ysr666/dsh-vision-router
ysr666/dsh-vision-router为纯文本 Agent 提供视觉能力:内置免 Key 视觉链 + 像素级视觉工具(看图问答、定位、裁剪、像素对比、取色、OCR、矢量化、抠图、截图);粘贴图片即可用。
用 ffmpeg 与 Paraformer 读取本地视频或网页链接,返回带时间轴的逐字稿与可逐帧打开的关键帧图片;可按关键词检索候选视频,首次使用时自动安装运行时依赖。需 PATH 上有 Python 3.8+;video_discover 还需一次性登录抖音/小红书。
给 DeepSeek Harness 装上"看视频"的能力:一次工具调用,把本地视频或网页链接变成带时间轴的逐字稿 + 一组关键帧图片,模型可以直接逐帧看。
bilibili / 腾讯视频 / YouTube 等站点链接交给 yt-dlp;字幕外的内容用 Paraformer 中文语音识别补齐;关键帧用 ffmpeg 抽,返回绝对路径,配合内置的 read_image 就能真看图。
| 工具 | 作用 |
|---|---|
video_read | 读一个视频:返回 transcript(时间轴逐字稿)、frames(关键帧绝对路径)、outdir、duration |
video_discover | 先找后读:在抖音 / 小红书 / 公众号 / B站按关键词找候选视频,返回标题与 URL,再交给 video_read |
video_kit_setup | 体检 / 安装运行时依赖与 ASR 模型(check=true 只体检) |
典型用法(对模型说):
用 video_read 读 D:\videos\demo.mp4,每 10 秒抽一帧
模型拿到返回后会自己调 read_image 逐帧查看,再结合逐字稿回答。
抖音、小红书、公众号都不给未登录的搜索结果,而且新版权 Chromium 不允许对默认浏览器 profile 开远程调试端口。所以这里的做法是:插件维护一个自己的浏览器 profile,你在弹出的窗口里登录一次,登录态(DPAPI 加密的 cookie)留在那个目录里长期复用。插件从不接触你的账号密码。
三步:
video_discover action=login platform=douyin # 弹出窗口,你扫码/输验证码登录
video_discover action=status # 确认 douyin: 已登录
video_discover action=search platform=douyin query="数字人 教学"
返回的 items[].url 直接喂给 video_read 即可转写抽帧。
action=loginloggedIn=false 加 warningplatform=bilibili 不需要登录,可用来验证 CDP 链路是否通~/.dsh/toolkits/video-kit/browser;端口默认 9333(VIDEO_CDP_PORT 可改)# 解压后进入 dsh-video-kit 目录
powershell -ExecutionPolicy Bypass -File .\install.ps1
脚本会做五件事:铺文件到 ~/.dsh/local-plugins/、同步进 profiles/<profile>/node_modules/、登记 file: 依赖、在 profile 补丁层写入挂载块、最后跑一次依赖体检。
可选参数:
| 参数 | 说明 |
|---|---|
-Profile <名字> | 目标 profile,默认 desktop |
-NoPatch | 只铺文件,不写挂载(你想手工挂) |
-WhatIfOnly | 只打印计划,不改任何东西 |
%USERPROFILE%\.dsh\local-plugins\dsh-video-kit%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-video-kit%USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml 末尾追加:# 本地插件:视频读取工具(video_read),进程级挂载
- insert:
- id: tool-video-kit
name: "dsh-video-kit"
并在同目录 package.json 的 dependencies 里加一行 "dsh-video-kit": "file:../../local-plugins/dsh-video-kit"(防止包管理器清理 node_modules)。
cd %USERPROFILE%\.dsh\profiles\desktop
pnpm add file:../../local-plugins/dsh-video-kit
装完仍需在 cordis.patch.yml 写挂载块(同上)。
video_read,新会话立刻就有。| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
source | string | 必填 | 本地视频绝对路径,或 http(s) 视频链接 |
every | number | 20 | 每隔多少秒抽一帧;短视频会自动加密到 2 秒 |
maxframes | number | 24 | 最多抽多少帧 |
copyTo | string | — | 把关键帧与逐字稿复制到这个目录,返回复制后的路径 |
timeoutMs | number | 900000 | 整体超时;10 分钟视频约需 1–3 分钟处理 |
copyTo 什么时候必须用DSH 给模型看图时,会把图片复制一份到 ~/.dsh/attachments/。如果当前会话的文件策略是 workspace-write,这个目录在工作区之外,写不进去,于是页面会显示"图片无法预览"——文件其实是好的。
传一个工作区内的绝对路径即可绕开:
用 video_read 读 D:\videos\demo.mp4,copyTo 传 C:\Users\你\工作区\.frames
模型和产物不随包分发(模型 227 MB),统一放在:
%USERPROFILE%\.dsh\toolkits\video-kit\
models\asr-paraformer-zh\model.int8.onnx 227 MB
models\silero_vad.onnx 1.7 MB
videos\<视频名>\frames\*.jpg
videos\<视频名>\transcript.txt
可用环境变量 VIDEO_KIT 改位置。
首次调用 video_read 若模型缺失会自动下载;想提前装好:
python "%USERPROFILE%\.dsh\toolkits\video-kit\bin\setup.py" # 安装
python "%USERPROFILE%\.dsh\toolkits\video-kit\bin\setup.py" --check # 只体检
Python 依赖(imageio-ffmpeg、yt-dlp、sherpa-onnx、websocket-client)由脚本 pip install --user 装,不需要管理员权限,也不需要系统装 ffmpeg。
| 现象 | 原因 | 解决 |
|---|---|---|
DSH 启动即崩:Unexpected token '\uFEFF' ... is not valid JSON | package.json 被写成了带 BOM 的 UTF-8(PowerShell 5.1 的 Set-Content -Encoding UTF8 就是这个行为) | 用无 BOM 编码重写 profiles/<profile>/package.json;本安装器 1.1.1 起已强制无 BOM 并自检 |
新会话没有 video_read | 插件没加载 | 看 ~/.dsh/toolkits/video-kit/plugin-loaded.txt 有没有本次启动的时间;没有就检查挂载块 |
| 老会话没有,新会话有 | 会话工具表冻结 | 正常行为,用新会话 |
register-error.txt 出现 | 注册抛错 | 把文件内容发出来,一般是对应工具名已被占用 |
| 图片无法预览 | 附件缓存目录不可写 | 用 copyTo 指到工作区内 |
python 执行失败 | 没装 Python 或不在 PATH | 装 3.8+ 并确认 python -V 可用 |
| 转写为空 | 视频无音轨 / 纯音乐 | 正常,看帧即可 |
| 模型下载失败 | 网络 | 手动下 model.int8.onnx 与 tokens.txt 放进 models\asr-paraformer-zh\ |
日志类标记文件都在数据目录:plugin-loaded.txt、register-ok.txt、register-error.txt。
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1
# 连 230 MB 模型一起删:
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1 -PurgeData
dsh-video-kit/
index.js 插件入口(两个工具的注册与实现)
cordis.patch.yml bundle 形式的挂载声明
bin/
watch_video.py 下载 → 转写 → 抽帧
discover.py 接管已登录浏览器,按关键词找候选(抖音/小红书/公众号)
setup.py 依赖体检/安装
extras/ 研究辅助脚本(B站 WBI 搜索、CDP 嗅探等,插件不依赖)
install.ps1
uninstall.ps1
README.md
INSTALL.zh-CN.md
LICENSE
MIT。模型与第三方工具的许可各自遵循其上游(Paraformer / Silero VAD / ffmpeg / yt-dlp)。