用 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

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

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

小夜