用 dsh-douyin 给 DeepSeek Harness WebUI 加一个短视频侧栏

前言

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 ContextWebServerClientContext 契约。目录页收录日期是 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 自动选择:

  1. 装了 dsh-better-sidebar:自动注册侧栏 tab「刷视频」(单实例),在侧栏和菜单里打开。
  2. 没装:页面右侧边缘出现播放按钮,展开后是全黑沉浸式播放面板。这种模式不依赖额外插件。

浮动 dock 关闭时不会挂载播放器或 iframe,也不会在后台解析、下载或播放媒体;收起时立即卸载面板。面板打开时,会话区 #root 右侧会让出面板宽度,并带 200ms 的平滑动画,避免内容被挡住。

原生播放与精确回放

播放链路不是「打开一个短视频网站」,而是:

  1. 选中某个 feed 系列。
  2. 浏览器请求 host 路由 /dsh-douyin/resolve
  3. host 只对内置 HTTPS 端点做 HEAD(redirect: 'manual'),取出 302 的 Location
  4. 校验跳转目标是公网地址后,把直链交给原生 <video>
  5. 历史栈保存这条直链。向上滚、切回上一段时,播的是同一 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.jsondsh.client.platformweb。仓库 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 走对应入口:

  1. 有侧栏工作台:打开「刷视频」tab。
  2. 没有:点页面右侧边缘的播放按钮,展开沉浸式面板。
  3. 在顶部轨道选一个系列,等第一段直链解析完成。
  4. 桌面用滚轮或上下方向键切段,手机上滑 / 下滑;空格暂停,左右键微调进度。
  5. 向上滚回去时,确认播的仍是刚才那条,而不是接口新抽的随机片。
  6. 不用时收起面板。按 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜