DSH 鲸鱼壁纸插件:给界面背后铺一片会游动的海

前言

DSH(DeepSeek Harness)的 Web 界面背后本来是一块不透明背景。这个插件在 z-index:-1 挂一张 position:fixed 的全屏 canvas,再把界面自己的背景 token 调成半透明玻璃——于是海、光点、水母、鲸鱼就从界面底下透出来了。

插件定位

  • 名称:dsh-whale-pond
  • 维护者:wenwubei5
  • 分类:趣味换装
  • 仓库:https://github.com/wenwubei5/dsh-whale-pond
  • 插件目录:https://www.skillhub.cn/plugins/wenwubei5/dsh-whale-pond

这是一个纯视觉背景插件:不拦鼠标、不抢键盘、不碰任何业务代码。

核心功能

海与光点

  • 默认 400 颗光点在海里飘(可拉到 2100),鲸鱼游过去会把它们吃掉,头上飘一行 -1 token。
  • 鼠标是一盏提灯,带着洋流把光点往鲸鱼嘴边赶。
  • 右下角有个发射区:鼠标进圈,圈里的光点和鲸鱼一起被甩出去(最远约 4 倍圈直径)。

控制台

界面右上角的小齿轮 ⚙(悬停变亮)点开就是控制台,拖动即时生效、不用刷新。设置存在 localStorage['whale-pond-settings-v1'](词库单独一个键),面板底部「恢复默认(词库保留)」一键回默认。

控制台包含 20 个控件,分为 10 个分组:

分组 控件 默认
开关 启用壁纸 ☑(和右上角 ■ / ▶ 等价) 开
看海 全屏屏保 · 小窗摸鱼 · 回到壁纸(三个按钮,当前生效那个亮橙) 壁纸模式
界面 面板不透明度 · 画布亮度 0.34 · 1.6
海 光点数量 · 光点速度 400 · 1.0
鼠标(提灯) 洋流吸引光点 ☑ · 吸引半径 · 吸引强度 · 显示吸引范围光环 ☑ 340px · 1.0
吃光点 飘字「-1 token」☑ · 飘字「吃掉「词」」☑ 都开
词库 一行一个词,最多 200 个 / 每个 24 字,改一下存一下 内建 10 个词
右下角发射台 启用发射台 ☑ · 圈半径 · 距右下角 · 弹射力度 170px · 132px · 4.0
光点运动 运动方式 · 运动强度 · 呼吸灯 ☐ · 呼吸快慢 漂移 · 1.0 · 关 · 1.0
性能 内部清晰度 · 运行状态(只读) 1.0

看海模式

控制台最上面「看海」组里三个按钮:

  • 全屏屏保 —— 整片海铺满窗口,把界面文字全盖住,鲸鱼和光点在整屏里游。底部会浮出一条「点击画面或按 Esc 退出」的胶囊提示,5 秒后自己淡出。副屏上放着纯看很合适。
  • 小窗摸鱼 —— 一个约 280×180 的圆角小海窗浮在右下角,界面照常能点能用;拖窗内任意处移动,拖右下角手柄缩放(280×180 ~ 560×347)。窗口一直被夹在视口里,不会拖丢。
  • 回到壁纸 —— 回到正常的「铺满整个界面背后」模式。

三种模式互斥,当前生效的按钮亮橙色。这个模式本身不记忆:刷新页面就回到壁纸模式(「启用壁纸」那个停用开关倒是会记住)。

运动与性能

  • 五种运动方式(漂移 / 飘落 / 上浮 / 洋流 / 漩涡)+ 呼吸灯,和鼠标吸引、发射台叠加生效。
  • 深浅色主题自动跟随;prefers-reduced-motion 时跑 120 帧后定格;页面隐藏时暂停。

停用与恢复

要认真工作、不想再看海的时候,点右上角齿轮左边那个 ■ 就停(停用后按钮变成 ▶、亮橙色,再点一下回来);也可以打开控制台,最上面「开关」组里取消「启用壁纸」。两条路等价,状态存在 localStorage,刷新页面依然是停的。

它是真停,不是把画布藏起来:

  • cancelAnimationFrame 停掉动画,canvas display:none;
  • 120ms 吃光点、12s 造带词光点两个定时器和补货入口都提前返回;
  • 宿主那层玻璃整份撤掉(tokens.reset():body 的 background:transparent !important 与 8 个 --dsw-alias-bg-* 覆盖全部移除),界面回到原本不透明的深色;
  • 齿轮与面板留着当入口(齿轮降到 0.3 透明度),控制台「运行状态」会写「已停用 · 动画停、玻璃已撤」。

恢复时按 tokens.apply() → run() → 补齐光点数 的顺序来,不会出现「海回来了但界面还是实心」的中间态。

安装与启用

前提:页面必须是 DSH 自己的 Web 界面 —— 桌面端窗口,或者用 dsh web 起在浏览器里打开,两者都行。

插件走的是 DSH 的客户端插件机制(window.__ModuleLoader__),所以不能当普通 <script> 塞进别的网页;但它不是 Electron 专属,Chromium 内核的浏览器里实测正常。

方式 A:一条命令从 GitHub 直装(推荐)

# 1) 先确认活动 profile —— 这个文件里 "active" 那一项就是(常见 desktop / web)
cat "$APPDATA/DSH Desktop/profile-selection"

# 2) 用桌面端自带的 CLI,把 GitHub 上的包直接装进 profile(dsh 一般不在 PATH 里)
DSH="/c/Program Files/DSH Desktop"        # 换成你自己的安装目录
ELECTRON_RUN_AS_NODE=1 DSH_HOME="$HOME/.dsh" "$DSH/DSH Desktop.exe" \
  --expose-internals "$DSH/resources/app/lib/desktop-cli.js" \
  plugin --profile desktop add "github:wenwubei5/dsh-whale-pond"

plugin add 后面的参数是原样转给 pnpm 的,所以三种写法都行:

写法 例子 说明
GitHub 简写 github:wenwubei5/dsh-whale-pond 装当前 main 的最新提交
git URL git+https://github.com/wenwubei5/dsh-whale-pond.git 同上,可加 #v1.0.0 钉版本
本地目录 "D:/code/dsh-whale-pond" 装成 link:,改源码刷新即生效

方式 B:先 clone 再装(想改源码用这个)

git clone https://github.com/wenwubei5/dsh-whale-pond.git "D:/code/dsh-whale-pond"
# 然后照上面第 2 步,最后一段换成:
#   plugin --profile desktop add "D:/code/dsh-whale-pond"

改完 src/whale_pond.html 或 src/whale_panel.js 后跑 python build/build.py 重新生成 lib/client.js(只要 Python 3 + 标准库,没有第三方依赖)。

新增插件包必须重启一次 DSH(客户端入口要重新扫描)。之后再改代码就只要刷新页面(Ctrl+R)。

方式 C:下载 zip(离线 / 机器上没有 git)

到 Releases 下载 dsh-whale-pond-1.2.0.zip(约 50 KB,里面是 package.json + lib/ + cordis.patch.yml + README.md + LICENSE),解压出 dsh-whale-pond/,再把上面的命令最后一段换成那个目录:

... plugin --profile desktop add "D:/下载/dsh-whale-pond"

zip 里的 lib/client.js 就是生成好的产物(59,680 B),解压即可用,不需要构建。

卸载:把上面的 add 换成 remove。

在浏览器里用(不打开桌面端窗口)

插件跑在 DSH 的 Web 界面里,所以只要页面是 DSH 提供的,用浏览器打开效果完全一样。桌面端自带的 CLI 就能起一个纯 Web 实例:

DSH="/c/Program Files/DSH Desktop"          # 换成你自己的安装目录
ELECTRON_RUN_AS_NODE=1 DSH_HOME="$HOME/.dsh" "$DSH/DSH Desktop.exe" \
  --expose-internals "$DSH/resources/app/lib/desktop-cli.js" \
  --profile web --port 4407 --no-open

它会打印一行 http://127.0.0.1:4407/?token=…,复制到 Chrome / Edge 里打开就有鲸鱼、光点和控制台。

插件要装进提供这个页面的那个 profile —— 上面安装命令里的 --profile desktop 换成 --profile web 即可。

两点要知道:

  • 桌面端窗口自己那个端口(默认 43120)是给 Electron 渲染进程用的:浏览器直接开会被 DSH 的鉴权挡住(401),插件路由还带 x-dsh-desktop-renderer 头校验。这是宿主自己的限制,跟插件无关。
  • 实测用的是 Chromium 内核(Chrome / Edge);Firefox / Safari 没测,理论上没问题(只用到 canvas 2D、CSS 变量和 localStorage)。

适用场景与注意

适合对界面视觉有要求、想在工作时放一点轻松场景的开发者。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

短结尾

鲸鱼游在界面背后,光点随洋流聚拢又散开,控制台 20 项参数实时可调。目录页与 GitHub 仓库见上方链接。

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

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

小夜