DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Web Start Ui — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
W

@linxin666/dsh-web-start-ui

Web Start Ui

DSH Web GUI 的启动动画——在界面呈现前全屏播放启动视频(软件包内置皮肤,也可从设置页面上传自定义皮肤),并设有独立的一级设置分区。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:stushansusu/dsh-web-start-ui#00eaa6f75788cd2c4eecda79e1344d3dd73d8eee
README兼容性版本

兼容性与来源证明

Web Start Ui 以 @linxin666/dsh-web-start-ui 发布,当前版本为 0.4.7。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/17

版本

0.4.7stable
2026/10/17
0.4.6stable
2026/10/12
0.4.5stable
2026/10/7

相关插件

正在加载相关插件…

最新版
0.4.7
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
Apache-2.0
发布源
github
GitHub
★ 2
周下载
0
最近提交
2026/10/17
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH 技能中心:按来源(bundled / project / user / custom / runtime)浏览已加载的技能,在 Web GUI 面板中启用或禁用、创建和删除技能。Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。

README

dsh-web-start-ui · Startup Animation for the DeepSeek Harness (DSH) Web GUI

English | 中文

   

Startup animation for DeepSeek Harness (DSH)
Launch video skins · On screen before the shell paints · Click or Esc to skip · Its own settings page

An extension for the DSH Web GUI and desktop client: the page opens on a launch video instead of a cold, half-assembled shell, and the curtain lifts when the video ends. It ships two skins, accepts your own uploads, and adds one first-level settings page (Settings → Startup animation). No DSH source change, no third-party request.

What it does

  • Playing before the GUI paints. The host half contributes one inline script to the served index.html, so the video element exists and is fetching ~30 ms into navigation. Measured on a 0.2.0-rc.2 host with the shipped skin: element at 3 ms, metadata at 211 ms, playback at 622 ms, while the GUI's own first paint is at 191 ms — the animation is already covering it.
  • Adopted, not restarted. The browser half takes over that same <video> element, so the animation keeps its buffer and its currentTime instead of jumping back to the start.
  • Lifts when the video ends (and not before the shell has painted, bounded by a hold cap). A skin the browser cannot decode lifts on a safety timer instead: a broken video never becomes a wall in front of the GUI.
  • Two sources of skins. Two are shipped in the package; more can be uploaded from the settings page and deleted there again. See Launch skins.
  • Skip on demand. Click anywhere or press Escape to lift it immediately.
  • Theme aware. It follows the shell's light/dark preference, remembers it for the next boot's early backdrop, and honours prefers-reduced-motion.

How it works

HalfWhat it does
Host (src/index.ts)Serves the launch-skin catalog and the video bytes (src/host/routes.ts: list, select, upload, delete, and Range-capable asset GETs; mutations are loopback-only on top of the platform's own browser auth), and contributes the served index's early backdrop: a global with the selected skin's URLs plus one inline script that paints the backdrop — and starts the video — before the module graph is requested.
Browser (src/client/index.ts)Adopts the <video> the host started, wraps it in the curtain (the theme backdrop, the skip footnote, the outro), removes the early layer it is covering, and registers the settings section.

The handoff is deliberately narrow: the early layer is pointer-events: none, one z-index step below the real curtain, and it is removed the instant the curtain exists (the adopted video is moved out of it first) — the outro fades to transparent, so a leftover backdrop would otherwise reappear as the GUI came back. A browser half that never loads leaves no dark window behind: the served row arms its own 15 s removal timer.

Launch skins

A launch skin is a video: one directory holding a skin.json manifest plus the video (and an optional poster frame). Video is the only medium — there is no style engine — so with no skin selected nothing plays at all. Two sources, one shape:

SourceLives inGets there by
Built-inassets/launch/<id>/ in this packagenode scripts/add-launch-skin.mjs <video> --name "..." (--poster, --duration, --name-en optional)
Custom<DSH_HOME>/launch-animations/<id>/the settings page: pick a file, it uploads to the host and becomes selectable

The selected id is host state (<DSH_HOME>/launch-animations/state.json), so every browser of one install opens on the same curtain — and the host can start the video before the module graph is even requested: the served index carries the skin's URLs plus a small inline script that creates the <video>, sets src and calls play(). The browser half then adopts that very element instead of restarting it (measured on a 0.2.0-rc.2 host: element at ~100 ms, GUI first paint at ~230 ms, animated curtain ~600 ms).

Selection. A stored choice wins; with nothing stored (a fresh install, or an id whose skin was replaced) the first built-in skin plays. Choosing No skin stores an explicit null, so the fallback never overrides a choice. The asset route answers with an ETag, so a cached install revalidates with a 304 instead of re-downloading megabytes.

What ships today: two skins, both with a poster frame.

  • assets/launch/qinghua — 青花瓷 · 水墨 (Blue-and-White · Ink), 12.28 s, 2024×1080 HEVC, ~16 MB.
  • assets/launch/whale-senren — 鲸鱼娘 · 千恋万花 (Whale Girl · Senren), 12.25 s, 2560×1440 H.264, ~44 MB. Its poster is frame 0, which is black (the clip fades in from black), so the curtain never opens on the ending frame.

Together they are most of the package download (see Install) and well past the size budget suggested below.

Codec note. qinghua is HEVC (H.265), which browsers play through platform hardware decoding. Chrome's canPlayType('video/mp4; codecs="hvc1"') reports no support and yet plays it fine when the machine has the decoder (verified: metadata at 211 ms, full playback to 12.28 s). On a machine without HEVC decoding the video errors out, the safety timer lifts the curtain, and no animation appears. To reach every machine, whale-senren ships as an H.264 skin — node scripts/bake-skin-video.py <source> <out-dir> --width 1920 --crf 26 --tune animation re-encodes a new one to H.264 and pulls a poster frame. The default is still the first built-in in id order (qinghua), so on a machine without HEVC decoding pick whale-senren from the settings page.

Suggested spec for a new skin — it is fetched on first use and played on every boot, so it is the one asset that can make the GUI slower to appear:

ContainerH.264 mp4 (custom uploads also accept webm and mov)
Picture1920×1080, no audio track
Lengtha few seconds is plenty; the curtain waits for the whole video
Sizeunder 8 MB
moovbefore mdat (faststart) — scripts/bake-skin-video.py writes it that way, scripts/mp4-faststart.py repairs an existing file losslessly
First framethe poster frame is taken from it, and the curtain starts on it
Last framethe curtain fades out of it, so end on a calm frame

Two asset rules that only bite on a cold first boot. (1) moov must come before mdat: a player cannot decode a frame until it has read moov, so with moov last the browser has to fetch the end of the file first. Measured on this package, that delayed the first painted frame by ~0.6 s — and the curtain sat on its poster for that whole time. scripts/bake-skin-video.py writes faststart; python scripts/mp4-faststart.py <file.mp4> repairs an existing file losslessly (it moves moov and bumps the chunk offsets it carries — the media bytes are untouched). (2) The poster must be the video's first frame, not a prettier one from later in the clip: it is what the curtain shows until the first decoded frame arrives, so a poster taken from the end makes the boot open on the last image and then snap back to the start. Take it with --poster-at 0. pnpm run check:launch-assets gates rule 1 in CI; rule 2 needs a video decoder, so it stays on the author.

Custom skins are deleted from the settings page; built-ins cannot be (they are package files).

Settings

ControlValuesNotes
Enabledon / offOff boots straight to the interface — and skips the early backdrop with it.
Launch skinNo skin · every built-in skin · every uploaded oneThe video that opens DSH; upload and delete custom skins from the same page.
ReplayOnce per session · Every loadsession writes a sessionStorage marker.
Click to skipon / offEscape always lifts the curtain.
PreviewbuttonPlays the selected skin once, right now.
ResetbuttonDrops the stored playback preferences and returns to the defaults.

Install

This plugin is standalone on purpose: it is not part of the @linxin666/dsh-web-all aggregate, so it never arrives with the family bundle — install it where you want a launch video, and remove it the same way.

1. Install the package

The package is not on npm yet, so it installs from the repository — which is exactly what the Workshop's one-click install runs for a registered entry that carries no npm field:

# web profile
dsh plugin --profile web add https://github.com/stushansusu/dsh-web-start-ui

# desktop client profile
dsh plugin --profile desktop add https://github.com/stushansusu/dsh-web-start-ui

# or from a local checkout, while developing it
dsh plugin --profile web add link:<path to this package>

Install size: ~61 MB, ~60 MB of it the two shipped skins. That is well past the size budget suggested above. Each video is downloaded once per install and revalidated with a 304 on every later boot; a given boot fetches only the selected skin's video.

Nothing is built at install time. lib/ is committed and shipped as-is, so the install needs no compiler, no network toolchain and no build approval — which is the contract scripts/check-package-contract.mjs and CI pin down.

Working on the plugin? A src/ change still has to be followed by a rebuild of lib/, and that build is not standalone: tsdown.config.ts imports shared/tsdown.client.ts from the dsh-web monorepo. Rebuild in a checkout of that monorepo with this package at packages/dsh-web-start-ui, copy lib/ back, then run node scripts/lib-artifact-check.mjs --write. CI fails when src/ moves without that fingerprint being refreshed. (pnpm install and the typecheck/tests run fine here on their own.)

2. Restart the host

Quit and reopen the desktop app, or restart dsh web. A plugin's host half is loaded at startup — that half serves the skin catalog and starts the video before the interface paints, so a reload is not enough.

3. Open the settings page

Settings → 启动动画 / Startup animation. The default skin (青花瓷 · 水墨 — the first built-in in id order) is selected; press 预览动画 / Preview to watch it right there, or pick 鲸鱼娘 · 千恋万花, the H.264 one.

Day to day

I want to…Do this
Use my own video添加自定义皮肤 → pick an mp4 / webm / mov (≤ 256 MB); it uploads to the host and is selected
Play nothing at allchoose 不用皮肤
Stop it for goodthe 启用启动动画 switch, or uninstall the package
See it again预览动画
Play it only once per window播放频率 → 每个会话一次
Skip a long oneclick anywhere, or press Esc
Delete an uploaded skin删除 on its tile

Where things live

Shipped skins<installation>/node_modules/@linxin666/dsh-web-start-ui/assets/launch/<id>/
Your uploads<DSH_HOME>/launch-animations/<id>/ (default ~/.dsh/launch-animations)
The selected skin<DSH_HOME>/launch-animations/state.json
Playback preferencesbrowser storage — see Preferences

Uninstall

dsh plugin --profile web remove @linxin666/dsh-web-start-ui

Delete <DSH_HOME>/launch-animations as well if the uploaded videos should go too.

Preferences

Split in two, on purpose:

  • Playback preferences live in the browser — dsh:boot-animation:v1 (localStorage: enabled, replay policy, click to skip), dsh:boot-animation:theme (localStorage: the theme the last curtain painted in, which is the early backdrop's only way to know it before the shell exists) and dsh:boot-animation:played (sessionStorage: the once-per-session marker).
  • The selected skin and the skins themselves are host state — <DSH_HOME>/launch-animations/state.json and <DSH_HOME>/launch-animations/<id>/ — so every browser of the install opens on the same curtain, and the host can start the video before the module graph is requested. Nothing here is written to the profile configuration.

Feedback

Feedback group QR code

Scan the code to join the group — bug reports, questions and skin contributions all belong there. When a curtain misbehaves, please say which skin (the tile name), the browser or client version, and whether the animation appeared at all: those three decide whether it is the host route, the codec or the shell handoff.

License

Apache-2.0