Kaze Tachinu (The Wind Rises) skin for the DSH Web GUI: a full-screen film wallpaper behind glassmorphism surfaces, sky-blue interaction tokens, redrawn vector logos for the sidebar and home hero, a restyled composer card with themed placeholder text, and a bottom fade on the message list.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-kaze-tachinu-theme
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:suuuuunamei/dsh-kaze-tachinu-theme
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
中文 | English
What it is · Theme details · Drift-proof design · Quick start · Customize · FAQ · Known limits · License & asset copyright
What it is
dsh-kaze-tachinu-theme turns the DSH Web GUI into Miyazaki's The Wind Rises: a cinematic sky wallpaper behind every surface, translucent frosted-glass panels, sky-blue (#1C96B5) as the single interaction color, an original red-wing logo with a "The Wind Rises" wordmark in place of the sidebar brand and home-hero headline, a navy-glass composer card, and themed placeholder copy.
It is a standard dsh plugin package: one dsh plugin command installs it into a profile, it stays resident with DSH, no DSH source is modified, and uninstalling fully restores the page.
| Dimension | Native dsh web | dsh-kaze-tachinu-theme |
|---|---|---|
| Background | Solid / solid gradient | Cinematic sky wallpaper + global blur scrim |
| Surfaces | Opaque layers | Translucent frosted glass (backdrop-filter) |
| Brand | DSH default | Original red-wing logo (expanded) + paper-plane mark (collapsed) |
| Interaction color | DSH default | Sky-blue #1C96B5 (buttons/active/highlight/borders/scrollbars) |
| Composer | Default | Sky-navy glass capsule, themed placeholder copy |
| Session stats | Default | Centered slim glass pill + dim separators |
| Message-list bottom | Hard edge | 40px gradient fade (composer never clipped) |
| Install | — | One dsh plugin --profile web add ... command |
| Revert | — | Fully restored on uninstall |
Theme details
Sky-blue glassmorphism
A ~60-entry design-token overlay via the official theme.overrideTokens API: translucent background layers (the wallpaper shows through), low-saturation sky-blue borders, sky-blue interaction states, and status colors tuned to dark glass. Light and dark modes share one look. See docs/theme-tokens.md.
Wallpaper and logos
- Wallpaper served by the plugin host half at
/kaze-tachinu/current.jpg(fromassets/current.jpg), with a subtle dark gradient for readability; - Sidebar brand shows the horizontal logo when expanded and a paper-plane letter mark when collapsed (both original in-repo vectors);
- The home-hero headline is replaced by a large centered logo.
Composer and placeholder copy
The composer is re-skinned as a navy glass capsule; placeholder copy is swapped by UI language (CJK detection: the Chinese UI always reads 風立ちぬ——让想法随风飘去). Current DSH's composer is a Lexical rich-text editor: the placeholder lives both in its data-placeholder / aria-label attributes and in a dedicated visible placeholder layer (absolutely positioned, class token ending _placeholder) — the engine syncs all three (legacy <textarea placeholder> included), and a MutationObserver re-applies it after host re-renders. Current DSH has a single composer box, so only the "Composer" column is visible; the "New-session" copy only appears on host builds that still provide a separate describe/new-session input.
| UI language | Composer (unified box) | New-session (only on builds with a separate box) |
|---|---|---|
| Chinese | 風立ちぬ——让想法随风飘去 |
風立ちぬ——让想法随风飘去 |
| English | 風立ちぬ。いざ生きめやも。 |
Kaze Tachinu — let your thoughts ride the wind |
Message-list scroll sink + bottom fade
DSH natively scrolls the composer and the message list inside one container, so a plain mask would clip the composer. This theme sinks the scroll viewport into the pure message list: the outer scrollport becomes layout-only (composer pinned), the message list becomes the bounded scroller and carries the 40px bottom fade; at the very bottom, message text still sits fully above the fade.
Session-stats pill
The stats line above the composer ("20 turns · 185 steps | LLM …") is restyled as a centered glass pill: content-sized width, translucent navy background + blur to lift the text off the wallpaper, with dimmed separators.
Unified scrollbars
Global sky-blue glass scrollbars for Chromium browsers, with a scrollbar-color fallback for Firefox.
Drift-proof design
DSH component class names are build-time hashes (.Md3f7G_*, ._7mWUNa_*, .wSkVaW_*, ...) that change on frontend upgrades. In the past, such drift disabled the scroll sink — the outer scroller was hidden while nothing took over, leaving the chat unscrollable.
Since v2 the theme uses runtime location + safe fallback:
- CSS no longer references any hash class for the scroll or stats areas. Everything that could affect usability is handled at runtime by the hooks engine in
bundle/client.js,plugin/client.jsandskin/.../hooks.mjs:- The message scroller is located via stable attributes (
[data-conversation-scroll],[data-slot="conversation.session"],[data-chat-flow]) plus the class suffix (…_scroll, from the component author's own naming, stable across builds); - Once located, it applies inline styles + custom markers:
data-kaze-scroll(conversation root),data-kaze-scroll-inner(inner scroller), anddata-kaze-stats/data-kaze-stats-sep(stats pill and separators, found by text signature inside[data-composer-seat]); - Decorative CSS keys only off those
data-kaze-*attributes.
- The message scroller is located via stable attributes (
- Safe fallback: if any step fails to locate its target, the engine does nothing — native scrolling and default chrome stay intact (worst case: cosmetic only). Engine steps are try/catch guarded and only ever
console.warn.
Marker probe (open a session's Chat tab, then run in the console; expected 1 / 1 / 1 / 2):
console.log('kaze-scroll root=', document.querySelectorAll('[data-kaze-scroll]').length,
'| inner=', document.querySelectorAll('[data-kaze-scroll-inner]').length,
'| stats=', document.querySelectorAll('[data-kaze-stats]').length,
'| conv-scroll=', document.querySelectorAll('[data-conversation-scroll]').length);
Remaining hash-class selectors are decoration only (home-hero logo, sidebar brand, composer highlight/hint) — a drift there is a local visual regression, never a usability break.
Quick start
Browser: the theme uses backdrop-filter glass, custom scrollbars and CSS masks heavily — use Microsoft Edge or Google Chrome. Firefox degrades (scrollbars, masks).
Requirements
- DeepSeek Harness installed and
dsh webbooting; - pnpm available (
dsh pluginshells out to it; Node's corepack works). - DSH Desktop: profiles live under
%APPDATA%/dsh-desktop/harness/profiles/(pointDSH_HOMEthere when using the CLI).
Install (published release)
dsh plugin --profile web add dsh-kaze-tachinu-theme
dsh web # restart DSH
or straight from GitHub:
dsh plugin --profile web add github:suuuuunamei/dsh-kaze-tachinu-theme
Wallpaper and the sidebar logo appearing means success. It stays resident; no per-session installs.
Install (local dev / unpublished)
dsh plugin --profile web add file:/absolute/path/to/dsh-kaze-tachinu-theme
# or, live-link your edits:
dsh plugin --profile web add link:/absolute/path/to/dsh-kaze-tachinu-theme
Windows: a cross-drive
file:E:/...spec is resolved wrongly by pnpm. Create a junction inside the profile dir and install relative to it, e.g. inprofiles/web:mklink /J kaze-local E:\absolute\path\dsh-kaze-tachinu-themethendsh plugin --profile web add file:./kaze-local. Re-run that add after each repo change to refresh thefile:snapshot.
Update / disable / uninstall
dsh plugin --profile web update dsh-kaze-tachinu-theme # then restart
# disable without uninstalling: remove "dsh-kaze-tachinu-theme" from dsh.profile.bundles in the profile package.json
dsh plugin --profile web remove dsh-kaze-tachinu-theme # then restart
skin-center route (optional)
Copy the whole skin/kaze-tachinu/ folder to ~/.dsh/skins/kaze-tachinu/ (DSH Desktop: %APPDATA%/dsh-desktop/harness/skins/kaze-tachinu/) and refresh — it appears under Settings → skin center. Manually dropped skins run without the hooks.mjs enhancements because of the provenance gate (visuals are complete; the runtime scroll sink, stats pill and placeholder copy need hooks). Use either the plugin or the skin route, not both.
Customize
Clone and install with link: (see local dev above).
- Wallpaper: replace
assets/current.jpg(keep the filename), hard-refresh. - Logos: replace the two SVGs in
assets/logo/, hard-refresh. - Placeholder copy: chosen by
themeCopyFor(text)in the runtime engine by UI language (three in-sync copies:bundle/client.js,plugin/client.js,skin/.../hooks.mjs). Chinese is unified to風立ちぬ——让想法随风飘去; the English composer reads風立ちぬ。いざ生きめやも。, and a separate describe/new-session box would readKaze Tachinu — let your thoughts ride the wind. Restart to apply. - Colors: token overlays in
bundle/client.js/skin/kaze-tachinu/skin.cssplus decorative styles; restart and hard-refresh. See docs/theme-tokens.md.
Architecture
A standard dsh plugin bundle: package.json declares dsh.bundle/dsh.client; dsh plugin add mounts it into the profile.
bundle/host.js # Node host half: serves /kaze-tachinu/* assets (wallpaper, logos)
bundle/client.js # Browser half (./client export): tokens + decoration + runtime scroll/stats engine + placeholders
plugin/client.js # Cordis dynamic-injection source of the same logic (usually irrelevant)
cordis.patch.yml # Plugin manifest mounted by dsh plugin add
assets/ # Wallpaper and original-vector logos
skin/kaze-tachinu/ # skin-center package: skin.json + skin.css + patches.css + hooks.mjs
All side effects (tokens, style tags, listeners, DOM markers, routes) are tied to the plugin lifecycle and fully revert on disable/uninstall.
FAQ
Make sure the command targeted --profile web; hard-refresh the browser (Ctrl+F5); check the dsh web log for [kaze-tachinu-theme] host half active.
Re-run the install command — usually a pruned or broken profile node_modules.
Run the marker probe above: if the three data-kaze-* counts are 0 while conv-scroll=2, an outdated client bundle is loaded — install the current repo version and fully restart. If the markers are 1/1/1 and it still won't scroll, open an issue with the console [kaze] … warnings.
Since v2 the scroll sink, bottom fade and stats pill are hash-free (runtime located, safe fallback — at worst decoration degrades). Only purely decorative selectors (hero logo, sidebar brand, composer highlight/hint) may need a small retarget after an upgrade. Open an issue with a screenshot.
The theme is designed as dark glass over the wallpaper and shares one look across light/dark modes, so a dimmer feel in light mode is expected. You can brighten the glass tokens yourself (see Customize → Colors).
Token layers stack but visuals fight. Enable one theme-style plugin at a time.
Known limits
- Frosted glass, scrollbars and masks are tuned for Chromium (Edge/Chrome); Firefox degrades.
- Hero logo, sidebar brand and composer highlight/hint still use build-time hash classes — decorative only (see drift-proof design).
- Dark-glass visuals are shared across light/dark modes; there is no separate light-mode pass.
- Wallpaper/logo routes are cached for ~1h; hard-refresh after swapping assets.
- Some DSH Desktop builds skip the plugin browser half (host half only): DOM-level effects (brand, placeholders, runtime scroll sink) are limited there — same as dsh-kimino-theme on those builds; standard DSH Web clients get everything.
License & asset copyright
Code is MIT licensed.
Wallpaper artwork in assets/ derives from promotional material of The Wind Rises (2013); rights belong to Studio Ghibli, Nibariki, KDDI, Toho et al. Logos in assets/logo/ are original in-repo vector work. This repository is for personal desktop decoration only: it claims no rights and makes no profit; materials will be removed on request of the rights holders.
Contributing
- Conventional Commits (e.g.
feat(client): fix xxx); no emoji in code/docs/commits; - Attach screenshots/verification for user-visible changes in PRs;
- Keep docs/theme-tokens.md in sync when touching tokens.
Enjoying the theme? Star it.
Links
More in this category
elysia395/dsh-wallpaper-engine★ 4888
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★ 3024
Whale-girl skin series for the DSH Web UI (maid-atelier).
Nwflower/dsh-claude-style★ 449
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★ 387
Realtime WebGPU ocean skin with quick controls for waves, daylight, glass opacity, and an automatic day cycle.
kingOfSoySauce/dsh-liang-skin★ 365
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★ 300
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.