DSH 开屏动画插件介绍

前言

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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜