前言¶
DeepSeek Harness (DSH) 采用「一切皆插件」的架构。在应用启动阶段,为了提供更完整的启动体验或品牌展示,通常需要自定义启动画面。dsh-splash-screen 是一个纯插件实现的开屏动画,提供全屏启动动画,支持跳过,并可在侧栏「插件」页开关。
核心功能¶
该插件主要包含以下特性:
- 全屏启动动画:提供全屏的启动展示,覆盖默认的启动壳。
- 可跳过:支持通过点击任意处、按键、触屏、滚轮或点击右下角 SKIP 按钮跳过。
- 纯插件实现:不依赖应用本体修改,通过插件机制集成。
- 侧栏开关:可在侧栏「插件」页直接控制插件的启用与禁用。
- 音效处理:音效默认关闭,采用运行时合成(不依赖外部音频文件),并支持在右下角 SOUND 按钮开启。
- 无障碍支持:包含
role="progressbar"与aria-valuenow,状态变化支持aria-live播报,并尊重prefers-reduced-motion偏好设置。 - 两半结构:采用 Node 半和 Client 半的结构,通过注入行进行通信。
- 会话控制:同页面会话内只播一次。
安装¶
安装前请确保已安装 DSH(桌面版或浏览器版)。dsh plugin 会通过 pnpm 将仓库安装到指定 profile。
安装命令¶
桌面版:
dsh plugin --profile desktop add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"
浏览器版:
dsh plugin --profile web add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"
安装完成后,桌面端需要重启一次应用。这是因为 node 半的注入行是在宿主启动时收集并下发的,重启后注入行才会生效。
结构说明¶
该插件采用两半结构实现,确保在宿主加载机制下正常工作。
Node 半:封面与注入¶
Node 半负责在应用启动早期进行覆盖,防止默认启动壳闪现。它使用官方的结构化注入行向 index 注入:
- 样式注入:同底色的封面样式,覆盖默认启动画面。
- 脚本注入:立刻铺出封面节点(底色与开屏舞台一致),并负责在 Client 半挂载或超时后移除自身。
Client 半:动画本体¶
Client 半负责具体的动画逻辑,通过懒加载 CJS 模块加载。它将自己挂载到 shell.overlay 槽位,使用 position: fixed 铺满屏幕。样式注入使用单个 <style> 标签,并使用 sp- 前缀类名以避免与宿主界面冲突。
使用方法¶
跳过动画¶
在动画播放期间,可以通过以下任意方式跳过:
* 鼠标点击任意处
* 按任意键
* 触屏操作
* 滚动滚轮
* 点击右下角的 SKIP 按钮
音效控制¶
音效默认关闭。点击右下角的 SOUND 按钮可开启,偏好设置会保存在 localStorage 中。音效为运行时合成,不受浏览器自动播放策略影响。
视觉预览¶
在本地开发或验证效果时,无需运行 DSH。用浏览器直接打开仓库里的 preview/index.html 即可查看独立效果。
已知边界与注意事项¶
- 无「应用启动即显示」:插件无法覆盖宿主自带的
[data-dsh-boot]启动壳。它覆盖的是「窗口出现 → 界面挂载 → 动画结束」这一段。 - 注入行生效时机:新增或修改注入行(如修改
dsh.profile.bundles)后,桌面端必须重启应用才能生效。 - 浏览器端刷新:对于浏览器版 DSH,刷新页面即可使注入行和动画生效。
- 贴图处理:插件贴图(如立绘)不内联成 data URI,以避免撑爆注入脚本或阻塞主线程。
开发与定制¶
本地开发¶
无运行时依赖,需要 Node ≥ 20.11。源文件位于 src/splash.js,构建产物为 client.js 和 index.js。
node scripts/build.mjs # 构建 client.js + index.js
node scripts/build.mjs --check # 只比对不写盘
替换立绘¶
如需替换立绘,将图片重命名为 art.webp 并保持文件名不变即可。插件运行时会按文件名由宿主路由按需加载,不会将图片内联成 data URI。
许可证¶
MIT License。