前言¶
在 Windows 上用 DeepSeek Harness(DSH)写代码或长对话时,若同时开着落雪音乐(LX Music)的桌面歌词,置顶透明浮窗常会挡视线、抢位置。落雪本身不负责 DSH 界面布局,开发者只能把歌词窗挪来挪去,或干脆关掉歌词。
下面介绍社区插件 dsh-plugin-lx-music(维护者 afawfawffaf):把落雪正在播放的歌词和控制条嵌进 DSH 对话区右侧的壁纸带,播放与声音仍完全由落雪负责,插件只读其开放 API 并发送上一首 / 播放暂停 / 下一首等指令。插件归类为「客户端」,当前在 SkillHub 插件目录 可查到;源码与说明见 GitHub 仓库(MIT,仅 Windows)。
这是什么¶
dsh-plugin-lx-music 是 DSH 的 Cordis 宿主插件 + 浏览器客户端组合:宿主半边代理落雪本地开放 API(默认 127.0.0.1:23330),浏览器半边在 DSH 的固定「座位」上渲染歌词与控制胶囊。
设计原则在 README 里写得很明确:不接管播放、不打断播放、不弹播放条——歌和声音始终由落雪自己负责;本插件只做读歌词、发 /play /pause /skip-next /skip-prev,以及桌面歌词窗的显隐配合。
内嵌开启时,落雪的桌面歌词窗会被自动藏起来,避免与右侧内嵌重复;设置页里可以关掉内嵌、改回落雪桌面歌词窗。
核心功能¶
右侧壁纸带:歌词 + 控制胶囊¶
在 shell.overlay 上注册舞台组件 lx-music-stage:竖列布局,上方是胶囊(上一首 / 播放暂停 / 下一首),下方是当前行歌词及前后各两句,默认常显。舞台与控制条共用同一条 overlay、同一个 500ms 轮询器(按签名去重),落雪 API 每轮只被问一次;点击控制时先本地乐观翻转图标,真实状态返回后再对齐。
歌词换行由页面按本机时钟推算(配合 /lx-music/lyric 返回的 timeline 与播放锚点),减少「等网络才换行」的延迟;暂停时不跑帧循环,标签页隐藏时 requestAnimationFrame 自行停止。
输入框与设置¶
| 座位 id | 作用 |
|---|---|
conversation.input.right / lx-music |
输入框右侧「歌词」按钮:临时收起 / 展开内嵌歌词(收起时只剩胶囊,位置不变) |
settings.section / lx-music |
设置页:内嵌开关、开放 API 与桌面歌词窗状态 |
失败时通过 shell.overlay 的 lx-music-toast 提示;成功不弹 toast。
播放器未启动时的拉起逻辑¶
点播放或切歌时,若落雪开放 API 连不上(API_OFFLINE),宿主会尝试用 lx-music.ps1 -Mode launch 找到 lx-music-desktop.exe 并以 -hidden 启动(托盘常驻、不弹主窗口),然后每 250ms 探测 API,最多 15 秒,就绪后重放本次控制请求。README 中记录了与 ELECTRON_RUN_AS_NODE、-hidden 参数相关的实现细节,避免在 DSH(Electron)子进程环境下误把落雪拉成无界面进程。
控制请求 body 可带 desired: "playing" | "paused",用于拉起后避免「本想播放却被 toggle 成暂停」。
同源 HTTP 路由(页面不直连 23330)¶
页面只访问 DSH 同源的 /lx-music/*,由宿主转发到落雪,避免 CORS,也不把 23330 暴露给浏览器:
GET /lx-music/lyric— 一帧歌词与播放信息POST /lx-music/control—action:prev|next|togglePOST/GET /lx-music/lyrics— 桌面歌词窗显隐与状态
安装与启用¶
任选其一(命令与路径均来自仓库 README):
dsh plugin add afawfawffaf/dsh-plugin-lx-music
桌面端也可在 DSH「插件 → 添加插件」中粘贴仓库地址:
https://github.com/afawfawffaf/dsh-plugin-lx-music
说明:桌面 profile 由 Electron 管理,CLI 的 --profile desktop 会被拒,这是 DSH 既定行为,不是本插件问题。包当前未发布到 npm,分享他人时可用 git 地址、npm pack 的 .tgz,或本机目录路径(见 README「分享给别人」表)。
安装后插件管理器会把包名写入 dsh.profile.bundles,一般无需手改 profile 的 package.json。
环境要求(README 原文):
- Windows(
package.json声明"os": ["win32"],窗口操作走 PowerShell + user32)。 - 落雪音乐 v2.7+,并在落雪「设置 → 开放 API」中开启(默认
127.0.0.1:23330);未开启时歌词区与胶囊不会出现。 - 装完重启一次 DSH(宿主为 Node 进程,模块不热重载);之后仅改客户端时可刷新页面。
插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,确认符合你的安全策略。
典型用法¶
日常操作¶
- 确认落雪已开开放 API,DSH 已装插件并重启。
- 在 DSH 右侧壁纸带查看内嵌歌词;用胶囊切歌或播放 / 暂停。
- 需要专注输入时,点输入框右侧「歌词」收起文字,保留胶囊。
- 不想用内嵌时,到设置页关闭内嵌,恢复落雪桌面歌词窗。
诊断与手动测 Windows 脚本¶
宿主提供 GET /lx-music/debug 与 GET/POST /lx-music/client-report 便于排查加载与客户端步骤。
在仓库目录下可跑 README 中的自测(不会默认真启播放器控制,除非设置 LX_TEST_CONTROL):
node test/lrc.mjs
node test/control-route.mjs
node test/host-routes.mjs
node test/client-bundle.mjs
查看落雪进程与歌词窗状态、或手动 launch / hide / show:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File lib\lx-music.ps1 -Mode state
powershell.exe -NoProfile -ExecutionPolicy Bypass -File lib\lx-music.ps1 -Mode launch
输出为一行 LXMUSIC_JSON:{...}。
适用场景与注意¶
适合: 已在 Windows 上用 DSH 桌面端,同时用落雪听歌,希望歌词和控制贴在对话区右侧、不占桌面置顶浮窗的开发者。
不适合: 非 Windows 环境;无法或不愿在落雪里开启本地开放 API 的场景;期望插件替代落雪播放器、接管音源或系统媒体键的场景(本插件明确不接管播放)。
DSH 生态强调「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。本文事实来自仓库 README 与 package.json(当前版本 0.4.1);星标与后续版本以 GitHub 页面为准。
结尾¶
dsh-plugin-lx-music 把落雪的歌词与控制收进 DSH 右侧空带,读写 127.0.0.1:23330 开放 API,并在内嵌开启时藏起桌面歌词窗,减少写代码时被浮窗打扰的情况。安装命令为 dsh plugin add afawfawffaf/dsh-plugin-lx-music,记得落雪 v2.7+、开放 API 与装后重启 DSH。