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

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

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

小夜