Capy-style ambient background for DSH with wallpaper, bottom black gradient, and composer aura.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:wbaws/dsh-scenery
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Capy-style ambient background for the DeepSeek Harness (DSH) workspace — an image, a very large bottom black gradient, and a soft radial “aura” around the composer, so the UI looks like it is sitting inside the scene instead of floating on a flat colour.
Additive only. This plugin adds one click-through layer behind the conversation column. It does not redesign anything, does not touch the layout of existing components, and — unless you flip the switch — changes absolutely nothing about the way DSH looks or behaves.
| Scenery on — semi-full scene | Scenery on — barely there |
|---|---|
![]() |
![]() |
Screenshots above show the effect live in DSH. Crank the opacity up and the image, bottom gradient and composer aura sit clearly behind the conversation; dial it right down and you get just a whisper of atmosphere — enough to make the workspace feel alive without stealing focus while you work. Every setting is live-previewable: the bundled standalone page (
preview/index.html) renders the exact same compositing math in any browser, so you can tune a look here before it goes anywhere near your real setup.
What it does
Layering (bottom → top):
① your image (fit / pan / zoom / blur / opacity)
② large bottom black gradient (soft, no bands; grows gradually, the last
~20–30% approaches black)
③ radial “aura” around the composer (very soft ellipse, black centre fading
to nothing — no visible edge)
④ existing DSH UI (completely untouched)
The aura tracks the real composer seat inside the conversation column (sticky bottom bar), so it stays glued to the input area as you resize the window or drag columns.
Controls (Settings → Scenery background)
| Setting | Meaning |
|---|---|
| Enable | master switch — off by default |
| Image | upload a local picture (PUT to the host, stored under your DSH home) or paste an http(s) image URL |
| Fit | cover (crop-to-fill) / contain / fill |
| Position X/Y | object-position pan, % |
| Zoom | extra scale, 0.5×–3× |
| Overall opacity | dims image + overlays together toward the app surface |
| Bottom gradient strength | peak blackness of the big bottom gradient |
| Bottom gradient height | how much of the stage the gradient spans (from the bottom) |
| Aura strength | blackness of the composer aura |
| Aura size | ellipse radii multiplier |
| Aura offset X/Y | fine-tune aura centre relative to the auto-tracked composer |
| Image blur | gaussian blur of the image only — UI text stays crisp |
Every control previews live; Save persists to the host. There is also a Reset (restores defaults and clears the current image) — it asks once before it commits.
Persistence: ~/.dsh/dsh-scenery/config.json (+ uploaded wallpaper.* file,
or $DSH_HOME/dsh-scenery/ when DSH_HOME is set). A localStorage mirror
makes the background apply instantly on page load before the config round
trip.
Install
Published on npm as dsh-scenery (this repo).
# official CLI (any profile)
dsh plugin --profile desktop add dsh-scenery
# or from the in-app plugin market (dshmarket → search "scenery")
# or straight from this repo:
dsh plugin --profile desktop add dsh-scenery@github:wbaws/dsh-scenery
Restart / reload DSH, open Settings → Scenery background, pick an image, flip Enable. Done. (No code from Capy is used — only the general visual technique, re-implemented in plain CSS.)
How it works (brief)
Client half (lib/client.js, served at /plugins/dsh-scenery/client.js):
- Locates the conversation workspace through the official slot anchor
[data-slot="conversation"](no hard-coded class names). - Inserts one absolutely positioned
z-index:-1,pointer-events:none,aria-hiddenstage as the first child of the conversation host. The host is made its own stacking context (isolation:isolate), so the stage paints above the host's flat background colour but under every message and panel. Nothing else in the app is modified. - The stage holds an
<img>(fit/pan/zoom/blur) plus a scrim div whosebackgroundstacks the aura radial-gradient over the bottom linear-gradient. Both gradients are generated from the settings with many interpolation stops → smooth falloff, no banding. ResizeObserver+ window resize keep geometry fresh; the composer seat is found by scanning for the sticky-bottom element inside the conversation host (cached, cheap).- If the conversation seat isn't mounted yet (or was replaced by another plugin), it falls back to compositing onto the AppFrame element's own background layers — still zero DOM/layout changes.
- On disable/unload everything is removed and every inline style it added is restored.
Host half (lib/index.js, Cordis plugin scenery): a small fenced route
prefix /dsh-scenery-bg that persists config and wallpaper bytes
(GET/PUT/DELETE config, PUT/GET wallpaper). Zero platform peer deps — plain
Node builtins only, path-traversal-safe.
Settings UI: registers one section into the official
settings.section slot (id scenery-config), styled with the DSH alias
tokens so it follows the active theme.
Development
npm run build # concatenates src/client/* -> lib/client.js + syntax checks
npm run check
# interactive visual tuning:
# open preview/index.html in a browser (uses window.SceneryCore from lib/client.js)
Layout:
lib/index.js host half (Cordis plugin: persistence routes)
lib/client.js built client bundle (do not edit)
src/client/00-defs.js defaults / sanitizers / i18n
src/client/01-composite.js pure gradient + aura math (shared with preview)
src/client/02-runtime.js DOM engine (stage, tracking, modes)
src/client/03-settings-ui.js settings section
src/client/04-entry.js module-loader entry + window.SceneryCore
preview/index.html standalone preview / tuning page
Compatibility
Targets the official DSH web client (works in the DSH Desktop app window and
the web GUI). Requires a DSH profile with the client plugin system (same base
as dsh-pet, dsh-better-sidebar, etc.). If you find an incompatibility,
please open an issue with your DSH version.
License
MIT. “Capy” styling is used purely as a visual reference; this is an independent, from-scratch implementation of the general gradient technique.
Links
More in this category
elysia395/dsh-wallpaper-engine★ 3931
Requires DeepSeek Harness 0.1.5-rc.1+ (DSH Desktop >= 2.0.7) and dsh-better-sidebar >= 0.19.0 - update both before installing or updating this plugin. Plays local Wallpaper Engine Video/Web wallpapers behind the chat, renders Scene wallpapers as extracted static frames, and adds content-rating/type filters, custom uploads and an iOS-style liquid-glass settings window.
Small-tailqwq/dsh-deep-whale#maid-atelier★ 2963
Whale-girl skin series for the DSH Web UI (maid-atelier).
Nwflower/dsh-claude-style★ 394
Claude Code Desktop look-and-feel for the DSH Web GUI — ivory/warm-black dual canvas, clay accent, three-font typography, permission segmented control and brand switcher, via CSS overrides and client DOM overrides.
d-dev0101/open-sea-skin★ 386
Realtime WebGPU ocean skin with quick controls for waves, daylight, glass opacity, and an automatic day cycle.
kingOfSoySauce/dsh-liang-skin★ 341
Adaptive reasoning slider skin that maps each model's available reasoning efforts onto a 0–30 visual intensity scale, with synchronized portraits, background, and interface colors.
RevolutionLA/dsh-dream-skin★ 295
One-command skin plugin: 8 original themes, translucent wallpaper with opacity/blur, per-user accent, and shareable theme-pack import/export, favorites and surprise-me — purely native on DSH's token system.


Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.