Load Wallpaper Engine .mpkg files as the DSH web background: embedded video, time-of-day switching, unified frosted blur, local wallpaper library & rotation.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:XHR666/dsh-mpkg-wallpaper
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. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A plugin for the DeepSeek Harness Web UI (dsh web) that turns your background into a feature-rich wallpaper system — from parsing Wallpaper Engine .mpkg files, to a full-screen frosted blur suite, to a local wallpaper library with automatic rotation. Nearly every visual detail is adjustable.
Core Features
📦 Multi-source backgrounds (mpkg / video / image / URL)
- Wallpaper Engine
.mpkg: parsed directly in the browser (pure client, nothing uploaded to third parties); video wallpapers play their embedded mp4 / video textures; scene wallpapers use the author'spreview.gifanimated preview; time-of-day switching picks the asset matching the current system time; adjustable options (read-only) for reference in the Wallpaper Engine app - Direct image/GIF import: local image files (png/jpg/webp/gif) or image URLs (including data:image) as backgrounds — large files auto-stored in browser storage, GIFs loop reliably
- Video files: pick an mp4/webm file directly as a video background
🌊 Full-screen frosted blur suite
- Unified blur: one slider controls the whole screen's haze (0 = fully transparent showing the wallpaper); the chat area and "New chat" button can follow independently
- Dialog / popover / mask blur: three independent toggles + amount sliders (center-screen windows / popup menus / backdrop mask)
- Wallpaper frosted-blur slider, panel opacity, independent title-bar frost amount
🎬 Lens & appearance
- Lens zoom (10–2000%) & pan, sidebar/title-bar wallpaper visibility toggles, light sharpen, Deep diving background box
🚀 Hybrid large-file mode
- On: mpkg is streamed to the DSH host → stored on disk → HTTP Range streaming playback, supports files >600MB with minimal memory
- Off: pure browser mode (600MB cap)
🖼️ Local wallpaper library (Windows + cross-platform)
- Steam discovery: auto-locates the Wallpaper Engine install (including non-default drives via registry + libraryfolders.vdf) and lists video/web wallpapers
- Custom local wallpaper folder: any folder can become a wallpaper library, with a built-in cross-platform folder picker (browse directories step by step)
- Wallpaper switching & rotation: one-click "Next wallpaper", or timed auto-rotation (adjustable interval)
🛡️ Security & coexistence
- Conflict detection: auto-disables itself when other wallpaper/theme plugins are detected
- Coexists with third-party UI plugins (DSH-better-sidebar, dsh-chat-import, dsh-sidebar-qa, …): CSS only targets DSH's native area classes, never overriding injected content
- Security boundary: .exe/application wallpapers fully excluded (anti-malware), custom folders read images/videos only, host routes have path-traversal guards
- Pure-client parsing stays inside the browser sandbox — malicious mpkg cannot reach the host file system
🔄 Update check & one-click hot update
- "Check updates" compares actual code content hashes (README changes do not trigger) — only real functional changes count
- New version found → "Update now": auto-downloads the latest code + version from GitHub, writes it back locally → restart dsh web to take effect
Feature Groups
- Background source: master toggle, hybrid large-file mode, .mpkg file, image URL, local image/GIF, local wallpaper library (Steam discovery + custom folder + folder picker), wallpaper switching & rotation
- Appearance: panel opacity, frosted blur, lens zoom, lens position
- UI blur: unified blur amount, dialog/popover/mask blur toggles + amounts, Deep diving background box, title-bar frost/show (independent frost amount)
- Other: sidebar shows wallpaper, light sharpen, third-party UI radius compat (off by default), update check / one-click hot update, restore defaults
Supported Inputs
- Wallpaper Engine .mpkg (PKGM0014 video / PKGM0018 scene)
- mp4/webm video files (picked directly)
- Image/GIF files (png/jpg/webp/gif, local) and image URLs (including data:image)
- Size limits depend on the mode:
- Hybrid mode (default on): mpkg is streamed to the DSH host → stored on disk → HTTP Range streaming playback. Files >600MB are supported (only disk space limits), with minimal memory use.
- Pure browser mode (hybrid off): whole file >600MB is rejected; standalone video >600MB, video texture >250MB, image/GIF >200MB cannot be processed (warns and falls back to the preview); IndexedDB storage quota can also be a limit.
- What you get depends on the wallpaper's content:
- Video wallpapers (embedded mp4 / standalone mp4): the video plays as the background.
- Scene wallpapers (Live2D etc.): uses the author's
preview.gif(browsers cannot render WE scenes). - Blue/green-screen layers: falls back to the preview (the raw chroma-keyed footage would show blue/green).
Limitations
- Scene-type wallpapers (Live2D puppet + shader + particles): the full dynamic scene can only be rendered by the Wallpaper Engine app. The browser uses the author-generated
preview.gif, which may look soft full-screen (zoom/sharpen helps). - Options are read-only: the browser shows pre-rendered assets, so editing options cannot change the picture; apply them in the Wallpaper Engine app instead.
- Very large assets (pure browser mode): standalone videos >600MB, video textures >250MB, images >200MB cannot be handled (warns and falls back to the preview). In hybrid mode large files stream through the host — no such limit.
Screenshots

Dynamic wallpaper fills the whole UI. With the sidebar collapsed, the chat box sits centered with a frosted blur; the sidebar is fully transparent so the wallpaper shows through cleanly.

The effect after adjusting the Panel opacity and Unified blur sliders (as shown): opacity of most areas is adjustable, the sidebar is translucent and the wallpaper shows through faintly behind it.

The settings page. Beyond this screenshot, nearly every appearance aspect is adjustable: unified full-screen blur (chat area / New-chat button can follow independently), dialog / popover / mask blur, lens zoom & pan, sidebar / title-bar wallpaper visibility, title-bar frost amount, sharpen, and time-of-day switching for wallpapers that ship multiple time variants.
The wallpapers in the screenshots are works by Bilibili creator -夜莺Night: author homepage.
Usage
Settings → Wallpaper Engine Background:
| Control | Description |
|---|---|
| Choose .mpkg | Uses preview.gif (or time-matched asset) as the dynamic background; you can also pick an mp4/webm file directly |
| Hybrid large-file mode | On: supports >600MB (streamed to host); Off: pure browser mode (600MB cap) |
| Adjustable options | The wallpaper's own parameters and current values (read-only, for reference in the Wallpaper Engine app) |
| Image URL / local image | Plain images or GIFs |
| Panel opacity | 50–100% |
| Frosted blur | How blurred the wallpaper itself is, 0–40px (0 = sharp) |
| Unified blur | One slider controls the whole screen's haze; the chat area / New-chat button can follow independently |
| Dialog / popover / mask blur | Three independent toggles + amount sliders |
| Lens zoom / position | Zoom (10–2000%) and pan the background; zoom out to see components at the picture edges |
| Sidebar / title-bar wallpaper | Toggles; off = solid opaque color for that area; title-bar frost amount adjustable independently |
| Local wallpaper library | Steam discovery (Windows) + custom folder (any folder + folder picker) |
| Wallpaper switching & rotation | "Next wallpaper" one-click switch; timed auto-rotation (adjustable interval) |
| Light sharpen | Improves low-res look; turn off if GIFs stutter |
Install
Option 1: dsh plugin add (recommended)
dsh plugin --profile web add dsh-mpkg-wallpaper
# restart dsh web, then hard-refresh the browser (Ctrl+F5)
Option 2: Manual copy
Drop the plugin folder (or extract the GitHub zip) into $DSH_HOME/profiles/node_modules/dsh-mpkg-wallpaper/
and register a line in the profile's cordis.patch.yml:
- insert:
- id: dsh-mpkg-wallpaper
name: dsh-mpkg-wallpaper
Option 3: Git clone
git clone https://github.com/XHR666/dsh-mpkg-wallpaper.git $DSH_HOME/profiles/node_modules/dsh-mpkg-wallpaper
Uninstall: dsh plugin --profile web remove dsh-mpkg-wallpaper (or remove the mount line + delete the plugin directory + restart).
Official Docs
Wallpaper Engine's official help site (help.wallpaperengine.io) has a mobile section (pairing with Windows, etc.); the mpkg container format is proprietary and undocumented.
Reporting Bugs
When reporting a bug, please attach:
- The original .mpkg source file (required to reproduce the issue),
- Browser console output (F12 → Console), if any,
- Your DSH version and platform (Windows / Linux / mobile).
Security
- No external network requests: the plugin never contacts external networks; the only network behavior is: ① the browser loading an image URL the user typed manually; ② in hybrid mode, HTTP communication with the local DSH host (127.0.0.1) for uploading mpkg / streaming wallpapers — never through any third party
- No sensitive content: no paths, keys, tokens or personal info in the source
- No third-party closed source: depends only on DSH's bundled react and the official slots/locale interfaces
- Reference projects (all open source): dsh-bg-image (MIT, template), unmpkg (GPL-3.0, mpkg binary format only), repkg (GPL, .tex format research), astc-encoder (Apache-2.0, local decode experiments)
- Data boundary: all parsing happens locally in the browser; localStorage only stores background data URLs and option edits
File Layout
dsh-mpkg-wallpaper/
├── package.json # dsh.bundle + dsh.client manifests
├── cordis.patch.yml # plugin install declaration (for dsh plugin add)
├── lib/
│ ├── index.js # host side: large-file upload/streaming + Steam discovery + custom folders
│ └── client.js # browser side: mpkg parser + settings page + background DOM + blur system + wallpaper library
├── tools/ # mpkg/tex/mdl reverse-engineering tools (for developers)
├── README.md # 中文说明
└── README.en.md # this file (English)
Notes for Distribution
Portability
- No absolute paths, no local ports, no environment-specific config; only DSH's bundled react and the official slots/locale interfaces
- Custom nav icon: replace the
NAV_ICONconstant inlib/client.js(default: a hand-drawn "landscape" SVG, no trademark) with your own icon (20×20, SVG data URL or base64 PNG recommended)
Reverse-Engineering Tools (tools/)
| Tool | Purpose |
|---|---|
unmpkg.py |
mpkg container parser/extractor (PKGM0014/0018) |
tex2png.py |
TEXV0005 texture decoder (DXT5/R8, etc.) |
mdl_explorer.py |
.mdl structure explorer (block tags/meshes/float sections) |
xref.py |
wallpaper64.exe string xref + disassembly (capstone) |
MDL-格式分析笔记.md |
.mdl format reverse-engineering notes (container/mesh solved, skeleton = JSON, animation WIP) |
Wallpaper Format Research Summary (for other developers)
- mpkg: PKGM0014 (video type: mp4+gif+json) / PKGM0018 (scene type: scene.json+tex+mdl+shader)
- tex: TEXV0005; format 5 = DXT family, format 34 = embedded MP4 video texture (the 4K animation of customize wallpapers lives right in there)
- mdl: MDLV00xx block container; mesh = 8 floats/vertex; MDLS0003/0004 contain JSON skeleton poses; MDLA = animation
Scene Rendering Feasibility
- Full scenes (Live2D puppets) can only be rendered by proprietary runtimes: the Wallpaper Engine app's native
libscenejni.so(40 MB, embedded Chromium + proprietary puppet renderer). The open-source we-layerd (Rust) bundles the official renderer but is Linux Wayland only (GNOME / niri / Hyprland / KDE Plasma) — it does not run on Windows or inside Termux proot. - There is no mature WE scene renderer for browsers (wallgl is a prototype without puppet support; pixeltris/wallpaper-engine-web is gone) — regardless of OS, no browser can render Live2D scenes directly.
- Cross-platform path: render externally into a video, then use the plugin's video background (MP4/WebM stored in IndexedDB, played in a looping
<video>):- Windows: the official Wallpaper Engine (Steam, native full-scene rendering) or the open-source Lively Wallpaper (video/web/app wallpapers; does not parse WE scene format) → screen-record to mp4
- Linux desktop: render with we-layerd → screen-record
- Mobile: screen-record in the Wallpaper Engine app
- The plugin behaves identically on every platform (Windows/Linux/macOS/mobile): preview.gif, embedded video textures and time-of-day switching all work.
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 4430
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 2101
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1924
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 362
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
omdsh-dev/dsh-genui★ 214
Interactive UI components rendered inline in replies: layout, charts, forms, quizzes, mermaid, 3D scenes, and an action event loop back to the model.
huiliyi37/dsh-tianshu-tui★ 211
A terminal UI (TUI) for DeepSeek Harness.