# dsh-wallpaper-engine

> 把本机 Wallpaper Engine 里的视频/网页壁纸和场景静态帧渲染到 DSH 网页界面的背景，支持液态玻璃效果、上传自定义壁纸和轮播列表。

## Metadata

- Author: [@elysia395](https://github.com/elysia395)
- Repo: <https://github.com/elysia395/dsh-wallpaper-engine.git>
- GitHub: [elysia395/dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine)
- Stars: 117
- Language: JavaScript
- Topics: `deepseek-harness`, `dsh-plugin`, `dsh-plugin-market`, `dsh-plugins`, `liquid-glass`, `theme`, `wallpaper-engine`
- Forks: 10
- Open Issues: 7
- Last push: 2026-08-20T17:24:59.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:elysia395/dsh-wallpaper-engine
```

## Wiki

## 一句话定位
把本机 Steam 上安装的 Wallpaper Engine 壁纸变成 DSH 网页对话界面（`dsh web`）的背景：自动扫描你的壁纸库，把视频和网页类壁纸直接渲染到界面后方，再叠上 iOS 风格的液态玻璃效果。

## 核心能力
- 自动扫描本机 Wallpaper Engine 安装目录和 Steam 创意工坊（通过读取 `libraryfolders.vdf` 定位非默认盘符的 Steam 库）
- 把可移植的 Video（`.mp4`）和 Web（HTML）类壁纸以原生方式渲染到 DSH 界面背景层，视频支持静音自动播放和拖动 seek
- 把 Scene（场景）类壁纸的主纹理从 `.pkg` 容器里提取出来，作为静态帧背景展示（支持 JPEG 直通、PNG 解码和 DXT 系列压缩纹理）
- 在 DSH 设置里新增一级「Wallpaper Engine」设置页，含液态玻璃外观（6 种配色预设 + 自定义取色）、玻璃透明度和颜色调节
- 支持自定义上传 JPG / PNG / MP4 当壁纸，可更换存储目录；支持视频倍速（0.5x–2x）、水平翻转、隐藏/恢复（软删除）
- 提供用户自建轮播列表（任意多个、每个独立间隔和顺序），第一次启动自动从 Wallpaper Engine 自己的播放列表导入一份

## 技术实现
- **语言**: JavaScript（Node ESM） + React 客户端模块
- **关键依赖**: `@deepseek-ai/cordis ^4.0.1`（host 端 Cordis 插件框架）、`@deepseek-ai/dsh-client-runtime >=0.1.0-rc.6`、`@deepseek-ai/dsh-client-ui-slots >=0.1.0-rc.6`、`@deepseek-ai/dsh-host-webserver >=0.1.0-rc.6`
- **架构模式**: 双端分离——host 端是 Cordis 插件（`lib/index.js`），在 DSH WebServer 上注册同源 HTTP 路由；client 端是浏览器模块（`lib/client.js`，由 `src/client.js` 经 `scripts/build-client.mjs` 编译），通过 `ctx.slots` 注入 settings 一级页。设置从浏览器 localStorage 迁移到宿主端文件 (`~/.dsh-wallpaper-engine/config.json`)，与端口无关
- **入口文件**: `lib/index.js`（host）、`lib/client.js`（client，构建产物，规范源是 `src/client.js`）

## 适用场景
想让 DSH 对话界面不再千篇一律的纯色背景、想用自己已经在 Steam 上攒下来的 Wallpaper Engine 壁纸库做装饰的人——尤其是喜欢液态玻璃风格、需要视频/网页壁纸动态背景、又不希望设置因为换端口或换浏览器而丢失的用户。本插件专为 Windows 设计（macOS 有社区单独维护的衍生包）。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | >= 0.1.0-rc.6 | 由 peerDependencies 推断（cordis ^4.0.1，dsh-client-runtime/ui-slots/host-webserver 均 rc.6 起） |
| Node | 未声明 | package.json 中无 engines 字段 |
| 平台 | Windows | host 通过读取 Steam `libraryfolders.vdf` 和 Windows 注册表定位 Wallpaper Engine，仅适用于 Windows；macOS 由社区衍生包 `dsh-plugin-wallpaper-engine-mac` 单独维护 |
| 原生模块 | 无 | 仅使用 `node:fs` `node:path` `node:os` `node:crypto` `node:child_process` 等内置模块 |

## 安装方式
```bash
dsh plugin --profile web add github:elysia395/dsh-wallpaper-engine
```

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 已选壁纸 | 选择器 | 从你的壁纸库（含 WE + 自上传）里挑一张当前激活 | 未选 |
| 壁纸模糊 | 滑块 0–60px | 给壁纸本身加模糊 | 0 |
| 暗化（遮罩） | 滑块 0–90% | 文字与壁纸之间的暗色遮罩深度 | 25% |
| 边框 | 滑块 0–90% | 边框和分割线对比度 | 35% |
| 玻璃 | 滑块 0–60px | 对话栏/气泡/侧边栏的玻璃模糊半径 | 24px |
| 视频倍速 | 选择 0.5x–2x | 视频壁纸原生 `playbackRate` | 1x |
| 水平翻转 | 开关 | CSS 镜像（视频/网页/上传图片） | 关 |
| 内容分级 | 下拉 | Wallpaper Engine 自带 G/PG13/R 分级过滤 | Everyone |
| 类型过滤 | 下拉 | 视频/网页/图片/全部 | 全部 |
| 卡片样式 | 开关 | 紧凑 CD 架式 vs 常规分页 | 常规分页 |
| 设置窗口液态玻璃 | 开关 | 把整个 DSH 原生设置窗口换成玻璃样式 | 开 |
| 配色 | 颜色（6 预设 + 取色器） | 按钮/开关/链接/导航选中/滑块的统一主题色 | `#4f8cff` 经典蓝 |
| 玻璃颜色 | 颜色（6 预设 + 取色器） | 设置窗口玻璃的底色色调 | 浅色白 / 深色深夜蓝 |
| 玻璃透明度 | 滑块 0–60% | 玻璃面板（设置窗口/输入栏/气泡/侧栏）浓淡 | 12% |
| 上传目录 | 路径输入 | 自定义壁纸文件的保存位置 | `~/.dsh-wallpaper-engine/uploads` |

## 常见问题

**Q: macOS 用户能用吗？**

A: 这个插件主要面向 Windows，因为 Wallpaper Engine 客户端本身就是 Steam 上的 Windows 应用，host 端直接读取 Windows 注册表和 `libraryfolders.vdf`。macOS 端由社区维护者 Jerry 单独发布为 `dsh-plugin-wallpaper-engine-mac` 这个 npm 包，走另一套机制。

**Q: 为什么选中场景类壁纸后只看到一张静态图，不动？**

A: Wallpaper Engine 的场景（Scene）壁纸由它自己内置的 3D 引擎驱动，浏览器无法重放 shader/粒子/几何动画。插件会从 `scene.pkg` 容器中按"艺术图可能性"评分挑出主纹理（JPEG 直通或 DXT 解码）作为静态背景——摄影/插画类场景效果接近原图，但纯 shader/BC7/视频纹理驱动的场景会自动回退到工坊预览图（`preview.jpg`），属于预期行为。

**Q: 我的设置在 DSH Desktop 重启后全没了？**

A: 自 v0.4.0 起所有设置（已选壁纸、配色、透明度、布局、轮播、隐藏、倍速、翻转等）都改存在宿主端文件 `~/.dsh-wallpaper-engine/config.json`，与端口、浏览器、浏览器数据无关，重启/换端口/清缓存/换浏览器都不会丢。旧版本存在浏览器 localStorage 的配置会在首次启动时自动迁移。

**Q: 上传的自定义壁纸会占满 C 盘吗？**

A: 默认会写入 `~/.dsh-wallpaper-engine/uploads`（Windows 下通常在 C 盘用户目录）。你可以在设置里的「上传目录」改成任意盘符的绝对路径，已有文件会自动迁移过去；如果不想迁移旧文件，也可以选择「不迁移」让旧文件留在原位置。

**Q: 文字在某些壁纸上看不清怎么办？**

A: 在「壁纸效果」里把「暗化」「边框」两个滑动条调高，必要时再加一点「壁纸模糊」。颜色鲜艳或花纹复杂的壁纸可能还需要在 DSH 的「浅色/深色」主题之间切换，找到当前壁纸最舒服的那一种。所有滑动条都即时生效，无需刷新页面。

**Q: 怎么完全卸载？**

A: 先在插件设置里清空已上传的自定义壁纸，再删除 `~/.dsh-wallpaper-engine` 整个目录（包括 `config.json`、`uploads`、`cache` 三个子目录），最后用 `dsh plugin --profile web remove` 卸载插件。删除该目录不会影响你 Steam 上的 Wallpaper Engine 安装本身。

## 上手难度
入门 — 安装一次后所有调节都在「设置 → Wallpaper Engine」可视化页面里完成，没有需要手敲的配置项，普通用户按照设置页提示操作即可。

## 已知问题与限制
- Scene（原生 3D）和 Application（外部窗口）类壁纸无法内嵌网页：Scene 仅以提取的静态帧显示，Application 完全不出现在选择器和轮播候选里
- Scene 主纹理不支持 BC7、RGB565、16 位浮点等格式，解码失败时自动回退到 `preview.jpg`，纯 shader/纯粒子场景通常没有可提取的主纹理，效果接近灰白遮罩
- 浏览器需要允许静音 `<video>` 自动播放：DSH 跑在 loopback 上现代浏览器默认放行，但如果你的浏览器开启了严格策略需要手动调整
- host 端只暴露它枚举过的 Wallpaper Engine 文件，不提供任意文件系统访问；自定义上传的文件只存在于本机，不上送任何远程服务器
- 选择器文案为中英混合（本 bundle 尚未接入 DSH 的 locale 命名空间）

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-wallpaper-engine](https://deepseek-plugin.org/plugins/elysia395/dsh-wallpaper-engine)
Wiki generated by AI (model: `MiniMax-M3`)
