前言¶
DeepSeek Harness(DSH)启动时,默认会先出现官方的 HARNESS / Loading plugins… 启动页。若想在应用 UI 挂载之前就展示自定义全屏画面,浏览器半边插件往往来不及:它们要等插件条目全部激活后才运行,那时官方启动页已经画出来了;官方实践文档也禁止插件向 document.body 追加节点或替换 app 根节点。
oumaekumiko0821/dsh-splash-gojo(包名 dsh-boot-splash)走另一条路:只做 host 半边,在宿主渲染启动 HTML 时注入样式、遮罩结构和交接脚本,把一张 JPEG 内联为 data URI,零运行时 npm 依赖。下面介绍它做什么、怎么装、怎么调参。
这是什么¶
维护者 oumaekumiko0821 在 GitHub 开源的 DSH 开机动画插件,社区目录 SkillHub 分类为「趣味换装」。当前仓库版本 1.0.0(见 package.json),代码 MIT 许可;默认启动图素材另有出处说明,不在 MIT 范围内(见仓库 NOTICE)。
一句话:把一张图变成全屏启动序列——第一帧就位,启动期间缓慢缩放、横向光带扫过、中心辉光与 HUD 进度,应用挂载完成时闪一下并淡出。
核心功能¶
视觉与交互¶
- 全屏主视觉:图片
cover铺满,从约 1.14 倍缓落到 1.005 倍。 - 横向光带:带辉光的扫描光带从左到右。
- 中心辉光:中央紫色光晕由暗到亮,随呼吸停在中段。
- HUD:左下字标(默认
DEEPSEEK HARNESS,字距收拢 + 去模糊浮现)、副标题、进度条(先自行推进到 88%,就绪时补满)、阶段文案(初始化内核 → 装载插件 → 恢复会话 → 就绪)、右上角百分比。 - 跳过:点击屏幕任意处,或按
Esc/ 空格 /Enter;约 1.5 秒后右下出现「点击跳过」提示。 - 语言:跟随宿主
<html lang>,中文环境显示中文,其它显示英文。 - 无障碍:
prefers-reduced-motion: reduce时关闭位移动画,只保留淡入淡出。
为什么是 host 插件¶
开机动画必须早于应用 UI。本插件监听 webserver/index-inject,每渲染一次启动 HTML 就推三行:
| 行 | 位置 | 内容 |
|---|---|---|
style |
<head> |
全部动画 CSS + 兜底动画 |
html |
<body> 之后 |
遮罩结构 + 内联为 data URI 的图片 |
script |
同一 body 组 | 就绪 / 上限 / 跳过交接逻辑 |
没有 client 半边,不 import 其它模块;遮罩在 <div id="root"> 之前,React hydrateRoot 不会碰到它。
就绪判断:前端加载卡 [data-dsh-boot] 被 React 接管替换时视为挂载完成;#root 出现非加载卡子节点为兜底。
三层退出(避免界面被卡住):
- 就绪信号 → 淡出(约 620ms + 闪光)。
- 硬上限
maxShowMs(默认 9s)→ 脚本自行淡出。 - 纯 CSS 兜底:
dshs-failsafe在maxShowMs + 1.5s时将visibility设为hidden,即使脚本全部失败界面也会露出。
安装与启用¶
插件以当前 dsh 进程权限运行;安装前请自行阅读仓库源码与许可证(含启动图 NOTICE)。
dsh plugin --profile <profile> add <本目录绝对路径>
Windows 下必须使用绝对路径(裸目录名会被当成 npm 包名)。因声明了 dsh.bundle,管理器会同时写入 dsh.profile.bundles。
- 新增插件需重启宿主:动画写在启动 HTML 里,重启后首次加载页面才能看到。
- 桌面端(Electron)的
desktopprofile 由应用独占,全局dshCLI 会拒绝;须通过应用自带载体 CLI 或应用内插件管理页安装。
卸载与暂停¶
卸载:
dsh plugin --profile <profile> remove dsh-boot-splash
暂停(不卸载):在 profile 的 cordis.patch.yml 增加一行,重启后生效:
- id: dsh-boot-splash
disabled: true
调参¶
在同一 patch 条目的 config: 块中修改;保存后下一次页面加载生效,不必重启宿主:
- id: dsh-boot-splash
name: dsh-boot-splash
disabled: false
config:
minShowMs: 2000 # 开场动画时长,同时驱动进度条自行推进
maxShowMs: 6000 # 硬上限,超时自行收掉
wordmark: 'DEEPSEEK HARNESS'
allowSkip: true
enabled: true # false = 不注入任何行
取值会被夹到安全范围(minShowMs 200–30000,maxShowMs 500–120000),wordmark 会做 HTML 转义。
更换启动图¶
替换 assets/boot-splash.jpg(任意尺寸 JPEG)后执行构建,图片会重新内联进 lib/index.js:
npm install
npm run build
仓库自带测试(需 jsdom):
npm test
tests/verify.mjs 会走宿主真实路径:收集注入行 → jsdom 渲染并执行脚本 → 断言遮罩、退出时机与清理。若要验证宿主是否把行写进 HTML,可用隔离 profile 冷启动探针(README 中有 dsh --profile splash-probe --no-open --port 0 等步骤)。
适用场景与注意¶
适合:希望在 DSH 首屏前展示品牌化或趣味开机动画、且接受每次页面加载(含刷新)都会播放一次的语义。
边界(来自 README):
- 不需要时在 patch 里
disabled: true或config.enabled: false。 - 启动期遮罩拦截指针事件(便于「点击跳过」);就绪后节点移除,不残留。
- 不做亮度/主题自适应;默认暗色遮罩,浅色主题下偏「片头」观感。
- 图片内联进 HTML,每次加载约 400KB 本机传输。
- 遮罩
z-index: 100000,仅存在于启动期。
DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。