dsh-plugin-netease-lyrics:把網易雲歌詞藏進 DSH 狀態行

前言

給 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

典型用法

裝好之後,讓插件跑起來只需要四步:

  1. 打開桌面版網易雲音樂,播放一首歌。
  2. 在 DSH 裏隨便發一條消息,讓 AI 轉起來,狀態行出現。
  3. 狀態行右側出現同樣式的歌詞,跟着演唱進度換行。
  4. 鼠標懸停歌詞,可看到完整句和翻譯(如果有)。

真正幹活的位置是插件源碼裏的 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

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

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

小夜