前言¶
給 DSH(DeepSeek Harness)寫東西的人,多半有一臺常開的宿主、一個瀏覽器會話,耳朵裏還放着歌。問題在於:想確認當前這句歌詞是什麼,就得把網易雲音樂切出來看一眼。切窗口這個動作本身,比你讀一句歌詞更顯眼。
dsh-plugin-netease-lyrics 就是爲這個場景做的:它不彈窗、不加面板,而是把當前那句歌詞貼在 DSH 狀態行「深度求索中,用時 X 秒 …」的右側,字體、字號、顏色全部沿用宿主那行小字。旁人看過去,只當你這句狀態話有點長。下面介紹這個插件能做什麼、怎麼裝、要注意什麼。
這是什麼¶
一個 DSH 插件,維護者是 YardonYan,倉庫爲 YardonYan/dsh-plugin-netease-lyrics,當前版本 1.0.7,許可證 MIT。
它解決的問題很單一:讀取桌面版網易雲音樂當前正在播放的曲目,拿到歌詞,再顯示在 DSH 狀態行的右側。目前只支持 Windows 10 / 11 宿主和桌面版網易雲音樂,其他系統和其他音樂平臺都沒有實現。
核心功能¶
讀取播放信息的方式是 Windows 的系統媒體傳輸控件 SMTC。插件的 Host 端在宿主進程內常駐一個 PowerShell worker,每秒讀一次 SMTC,拿到歌名、歌手、播放狀態。
網易雲 PC 客戶端不會通過 SMTC 上報播放位置,所以插件自己跑秒錶推算進度:切歌歸零、暫停停表、恢復續走。這一步的成因和可選方案寫在倉庫的 docs/playback-position.md。
歌詞按歌曲搜索拿原始 LRC,中文、英文、韓文、日文都直接顯示,不做語言挑選。帶官方翻譯的歌,鼠標懸停歌詞時顯示翻譯。網易雲公開搜索接口有 IP 限流,返回 code: 405 操作頻繁 時,1.0.5 起插件會自動切換到限流計數獨立的備用搜索端點,歌詞最壞延遲到下一首換歌時。
顯示層在 Client 端完成:每秒輪詢,把當前歌詞行以 fixed 定位貼在狀態行右邊,並用 computed style 現場克隆狀態行的字體、字號、顏色。浮層不攔截點擊,下方控件照常可用。
安裝與啓用¶
三個前提,缺一條都跑不起來:dsh 在 PATH 上;桌面版網易雲音樂已開啓 SMTC;PATH 上能找到 pnpm(dsh plugin 本身不裝包,它把參數轉發給 pnpm,找不到會以 dsh: pnpm was not found 退出)。
網易雲這邊的開關在 設置 → 常規 → 系統 → 勾選「開啓SMTC」。不開的話系統層面讀不到播放狀態,插件拿不到任何數據。
安裝用一條命令,不用克隆倉庫:
dsh plugin --profile web add github:YardonYan/dsh-plugin-netease-lyrics
這條命令把倉庫當 npm 包裝進 web profile 的依賴,並在同一份 package.json 的 dsh.profile.bundles 裏登記。裝完重啓 dsh web,否則 Host 進程不會加載新插件,再刷新頁面。
裝完必須單獨確認,add 返回 0 不代表裝對了:
dsh --profile web --dump-config
輸出裏應當出現這樣一段:
# == dsh-plugin-netease-lyrics
- id: netease-lyrics
name: dsh-plugin-netease-lyrics
config: {}
沒有這一段就是沒裝上。出現這種情況的常見原因是包名或路徑指錯,pnpm 可能裝成一個空殼依賴再正常退出。可以用下面的命令看實際裝進去的是什麼:
dsh plugin --profile web why dsh-plugin-netease-lyrics
典型用法¶
裝好之後,讓插件跑起來只需要四步:
- 打開桌面版網易雲音樂,播放一首歌。
- 在 DSH 裏隨便發一條消息,讓 AI 轉起來,狀態行出現。
- 狀態行右側出現同樣式的歌詞,跟着演唱進度換行。
- 鼠標懸停歌詞,可看到完整句和翻譯(如果有)。
真正幹活的位置是插件源碼裏的 index.js(Host 端)和 client.js(Client 端)。要調試或改插件本身,用本地克隆方式安裝:
$dir = "$env:USERPROFILE\dsh-plugins\dsh-plugin-netease-lyrics"
git clone https://github.com/YardonYan/dsh-plugin-netease-lyrics.git $dir
dsh plugin --profile web add $dir
本地目錄會被 pnpm 記成 link: 依賴,克隆目錄就是插件實體:刪了、挪了、換盤符了,插件立刻失效,別放在臨時目錄或下載目錄。改完源碼不用重裝:index.js 改動後重啓 dsh web,只改 client.js 刷新頁面即可。
README 建議用本地克隆方式安裝,因爲插件需要跟着宿主和網易雲客戶端的更新走,clone 方式的更新只是 git pull 的網絡增量。倉庫裏還給了一條更新提示詞,插件失靈時可以整段發給 DSH 會話,讓 AI 自動完成「拉新版 → 判斷是否需要重啓 → 給結論」。
更新和卸載走 dsh plugin:
dsh plugin --profile web update dsh-plugin-netease-lyrics
dsh plugin --profile web remove dsh-plugin-netease-lyrics
兩條都要重啓 dsh web 生效。
配置¶
默認錨點是「深度求索中,用時」。如果換了界面語言,可以在 profile 的 cordis.patch.yml 頂層數組裏追加一條按 id 命中的補丁。參數項:
- id: netease-lyrics
config:
anchorText: "深度求索中,用時" # 換成你的宿主狀態行文案
注意不要寫成 insert,那會新增一行插件而不是改這一行。anchorText 只認這一個鍵,用途是在頁面裏定位宿主狀態行,不是替換歌詞內容。未配置、非字符串或空字符串時,回退到內置默認值 深度求索中,用時。文案要選狀態行裏穩定出現的一小段,太短容易誤匹配聊天正文,太長在狀態行拆分文本節點時會匹配不到。改完刷新頁面,改 index.js 才需要重啓 dsh web。
適用場景與注意¶
適合 Windows 10 / 11 宿主、用桌面版網易雲音樂、希望歌詞低調可見的 DSH 用戶。只驗證了這一組組合:macOS、Linux 以及 QQ 音樂、酷狗、Spotify、Apple Music 等客戶端都沒有做。這不是配置開關,而是實現層面的綁定——播放狀態來自 Windows 獨佔的 SMTC,macOS 和 Linux 要另找系統級正在播放接口;歌詞檢索走網易雲公開接口,換平臺就得另接歌詞源並重寫曲目 ID 匹配。
運行側的已知限制:
| 限制 | 原因 | 緩解辦法 |
|---|---|---|
| 拖動網易雲進度條後歌詞漂移 | SMTC 不上報 seek | 換一首歌再換回來,重新對齊 |
| 單曲循環時秒錶走出歌尾 | 秒錶不知道歌曲總長 | 同上 |
| 中文界面之外不準 | 錨點按「深度求索中,用時」匹配 | 在配置裏改 anchorText |
| AI 空閒時歌詞不顯示 | 設計行爲:狀態行不在則歌詞隱藏 | 想常顯需自行改 client.js 的 stealth 判斷 |
| 僅本機訪問 | 路由只響應 loopback 並校驗 Origin | 安全特性,不開放外露 |
| 歌詞取不到 | 曲目無版權,或第一個候選沒有歌詞 | 無法繞過;候選只試第一條 |
| 歌詞小時級空白 | 網易雲搜索接口 IP 限流 | 1.0.5 起自動切備用端點 |
歌詞不顯示時,第一檢查項永遠是網易雲的「開啓SMTC」開關,勾完切一次歌生效。更細的排障見 README 的「排障速查」一節。
這個插件以當前 dsh 進程的權限運行,只監聽 loopback,安裝前仍應先讀一遍源碼、確認 MIT 許可證符合你的要求。DSH 生態的目錄頁與 DeepSeek / 幻方沒有官方從屬關係,這裏給出的只是社區目錄入口。
結語¶
它把「看一眼歌詞」這個動作藏進了你已經開着的 DSH 窗口裏,成本是一個常駐 worker 和一條本地 HTTP 路由。對確實需要邊聽邊幹活的人,這是比切窗口更順手的答案。
目錄頁:https://www.skillhub.cn/plugins/YardonYan/dsh-plugin-netease-lyrics
倉庫:https://github.com/YardonYan/dsh-plugin-netease-lyrics