Introduction

If you are using DSH (DeepSeek Harness) and have Wallpaper Engine installed on your desktop, you have likely encountered this situation: you have hoarded hundreds of wallpapers in the Workshop, but the background of the DSH Web interface is still the default one, and the two are disconnected. Manually exporting images and modifying configurations is tedious, and dynamic wallpapers (videos, 3D scenes) cannot be used directly.

dsh-wallpaper-engine solves this problem: it reads the local Wallpaper Engine asset library, provides a wallpaper selection panel in the DSH interface, applies it to the DSH background with one click, and can switch DSH’s dark/light theme based on wallpaper brightness.

What is it

dsh-wallpaper-engine (npm package name @marlonlau/dsh-wallpaper-engine, current version 0.1.2) is a background switching plugin for the DSH Web GUI developed by marlonLau, licensed under MIT, with source code hosted at: https://github.com/marlonlau/dsh-wallpaper-engine.

Its positioning can be summarized in one sentence: use local Wallpaper Engine image/video assets as the source to switch DSH interface backgrounds with one click. Note that it currently only supports images and videos; 3D scenes and web wallpapers can only use their preview.jpg for static display.

Core Features

Wallpaper Selection Panel: Open the panel via the bottom button in the DSH sidebar, displaying the wallpaper library as a thumbnail grid, with search support.

Two Source Types, automatically selected via GET /we/list?source=auto:

  1. Wallpaper Engine Web API (default http://localhost:26384/api/wallpaper/list): Only takes effect when WE is running and its local Web service is available;
  2. Directory Scan (fallback): Automatically falls back when the API is disabled or unavailable. It reads the registry and libraryfolders.vdf to automatically discover all Steam libraries, scanning steamapps/workshop/content/431960/* (Workshop) and steamapps/common/wallpaper_engine/projects/myprojects/* (Local Projects), parsing the project.json within.

One-click Apply: Images are applied as CSS backgrounds; videos as silent looping <video>; 3D scenes / web wallpapers use their preview.jpg for static display. After applying, the App framework and sidebar become semi-transparent with a frosted glass effect (backdrop-filter), revealing the wallpaper from underneath.

Theme Following: When checked, automatically calls theme.setTheme to switch DSH’s dark / light theme based on wallpaper brightness.

Persistence: Current wallpaper and settings are saved to localStorage, so they are not lost on refresh; additional directory configurations are saved to $DSH_HOME/storages/dsh-wallpaper-engine.json.

Random and Restore: Supports one-click random wallpaper switching or restoring the DSH default background.

Installation and Enablement

Recommended installation from npm:

dsh plugin --profile web add @marlonlau/dsh-wallpaper-engine

This command writes dependencies and automatically appends the package to dsh.profile.bundles, then restart dsh web to take effect. Subsequently, refreshing the page is sufficient for changes to client-side code only.

If developing and debugging, install from GitHub repository (requires Node.js >= 18 and git):

# 1. Clone repository
git clone https://github.com/marlonlau/dsh-wallpaper-engine.git
cd dsh-wallpaper-engine

# 2. Link plugin package into web profile (single package, zero dependencies, no build steps)
dsh plugin --profile web add "link:$PWD"

# 3. Restart dsh web
dsh web

Equivalent manual method: Add dependency "@marlonlau/dsh-wallpaper-engine": "link:<absolute path to repo>" in the profile’s package.json, append it to dsh.profile.bundles, and run pnpm install.

Typical Usage

After installation, there are three main interactions: select wallpaper, view diagnostics, and modify configuration, all exposed via the host router:

Route Description
GET /we/list Wallpaper list, source=auto\|api\|scan, refresh=1 forces re-scan
GET /we/status API availability / Root directory / Count diagnostics
GET /we/file?p=… Media files (Images / Videos, supports HTTP Range)
GET /we/preview?p=… Preview thumbnails
GET/POST /we/config Configure additional directories, API address, API toggle

Daily operations are done on the interface: open the panel via the bottom button in the sidebar, search or paginate to select a wallpaper, and click Apply. If the wallpaper list is incorrect, use GET /we/status to see if the API or directory scan is currently active, where the root directory is, and how many wallpapers were scanned, then use POST /we/config to add additional directories or adjust the API address and toggle.

Developer Perspective

The plugin is divided into two halves:

  • Host half lib/index.js (Node-side, inject: ['webServer']), responsible for routing, directory scanning, and file serving;
  • Client half lib/client.js (Browser-side, inject: ['theme', 'workspaces'], custom CJS bundle loaded via window.__ModuleLoader__.load(...)), responsible for panel and background rendering.

Change rules are straightforward: changes to lib/client.js take effect on page refresh; changes to lib/index.js require restarting dsh web. The entire package has zero dependencies and no build steps, making it easy to read or modify the source code.

Use Cases and Notes

The target audience is clear: users on Windows who use DSH Web GUI and Wallpaper Engine simultaneously and want the interface background to come alive (or at least switch away from the default background). If your Workshop wallpapers are mostly 3D scenes or web types, be aware that these can currently only be displayed statically as preview.jpg; dynamic effects will not be brought into DSH.

A few security and boundary notes:

  1. All host routes have loopback / local network trust boundaries; file routes only allow media file extensions within the wallpaper project directory and do not read files out of bounds.
  2. The Wallpaper Engine Web API only takes effect when WE is running and the local Web service is available; otherwise, it automatically falls back to directory scanning, requiring no manual switching.
  3. Like all DSH plugins, the plugin runs with the permissions of the current dsh process. Before installing, it is recommended to review the source code and license (this project is MIT) to ensure there are no issues.

Conclusion

dsh-wallpaper-engine does not do complex things, but the chosen path is pragmatic: prioritize reusing Wallpaper Engine’s built-in local Web service, and fall back to directory scanning if unavailable. Asset types are handled with a three-level fallback: images, videos, then 3D / web. For users who want to use their own wallpaper library on the DSH interface, this is a ready-made path.

  • Directory page: https://www.skillhub.cn/plugins/marlonLau/dsh-wallpaper-engine
  • Source code: https://github.com/marlonlau/dsh-wallpaper-engine