中文EN

dsh-vidlens

vision已测通过npmMIT

按人看片的顺序取样,而不是下载整片:先元数据与章节,再按时间码抽帧看画面、字幕优先转录(平台没有字幕才走本地 ASR)、AudioSet 527 类声音事件标签与高赞评论——21 个工具共用一个磁盘缓存,并带跨进程锁。需要 Python 3.10+、ffmpeg 与 vidlens 包(pip install vidlens-mcp);缺依赖时回给你的是两种修法,而不是一句 ImportError。

下载量 / Downloads
2,746
依赖体积 / node_modules
0.14 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-vidlens

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

VidLens for DeepSeek Harness

中文 · [English](README.en.md)

![ci](https://github.com/cctv2333/dsh-vidlens/actions/workflows/ci.yml)

![npm](https://www.npmjs.com/package/dsh-vidlens)

![PyPI](https://pypi.org/project/vidlens-mcp/)

![DSH plugin](https://github.com/topics/dsh-plugin)

![MIT](./LICENSE)

把 vidlens 从一个 stdio MCP 外壳变成 DSH 原生插件:18 个 vidlens_* 工具、图片直接进对话、按工具设超时、外加三个零下载的缓存工具。

工程本体(Python)没有改一行逻辑:插件通过一个常驻桥进程调用 vl_mcp.py 里已经测过的工具函数,所以 MCP 外壳和插件的行为不会漂移。

用户: 这个视频讲了什么? <url>
  → vidlens_meta      0 下载:值不值得看
  → vidlens_plan      0 下载:切章节,挑 2–3 段
  → vidlens_window    只下这一窗的音频(或直接读缓存/字幕)
  → vidlens_sheet     只下这 20 秒,拼图带时间码,图直接附在结果里
  → vidlens_brief     平台字幕优先;无字幕才下音频做本地 ASR
  → vidlens_soundscape 台词之外的声音(吃饭/敲击/水声),带概率

相对 MCP 外壳的增强

能力 · MCP 外壳 · 本插件

工具名 · mcp__vidlens__video_meta · vidlens_meta(短、可读)

超时 · 客户端一个全局 60s · 每个工具自带预算(vidlens_brief 15 分钟,vidlens_scan 15 分钟)

图片 · 取决于客户端是否支持 MCP image content · 走宿主 attachments.saveImage,成为持久图片附件,同轮就能看

缓存意识 · 无 · vidlens_library(零网络列缓存)、vidlens_seek(零网络查原话)

批量筛选 · 无 · vidlens_compare(最多 8 个链接,0 媒体下载)

行为约束 · 只在 MCP instructions 里 · 独立的 system-prompt 小节:先 meta→plan→抽样,绝不下整片

取消 · 断开连接 · exec.signal 取消时重启桥进程,不留下卡死的下载

整片下载 · video_full(confirm=true) 存在 · 故意不提供:需要画面就用 sheet/frames/scan

本地视频 · 与 Python 核同步(1.6.0 起) · 所有 url 参数都接受本地路径:D:\a.mp4、file:///D:/a.mp4、~/a.mov

安装

前置:先有一份 vidlens。 二选一:

pipx install "vidlens-mcp[all]"          # 推荐:无 checkout,命令叫 vidlens / vidlens-mcp
# 或
git clone https://github.com/cctv2333/vidlens && cd vidlens && install.cmd

然后装本插件(三选一):

# A. 本地目录(开发;换成你自己 clone 的位置)
plugin_manager action=install_bundle target=<你的路径>\dsh-vidlens

# B. GitHub 直装(本包无 build/prepare 脚本,不需要 allowBuilds 权限)
#    注意:这条会真的 git clone 本仓库,会被 GitHub 记一次 clone
dsh plugin --profile desktop add github:cctv2333/dsh-vidlens#<sha>

# C. npm(registry,不经过 GitHub)
dsh plugin --profile desktop add dsh-vidlens

插件会自动找 Python 工程:config.projectDir → $VIDLENS_PROJECT → <本包>/../vidlens → 当前目录

(只认真实存在的目录,不含任何人的本机路径);

找不到时按 $VIDLENS_PYTHON / .venv / python 依次尝试。PyPI 安装的形态下,

把 projectDir 指到 pipx 的 venv 或直接设 VIDLENS_PROJECT 都行(模块名不变)。

安装后这个 bundle 会插入一行 Host 插件:

- insert:
    - id: dsh-vidlens
      name: 'dsh-vidlens'
      config: {}

想改成别的工程位置(例如换机器)就在 config 里写:

- insert:
    - id: dsh-vidlens
      name: 'dsh-vidlens'
      config:
        projectDir: D:\path\to\vidlens
        pythonPath: D:\path\to\vidlens\.venv\Scripts\python.exe
        warm: true

字段都可省略:projectDir 默认依次取 config.projectDir → $VIDLENS_PROJECT → <本包>/../vidlens → 当前目录;pythonPath 默认取 $VIDLENS_PYTHON → 工程的 .venv → python。

工具(21 个)

基础四件(0 下载)

工具 · 用途

vidlens_meta(url) · 标题/UP主/时长/播放/平台字幕/平台标注音乐 + 注入风险扫描

vidlens_plan(url, window=300) · 按切点/长静音分章节 + 建议顺序

vidlens_subs(url, lang=zh) · 平台字幕(人工优先,其次自动/AI)

vidlens_library(limit=20, query='') · 新增:本地缓存清单,避免重复下载

读内容

工具 · 下载量 · 用途

vidlens_watch(url, minutes=5, cursor="next") · 每段该窗音频(或缓存) · 新增:一段一段看(默认 5 分钟、约 0.5k 字),返回该段要点 + 「已看 X / 共 Y(%)」,并要求先汇报、再问用户要不要继续

vidlens_window(url, start, end) · 0(有缓存/字幕)或该窗音频 · 某时间窗的台词与停顿

vidlens_brief(url, ..., level="digest") · 平台字幕 0;无字幕才下音频 · 摘要(默认约 1.5k 字:章节 + 5 句关键台词 + 全文路径);level="full" 才给 6–9k 字完整报告(结构/停顿/低置信词/广告段落/风险)

vidlens_seek(query, url='') · 0(新增) · 在缓存转写里按关键词查原话 → 时间码

vidlens_audio(url, start, end) · 该段音频 · SenseVoice 语种/情感/事件 + 节拍与能量

vidlens_soundscape(url, start, end) · 该段音频 · 新增:AudioSet 527 类声音事件(吃饭/敲击/水声/碰撞…)+ 概率 + 时间码

看画面(图片直接进对话)

工具 · 下载量 · 用途

vidlens_sheet(url, start, end, cols, rows) · 该段(20s≈0.9MB) · 带绝对时间码的拼图

vidlens_frames(url, at=[...]) · 该段 · 最多 6 张精确帧(读小字用)

vidlens_scan(url, n=24) · 最低画质整片(7min≈14-21MB,用完即删) · 全片抽样拼图(无音频视频)

vidlens_ocr(url, start, end, n=12) · 该段最低画质 · 把画面上的字读成文本(本地 OCR,离线);无人声、无字幕的视频靠它,输出带时间码

vidlens_ocr 的引擎是可选依赖(RapidOCR,Apache-2.0,PP-OCRv6 模型随包分发,装完离线)。

第一次调用不会偷偷下载:它先告诉你「约 80MB、会装到哪个目录、怎么换目录」,

再调一次并传 install: true 才开始下,结果里会写清装到哪。

变量 · 作用 · 默认

VIDLENS_OCR_TARGET · 装到指定目录(自动加入 import 路径,不写系统目录) · 本解释器 site-packages(Windows 上通常就是 C 盘)

VIDLENS_OCR_AUTO_INSTALL · ask 先问 / auto 自动装 / off 只给命令 · ask

# 想放 D 盘 + 以后自动装(桥进程会读这两个环境变量):
set VIDLENS_OCR_TARGET=D:\your\ocr
set VIDLENS_OCR_AUTO_INSTALL=auto

没装也不会坏:vidlens_ocr 返回安装说明,其他工具不受影响。

上下文预算(为什么默认给摘要)

一次「看视频」如果按老路子走,实测是这么多字符:

调用 · 字符 · 说明

meta + plan · ~730 · 便宜

window × 3(各 1 分钟) · ~2,800 · ~0.9k/分钟

soundscape(60 秒) · ~1,500 · 12 窗 × 8 标签

brief(旧版全量) · ~9,000 · 6–9k 字 ≈ 4–6k tokens

合计 · ~14,200 · 还没算图片

关键不在单次有多大,而在于这些字符之后每一轮都在上下文里。一个 64k 窗口,

两三个视频 + 正常对话就会顶到上限,于是出现「看完视频就超上下文」。

所以默认改成三档,按需升级:

1. vidlens_brief → 摘要(约 0.7–1.5k 字:标题/时长/语音覆盖/章节/5 句均匀取样的关键台词/全文路径);

2. vidlens_window → 只读某一段(约 0.8k 字/分钟),读细节用它,别用 brief 代;

3. vidlens_brief(level="full") → 完整报告(6–9k 字),只在用户明确要全文时用一次。

全文始终写在 out/<id>/brief.md,不会丢;摘要里直接给路径和下一次该调什么。

vidlens_window 另有 80 行上限,超了会明说「还有 N 行,缩小范围」而不是无限倾倒。

判断 / 长视频 / 自检

工具 · 用途

vidlens_comments(url, limit=40) · 评论区互动比、正负面、争议度、高赞评论 + 评论配图

vidlens_compare(urls=[...]) · 新增:批量元数据对比(0 媒体下载,最多 8 个)

`vidl

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:12,最后更新 2026-10-30

链接

GitHub · Homepage · npm

同类插件