dsh-backdrop-plugin
Verifieddsh-backdrop-plugin · v1.0.0 · MIT · Web UI
Image-background skin for DeepSeek Harness (web + desktop): import your own light/dark wallpapers through the built-in panel (no artwork bundled). No DSH source changes.
Install
dsh plugin add dsh-backdrop-plugin Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-backdrop-plugin
Image-background skin for DeepSeek Harness (DSH) — web GUI and the Electron desktop app.
It paints a real photograph as the app background (a bright scene for Light, a night scene for Dark), lays a readability scrim over it, and makes UI surfaces translucent by overriding the --dsw-* design tokens, so the wallpaper shows through the whole interface — plus a built-in panel for importing your own images. No DSH source change, no core logic, no data flow; fully removable.
Features
- Real photo background (
#ds-backdrop,background-size: cover), switched bybody[data-ds-dark-theme]— independent Light / Dark images. - Readability scrim baked into the same
background-imagestack, keeping body text at WCAG-AA contrast. - Translucent surfaces via
--dsw-alias-bg-base,--dsw-alias-bg-layer-*,--dsw-specific-sidebar-fill,--dsw-specific-input-major,--dsw-specific-bubble*,--dsw-specific-menu/selector, border and secondary-label tokens — Light and Dark each with their own values. - Overrides carry
!important: DSH 0.1.5 injects theui-themetoken sheet after client-plugin styles, so equal-specificity overrides would otherwise lose the cascade and surfaces would stay opaque (hiding the wallpaper). - Import your own images — a small wallpaper button opens a panel with a row per theme: 选择 to pick a file (compressed in-browser via canvas to ≤ ~420 KB), 清除 to fall back, 恢复默认 to reset. You can also drag & drop an image onto the panel to use it for both themes.
- The button is movable — drag it anywhere (many plugins crowd the bottom-right corner). The position is remembered as a viewport-relative fraction, so it survives reloads and window resizes; it is always clamped on screen. Double-click it to snap back to the default bottom-right corner. A drag never opens the panel, and a tap always does. The panel follows the button and flips/clamps itself to stay visible.
- Import-only builds stay inert: the skin only activates when an image exists (
body[data-ds-backdrop-on]). A build shipped without artwork does nothing to the UI until you import something. - Cleanup is fully reversible:
ctx.effectremoves the layer, style, panel, button and CSS variables. - No dependencies, no peer dependencies, no lifecycle scripts, no
require()of any module — safe for the desktop app's reviewed install policy. Both themes' images are embedded/imported as data URLs, so nothing needs a web server (the desktop opens none).
Requirements
- DSH 0.1.5 or newer (client-plugin contract:
dsh.client+exports["./client"]+__ModuleLoader__.load).
Install — Web (dsh web)
cd "$DSH_HOME/profiles/web" # Windows: %USERPROFILE%\.dsh\profiles\web
pnpm add dsh-backdrop-plugin
Add the plugin to the profile bundle list so its dsh.bundle.patch is applied:
// $DSH_HOME/profiles/web/package.json → dsh.profile.bundles
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-backdrop-plugin"]
Reload the GUI.
Install — Desktop app
The desktop app installs plugins only from the npm registry (its spec validator rejects file:, paths and any :// URL, and its registry is pinned to https://registry.npmjs.org/). Open Desktop Plugins… from the app menu and install:
[email protected]
The desktop owns its own profile ($DSH_HOME/profiles/desktop), so plugin activation is independent from the CLI/web profile — install it in both if you use both.
Using the import panel
- Click the wallpaper button — it is subtle until hovered. (It sits bottom-right by default; drag it if another plugin owns that corner, double-click to reset.)
- 选择 next to 浅色主题 / 深色主题 to pick a local image (PNG/JPEG/WebP), or drag & drop an image anywhere on the panel to set both.
- 清除 reverts one theme to the built-in image (if the build ships one); 恢复默认 drops both overrides and snaps the button back to its default corner.
The button's position lives in the same local store as your images (dsh-backdrop.user → fab: { fx, fy }), and it is a viewport fraction, so moving the window or switching displays keeps it proportionally placed rather than off screen.
Imported images are stored locally in the browser profile (localStorage, key dsh-backdrop.user), so they are per environment: the web GUI (http://127.0.0.1:3080) and the desktop app (dsh-app://) each keep their own. Nothing is uploaded anywhere.
Build modes
| Mode | Ships artwork | Behaviour | Use for |
|---|---|---|---|
PKG_IMAGES=embed |
yes (embedded data URLs) | skin active immediately, panel can override | private / local use |
PKG_IMAGES=none |
no | skin inert until you import images | publishing (no third-party assets redistributed) |
node build_plugin.mjs # embed, package name dsh-backdrop
PKG_NAME=dsh-backdrop-plugin PKG_IMAGES=none OUT_DIR=dsh-backdrop-npm node build_plugin.mjs
The build is parameterized because a DSH client entry id must equal the package name in three places at once:
package.jsonname, the registration id insidelib/client.js, and thecordis.patch.ymlrow.
Disable / remove
- Uninstall:
pnpm remove dsh-backdrop-plugin(web) or Remove in the desktop plugin window. - Or disable: remove the name from
dsh.profile.bundles/ toggle it off in the desktop plugin list. The layer, panel and token overrides are all retracted and stock DSH returns.
Third-party assets
The embed build contains two wallpapers that are third-party artwork, included for private/local use only and not covered by this package's MIT license. The published build uses PKG_IMAGES=none and therefore redistributes no artwork; users supply their own images through the import panel.
License
MIT (source code only). See the assets note above.