Nebula Ambience
A living aurora and a twinkling starfield for the DeepSeek Harness Web UI.
Nebula Ambience paints a slow, pointer-aware atmosphere across the whole DSH Web frame. Soft aurora light pools drift near the edges of the window, stars twinkle with a little depth parallax, and a meteor now and then crosses the sky. A soft lamp follows the pointer in the dark theme. One compact sparkle button — in the composer toolbar and beside Settings in the sidebar foot — turns the whole thing on or off, and the choice is remembered.
It is deliberately quiet: the light stays out of the reading column, the effect pauses when the tab is hidden, and nothing animates when the operating system asks for reduced motion.
Features
- Edge-lit aurora — six slow light pools with independent drift, breathing radius, and hue, weighted to the frame edges so the conversation stays clear.
- Starfield — twinkling stars with depth parallax that leans gently toward the pointer.
- Meteors — occasional streaks, plus a small welcome burst when the ambience is switched back on.
- Pointer lamp — a soft glow follows the cursor in the dark theme.
- Theme-aware — dark theme uses additive violet/cyan glow and a faint vignette; light theme becomes a pale watercolor wash with darker star dots and no meteors.
- Cheap by design — 30 fps cap, device-pixel ratio capped at 2, animation
paused while the tab is hidden, a single static frame under
prefers-reduced-motion, and no render loop at all when the ambience is off. - Localized — English and Indonesian UI strings.
Install
From the plugin market index
Add this index source in Plugins → Discover → Index sources:
https://raw.githubusercontent.com/sudo-catz/dsh-nebula-ambience/main/market/index.json
The entry pins the exact commit and installs through the normal bundle flow. This is the author's own index — the Harness reads any index source you add, so no central marketplace is required. Discover requires the optional plugin-market bundle on profiles that do not ship it.
From Git
In Plugins → Add plugin, paste the pinned v1.0.0 address:
git+https://github.com/sudo-catz/dsh-nebula-ambience.git#385049b34c29415e56d4bc24bfc4abfebd98d547
Or follow the default branch:
git+https://github.com/sudo-catz/dsh-nebula-ambience.git
From a local checkout
Point Add plugin at the checkout directory, or install it by path:
link:/absolute/path/to/dsh-nebula-ambience
After installation, switch on Nebula Ambience if your profile installs new bundles switched off.
Controls
| Control | Where |
|---|---|
| Sparkle toggle | Composer toolbar, just before the submit button |
| Sparkle toggle | Sidebar footer, beside Settings |
Both buttons are the same preference (aria-pressed, title and accessible name
localized). The state lives in localStorage under
dsh.nebula-ambience.enabled and is on by default.
How it works
The bundle is a thin Loader row plus one client module. The client module
registers into shell.overlay — the frame-wide, click-through layer — and draws
to a single fixed <canvas> that never receives pointer events. It reads the
current color scheme from the Client theme service and re-renders on
theme/change, and registers English and Indonesian dictionaries through the
locale service.
There is no Host runtime behavior, no network access, and no state beyond the one preference. No other plugin's DOM, styles, or components are read, and no markup is appended outside the slot entry.
| File | Purpose |
|---|---|
client.js |
The canvas scene, the shared toggle store, and the slot registrations |
index.js |
No-op Host half that gives the bundle its Loader row |
cordis.patch.yml |
Inserts the nebula-ambience row |
locale/en.json, locale/id.json |
Plugin Manager display metadata |
icon.svg |
Original plugin artwork |
market/index.json |
Format-1 plugin market index entry |
Compatibility
Built for DSH Web 0.2.x and tested on 0.2.1-rc.5. The plugin uses public
Client extension points only — slots, the theme service, and the locale service
— and declares no engines constraint. Interface effects are visual: if a
future Harness changes a slot or token name, the worst case is a missing or
oddly styled layer, not a broken application.
Development
There is no build step; client.js is the browser artifact. For local
iteration, install the checkout by path and edit the file. A client bundle
reloads when the Harness reloads the bundle; the installed version is linked to
this directory.
License
MIT © 2026 sudo-catz
No comments yet. Be the first to write one.