dsh-plugin-lx-music:在 DSH 右侧壁纸带内嵌落雪歌词与播放控制

前言

在 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 | toggle
  • POST / 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 原文):

  1. Windows(package.json 声明 "os": ["win32"],窗口操作走 PowerShell + user32)。
  2. 落雪音乐 v2.7+,并在落雪「设置 → 开放 API」中开启(默认 127.0.0.1:23330);未开启时歌词区与胶囊不会出现。
  3. 装完重启一次 DSH(宿主为 Node 进程,模块不热重载);之后仅改客户端时可刷新页面。

插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,确认符合你的安全策略。

典型用法

日常操作

  1. 确认落雪已开开放 API,DSH 已装插件并重启。
  2. 在 DSH 右侧壁纸带查看内嵌歌词;用胶囊切歌或播放 / 暂停。
  3. 需要专注输入时,点输入框右侧「歌词」收起文字,保留胶囊。
  4. 不想用内嵌时,到设置页关闭内嵌,恢复落雪桌面歌词窗。

诊断与手动测 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。

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

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

小夜