前言¶
DeepSeek Harness(命令名 dsh)是 DeepSeek AI 开源的智能体运行时,目前仍是开发者预览版,仓库在 deepseek-ai/deepseek-harness。官方页面把核心理念写得很清楚:一切皆插件。模型、工具、技能、会话、沙箱,以及 Web UI,都可以在配置层替换或重组,而不必去改框架源码。
真正长时间开着 dsh web 之后,界面本身也会变成一块可插拔的地盘。社区里已经有任务看板、侧栏工作台、主题皮肤这类插件。其中有一类需求更具体:会话跑着的时候,想在侧栏用接近手机短视频的方式随便刷一段,而不是另开浏览器标签、再被推荐流拖走。
dsh-douyin 做的就是这件事。它不是抖音官方客户端,也不对接字节跳动的开放接口,而是在 DSH WebUI 里放一个原生 <video> 播放器:从第三方分类接口解析出 mp4 直链,再按系列连播。社区目录 DeepSeek Harness 插件库 把它收在「界面增强」分类下。需要说明的是,这类目录是独立站点,和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
本文按该目录详情页、GitHub 仓库 README / package.json / 源码与官方 Harness 说明交叉核对后整理。
这是什么¶
dsh-douyin 是一款界面增强插件,由 anacondakc 维护,仓库地址是 anacondakc/dsh-douyin。截至 2026-08-18,GitHub 显示 3 个 star,主要语言是 TypeScript,许可证为 BSD-3-Clause。package.json 里的版本号是 0.2.0,CHANGELOG 记录这次发布把 host / client 迁到了 DSH rc.5 的 Cordis Context、WebServer 与 ClientContext 契约。目录页收录日期是 2026-08-14,最近一次推送是 2026-08-13。
它解决的问题可以收成一句话:在 WebUI 侧栏(或未装侧栏工作台时的右侧浮动面板)里,用原生播放器直接播短视频直链,而不是套一层网页 iframe 去刷推荐流。
聚合视频源来自 api.yujn.cn 的分类接口。README 写明:每次请求会 302 到一条随机 mp4 直链;浏览器看不到这次跨域跳转的目标,所以 host 侧注册 /dsh-douyin/resolve,用 Node fetch 读取 Location,再交给原生播放器。历史栈存的是解析后的真实 URL,向上滚动回放的是刚才那一段,而不是接口再随机一次。
核心功能¶
两种挂载方式¶
README 把界面挂载分成两种,按当前 WebUI 里有没有 dsh-better-sidebar 自动选择:
- 装了 dsh-better-sidebar:自动注册侧栏 tab「刷视频」(单实例),在侧栏和菜单里打开。
- 没装:页面右侧边缘出现播放按钮,展开后是全黑沉浸式播放面板。这种模式不依赖额外插件。
浮动 dock 关闭时不会挂载播放器或 iframe,也不会在后台解析、下载或播放媒体;收起时立即卸载面板。面板打开时,会话区 #root 右侧会让出面板宽度,并带 200ms 的平滑动画,避免内容被挡住。
原生播放与精确回放¶
播放链路不是「打开一个短视频网站」,而是:
- 选中某个
feed系列。 - 浏览器请求 host 路由
/dsh-douyin/resolve。 - host 只对内置 HTTPS 端点做 HEAD(
redirect: 'manual'),取出 302 的Location。 - 校验跳转目标是公网地址后,把直链交给原生
<video>。 - 历史栈保存这条直链。向上滚、切回上一段时,播的是同一 URL。
自动连播时,优先走历史栈;到末尾才再向接口要新段。单段加载或解码失败会递增退避并跳过;连续失败 3 次后停止请求,并显示错误界面。
feed 解析器不是开放代理。源码 src/index.ts 和 README 都写了同一条边界:只接受内置 HTTPS 端点以及 _t 缓存参数,不会替浏览器去请求任意 URL、环回地址或内网服务。并发和速率也有上限(同时 8 路、10 秒窗口内最多 60 次)。这对「插件以当前 dsh 进程权限跑 host 路由」这件事是有意义的:解析请求出在本机 Node 进程里,白名单和公网 IP 检查是为了限制 SSRF,而不是把 dsh 变成通用视频代理。
21 个内置系列¶
顶部是一条横向系列轨道:当前项居中,相邻项随距离淡化,停滚后加载对应分类、清空上一分类的播放历史,并持久化选择。
README 写明选择器内置 21 个经 HTTPS 302 验证的 feed 系列,包括学姐、卡哇伊、嫩嫩、丝滑舞蹈、完美身材、慢摇、清纯、COS、街拍、甜妹、热舞、穿搭、章若楠、鞠婧祎等。完整 id / 名称 / 接口路径在仓库 src/feed-sources.ts。源码注释还写了一句:上游页面里明确标成未成年人向的分类被有意排除。
内容性质要说清楚:api.yujn.cn 给的是随机泛娱乐短视频,不是用户自选片单,也不是抖音账号主页。系列名字只是分类入口,下一段播什么由接口决定。
除了内置 feed,插件的源模型还有另外两种,写在 README 的类型定义里:
| kind | URL 含义 | 播放方式 |
|---|---|---|
feed |
内置随机视频接口(302 到 mp4) | host 白名单解析后由原生播放器连播 |
direct |
固定一个视频文件(mp4/webm 等) | 原生播放器播一次,可暂停和重播;不响应上下切段 |
web |
允许被嵌入的网页 | iframe 渲染 |
操作方式¶
仓库 README 列出的播放操作如下:
- 点击暂停:点画面暂停;再点画面或中央按钮继续。暂停时中央按钮常驻。
- 进度与音量:底部显示当前时间 / 总时长,可拖进度条;右下角音量滑块 0–100%,图标按静音 / 低 / 高分档。
- 手势:手机视频区上滑下一段、下滑上一段;滑动后不会误触暂停。
- 滚轮:桌面向下滚下一段、向上滚上一段,带 400ms 防抖;顶部悬浮栏空白处滚轮同样切视频。
- 键盘:空格或
K播放暂停,M静音,左右方向键快退 / 快进 5 秒,上下方向键切换视频。 - 系列导航:顶部轨道可用滚轮、触控横滑、左右箭头或点击切换。
界面按手机短视频播放器来:全屏黑底、顶部轻量分类、底部媒体控制。选中和焦点用红色 #fe2c55 与青色 #25f4ee,控件是 Lucide 图标。面板宽度按 min(100vw, clamp(380px, 100vh×9/16, 700px)) 计算;竖屏 9:16 内容在默认比例下几乎不裁切,横屏或方形内容会居中裁左右。
安装与启用¶
社区目录页给出的安装命令是下面这一条,在 DeepSeek Harness 终端里运行即可:
dsh plugin add github:anacondakc/dsh-douyin
目录页同时说明:如需可复现安装,可以固定 commit 哈希:
dsh plugin add github:anacondakc/dsh-douyin#commit
把 #commit 换成实际哈希。仓库 main 上目前能看到的最近一次提交是 2026-08-13 的 rc.5 适配(commit 前缀 2f28338),以你安装当天 GitHub 上的完整 SHA 为准,不要沿用过期短哈希。
这是 WebUI 插件。package.json 的 dsh.client.platform 为 web。仓库 README 的本地挂载写法带了 --profile web,改完需要重启 dsh web:
dsh plugin --profile web add /path/to/DSH-douyin
# 重启 dsh web 后生效
从源码构建时,README 给出的命令是:
pnpm install
pnpm build # tsc + tsdown + 产物校验
pnpm test # vitest(23 用例)
dsh plugin --profile web add . # 挂载
目录页有一条固定提示:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。dsh-douyin 会在 host 进程里注册 HTTP 路由并对外网做 HEAD 请求,这一条尤其不要略过。
典型用法¶
装好并重启 WebUI 之后,按有没有 dsh-better-sidebar 走对应入口:
- 有侧栏工作台:打开「刷视频」tab。
- 没有:点页面右侧边缘的播放按钮,展开沉浸式面板。
- 在顶部轨道选一个系列,等第一段直链解析完成。
- 桌面用滚轮或上下方向键切段,手机上滑 / 下滑;空格暂停,左右键微调进度。
- 向上滚回去时,确认播的仍是刚才那条,而不是接口新抽的随机片。
- 不用时收起面板。按 README,收起后播放器会卸载,不会在后台继续拉流。
开发者可以用浏览器 DevTools 做一次挂载确认,命令来自仓库 README:
window.__DSH_BOOT__.entries // 应含 id: "dsh-douyin"
document.querySelector('video.vf-video') // 原生播放器存在且 paused === false
适用场景与注意事项¶
适合已经在用 DSH WebUI、希望侧栏有一个短视频播放器的人;和 dsh-better-sidebar 一起用时走侧栏 tab,单独用则走浮动 dock。它不提供抖音账号登录、作品搜索或下载,也不是把会话里的链接另存为本地文件——那些是别的插件的事。
使用前有几条边界需要接受:
- 权限与来源。插件跑在当前 dsh 进程里,能注册路由、发网络请求。安装前应阅读 仓库源码 和 BSD-3-Clause 许可证,确认你接受这份权限模型。
- 第三方接口。feed 依赖
api.yujn.cn的可用性。接口内容是随机泛娱乐短视频,不能指定某一条,也不能当成稳定片库。连续失败 3 次后播放器会停并报错,这是设计行为,不是「再刷新一下就好」。 - 内容与场合。系列名称和画面都属于泛娱乐向。办公共享屏幕、公开演示或对内容有合规要求的环境,不适合打开这个侧栏。
- 画面裁切。视频使用
object-fit: cover。9:16 竖屏基本不裁,横屏 / 方形会裁左右。 - 无头浏览器。README 写明:像 agent-browser 这类 soft decode 环境,个别视频可能报 Format error;真实浏览器有硬件解码时不受影响,播放器仍会自动跳过坏段。
- 生态位置。它是社区插件,不是 DeepSeek 官方组件,也不是抖音官方能力。目录页、GitHub 星标和分类只说明它被收录,不构成质量背书。
小结¶
dsh-douyin 把一件很窄的事做完整了:在 DSH WebUI 里用原生播放器播直链短视频,系列可切换,历史可精确回放,没有 better-sidebar 时也能用浮动面板撑起来。直链解析放在 host 白名单路由上,而不是让浏览器去猜 302 目标。
视频源、内容和可用性都绑在第三方接口上。把它当成「开会间隙刷两段」的界面插件即可,不要期待官方抖音那种账号体系和推荐算法。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-douyin/
GitHub:https://github.com/anacondakc/dsh-douyin