它是什么
DSH Wallpaper Engine 把你本机的 Wallpaper Engine 壁纸库放到 DSH 网页界面背后。它自动发现 Steam 安装位置、列出你的壁纸,并把可移植的类型渲染成对话背后的一层固定背景:Video 壁纸通过 <video> 播放,Web 壁纸以 iframe 加载,Scene 壁纸由插件内置的纯 JS 场景渲染器回放。围绕这一层,它包了一个 iOS 液态玻璃风格的设置窗口(主题色、玻璃颜色、透明度)、自定义上传、内容分级与类型过滤、隐藏/恢复、倍速与翻转控制,以及自动轮播。
有两处澄清是为了让描述保持诚实。Application 类型壁纸无法嵌入网页,因此被有意排除在选择器之外。另外,包的 description 至今仍写着 Scene 壁纸「提取主纹理作为静态帧」——这句话已经过时:自 v0.6 起 README 描述的是一套完整的场景渲染器(对象树、纹理、骨骼网格、粒子、CPU 实现的着色器效果),输出完整 3840×2160 帧,主纹理提取与创意工坊预览图只是逐级降级后的兜底。
它是怎么工作的
- Host 侧 —— 一个 Cordis 插件通过读取 Steam 的
libraryfolders.vdf定位 Wallpaper Engine(非默认盘符安装可用,WSL 的/mnt/<drive>挂载也能识别),枚举projects/defaultprojects、projects/myprojects与steamapps/workshop/content/431960/*,然后在 DSH webserver 上注册同源 HTTP 路由:清单、媒体(支持 Range)、预览、场景帧、上传、设置、媒体信息与转码流。 - Client 侧 —— 一个浏览器模块拉取列表,把选中的壁纸画在三栏应用背后,并注册一个一级的 Wallpaper Engine 设置页,内含液态玻璃卡片、选择器对话框、吉祥物拉绳抽屉与调节标签页。清单里设置了
dsh.client.immediately,客户端随启动加载。 - 上传与状态 —— 自定义 JPG/PNG/MP4 上传存放在插件管理的目录里(默认
~/.dsh-wallpaper-engine/uploads,可迁移,按内容去重)。一处提醒:v0.4.0 一节说所有设置已迁移到 host 侧的~/.dsh-wallpaper-engine/config.json并自动迁移 localStorage,但若干功能章节仍把选中项、隐藏状态与播放列表描述为 localStorage 存储。README 在这一点上自相矛盾——请把确切的存储划分视为不确定。
插件不向模型暴露任何工具或提示词,README 声明零 token 开销。
运行要求——以及必须遵守的更新顺序
README 用加粗把它标为必读:「两个前置条件都满足之前,请勿更新本插件。」 自 v0.7.2 起:
- 先把 DeepSeek Harness 更新到
0.1.5-rc.1(对应 DSH Desktop ≥ 2.0.7) —— 通过桌面端的版本信息或 releases 页面确认。 - 再把
dsh-better-sidebar更新到 ≥ 0.19.0 ——dsh plugin --profile web add dsh-better-sidebar@latest。右侧栏的玻璃适配是针对它写的;仍停留在 0.1.2-rc.1 旧内核的用户应保持 better-sidebar 0.18.x,不要混搭。 - 最后才是本插件。 顺序反了的话,把内核与 better-sidebar 各自更新到匹配版本即可恢复,本插件无需回滚。README 还建议把其它插件一并更新,因为旧版插件在 harness 0.1.5 下可能直接加载失败。
注意这里的机制:dsh-better-sidebar 并不在包的 peerDependencies 里——这条要求是 README 的说明,不是安装器会强制的东西。
以下要求与披露同样来自 README 或清单:
- 存在
prepare生命周期脚本:prepare: node scripts/prepare.mjs,在 git 检出时构建客户端。这正是github:安装在 pnpm 11 下会失败的原因——pnpm 11 默认阻止来自 git 托管包的构建脚本(ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED)。请从 npm 安装——已发布的包是预构建的。 - 运行时自动下载 ffmpeg。 视频缩略图与帧率上限转码需要 ffmpeg,解析分三级:显式的
DSH_WE_FFMPEG路径(或插件目录内的ffmpeg/文件夹)、在 npmmirror 与 GitHub 之间竞速的自动下载(流式写入、魔数与体积校验、单源超时、缓存于~/.dsh-wallpaper-engine/ffmpeg/,下载源可用DSH_WE_FFMPEG_URL覆盖)、最后是系统 PATH。这意味着插件会在运行时下载可执行文件——README 已披露,首次使用前值得知情。 - 它会读取你的 Steam 库文件(上述 VDF 与壁纸目录),并且只在自家路由上提供枚举到的文件;README 声明它不暴露任意文件系统,上传文件留在本机。
- Peer 依赖: Cordis
^4.0.1、dsh 客户端 runtime/slots 与宿主 webserver>=0.1.0-rc.6、React^18.2.0。运行时依赖包括一个 GLSL 解析器、jpeg-js,以及为场景渲染器准备的 headless GL 包。未声明engines字段。 - 遥测: 未见文档。请按「未说明」理解,而不是按「安全」理解。
已知限制
- Application 类型壁纸不可用 —— 外部窗口无法被嵌入;它们会被选择器与轮播候选过滤掉。
- Scene 壁纸是静态帧(内嵌视频纹理的场景会播放该视频);纯着色器或纹理不常见的场景会降级到主纹理提取,再降级到创意工坊预览图。
- 帧率上限转码需要 ffmpeg 与 NVIDIA NVENC(
av1_nvenc,回退h264_nvenc);两者都没有时该功能会静默保留原始视频。不在自动下载表内的平台(README 点名 musl/Alpine)完全不会触发下载。 - 遮挡暂停只对视频生效 —— Web(iframe)壁纸无法从外部暂停,只能在浏览器隐藏时被限流。
- 浏览器必须允许静音自动播放(现代浏览器上回环地址没问题)。Edge 上视频壁纸改用 canvas 渲染而非
<video>,以绕开一个无法关闭的内置工具栏浮层。 - DSH Desktop 的沉浸式全屏/信息亭窗口在重绘时偶发整屏白闪;v0.6.4 通过减少合成层缓解——README 把它描述为优化,而不是保证。
- 选择器 UI 文本中英混排;该 bundle 未接入 DSH 的 locale 命名空间。
什么时候用它、什么时候不要用
如果你在装有 Wallpaper Engine 的机器上跑 dsh web 或 DSH Desktop,并希望界面像自己的——对话背后放视频或场景壁纸、面板通体玻璃、播放列表自动轮换——那它值得装。设置深度确实可观,host 侧配置文件也让它在重启、随机端口与清空浏览器数据之后依然存在。
不要在 headless 或 TUI 环境装它——没有东西可画。也不要在按上述顺序更新 harness 与 dsh-better-sidebar 之前装它,更不要在 pnpm 11 下用 github: 安装并指望 prepare 构建能跑起来。如果无法接受运行时下载 ffmpeg 二进制,请预先配置 DSH_WE_FFMPEG,或放弃帧率上限与视频缩略图功能。macOS 上没有 Wallpaper Engine 客户端——改用社区维护的 dsh-plugin-wallpaper-engine-mac。如果背景太花影响阅读,README 自己的建议是依靠压暗、描边、模糊与透明度滑块——没有一套预设适合所有壁纸。
安装
dsh plugin --profile web add dsh-plugin-wallpaper-engine
重启 dsh web,然后打开 设置 → Wallpaper Engine。macOS 用户改装单独的社区包:dsh plugin --profile web add dsh-plugin-wallpaper-engine-mac(由 Jerry 维护,仓库 ruijiaang-lab/dsh-wallpaper-engine)。避免用 github: 安装——npm 包已预构建,可以绕开 pnpm 11 的构建脚本限制。

