youzhoujiMrLiu
dsh-ui-wallpaper
Wallpaper Engine–style wallpaper for the DeepSeek Harness web GUI: custom images, GIFs, and videos as your app background|仿 Wallpaper Engine 的壁纸插件,支持图片 / GIF / 视频自定义背景
- Stars
- 1
- Language
- TypeScript
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
dsh-ui-wallpaper
English | 中文
Wallpaper plugin for the DeepSeek Harness web GUI, modeled after Wallpaper Engine: set any local image, GIF, or video as your custom background, turn the application surfaces translucent so the wallpaper shows through, and manage it from a Wallpaper page in Settings.
Screenshots


The skin composes three contributions, all owned by this package:
- Token layer —
ctx.theme.overrideTokens()stacks a 60% translucency mix over--dsw-alias-bg-baseand--dsw-specific-sidebar-fillfor both palettes. The fold is per-token and per-color-scheme, so the user's light/dark preference stays untouched and uninstalling the plugin restores the original opaque tokens. - Frame layer — a
shell.overlayentry portals a fixed, click-through media surface todocument.bodywith a negative z-index, so the app paints above it while the translucent column tokens let it show through. Images and GIFs support tile, fill, fit, and stretch; videos support fill, fit, and stretch (tile falls back to fill). - Host routes —
POST /dsh-wallpaper/mediastores the picked file under$DSH_HOME/wallpaperwith an atomic replace, andGET /dsh-wallpaper/mediaserves it back with a nosniff content type. Routes sit behind the browser trust fence (loopback plustrustedHostsconfig); accepted formats are the shared MIME whitelist insrc/model/wallpaper.ts.
The Settings page has a live preview, the four layout modes, a local-file picker (image/* plus mp4/webm/ogg video), and disable/restore actions. The durable preference is a dsh.wallpaper store; only the URL and mode are persisted, so the media bytes live on disk rather than in localStorage. The shipped default remains /eva.jpg (the shell static asset apps/web/public/eva.jpg) with the fill mode.
Two layout companions keep the tint single-layered: the AppFrame paints no background (body owns the base color) and the SidebarRoot content paints transparent (the layout column paints the fill). Without this skin both look exactly as before; with it, the wallpaper shows through each column once instead of through a compounding double tint.
Content cards, code blocks, inputs, and other raised surfaces keep their own fills, so text stays readable over the media.
Install
This package is a dsh bundle: its dsh.bundle manifest inserts the ui-wallpaper row into any profile that lists the package, and its dsh.client manifest plus lib/client.js carry the browser half for the Web GUI.
The easiest install is to let an agent do it — DeepSeek Harness itself, or any agent with terminal access to a machine that has the dsh CLI and can reach this repository. Paste this prompt:
Install the dsh-ui-wallpaper plugin from https://github.com/youzhoujiMrLiu/dsh-ui-wallpaper for me.
1. Run `dsh plugin add github:youzhoujiMrLiu/dsh-ui-wallpaper` (add `--profile <name>` to target a specific profile).
2. pnpm ≥10 refuses git-dependency build scripts on the first attempt: copy the package key it prints into the profile's `pnpm-workspace.yaml` `allowBuilds` block and re-run the add.
3. Verify the row `ui-wallpaper` shows up in the profile composition (`dsh --profile <name> --dump-config`) or on the Web GUI's Plugins page.
4. In the Web GUI, refresh the page — the Wallpaper page appears under Settings. After any server restart, refresh again.
Trust note: a git install runs this package's `prepare` build on the installing machine; pin a commit (`github:youzhoujiMrLiu/dsh-ui-wallpaper#<sha>`) if you want a fixed revision.
Under the hood the agent runs the ordinary git-install path: prepare builds lib/ from src/ after the install and is self-contained — it assumes no monorepo checkout.
Inside a deepseek-harness source checkout the same plugin lives at packages/client/ui-wallpaper; there, the client half additionally needs the web-app bundle dependency and a client-bundle rebuild, then a server restart and a page refresh.
Model Experience
None, as the plugin changes browser presentation only and registers no prompt, tool, schema, session event, or provider request.
KV Cache effect
None; this package neither assembles nor sends a provider request.
Known Limitations and Deferred Work
- Upload bound — the host route accepts at most
maxBytes(default 64 MiB). Larger videos need amaxBytesoverride in the mounting patch layer'sconfig. - Video tiling — videos render with
object-fit, so tile is not offered and an old tiled preference resolves to fill. - Boot flash — the shell boot page renders before plugin bundles load, so a plain background precedes the wallpaper on first paint.
- Uninstall is composition-level —
dsh plugin --profile <name> remove dsh-ui-wallpaperremoves both the dependency and the inserted layer; there is no runtime toggle. A row inserted by a user-installed bundle does not yet appear under the Custom plugins tab (that classification currently recognizes user patch layers only).