前言¶
DeepSeek Harness(简称 dsh)的设计是「一切皆插件」:浏览器自动化、视觉理解、文档解析都可以往运行时上挂。做资料整理或内容归档时,还有一类很具体的需求——对话里丢进一个链接,让智能体先判断这是不是视频或音频,再把文件落到本地。社区目录里浏览器自动化插件不少,专门做媒体识别和下载的工具却很少。
dsh-video-downloader 就是冲着这个缺口来的。它把 Chrome MV3 扩展 video-downloader-extension 里的媒体识别逻辑从浏览器沙箱里抽出来,变成纯 Node 函数,再注册成三个 agent 可调用的工具。本文按社区目录页、GitHub 仓库 README 与 src/index.js 交叉核对后整理。需要先说明两点:社区插件目录是独立站点,与 DeepSeek / 幻方没有官方从属关系;Harness 本身仍处于 developer preview,后续可能出现不兼容变更。
这是什么¶
dsh-video-downloader 是一款「工具与能力」类 DSH 插件,由 zimai233 维护,许可证 MIT,主要语言 JavaScript。仓库 package.json 中的版本号是 0.1.0。2026-08-18 核实时,目录页与 GitHub 均显示 1 星;仓库带有 deepseek-harness、dsh-plugin 两个 topic。
一句话定位:在 DeepSeek Harness 对话里,按 URL 判断是否像可下载的视频/音频,并把媒体直链流式写到磁盘。站点识别按 hostname 覆盖 Bilibili、YouTube、抖音、小红书,短链域名 youtu.be、iesdouyin.com、xhslink.com 也会归到对应站点,其余记为 other。
它解决的不是「给一个播放页就自动解析并扒片」那种完整下载器。video_analyze 和 video_quality_parse 只看 URL 字符串,不会去抓页面;video_download 接收的是 mp4 / m3u8 / mpd / m4s 这类直链。README 写明:插件不绕过 DRM、登录墙或平台付费内容,使用时需遵守各平台服务条款与著作权法。
核心功能¶
插件通过 @deepseek-ai/dsh-tools 的 defineTool 注册三个工具。纯函数核心(isMedia、getQuality、getExt、detectSite)也会导出,方便测试和二次开发。
video_analyze:只分析、不下载¶
传入一个 url,返回 JSON:
{ "isMedia": true, "site": "bilibili", "quality": "1080P", "ext": "m4s", "mimeHint": "video/iso.segment" }
判定规则来自源码里的启发式:
- 是不是媒体:看扩展名(mp4、m3u8、webm、m4s、mp3 等)、URL 片段(如
bilivideo.com、googlevideo.com、.m3u8),以及可选的 Content-Type。 - 属于哪个站点:解析 hostname,映射到
bilibili/youtube/douyin/xiaohongshu/other。 - 清晰度:从
1920x1080、height/quality查询参数、码率阈值,或 URL 里的1080、720等关键字尽量猜;猜不到就按容器标成HLS/DASH/M4S/FLV。 - 扩展名与 MIME 提示:例如
.m3u8→application/x-mpegURL,缺省扩展名时源码会落到mp4。
工具描述写得很明确:分析过程不会去请求这个 URL。把 B 站播放页丢进来,通常只能识别出 site 为 bilibili,isMedia 未必为真——因为它看的是链接长什么样,不是页面里藏了什么。
video_download:把直链流式写到磁盘¶
这是真正会发网络请求的工具。参数与返回如下:
| 参数 | 说明 |
|---|---|
url |
必填,媒体直链 |
outPath |
可选,绝对路径或相对当前工作目录;不填则写到 ./downloads/ |
headers |
可选对象,合并到默认的浏览器请求头之上 |
返回 JSON:{ savedTo, bytes, quality, ext, elapsedMs }。
下载行为在 README 和源码里是对齐的:
- 请求头带 Chrome 风格 User-Agent,并按 URL 的 origin 自动加
Referer。 - 用
fs.createWriteStream流式写入,目录不存在会创建。 - 手动跟随重定向,最多 5 次。
- 超时 60 秒;执行被取消时会 abort。
默认文件名从 URL 路径最后一段清洗得到;路径里的非法字符会被替换成下划线。
video_quality_parse:纯正则、无网络¶
只返回 { quality, ext },不判断站点,也不下载。适合已经拿到直链、只想从 URL 里抠清晰度和容器的情况。清晰度同样是 best-effort:先看宽高和查询参数,再看码率阈值和关键字,最后才回落到容器类型。
源码里还有、但没注册成工具的部分¶
src/index.js 另外导出了 parseBilibiliJson、parseYoutubeStreaming、extractMediaUrls:分别用来解析 B 站 playurl JSON、YouTube streamingData,以及从页面文本里抽出 mp4 / m3u8 链接。它们是纯函数,没有挂到 agent 工具表上。如果只通过对话调用插件,智能体用不了这三套解析器;要二次开发或自己喂 JSON 文本,才用得上。
实现上还有两点和安装有关:包是纯 ESM,main 指向 src/index.js,没有构建步骤;cordis.patch.yml 以 id video-downloader、name dsh-video-downloader 插入插件行。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:
dsh plugin add github:zimai233/dsh-video-downloader
需要可复现安装时,按目录页说明把 commit 哈希钉上:
dsh plugin add github:zimai233/dsh-video-downloader#<commit>
把 <commit> 换成仓库里实际的 commit SHA。官方文档里也常见带 profile 的写法,例如 dsh plugin --profile demo add github:zimai233/dsh-video-downloader。
仓库 README 还写了按 npm 包名安装:dsh plugin --profile myprofile add dsh-video-downloader。截至 2026-08-18,npm registry 上查不到同名包,不要把这条当成可用安装方式。当前应以目录页的 GitHub 命令为准。
本插件是纯 JavaScript,发布包即运行时代码,一般不需要为 prepare 构建脚本额外授权。即便如此,目录页的安全提示仍然适用:插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前请自己看源码和许可证。装完可用 dsh plugins list 确认是否出现在列表里;有的插件需要重启 Harness 后才生效。
典型用法¶
README 建议用自然语言让 agent 调工具,例如:
分析这个页面里的媒体:https://www.bilibili.com/video/BV1xx411c7mD
把这几个链接的 1080P 视频下载到 ./downloads 目录
对应到工具参数,仓库给出的示例是:
{ "url": "https://bilivideo.com/xxx.m4s" }
上面这一条给 video_analyze。下载时补上输出路径:
{ "url": "https://bilivideo.com/xxx.m4s", "outPath": "./downloads/clip.mp4" }
只解析清晰度和扩展名:
{ "url": "https://example.com/video.mp4?height=720" }
推荐顺序是:先 video_analyze 看 isMedia 和 site,确认是直链后再 video_download。播放页 URL 过不了「像媒体」这一关时,需要先通过别的手段拿到直链(例如自己打开开发者工具、或配合浏览器自动化插件抓到媒体请求),再交给本插件保存。不要指望对播放页执行一次 video_download 就能得到完整成片。
video_download 的 headers 可以覆盖或补充默认请求头。平台对 Referer、Cookie 有额外要求时,可以把需要的头放进这个对象;插件本身不会帮你登录,也不会去读浏览器 Cookie 库。
适用场景与注意事项¶
比较适合这些情况:
- 已经拿到媒体直链,希望智能体在对话里完成分类、选清晰度线索、保存到本地。
- 本地归档公开可下载的 mp4 / m3u8 等文件,默认落到当前工作目录的
downloads/。 - 二次开发时复用导出的纯函数,而不是从零抄一套 URL 启发式。
使用前建议把下面几条当作硬限制,而不是「以后可能会好」:
- 权限与供应链。插件以当前 dsh 进程权限运行,能读写真机目录、能发网络请求。安装前检查 https://github.com/zimai233/dsh-video-downloader 源码和 MIT 许可证;需要可复现环境时固定 commit。
- 版权与平台条款。README 原文要求:只下载你有权获取的内容。它只做识别和流式保存,不绕过 DRM、登录墙或付费墙。
- 直链,不是播放页。
video_analyze不抓页面;video_download按 HTTP 把给定 URL 写成文件。B 站 DASH 常见音视频分离的.m4s,本插件不会帮你合并。 - 60 秒超时。单次下载超过 60 秒会被 abort。大文件、慢网络或长 playlist 可能失败。
- 重定向上限为 5。超过会报错。
- 清晰度是猜的。标签来自 URL 形态和 B 站 quality id 对照表,不是解码后的真实分辨率。
- 项目很新。仓库创建于 2026-08-14,版本
0.1.0,星标很少。把它当社区小工具使用,而不是生产级下载套件。
小结¶
dsh-video-downloader 给 DeepSeek Harness 补上了一块很窄、但确实缺过的能力:让智能体先看链接像不像媒体,再把直链流式存到本地。三个工具分工清楚——分析不联网、下载带超时和重定向、质量解析是纯正则。它不是 yt-dlp 的替代品,也不是播放页一键下载器;边界写在 README 和源码里,用的时候按直链来、按版权来,会比较稳。
- 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-video-downloader/
- GitHub:https://github.com/zimai233/dsh-video-downloader
- DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness