dsh-wallpaper
简体中文 · English
A wallpaper plugin for DeepSeek Harness — put a photo behind the whole GUI.

DeepSeek Harness ships three appearance modes (light / dark / follow system), and its theme tokens only carry colours — there is no wallpaper feature and no custom-CSS box. This plugin adds one: a real image behind the sidebar, the conversation and the composer, with the surfaces turned into translucent glass so the photo shows through.
What it does
- Host half (
lib/index.js) registers a small API on the DSH web server:GET /dsh-wallpaper/config.json— the settings file, plus the image's mtime;GET /dsh-wallpaper/image— the image itself (jpg / jpeg / png / webp / avif / gif / svg);POST /dsh-wallpaper/config— merge a patch into the settings (clamped to sane ranges);POST /dsh-wallpaper/upload— store an uploaded photo (magic-byte check, 40 MB cap) and point the config at it.
- Client half (
lib/client.js) injects one<style>element and paints the photo on<html>as a fixed background, then overrides five surface tokens with translucent versions of a neutral palette:--dsw-alias-bg-base,--dsw-alias-bg-layer-1,--dsw-alias-bg-layer-2,--dsw-alias-bg-layer-3,--dsw-alias-bg-module-platform. It also registers a 设置 → 背景壁纸 page, so the whole thing is driven from the GUI.
Overlays, masks and modals (--dsw-alias-bg-overlay, --dsw-alias-bg-mask-*) are deliberately left alone so dialogs stay readable.
Everything is wrapped in try/catch: a client entry that throws aborts the whole web boot and makes the desktop disable every third-party plugin, so this one must never throw.
Install
Requires a DSH build with client-plugin support (the desktop app or dsh web), and a plugin profile — desktop by default.
git clone https://github.com/fl0-0wer/dsh-wallpaper.git
cd dsh-wallpaper
Copy the package into the profile and the settings into ~/.dsh/wallpaper:
PROFILE="${DSH_PROFILE:-$HOME/.dsh/profiles/desktop}"
mkdir -p "$PROFILE/node_modules/dsh-wallpaper" "$HOME/.dsh/wallpaper"
cp -r package.json lib "$PROFILE/node_modules/dsh-wallpaper/"
[ -f "$HOME/.dsh/wallpaper/config.json" ] || cp config.json "$HOME/.dsh/wallpaper/"
[ -f "$HOME/.dsh/wallpaper/current.jpg" ] || cp current.jpg "$HOME/.dsh/wallpaper/"
Then append this block to $PROFILE/cordis.patch.yml (or run tools/install-wallpaper.sh, which does all of the above and backs the file up first):
- insert:
- id: dsh-wallpaper
name: dsh-wallpaper
No restart needed: the loader hot-applies the new entry and the page picks the module up on its own.
Use it
Open 设置 → 背景壁纸 (Settings → Wallpaper): pick a photo with 选择图片…, turn the wallpaper on or off, and drag the sliders. Every change is saved immediately and the running app repaints behind the panel — no restart, no reload.

Drop a photo into ~/.dsh/wallpaper/ and point config.json at it:
{
"enabled": true,
"image": "my-photo.jpg",
"scrim": 0.45,
"blur": 0,
"saturation": 1,
"translucency": 0.5
}
Switch to another window and back — the plugin re-reads the settings whenever the window regains focus, and the image is cache-busted by its modification time, so no reload is required.
| Key | Default | Meaning |
|---|---|---|
enabled |
true |
false removes the layer and the style, i.e. temporarily off |
image |
current.jpg |
file name inside ~/.dsh/wallpaper/; without an extension it tries jpg → jpeg → png → webp → avif |
scrim |
0.45 |
black veil over the photo, 0–1. Raise it if text feels washed out |
blur |
0 |
blur radius in px, 8–24 gives a frosted look; above 0 the photo moves to a filtered layer |
saturation |
1 |
0.6 for a muted look, 1.4 for punchier colours |
translucency |
0.5 |
how much of the photo comes through the UI surfaces; 0 = almost opaque, 1 = strongest |
Light and dark
The plugin ships two neutral palettes and switches on the theme's own body[data-ds-dark-theme] attribute, so it follows 设置 → 通用 → 外观 (light / dark / follow system) automatically. Accent colours, syntax highlighting, borders and text colours are untouched — only the surfaces change.
If you also run a glass theme (for example Catppuccin), the wallpaper takes over the surfaces; the theme keeps its accents and text palette.
Uninstall
- Remove the
- insert: dsh-wallpaperblock from$PROFILE/cordis.patch.yml. - Delete
$PROFILE/node_modules/dsh-wallpaper/.
~/.dsh/wallpaper/ can stay; it does nothing on its own.
Project layout
dsh-wallpaper/
├── lib/index.js host half: /dsh-wallpaper/* routes
├── lib/client.js client half: style + layer + Settings page
├── config.json default settings
├── current.jpg default wallpaper (generated by make-default.py)
├── make-default.py regenerates current.jpg with numpy + Pillow
├── docs/ screenshots used by this README
└── tools/ install / toggle scripts, smoke tests
tools/install-wallpaper.sh installs into a profile, tools/toggle-wallpaper.py unloads and reloads the entry so a changed lib/ is picked up without restarting the app, and tools/test-client.mjs + tools/test-host.mjs are dependency-free smoke tests.
License
MIT
No comments yet. Be the first to write one.