dsh-beauty-persist
Manifest valid★ 1Keep DSH Desktop wallpapers persistent and never lost: supports GIF animated images & MP4 video wallpapers, with a built-in full-screen skin center (upload, preview, one-click apply, delete assets) — restart, change port, or clear cache, and nothing is lost. Server-side wallpaper & theme persistence for DSH Desktop — animated GIF / MP4 video wallpapers plus a full-screen skin center (upload, preview, apply, delete).
dsh-beauty-persist
Persist dsh-dream-skin / dsh-liquid-glass wallpaper & theme across DSH Desktop restarts.
Why
The DSH Desktop shell launches its web carrier with an OS-assigned random port
(--port 0), so the browser origin changes on every restart. Browser
localStorage is partitioned per origin — visual state like a wallpaper image
(stored by dream-skin / liquid-glass in localStorage) disappears after each
restart, even though it was never deleted.
dsh-beauty-persist moves that visual state into a server-side JSON file that
is independent of the port. It restores the state on every page load and pushes
changes back to the server when you tweak the settings in the UI.
What it does
- Host half (
lib/index.js)- Serves
GET /beauty-persist/state(current persisted state) andPOST /beauty-persist/state(replace persisted state). - Serves
GET /beauty-persist/wallpaper.gif(the stored GIF wallpaper) andPOST /beauty-persist/wallpaper.gif(upload a new GIF wallpaper). - Injects the persisted state into the
index.htmlresponse aswindow.__DSH_BEAUTY_PERSIST_STATE__, before the boot manifest, so the browser half restores synchronously ahead of dream-skin/liquid-glass initialization.
- Serves
- Browser half (
lib/client.js)- Restores every
dsh-dream-skin:*/dsh-liquid-glass:*localStoragekey from the server-injected state on page load. - Hooks
Storage.prototype.setItem/removeItemand mirrors any later changes back to the server (debounced), so your wallpaper/skin choices keep persisting without you doing anything extra. - Exposes
uploadGifWallpaper(gif)to set an animated GIF wallpaper.
- Restores every
State is stored at ~/.dsh/beauty-persist-state.json; the GIF wallpaper file
lives at ~/.dsh/beauty-persist-wallpaper.gif.
Install
Works with any profile that already runs dsh-dream-skin and/or
dsh-liquid-glass (typically the desktop profile used by DSH Desktop).
cd ~/.dsh/profiles/desktop
# add the dependency (adjust the repo URL / tag to what you installed)
pnpm add dsh-beauty-persist@github:<owner>/<repo>
# register the bundle in dsh.profile.bundles of package.json
# "dsh-beauty-persist",
Then restart DSH Desktop so the new bundle is loaded.
Usage
Nothing to configure. Once installed:
- Restart DSH Desktop (required for the bundle to load).
- In the GUI open Settings → Theme / 外观 and pick your wallpaper / skin as usual.
- The choice is now persisted server-side — it survives restarts, port changes, browser cache clears, and even switching browsers.
If you already have a wallpaper set in a previous session's localStorage
(now orphaned under an old port), either re-pick it once after installing, or
seed the server state manually:
# example: put a data-URL or URL into the state file
echo '{"dsh-dream-skin:wallpaper":"https://example.com/wall.jpg"}' \
> ~/.dsh/beauty-persist-state.json
Animated GIF wallpaper
dream-skin's "pick image" flow re-encodes through a canvas and flattens animated GIFs into a static JPEG. To use an animated GIF instead, upload it to this plugin — the browser renders the GIF natively (it plays), and the file is stored server-side so it survives restarts.
In the GUI (no command line): after installing, open
Settings → Theme / 外观 — a "GIF 壁纸上传(动图)" row appears in the
appearance section. Click 选择 GIF…, pick a local .gif, and it is
uploaded, activated and persisted. Refresh the GUI to see the animation.
From the command line:
# from this repo — the script auto-discovers the DSH Desktop GUI port
node scripts/set-gif-wallpaper.mjs "C:\path\to\my-wallpaper.gif"
# or pass the base URL explicitly if your GUI is served elsewhere
node scripts/set-gif-wallpaper.mjs "C:\path\to\my-wallpaper.gif" http://127.0.0.1:8080
After upload, refresh the GUI (or restart DSH Desktop): the GIF plays as the wallpaper and persists across restarts. Swap it any time by re-running the script with a different GIF.
MP4 video wallpaper
CSS background-image cannot play video, so MP4 wallpapers are rendered by this
plugin as a full-viewport <video> layer (muted, looping, object-fit cover).
In the GUI: the "MP4 视频壁纸(动效)" row (also under
Settings → Theme / 外观) lets you pick a local .mp4 and activate it, or
remove the video wallpaper.
From the command line:
node scripts/set-mp4-wallpaper.mjs "C:\path\to\my-wallpaper.mp4"
# optional explicit base URL:
node scripts/set-mp4-wallpaper.mjs "C:\path\to\my-wallpaper.mp4" http://127.0.0.1:8080
The MP4 is stored at ~/.dsh/beauty-persist-wallpaper.mp4 (up to 50 MB) and
persists across restarts.
🎨 Skin center (asset library)
Build your own wallpaper library: upload images / GIFs / MP4s once, then switch between them anytime with one click — everything is stored server-side and survives restarts.
In the GUI: the "🎨 皮肤中心" row (under Settings → Theme / 外观) gives you:
- 上传素材… — pick a local image / GIF / MP4 to add it to the library
(stored at
~/.dsh/beauty-persist-assets/, up to 50 MB each). - A thumbnail grid of your assets — click any thumbnail to apply it as the wallpaper right away (images/GIFs render as a background layer, GIFs animate natively; MP4s render as a looping video layer).
- ✕ on a thumbnail deletes the asset from the library.
The currently applied asset is remembered in the server-side state, so after a restart the same wallpaper comes back automatically.
Requirements
@deepseek-ai/dsh-client-runtime,@deepseek-ai/dsh-client-locale,@deepseek-ai/dsh-client-ui-theme(the standard web client stack; present in every shipped Web composition).- Node
>= 18for the host half.
License
MIT
Comments
Loading…
From the same category
by anywhere-labs
为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 35.2k
↓ 154/wk
MIT
TypeScript
Nov 6, 2026
dsh plugin --profile web add dsh-plugin-desktopby zhu1090093659
DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
★ 10.2k
↓ 171/wk
Apache-2.0
TypeScript
Nov 6, 2026
dsh plugin --profile web add dsh-webA collection of independent Web UI plugins and skins, including task boards, Git graphs, mobile access, and live token stats.
★ 8.6k
↓ 171/wk
Apache-2.0
TypeScript
dsh plugin --profile web add dsh-webby PC2005-cloud
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物
★ 5.8k
↓ 167.2k/wk
MIT
TypeScript
Nov 7, 2026
dsh plugin --profile web add dsh-petby omdsh-dev
开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git,
★ 5k
↓ 76.5k/wk
MIT
TypeScript
Nov 5, 2026
dsh plugin --profile web add dsh-better-sidebarby bowenliang123
The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,
★ 4.4k
↓ 147.3k/wk
Apache-2.0
TypeScript
Nov 6, 2026
dsh plugin --profile web add dsh-context