dsh-pulse-rail:把 DSH 轮次导航条变成系统音频律动条

前言

DeepSeek Harness(DSH)右侧的 turn-navigation rail(轮次导航条)默认是一排细竖线,用来预览和跳转会话轮次。长时间开着 Agent 时,这条导航条功能完整,但视觉上几乎静止。若希望在不改交互的前提下,让导航条随当前播放的系统声音有节奏地伸缩,就需要在浏览器侧注入样式、在主机侧拿到混音电平——且最好不装驱动、不提权。

下面介绍社区插件 dsh-pulse-rail(维护者 rinsoraa,分类:趣味换装):它只改导航条柱子的几何尺寸(长度跟频段、粗细跟节拍),不发光、不改色;静音时柱子会回到与原版一致的像素级外观。插件以 MIT 许可证发布,当前 npm 版本为 0.4.1。

这是什么

dsh-pulse-rail 把 DSH 的轮次导航条做成音乐可视化条:每一根细柱随「此刻正在播放的系统音频」变长、变粗。实现上走 纯几何(transform: scale(),合成层缩放,右缘不抖动),不叠加光晕、阴影或配色。

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与许可证。插件在 当前 DSH 进程权限 下运行。

核心功能

律动模式(Silk Wave)

0.4.0 起导航条默认使用 Silk Wave:通过 WASAPI 共享模式环回(loopback)采集系统混音,做 12 频段分析;每根柱的瞬时长度来自对应频段,经满量程归一化与邻域柔化,相邻柱过渡更连续。README 注明:滚动后部分柱子失去律动的 bug 仍未解决,详见仓库内 docs/KNOWN-ISSUES.md。

平台与依赖

项 要求
DSH desktop / web profile(platform: web 的 client 半)
操作系统 Windows 10/11 x64(WASAPI loopback)
运行时 无需额外安装;构建辅助程序时使用系统自带的 .NET Framework 4.x csc
音频 任意默认渲染设备(耳机、USB DAC、HDMI 等)

采集由自带小工具 lib/pulse-tap.exe(自 lib/pulse-tap.cs 编译)完成:无需管理员权限、无第三方驱动、无额外运行时。

交互与外观边界

  • 悬停预览、点击跳转、滚轮滚动等行为与原生一致。
  • 仅柱子几何变化;静音后移除所有覆盖,导航条恢复应用原生渲染。
  • 界面左下角用户行上方有 ♪ 按钮,打开滑块面板;每次修改会立即写回 config.json,无需重启 DSH。

隐私

辅助程序仅在内存中读取系统混音,每帧向 stdout 输出频段电平(12 个浮点)及 RMS/peak;不录音、不落盘。仅在页面请求数据时运行;无请求约 20 s 后自行退出,也可在任务管理器中查看 pulse-tap.exe,或在配置里设 "enabled": false。

安装与启用

任选一种方式;通过插件管理器安装时,须在 无 Agent 运行 的空闲会话中操作(管理器会在 Agent 运行时拒绝安装)。启用后需 重启 DSH(host 半在启动时组装)。

方式 A:插件管理器(推荐)

  1. 打开 Settings → Plugins → Add plugin,填入本仓库 URL(或本地克隆路径)。
  2. 启用插件并重启 DSH。

方式 B:npm

包名 dsh-pulse-rail,已发布至 npm:

dsh plugin add dsh-pulse-rail

等价于:

npm i dsh-pulse-rail

方式 C:手动拷贝

将插件目录复制到 %USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-pulse-rail,并在 %USERPROFILE%\.dsh\profiles\desktop\package.json 的 dsh.profile.bundles 中加入 "dsh-pulse-rail",同时建议写入 dependencies 以免 pnpm install 时被裁剪,然后重启 DSH。具体 JSON 示例见仓库 README。

典型用法与调参

配置文件路径:

%USERPROFILE%\.dsh\pulse-rail\config.json

可在 ♪ 面板中调整,也可手改后执行:

%USERPROFILE%\.dsh\pulse-rail\tune-config.cmd

主要字段示例(含义以 README 为准):

{
  "enabled": true,
  "minW": 0.18,
  "maxW": 2.6,
  "minH": 2,
  "maxH": 7,
  "gamma": 0.6,
  "gate": 0.02,
  "agcMix": 0.6,
  "atkMs": 35,
  "relMs": 120,
  "silentMs": 450,
  "freqLayout": "center",
  "fps": 30,
  "tapIdleMs": 20000
}
目标 建议
律动更明显 提高 maxW 至 3–4,agcMix 至 0.8–1.0
更克制 agcMix 降至约 0.3,gate 升至 0.05–0.1
粗细起伏更大 maxH 至 8(README 建议不超过 8,刻度间距 10px)
反应更快 atkMs 降至 15–25

在不改文件的情况下,可将当前 config.json POST 到本机 DSH Web 端口(端口取自环境变量 DSH_WEB_URL,README 示例为 19387):

Invoke-WebRequest -UseBasicParsing -Method POST -ContentType 'application/json' `
  -Body (Get-Content -Raw $env:USERPROFILE\.dsh\pulse-rail\config.json) `
  http://127.0.0.1:19387/pulse-rail/config

工作原理(简述)

默认渲染设备
   │  WASAPI shared-mode loopback(48 kHz,多声道,float32)
   ▼
lib/pulse-tap.exe ── 1024 点 FFT ──► 12 个对数间隔频段(45 Hz – 15 kHz)
   │  stdout 每帧一行 JSON,默认 30 fps
   ▼
host 半(lib/index.js)── GET /pulse-rail/state ──► browser 半(lib/client.js)

browser 半按几何定位导航条,把 12 个频段映射到当前屏幕上实际渲染的刻度数量,用 CSS 自定义属性驱动每根 ::before 的缩放。host 半懒启动采集进程,提供 /pulse-rail/config、/pulse-rail/health、/pulse-rail/diag 等同源路由。

适用场景与注意

适合:在 Windows 上使用 DSH desktop/web 配置、希望导航条随系统播放内容(音乐、会议、游戏等)有轻微律动反馈,且接受仅几何变化、不改主题的「趣味换装」类增强。

注意:

  • 仅 Windows;Linux / macOS 无 WASAPI loopback,不在支持范围内。
  • 0.4.0 存在长会话下对话区被挤窄、界面左移的回归;README 建议 升级到 0.4.1,重载窗口可临时恢复。
  • 柱子无反应时:先播放音频,检查 GET /pulse-rail/state 中 playing;若 running 为 false,查看 lastError。可尝试 POST /pulse-rail/restart 或手动运行 lib\pulse-tap.exe --fps 30 观察 JSON 流。
  • 插件会扩宽导航条滚动容器的可见区域(右缘与点击区域不变),属于刻意设计,以便长柱可见。

结尾

dsh-pulse-rail 在不动导航条原生交互的前提下,用 WASAPI 环回和 12 频段映射,把轮次导航条做成轻量系统音频可视化。安装以 dsh plugin add dsh-pulse-rail 或插件管理器添加仓库为准;调参集中在 %USERPROFILE%\.dsh\pulse-rail\config.json 与左下角 ♪ 面板。

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

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

Xiaoye