dsh-plugin-wallpaper:为 DSH Web GUI 铺整窗壁纸,并导入本机 Wallpaper Engine 库

前言

DeepSeek Harness(DSH)的 Web GUI 默认是纯色或主题背景。长时间在对话、设置、插件面板之间切换时,界面功能完整,但缺少一层可自定义的视觉底色。社区里「趣味换装」类插件的作用,就是在不改动核心业务逻辑的前提下,给壳层加一层可开关、可逆的装饰。

下面介绍维护者 woshishujiedegou 的 dsh-plugin-wallpaper:给 DSH Web GUI 铺一层整窗壁纸,让面板像「开向壁纸的窗」,卡片与菜单保持实心。壁纸可以来自浏览器实时绘制的动态场景、内置渐变、本地图片,也可以从本机 Wallpaper Engine(WE)库导入——并通过探测流水线判断每条工程实际是视频、网页、GIF 还是静态图,而不是只信 project.json 里的 type。

这是什么

dsh-plugin-wallpaper 是 DSH 的 GUI 壁纸插件,分类为「趣味换装」。它只读你本机的 Steam / WE 目录,不联网、不上传、不复制素材;仓库里不含任何壁纸文件。

插件在 Client(浏览器)与 Host(DSH 进程)之间通过本机 HTTP 路由通信:浏览器侧只拿到 16 位不透明 id,真实路径只在 Host 扫描白名单内反查。

核心功能

动态与内置壁纸(无需外部素材)

  • 动态壁纸(默认):极光、星尘、深潮三套场景由一个 <canvas> 实时绘制(rAF、约 30fps、0.75× 缓冲;页面隐藏时停画;prefers-reduced-motion 只画一帧)。
  • 内置壁纸:8 套渐变,亮/暗各一张,跟随 body[data-ds-dark-theme] 自动切换素材。

自定义图片

在设置页选图或拖图,本地压缩后存入浏览器 localStorage(偏好键 dsh-plugin-wallpaper:v8)。

Wallpaper Engine 导入

Host 半边会:

  • 自动发现 Steam 库(读 steamapps/libraryfolders.vdf 与各盘常见路径),扫描 wallpaper_engine/projects/** 与 workshop/content/431960/*;
  • 独立视频用 <video> 播原文件(支持 Range → 206 流式);
  • 视频嵌在 scene.pkg 里的场景壁纸,从 pkg 内部按 Range 取字节播放(不落地、不解包);
  • 网页工程用 <iframe> 跑真实工程目录;
  • 带 GIF 的壁纸直接铺 GIF;
  • 其余按静态壁纸,优先用工程自带大图。

识别流水线(v2):每个工程按优先级探测得出 motion,并把 reason、视频 codec 写入接口与设置页卡片 tooltip(例如 标题 · 动态 · h264 · video-packed)。浏览器解不了的编码(如 HEVC)会标注 codec-unplayable 并降级,避免黑屏。

显示与安全层叠

所有绘制层放在同一容器 #dshw-wallpaper(z-index:-1,isolation:isolate,contain:layout paint),子层 pointer-events:none,从结构上避免壁纸翻到 UI 之上。关掉总开关时,样式表与 <video> / <iframe> / <canvas> 一并移除,主题原样恢复。

可调参数

可读性遮罩(15%–80%)、模糊(0–30px)、填充方式(铺满 / 完整 / 拉伸)、亮度(50%–130%)、缓慢漂移;WE 列表支持「只看动态」过滤。

安装与启用

在 DSH 里用插件管理器安装本仓库(需替换为仓库在本机的绝对路径):

plugin_manager { action: "install_bundle", target: "<本仓库绝对路径>" }

或手动:

  1. 在 profile 的 package.json dependencies 中加入:"dsh-plugin-wallpaper": "file:<绝对路径>";
  2. 在 dsh.profile.bundles 数组中加入 "dsh-plugin-wallpaper";
  3. 让 profile 的 node_modules/dsh-plugin-wallpaper 指向本仓库(junction / symlink 均可)。

装好后刷新页面即生效。

Host 半边只在 DSH 启动时 import。装好或改过 Host 代码后需重启一次 DeepSeek Harness;未重启时设置页可能提示「壁纸服务还没加载」,内置壁纸与 canvas 动态场景仍可用。

当前 package 版本为 2.1.0,许可证 MIT。

典型用法

侧边栏 → 设置 → 背景壁纸:

控件 说明
启用背景壁纸 总开关
动态壁纸 极光 / 星尘 / 深潮
内置壁纸 8 套渐变
自定义图片 选图或拖图
Wallpaper Engine 本机库缩略图墙,右上「重新扫描」
只看动态 默认关闭;打开后只留视频、网页工程与 GIF
可读性遮罩 / 模糊 / 填充 / 亮度 / 缓慢漂移 见上文
恢复默认 清空自定义与导入,回到动态壁纸

WE 相关 Host 路由(节选):

路由 作用
GET /wallpaper-engine/library 扫描结果 JSON;?refresh=1 跳过 30s 缓存
GET /wallpaper-engine/media?id=<id>&role=media 视频,支持 Range
GET /wallpaper-engine/web/<id>/<path> 网页工程文件

仓库还提供离线开发工具(无需 DSH 即可验证扫描与 Host):

node tools/scan-library.mjs "<projects 路径>" "<workshop/431960 路径>"
node tools/host-check.mjs lib/host.js
node tools/render-client.mjs lib/client.js dark video

适用场景与注意

适合:已在 DSH Web GUI 上日常开发或对话,希望整窗背景可换、且本机已安装 Wallpaper Engine 并希望复用库内壁纸的用户。

权限与安全:插件以当前 DSH 进程权限运行,安装前应阅读源码与 MIT 许可证,确认可接受其读 Steam 目录、在本地提供 HTTP 媒体路由的行为。

已知限制(来自 README):

  • scene.pkg 无浏览器端完整渲染器:插件主要取出 pkg 内视频;纯粒子 / 着色器场景只能 GIF 或静态帧。
  • 部分网页壁纸依赖 WE 专属 API,在 iframe 内可能退化。
  • 首次加载大视频或 pkg 扫描可能有数秒延迟;大结构面透明后,少数直接用 bg-base 的弹层也会变透明。

结尾

dsh-plugin-wallpaper 把 DSH Web GUI 的背景做成可开关、可探测、可逆的一层:内置 canvas 与渐变、本地图、以及本机 WE 库的真实视频 / 网页 / GIF / 静态资源,都在同一设置页里完成。

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

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

Xiaoye