为 DeepSeek Harness 提供视频理解能力——让纯文本智能体也能看懂、听懂视频。
57.9/100
综合分
112
GitHub 星标
1,172
npm 周下载
—/5
用户评分
数据截至 2026/9/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-video-lensnpm 源 · dsh-video-lens 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 44 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-video-lens @ 0.3.2
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 02:37:55
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 8 处,展示前 8 条)
- 读取本地文件src/probe.js:14
await access(path, constants.R_OK) - 读取本地文件src/frames.js:147
return readFile(outFile) - 删除本地文件递归src/frames.js:188
await rm(dir, { recursive: true, force: true }) - 删除本地文件递归src/frames.js:223
await rm(dir, { recursive: true, force: true }) - 发起网络请求src/vlm.js:51
const res = await fetch(joinUrl(baseUrl, '/chat/completions'), { - 读取本地文件src/asr.js:41
const blob = new Blob([await readFile(wavPath)], { type: 'audio/wav' }) - 发起网络请求src/asr.js:50
const res = await fetch(joinUrl(asrBaseUrl, '/audio/transcriptions'), { - 删除本地文件递归src/asr.js:85
await rm(dir, { recursive: true, force: true })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 视频理解能力
- 让文本智能体看懂视频
- 让文本智能体听懂视频
最近更新
在 GitHub 查看全部 →v0.3.22026-09-20
· dsh-video-lens v0.3.2
为 DeepSeek Harness 提供视频理解能力——让只能处理文本的智能体也能看懂、听懂视频。
修复版本:0.3.1 会导致 DSH 客户端完全无法启动——详见 #2。
· 修复内容
· 插件不再把宿主运行时装进你的配置档。0.3.1 把 @deepseek-ai/dsh-tools@0.1.0-rc.7 声明为普通依赖,于是安装插件后,宿主自带的运行时旁边会多出一份更旧的副本。这份旧副本引用了新版宿主已不再导出的符号(来自 @deepseek-ai/dsh-llm 的 CallId),导致 Loader 条目在导入阶段失败,并连带整个插件树——以及客户端——一起崩溃:
dsh-plugin-desktop: plugin tree failed to load: failed to apply loader entry include (cordis:include)
AggregateError: loader entries failed to apply
@deepseek-ai/dsh-tools 现在改为可选的 peerDependency:插件始终使用你安装的 DSH / DSH Desktop 自带的 dsh-tools,配置档里不会再装任何东西。插件源码无需改动。
· 从 0.3.1 升级
如果 0.3.1 让你的客户端无法启动:
1. 恢复上一个健康的配置档(DSH Desktop:打开 Recovery 页面),或移除插件:dsh plugin --profile remove dsh-video-lens
2. 安装 dsh-video-lens@^0.3.2
· 验证环境
| 宿主核心 | 结果 |
|---|---|
| 0.1.5-rc.2 —— DSH Desktop 2.0.5 锁定的上游核心 | 挂载插件后可启动,配置档未安装任何 @deepseek-ai/dsh-* 运行时 |
| 0.1.0-rc.7 —— 本插件支持的最旧核心 | 挂载插件后可启动 |
· 内部实现
· test/packaging.test.mjs —— 清单契约:官方宿主运行时包再也不会变成硬依赖,且发布的 bundle 补丁 / 条目必须能解析。
· test/host-boot.test.mjs —— 打包插件,按 DSH Desktop 配置档契约(nodeLinker: hoisted,autoInstallPeers: false)装进一个临时配置档,再用真实宿主启动该配置档。CI 会针对 latest、0.1.0-rc.7 以及当前 DSH Desktop 版本锁定的上游核心分别运行;已确认该测试在 0.3.1 的清单下会失败。
· 安装
pnpm add dsh-video-lens
在 DSH 配置档的 package.json 里注册 bundle:
{
"dependencies": { "dsh-video-lens": "^0.3" },
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-video-lens"] } }
}
然后导出密钥并重启配置档:
export VIDEO_LENS_API_KEY=sk-... # 视觉(任意 OpenAI 兼容端点)
export VIDEO_LENS_ASR_KEY=sk-... # 可选,ASR
前置条件:Node ≥ 20,ffmpeg ≥ 6.0,且 ffprobe 在 PATH 中。
v0.3.12026-08-19
· dsh-video-lens v0.3.1
为 DeepSeek Harness 提供视频理解能力——让纯文本智能体也能看懂、听懂视频。
· 新特性
· 场景感知抽帧——用 ffmpeg scdet 做镜头检测,每个镜头挑出代表性帧;按视频时长自适应调整帧数预算(4–12 帧),并缩放分辨率,控制 VLM 成本
· 可选 ASR 转写——支持任意兼容 OpenAI 的 /audio/transcriptions 端点(SiliconFlow、OpenAI、Groq 等);纯文本和带时间戳的响应都支持;缺 key 或服务商故障不会中断视觉链路(transcriptError 会出现在证据里)
· 时间锚定问答(video_ask)——解析明确的时间指代(「at 3:20」「第2分钟」),或通过转写关键词匹配定位相关语音,从命中的时间窗重新抽帧,回答时给出置信度和支撑时间戳
· 服务商无关——视觉和 ASR 都可配置为兼容 OpenAI 的端点(baseUrl + model + key 环境变量)
· 安装
pnpm add dsh-video-lens
在 DSH 配置档的 package.json 里注册 bundle:
{
"dependencies": { "dsh-video-lens": "^0.3" },
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-video-lens"] } }
}
导出密钥并重启配置档:
export VIDEO_LENS_API_KEY=sk-... # 视觉
export VIDEO_LENS_ASR_KEY=sk-... # 可选,ASR
· 验证
· 71 个自动化测试,在 GitHub Actions CI 上全部通过(Ubuntu、Node 20、ffmpeg)
- 单元测试:抽帧方案、时间解析、关键词匹配、提示词(43)
- 网络层:401/429/500、非 JSON、空内容、中止传播、ASR 纯文本/分段(16)
- 端到端:在合成视频上跑完整 ffmpeg 流水线,无密钥时优雅降级(12)
· 需要 Node.js >= 20、ffmpeg >= 6(scdet)
· 链接
· 仓库:
· npm:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-video-lens
为 DeepSeek Harness 提供视频理解能力——让纯文本智能体也能看懂、听懂视频。
这是一个 DeepSeek Harness(DSH)插件,让纯文本 LLM 智能体理解本地视频文件。它提供三个工具:
| 工具 | 作用 |
| video_probe | 通过 ffprobe 快速拿到轻量元数据:容器、时长、分辨率、帧率、编解码器、音轨、字幕。 |
| video_analyze | 理解内容:感知场景切换的抽帧(ffmpeg scdet)、可选的 ASR 转写(带时间戳的语音),再交给任意 OpenAI 兼容的视觉模型融合,输出结构化证据 JSON。 |
| video_ask | 按时间锚定的问答:解析明确的时间引用(「at 3:20」「第2分钟」),或通过转写关键词匹配定位相关语音,从命中的时间窗口重新抽帧,再给出有据可依的回答(答案 + 置信度 + 支撑时间戳)。 |
v0.3.2。插件不会把你绑死在某个服务商上:视觉和 ASR 都是 OpenAI 兼容端点,用 baseUrl + model + key 环境变量配置。
展开完整文档(README 剩余 1 节)
dsh-video-lens
为 DeepSeek Harness 提供视频理解能力——让纯文本智能体也能看懂、听懂视频。
这是一个 DeepSeek Harness(DSH)插件,让纯文本 LLM 智能体理解本地视频文件。它提供三个工具:
| 工具 | 作用 |
| video_probe | 通过 ffprobe 快速拿到轻量元数据:容器、时长、分辨率、帧率、编解码器、音轨、字幕。 |
| video_analyze | 理解内容:感知场景切换的抽帧(ffmpeg scdet)、可选的 ASR 转写(带时间戳的语音),再交给任意 OpenAI 兼容的视觉模型融合,输出结构化证据 JSON。 |
| video_ask | 按时间锚定的问答:解析明确的时间引用(「at 3:20」「第2分钟」),或通过转写关键词匹配定位相关语音,从命中的时间窗口重新抽帧,再给出有据可依的回答(答案 + 置信度 + 支撑时间戳)。 |
v0.3.2。插件不会把你绑死在某个服务商上:视觉和 ASR 都是 OpenAI 兼容端点,用 baseUrl + model + key 环境变量配置。
工作原理
video file ──► video_probe ──► ffprobe ──► compact metadata JSON
└─► video_analyze ──► scdet scene detection ──► shot boundaries
├─► ffmpeg frame sampling (one representative frame per shot, capped)
├─► ffmpeg audio extract ──► ASR transcript (timestamped) [optional]
└─► OpenAI-compatible vision API ──► evidence JSON
- 场景切换用 ffmpeg 的 scdet 滤镜检测(ffmpeg ≥ 6.0)。检测不到切点的视频,回退到均匀中点抽帧。
- ASR 是纯增量的:如果 asrApiKeyEnv 没设置,或者服务商调用失败,视觉分析照样跑完,transcript 为 null。
- 所有媒体处理都交给 PATH 上的 ffmpeg/ffprobe——智能体内部不做原生解码。
安装
前置条件:Node.js ≥ 20,ffmpeg ≥ 6.0(推荐),且 ffprobe 在 PATH 上(brew install ffmpeg / apt install ffmpeg)。
方式 A——npm(推荐)
in your DSH profile directory (the one containing package.json)
pnpm add dsh-video-lens
方式 B——从源码(开发)
克隆仓库,再通过本地链接挂载到你的 DSH 配置档:
git clone https://github.com/dundunhan/dsh-video-lens.git
无论用哪种方式,都要在配置档的 package.json 里注册这个 bundle——下面这一整块就是完整的配置档配置:
{
"dependencies": {
"dsh-video-lens": "^0.3"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-video-lens"
]
}
}
}
然后导出密钥并重启配置档:
export VIDEO_LENS_API_KEY=sk-... # vision
export VIDEO_LENS_ASR_KEY=sk-... # optional, ASR
不要自己安装宿主运行时。 @deepseek-ai/dsh-tools 声明为可选 peer:插件始终使用 DSH 安装 / DSH Desktop 自带的 dsh-tools。把它作为依赖加进你的配置档——或者像 0.3.1 那样锁定某个确切的 -rc 版本——会在宿主运行时旁边再装一个更旧的运行时,导致 Loader 条目导入失败,并连带整个插件树(以及应用)一起崩溃。
配置
所有选项都是 DSH 配置值:
| 键 | 默认值 | 含义 |
| visionBaseUrl | https://api.siliconflow.cn/v1 | 视觉端点(兼容 OpenAI) |
| visionModel | Qwen/Qwen3-VL-8B-Instruct | 视觉模型名称 |
| visionApiKeyEnv | VIDEO_LENS_API_KEY | 存放视觉密钥的环境变量 |
| asrBaseUrl | https://api.siliconflow.cn/v1 | ASR 端点(兼容 OpenAI 的 /audio/transcriptions) |
| asrModel | FunAudioLLM/SenseVoiceSmall | ASR 模型名称 |
| asrApiKeyEnv | VIDEO_LENS_ASR_KEY | 存放 ASR 密钥的环境变量 |
| maxFrames | 12 | 帧数上限(1–max);实际数量随时长自适应(约每 30 秒 1 帧,短视频更密) |
| frameMaxWidth | 768 | 帧最大宽度;用来压小载荷 |
| frameQuality | 4 | JPEG 质量(ffmpeg -q:v) |
| sceneThreshold | 10 | scdet 阈值(0–100);越高切点越少 |
| askPaddingSec | 2 | video_ask 在匹配到的转写片段前后留的窗口 |
| vlmMaxTokens | 1500 | 视觉模型最大输出 token 数 |
| vlmTimeoutMs | 90000 | 视觉调用超时 |
| asrTimeoutMs | 120000 | ASR 调用超时 |
用法
对智能体说:
"What's in /tmp/demo.mp4?"
智能体会先调用 video_probe,再调用 video_analyze。证据包括:
{
"metadata": { "container": "mov,mp4,m4a,3gp,3g2,mj2", "durationSec": 268.4, "...": "..." },
"shots": [{ "timeSec": 12.3, "score": 45.2 }],
"framesSampled": [{ "timestampSec": 5.5, "jpegBytes": 12345 }],
"transcript": {
"text": "…",
"segments": [{ "start": 0.0, "end": 2.4, "text": "…" }],
"language": "zh"
},
"visionModel": "Qwen/Qwen3-VL-8B-Instruct",
"analysis": { "overall_summary": "…", "timeline": [{"timestamp_sec": 5.5, "description": "…"}], "on_screen_text": "…", "visual_style": "…", "notable_moments": "…" }
}
权限与安全
使用或再分发之前请先读这段。DSH 插件以受信任代码的身份运行在宿主进程里,而且没有官方插件审查——自查由作者负责。见 SECURITY.md。
这个插件做什么
- 读取:智能体传给其工具的任何本地文件路径(通过 ffprobe/ffmpeg)。
- 执行:从 PATH 调用 ffprobe 和 ffmpeg(绝不经过 shell——只用 argv 数组)。
- 网络:每次 video_analyze 向配置的 visionBaseUrl 发出一次出站调用(帧 + 视觉密钥),另外可选向 asrBaseUrl 发出一次(音频 + ASR 密钥)。
- 不做:执行 shell、eval 代码、回传数据、自动更新,或自行读取文件。
运维方职责
- 密钥的安全性取决于它被发往的端点——只配置你信任的端点。
- 真正的访问边界是 DSH 宿主沙箱;插件的可读性检查只是 UX 防护,不是安全边界。
- 载荷大小有上限:每次分析调用 maxFrames × 约 100–300 KB(768px JPEG)。
兼容性
- 已在 DSH 配置档组合 @deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app 上测试。
- 宿主运行时不锁定版本:@deepseek-ai/dsh-tools 是可选 peer,从宿主安装中解析,因此插件跟随加载它的核心(已针对核心 0.1.0-rc.7 和 0.1.5-rc.2 验证,后者是 DSH Desktop 2.0.5 锁定的上游版本)。
- Node ≥ 20(用到 AbortSignal.any / 内置 fetch / FormData)。
- scdet 需要 ffmpeg ≥ 6.0;更旧的版本会退化为均匀采样。
- macOS 已验证。Windows:0.3.1 在 Windows 上报告的启动失败并非平台特有——那是锁定的旧 dsh-tools 运行时导致的(见故障排查);代码路径本身与操作系统无关(ffmpeg/ffprobe 通过 argv 启动,不走 shell)。
故障排查
dsh-plugin-desktop: plugin tree failed to load: failed to apply loader entry include (cordis:include): AggregateError: loader entries failed to apply——客户端不再启动。
0.3.1 在 DSH Desktop 2.0.5 上撞到了这个问题。底下完整的错误是插件(或宿主的 tools 条目)导入失败:
failed to import loader entry video-lens (dsh-video-lens): The requested module '@deepseek-ai/dsh-llm' does not provide an export named 'CallId'
[cause]: profiles/<name>/node_modules/@deepseek-ai/dsh-tools/lib/index.js:4
原因:0.3.1 锁定了 @deepseek-ai/dsh-tools@0.1.0-rc.7,于是配置档里多了一份更旧的 dsh-tools,而宿主跑的是更新的核心(0.1.5-rc.2)。任何 Loader 条目失败都会拖垮整棵树,所以在移除插件之前应用无法启动。
恢复(已安装 0.3.1 且应用无法启动):
1. 用客户端的 Recovery 页面回到上一个健康配置档,或者从配置档中移除插件:dsh plugin --profile <name> remove dsh-video-lens(Desktop:在其终端里运行该命令)。
2. 安装 dsh-video-lens@^0.3.2,该版本把宿主运行时作为可选 peer,不会往配置档里装任何东西。
测试
npm test # packaging + unit + network + e2e (needs ffmpeg)
node test/host-boot.test.mjs latest # boot a real host with the plugin mounted
node test/host-boot.test.mjs 0.1.0-rc.7 # exactly one core version
node test/host-boot.test.mjs desktop-stable # the upstream core DSH Desktop currently pins
- test/packaging.test.mjs——manifest 契约:官方宿主运行时包(@deepseek-ai/dsh-*)必须保持为可选 peer,绝不能成为已安装依赖,并且发布的 bundle patch / entry 必须能解析。
- test/host-boot.test.mjs —— 端到端防护:打包插件,按 DSH Desktop 的配置档约定(nodeLinker: hoisted、autoInstallPeers: false)装进一个一次性配置档,然后用真实的 DSH 宿主启动该配置档,并要求 Web 界面能起来 —— 同时断言配置档没有安装任何宿主运行时包。需要 pnpm 在 PATH 上(或设置 PNPM_BIN),并且需要网络访问;不需要 API key,也不需要 ffmpeg。CI 会针对 latest、0.1.0-rc.7,以及 DSH Desktop 当前锁定的核心版本运行它。
卸载
1. 在配置档 package.json 的 dsh.profile.bundles 里移除 dsh-video-lens。
2. 移除依赖:pnpm remove dsh-video-lens(npm install)—— 如果你是从源码安装的,就删掉 link: 条目 —— 然后重新安装配置档。
路线图
- v1.0:按文件哈希缓存帧,在 README 里给出评测表(5 种视频类型 × 指标),发布到 npm(进行中)。
- 更远的未来:当配置的 VLM 支持时,把原生视频输入模型作为可选的快速路径。
许可证
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dundunhan/dsh-video-lens
为 DeepSeek Harness 提供视频理解能力——让纯文本智能体也能看懂、听懂视频。
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2