Back to home

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

Settings page

Wallpaper effect

The skin composes three contributions, all owned by this package:

  • Token layerctx.theme.overrideTokens() stacks a 60% translucency mix over --dsw-alias-bg-base and --dsw-specific-sidebar-fill for 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.overlay entry portals a fixed, click-through media surface to document.body with 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 routesPOST /dsh-wallpaper/media stores the picked file under $DSH_HOME/wallpaper with an atomic replace, and GET /dsh-wallpaper/media serves it back with a nosniff content type. Routes sit behind the browser trust fence (loopback plus trustedHosts config); accepted formats are the shared MIME whitelist in src/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 a maxBytes override in the mounting patch layer's config.
  • 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-leveldsh plugin --profile <name> remove dsh-ui-wallpaper removes 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).