前言¶
用 DSH 读 B 站或 YouTube 时,链接不能直接当上下文交给模型:常见做法是手动拉字幕,或每次让 agent 自己拼 yt-dlp 和转写命令,流程要在对话里重复讲一遍,结果也不易回看。
@lim324/dsh-video-summary(仓库 Limsanity/dsh-video-summary)把「链接 → 转录稿 → 总结 → 归档」收成一条本机流水线:工具负责取数与转写,侧栏面板负责列表与详情,数据落在宿主磁盘上。转写与总结走 agent 工具调用,音频不离开本机。
这是什么¶
这是 DSH Web GUI 客户端插件(维护者 Limsanity,MIT 许可,package 版本 0.1.1)。左侧边栏增加「视频总结」入口,主列展示已处理视频;粘链接回车会新开 DSH 会话,由 agent 调用 video_summary 等工具完成转录与保存。
插件在 当前 dsh 进程权限 下运行;安装前建议阅读仓库源码与许可证,并自行评估对 yt-dlp、本地 Python/Whisper 环境的信任边界。
核心功能¶
工具面(Cordis)¶
| 工具 | 作用 |
|---|---|
video_summary({ url, force?, lang? }) |
取元数据;有字幕则用字幕,否则下载音频并用本地 Whisper 转录;创建或更新一条记录;返回带 [mm:ss] 的文稿。同一链接再次调用会回放已存记录(除非 force: true)。 |
video_summary_save({ id, summary, takeaways? }) |
写入总结与可选要点,状态变为「已总结」。 |
video_summary_list({ query?, limit? }) |
列出历史记录。 |
video_summary_transcript({ id, offset?, maxChars? }) |
分段读取完整文稿(长视频)。 |
video_summary 会把发起调用的会话 id 写入记录,面板中「回到会话」可跳回当时对话。
面板¶
- 顶部:粘链接并回车,等价于让 agent 总结该视频;任务文本会预填到新会话输入框。
- 列表:封面、标题、平台/作者/时长、状态(转录中 / 待总结 / 已总结 / 失败)、字数、搜索与筛选。
- 详情:Markdown 总结、要点、可展开转录稿(可复制)。
- 删除:记录与同目录下
transcripts/<id>.json一并删除。
有转录任务时每 3 秒刷新列表,平时 20 秒;页面在后台时停止轮询。
数据目录¶
默认在 $DSH_HOME/video-summary/:
$DSH_HOME/video-summary/
library.json # 记录元数据、总结、状态、会话 id
library.json.bak # 落盘前的上一版
transcripts/<id>.json # 转录稿(按需读取)
work/<id>/ # 下载音频;转录成功后默认删除(config 中 keepAudio: true 可保留)
可通过环境变量 VIDEO_SUMMARY_DIR 或插件 config 的 dataDir 改路径。不同 $DSH_HOME 的实例不会自动同步;要共享需指向同一 dataDir。
依赖与 ASR 后端¶
| 依赖 | 用途 |
|---|---|
yt-dlp |
元数据、字幕、音频 |
ffmpeg |
faster-whisper 解码 |
| mlx-whisper(首选,Apple GPU) | 探测为 probe.asr.backend === "mlx" |
| Python + faster-whisper(兜底) | CPU 转录 |
README 记载同一约 4 分半视频:MLX 约 13 秒,faster-whisper(CPU int8)约 57 秒。未装 mlx-whisper 时自动退到 CPU。面板顶部展示探测结果,缺组件时会红字提示。
健康检查:GET /v-sum/health(含 probe.ytDlp、probe.ffmpeg、probe.asr 等)。
安装与启用¶
官方 README 给出的本机安装步骤如下。需 Node.js >= 22;构建阶段临时安装 esbuild。
git clone https://github.com/Limsanity/dsh-video-summary.git
cd dsh-video-summary
npm i --no-save esbuild # 只在构建时需要
# 1. 构建(宿主 + 客户端 + asr.py / asr_mlx.py)
node build.mjs
# 2. 挂进 web profile(目录软链 + 依赖项)
ln -sfn "$PWD" ~/.dsh/profiles/web/node_modules/@lim324/dsh-video-summary
# package.json 的 dependencies 里加: "@lim324/dsh-video-summary": "link:<上面这个路径>"
# 3. 在 profile 的 cordis.patch.yml 末尾加一行(不要同时写进 dsh.profile.bundles,
# 否则同一插件会被 bundle patch 和用户 patch 各插一次 → 两行同 id)
- insert:
- id: video-summary
name: '@lim324/dsh-video-summary'
cordis.patch.yml 支持 live reload:改完后一般无需重启 dsh,刷新页面即可见侧栏入口。
若在 Apple 设备上使用 MLX 后端,README 建议在数据目录下单独 venv 安装(示例路径可按本机调整):
uv venv --python /opt/homebrew/bin/python3.13 ~/.dsh/video-summary/venv
uv pip install --python ~/.dsh/video-summary/venv/bin/python mlx-whisper
插件 config(节选)¶
- id: video-summary
name: '@lim324/dsh-video-summary'
config:
maxChars: 24000 # 单次返回给模型的文稿上限
asrLang: zh
asrBackend: auto # auto | mlx | faster-whisper
preferLangs: [zh-Hans, zh-CN, zh, en]
keepAudio: false
whisperModel: auto
mlxModel: ''
mlxPythonPath: ''
pythonPath: ''
ytDlpPath: ''
dataDir: ''
典型用法¶
1、在 Web GUI 打开「视频总结」,顶部输入框粘贴 B 站或 YouTube 链接并回车。
2、DSH 新开会话,输入框已预填总结任务;回车启动 agent。agent 调用 video_summary,得到带时间戳的文稿后撰写总结,再调用 video_summary_save 写回面板。
3、在列表中打开记录查看总结与转录稿;需要续读长稿时,agent 可调用 video_summary_transcript。要从历史会话继续聊,用记录上的「回到会话」。
同一 URL 再次总结时,除非传入 force: true,否则会直接回放已有转录,避免重复下载与转写。
适用场景与注意¶
适合:经常在 DSH 里消化长视频、希望转录与总结留在本机且可检索回看的 Web 用户;已具备或愿意配置 yt-dlp、ffmpeg 与 Whisper 相关环境。
注意:
- 不要同时在
dsh.profile.bundles与cordis.patch.yml里insert同一id,否则配置里会出现重复插件行。 - B 站封面经
/v-sum/cover代理,规避浏览器直连 CDN 的 Referer ACL 403。 - 社区目录页:skillhub.cn 上的插件条目。DSH 插件生态强调「一切皆插件」;该目录为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
@lim324/dsh-video-summary 把视频链接、本地转写和 agent 总结接到一块:工具固定取数流程,面板固定归档与回看,数据在 video-summary 目录下由同一 dsh 实例共享。进一步了解实现与 issue,见 GitHub 仓库;在目录站检索可选用关键词「视频总结」或包名 @lim324/dsh-video-summary。