<div align="center">

# 🧊 dsh-composer-glass

**Frosted Glass & Dynamic Wallpaper — one uniform frosted-glass layer for the DSH conversation UI, with a wallpaper or looping video underneath**

Sidebar Plugins → Frosted Glass & Dynamic Wallpaper → Configure

[中文](README.md) | **English**

[![npm version](https://img.shields.io/npm/v/dsh-composer-glass?color=blue)](https://www.npmjs.com/package/dsh-composer-glass)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![DSH Version](https://raw.githubusercontent.com/Lbunc/dsh-composer-glass/main/images/badge-dsh.svg)](https://www.npmjs.com/package/@deepseek-ai/dsh)
[![Type: DSH Plugin](https://img.shields.io/badge/Type-DSH%20Plugin-8A2BE2.svg)](https://github.com/topics/dsh-plugin)

</div>

***

## Demo

<div align="center">

**Starting a session**

<img src="images/01-start.webp" alt="Starting a session preview" width="720">

**In conversation**

<img src="images/02-in-conversation.webp" alt="In conversation preview" width="720">

</div>

## Features

- **One uniform frosted glass**: the composer card, todo list, goal bar, `/` command menu, plan cards, status capsules (session stats + context usage), the back-to-bottom button and the sidebar all share one material, instead of patchy frosting
- **Dynamic wallpaper**: a local image or looping video sits behind the UI; white content surfaces (new-session pill, user bubble, code blocks, inline code, file cards, question & approval dialogs, reasoning row, plugins page) are glassified automatically, so the wallpaper is never blocked by opaque patches
- **Per-group tuning**: 7 surface groups with individual switches and 6 sliders each — live preview while dragging, persisted on release, and turning a group off restores its shipped look at once
- **Wallpaper controls**: fit mode (cover / contain) plus a bidirectional dim slider (drag left to darken, right to brighten — works for both dark and light themes)
- **One-click reset** to the shipped preset; light / dark themes are tuned separately and switch automatically

## Configuration panel

**Frosted glass master switch**: turns the whole effect on or off; off restores the native look entirely.

**Wallpaper**:

| Setting | Description |
| :---------------- | :----------------------------------------------------------------------------------------------------------- |
| Show wallpaper | Images (jpg / png / webp / gif / avif / bmp / svg) or videos (mp4 / webm / mov / mkv, etc.); videos loop muted |
| Default wallpaper | While the profile's plugin config has never carried any wallpaper field (a fresh install, or never set/toggled), the bundled default wallpaper enables itself with its path and 75% brighten; once any wallpaper setting exists (including a manual off), the plugin never touches it again |
| Readability tip | Light wallpapers pair best with the light theme — raise "Dim / Brighten" (a white veil) for better text legibility; dark wallpapers the opposite — pair with the dark theme and lower the value, or go negative (a black veil) to darken the backdrop |
| File path | Local absolute path (Windows `copy as path` quotes are stripped automatically), or press Browse… to pick a file in the system dialog — the chosen file is copied to `~/.dsh/storages/composer-glass/` (512 MiB cap; the panel shows an error line when exceeded) and the path filled in |
| Keep past wallpapers | Keep all (default): every picked file stays in the storage directory; Current only: once a new file lands, previously plugin-copied wallpapers are pruned (only `wallpaper-<timestamp>` files are removed — nothing else in the directory, and hand-typed paths are never touched) |
| Fit | Cover / Contain |
| Dim / Brighten | −100 to +100: negative overlays a black veil, positive a white one |

**Per-group tuning** (7 groups, each with a switch + 6 sliders):

| Group | Surfaces |
| :- | :- |
| Composer card | The whole composer card and its blur underlay |
| Floating pieces | Todo list, goal bar, `/` command menu, plan cards |
| Status capsules | Session stats + context usage capsules |
| Back-to-bottom button | Floating button at the transcript's bottom-right |
| Sidebar | The entire left sidebar column |
| Content surfaces | Content surfaces over the wallpaper (see feature 2) |
| Dialog cards | Approval card, question / option / answer bubbles |

The status-capsule group carries one extra **Layout** switch: **Merged** (default) wraps the two stats in ONE capsule, **Split** frosts each stat separately.

Sliders per group:

| Slider | Range | Preset |
| :- | :- | :- |
| Blur | 0 – 30 px | 10 |
| Tint | 0 – 100 % | 17 |
| Saturation | 50 – 200 % | 165 |
| Brightness | 50 – 130 % | 91 |
| Shadow | 0 – 200 % | 100 |
| Edge highlight | 0 – 200 % | 100 |

> A few groups ship with different shadow defaults: composer card 55; sidebar, content surfaces and dialog cards 0. The **Reset to preset** button restores the table above.

## Getting started

### Install

**Built-in plugin manager (recommended)**: sidebar Plugins → Add plugin, paste any address from the table below → Install → Enable.

**Command line**: `dsh plugin --profile web add "<address>"` (upgrading = running the same command again)

| Address | Description |
| :- | :- |
| `dsh-composer-glass` | Package name. Within ~24 h after a release you still get the previous one, see the tip below |
| `D:\path\to\dsh-composer-glass` | Local folder. A live `link:` — source edits apply on refresh; first choice for development |
| `D:\path\to\dsh-composer-glass-<version>.tgz` | The .tgz package from the releases page |
| `https://github.com/Lbunc/dsh-composer-glass` | GitHub repository. Tracks the latest push, may be unstable |

### Enable

Sidebar Plugins → Frosted Glass & Dynamic Wallpaper: the row switch toggles the plugin, the config card tunes the material and the wallpaper. Every adjustment applies at once — no DSH restart needed; **after changing the wallpaper path, refresh the browser on web, restart the app on desktop**.

### Uninstall

- **Plugin manager**: the **Uninstall** button on the plugin row
- **Command line**: `dsh plugin --profile web remove dsh-composer-glass`

> [!TIP]
> ⏳ **The displayed version ≠ the installed version**: the "latest" shown on the manager card comes from registry metadata and is not filtered; the actual install is resolved by pnpm, whose supply-chain cooldown (`minimumReleaseAge`) silently holds back releases younger than 24 hours and installs the previous one. Not a bug: wait it out, or use the folder path / tgz / GitHub addresses above to get the new version immediately.

> [!NOTE]
> - Uninstalling leaves configuration behind: the switch and slider values live in the `composer-glass` section of the profile's `cordis.patch.yml`, which `dsh plugin remove` does **not** delete; remove that section by hand for a full cleanup.
> - On Windows, if a junction remains, delete `node_modules\dsh-composer-glass`.

## Compatibility

| Item | Description |
| :- | :- |
| DSH version | ≥ 0.1.7-rc.1 ; 0.1.6 and older are not supported — use plugin v0.3.0+ |
| Platform | Frosted glass and dynamic wallpaper: both web and desktop (Harness) |

## License

<div align="center">

[MIT](LICENSE)

</div>
