开机动画 · Startup Animation
启动画面、界面主题、桌面宠物 —— 一个插件,三件事都办了。
项目简介
开机动画(Startup Animation) 是装进 DeepSeek Harness 的一套外观插件: 启动画面 + 界面主题 + 桌面宠物,一份素材管三处,不用装三个插件。
- 启动画面 —— 启动时在加载页前面盖一层动画,并监听应用真正就绪的时刻: 界面一接管就淡出,你等的永远是应用本身,不是动画。
- 界面主题 —— 同一段视频或同一张图还能铺到应用界面后面当背景。五套预设一键换观感, 遮罩、模糊、色彩浓度各自可调,出厂即最透;字色按壁纸的实测对比度反推,暗壁纸下也看得清。
- 桌面宠物 —— 透明的小动物浮在界面上,自己轮播动作。能拖着走,甩出去会带着惯性 撞边弹回来;每只各记各的大小和位置,可以同时养两只。
插件通过内核的两个扩展点接入:webserver/index-inject 注入覆盖层与样式,
webServer.register 提供素材与管理路由。运行时不依赖任何 npm 包,浏览器半边只从宿主的
模块表 require('react'),装好即用、无需构建。
开箱自带 9 段视频 / 9 张壁纸 / 9 段语音,外加两只桌面宠物(合计 122 段动作), 也支持上传你自己的 MP4 / WebM / GIF / PNG / JPG / MP3。素材在设置页里点卡片即用, 启动时长可以在 3–30 秒之间调;声音有两个彼此独立的开关——视频自己的音轨, 以及单独的开机音频。
核心特性
启动画面
- 装上就有 —— 零配置,内置动画立刻播放
- 两种玩法 —— 内置素材库任选,或上传自己的文件
- 时长自己定 —— 3–30 秒;点击跳过不受它限制
- 绝不扣住你 —— 点击、
Esc/Enter/空格、或者干等,每条路都能出去 - 干净的画面 —— 只有动画本身,右下角一枚
Esc键提示;不出问题不冒任何文字 - 失败即降级 —— 任何一步出错都退回 Harness 原生启动页,不阻塞启动
界面主题
- 同一个素材库 —— 视频或图片都能铺到界面后面,开机动画那条线不受影响
- 五套预设 —— 亮 / 暗 / 原图 / 通用(绿)/ 通用(紫),换的是颜色,点一下就切
- 出厂即最透 —— 面板不盖、画面不压、不糊;要遮挡是往上加,不是从满格往下减
- 字糊不掉 —— 整套观感没有一处
backdrop-filter,正文对比度永远 ≥ 4.5:1
桌面宠物
- 两只,122 段动作 —— 噜噜 13 段、女仆鲸鱼娘 109 段,待机时自己随机演一个
- 各走各的 —— 每只自己的位置、大小、待机节奏和甩抛物理,可以同时开两只
- 拎起来能甩 —— 带惯性地飞、撞到边缘弹回来、停稳回待机,飞的时候还能再抓住
- 加宠物不改代码 —— 往
builtin/宠物/<名字>/放一个pet.json和若干 webm 就行
通用
- 声音两个独立开关 —— 视频音轨与独立音频各管各的,可任意组合
- 更新前先看清 —— 设置页的「更新公告」直接显示 Release 说明,不用跳 GitHub
- 卸载与升级都由你 —— 有新版只提示、你点一下才装;不需要了就卸载
界面预览
视频素材库 —— 卡片点选即用,来源直接标在卡片上(内置 / 上传),当前在用的那张标「使用中」:

壁纸素材库 —— 同样点卡片即生效,来源标记同上:

桌面宠物 —— 浮在界面上的一只小动物,自己轮播动作,点它、拖它、换大小:

设置页顶部的宠物卡直接换:点一下另一只,浮层立刻换装,位置和大小跟着走,不用重启。
噜噜 —— 13 段动作,按 4 类展示(互动 / 休闲 / 工作 / 节庆):

女仆鲸鱼娘 —— 109 段动作,按 11 类展示,配搜索和「随机一个」,不会铺满一屏:

实际效果 —— 内置素材选中之后,Harness 启动时看到的就是这些(动图无声;带语音的三段,声音要在设置页里直接预览):
《薰衣草花语-等你爱我》 · 24 秒 · 1080p · 带语音

《dsh-大肥鱼》 · 8 秒 · 720p · 带语音

安装
四种方式,任选一种。装好后都在 设置 → 开机动画 里配置,首次安装完刷新一次页面即可。
代码在国内两个地方都放了一份,内容一致:GitHub 与 Gitee。版本号、Release 与 npm 包以 GitHub 为准。 方式二到方式四都有 Gitee 通道,GitHub 慢的时候替换链接即可,见每节末尾。
方式一:搜包名(最简单)
插件已发布到 npm,DSH 0.2.1+ 的插件管理器能直接装。
- 打开 设置 → 插件,点 添加插件
- 插件名填
dsh-plugin-startup-animation - 点 安装,完成后刷新页面
包名也可以在 npm 页面 上核对版本。
方式二:直链(不走 npm)
GitHub 慢、或想直接从 Release 装时用这条。这条路不需要 npm,也不需要 git。
- 打开 设置 → 插件,点 添加插件
- 插件名填下面这条地址
- 安装源保持默认 —— 直链不经过安装源,选哪个都不影响
- 点 安装,完成后刷新页面
https://github.com/WWFZS/dsh-plugin-startup-animation/releases/latest/download/dsh-plugin-startup-animation.tgz
链接永远指向最新版,收藏一次就够。GitHub 慢的话,用浏览器把同一链接另存为文件,再把
文件的绝对路径填进「插件名」(例如 C:\Users\你\Downloads\dsh-plugin-startup-animation.tgz),
效果一样。
国内走 Gitee 的话用这条:
https://gitee.com/weiwenfengzs/dsh-plugin-startup-animation/releases/download/v1.22.1/dsh-plugin-startup-animation.tgz
Gitee 没有 latest 这种永久链接,地址里带着版本号,换版本要换地址 —— 想一次填对就用上面
GitHub 那条,或者直接下载文件后填本地路径。
方式三:命令行
# 从 npm(profile 需要能访问 npm registry)
dsh plugin --profile <你的 profile> add dsh-plugin-startup-animation
# 或从 GitHub 直链
dsh plugin --profile <你的 profile> add https://github.com/WWFZS/dsh-plugin-startup-animation/releases/latest/download/dsh-plugin-startup-animation.tgz
# 或从 Gitee 直链
dsh plugin --profile <你的 profile> add https://gitee.com/weiwenfengzs/dsh-plugin-startup-animation/releases/download/v1.22.1/dsh-plugin-startup-animation.tgz
本地 .tgz 文件或本地目录路径同样可以,把最后一个参数换掉即可。然后重启 dsh。
方式四:从源码
git clone https://github.com/WWFZS/dsh-plugin-startup-animation.git
# 或者从 Gitee 克隆(内容一致)
git clone https://gitee.com/weiwenfengzs/dsh-plugin-startup-animation.git
dsh plugin --profile <你的 profile> add /该仓库的绝对路径
官方 DSH 桌面版:请从应用内的 设置 → 插件 安装(方式一或方式二)。那个 profile 归应用的插件管理器管,命令行改动无效。
怎么用
打开 设置 → 开机动画(入口在侧栏的设置列表里)。
| 控件 | 作用 |
|---|---|
| 显示开机动画 | 总开关。关掉 = Harness 原生启动页。 |
| 视频带声播放 | 让视频播它自己的音轨(前提是文件里真的有音轨)。 |
| 开机音频 | 动画期间另播一段音频文件。 |
| 展示时长 | 3–30 秒,视频与壁纸共用。跳过不受它限制。 |
| 启动画面素材 | 当前素材预览,以及「恢复默认」(回到内置动画)。 |
| MP4 / 壁纸 / 主题 / 音频 / 宠物 / 更新公告 六个页签 | 前两个与音频是素材分类:点卡片即选用、上传即入库。主题把任意视频或图片铺成 DSH 的界面背景。宠物是开关、大小、换宠物与动作预览(动作多的按分类展示 + 搜索)。更新公告是只读页,显示最新版 Release 的更新说明。 |
| 卸载 / 更新 | 装在当前 profile 里时显示。卸载插件会把它移除(设置与上传素材保留在磁盘);有新版时版本号变成一个更新按钮。两者都要重启 DSH 才生效。从源码目录 link: 进来的安装不给更新按钮——那条依赖不指向任何版本。 |
没选素材时,插件会播放自己的内置动画(配色随应用深浅色走的旋转徽标)。 选了素材就用素材;「恢复默认」把它换回内置动画。把总开关关掉,才是 Harness 原生的启动页。
页面右上角的 立即刷新 会重载页面让新配置生效。任何设置都不需要重启 dsh。
界面主题(壁纸)
同一个素材库里的任意视频或图片都能当界面主题:进应用之后它铺在整个界面后面, 开机动画该怎么用还怎么用,两条互不影响。
有几段内置视频不适合铺满整屏(竖屏短剧、人物特写那种,铺上去只剩一团糊), 它们只在主题页签里被筛掉,素材库里照旧在、开机动画照旧能用: 550C-赛博控制台、薰衣草花语-等你爱我、dsh-大肥鱼、少司缘。
设置页 主题 页签里:
- 开关 —— 关掉就是原生界面,素材与预设都留着
- 五套预设 —— 换的是颜色:亮(白釉)、暗、原图、通用(绿)、通用(紫)。 每格右上角标着这套预设在这张壁纸上算出来的对比度。 点一下就换掉整套颜色,遮挡一律回到 0 —— 看到的一定是原样的壁纸
- 三根滑杆 —— 遮罩厚度(画面压暗多少,0–80%)、壁纸模糊(0–10px)、色彩浓度, 全部即时生效
出厂就是最透的那一档。 刚装上、刚换预设,壁纸都是原样透出来的:面板不盖、画面不压、 不糊。要遮挡是往上加,不是从满格往下减 —— 你不需要先把每根滑杆拖到底才能看见原本的样子。
面板是玻璃,不是实色块。 三个区域(侧栏 / 会话区 / 底栏)的底色是半透明的玻璃色, 壁纸从这层底下透上来;玻璃色由预设给。
遮挡只有一根:遮罩厚度。 它压的是壁纸本身,上限 80% —— 再高就看不见壁纸了, 留 20% 是给"我还想看到这是张图"的底线。
字不会被糊掉。 整套观感里没有一处 backdrop-filter:它糊的是元素背后的所有内容,
包括列里自己的正文。要模糊只模糊壁纸层本身,上限 10px。
你的字不会被吃掉。 壁纸只接管颜色,字号、字体、行高一个都不碰(那是内核自己管的 两条独立变量)。面板全透的时候,字后面会垫一层文字保险层(气泡、选中行、输入框), 所以正文永远 ≥ 4.5:1;字色按面板的实际对比度选,不是拍脑袋。
设置页不跟着壁纸变。 插件自己画的界面固定在原生外观(启动时抄一份内核的原生底色), 在里面调主题看到的就是真实效果,不会越调越看不清。
换预设、换素材、开关、拖滑杆都是即时生效的:点下去当场就重画,不等回包、不用刷新页面。
版本与更新
设置页标题旁有一枚版本号,显示你实际装上的版本(直接读包自己的清单)。
- 已是最新:就只是一枚版本号,不打扰你。
- 有新版:它变成一个按钮,点一下就地更新(下载 Release 里的 tgz、替换自己的文件), 完成后重启 DSH 即可——不用去 GitHub 手动下包。更新成功后标题立刻换成新版本号。
- 检查不到:离线、防火墙拦了、或者 GitHub 不可达时,只是一枚安静的版本号, 不会变成报错状态——更新检查是锦上添花,不是插件的依赖。
不管你是从 npm、直链还是源码装的,一键更新都从 GitHub Release 取包——那条 tgz 直链是
唯一的更新来源,所以哪怕当初用 npm i 装的,点了更新之后也会切到 Release 版本。
这条对 GitHub 不可达的环境不成立:版本检查和安装包都指向 GitHub,检查不到时那只是一枚 安静的版本号,不会报错。走 Gitee 装的用户请手动换包(下载新版 Gitee Release 的 tgz 覆盖安装), Update 按钮不会也不能帮你从 Gitee 更新。
设置页还有一个 更新公告 页签:内容就是最新版 Release 的发布说明(同一次更新检查 顺手带回来,不另发请求),装没装新版都能先看清"这次改了什么";取不到就安静地显示 「检查不到更新」。
插件不会在你不知情时更新自己:没有定时、没有后台检查着就动手。只有你点那颗 按钮、或自己跑命令,更新才会发生:
# 覆盖安装,设置与已上传素材都会保留
dsh plugin --profile <你的 profile> add https://github.com/WWFZS/dsh-plugin-startup-animation/releases/latest/download/dsh-plugin-startup-animation.tgz
你的配置($DSH_HOME/startup-animation.json)和上传素材
($DSH_HOME/startup-animation-media/)都在包外面,升级不会动它们。
桌面宠物
设置页的 宠物 页签会让透明小动物浮在界面上(不影响任何操作,它就是浮在页面上的一层)。 可以同时养好几只,每只各自活动。
- 多只同屏:噜噜(13 段动作)和女仆鲸鱼娘(109 段,素材来自社区 dsh-pet,署名见下)。 每张卡右上角有个开关,开一只、开两只、全开都行;关掉的那只占用的素材和内存当场释放
- 点卡片 = 看哪只,不影响宠物显不显示:下面的动作列表跟着换成那只的动作
- 各走各的:每只有自己的位置、自己的大小、自己的待机节奏、自己的甩抛物理 —— 一只在飞,另一只照样待在原地呼吸;大小滑杆跟着当前看的那只走
- 自己演:待机动作循环,每隔 15–35 秒随机演一个小动作,演完回待机;拖动时循环 「拖拽悬空」,左键随机一个「点击回应」,同时「咔哒」一声
- 甩抛反弹:拎起来甩出去,它会带着惯性飞、撞到屏幕边缘弹回来、慢慢停稳再回待机; 飞的时候还能再抓住它
- 右键菜单两级:一级是分类(带数量),点进去是这个分类里每个动作的完整名字, 点哪条演哪条;另有随机一个、归位(所有宠物一起回右下角)、隐藏(只关这一只)—— 一百多段动作不会摊成一屏,也不用在几十条里找
- 自己会动:待机 15 秒后随机演一个小动作,演完回待机再等 15 秒;动作从全部分类里抽
- 动作多的宠物按分类展示:12 段以内平铺动作格;超过就显示分类封面卡 + 搜索框 (最多 8 条命中)。动作格和搜索结果都带缩略图,一眼能看出是哪一段;正在演的会高亮
- 大小 100–320 px,每只各记各的;拖动换位置,松手记住(也是每只自己的)
- 加宠物不用改代码:
builtin/宠物/<名字>/放一个pet.json和若干 webm, 文件名就是动作名 - 素材已经去掉绿幕和脚下的地面投影,所以它是悬浮在界面上的
形象与授权
宠物形象来自社区二创项目 dsh-pet,按原作者要求 完整声明如下:
- 素材(动画 / 提示词 / 源视频):允许开源使用,禁止商用
- 二次创作约定:基于本项目的衍生 / 改版 / 换皮作品,在 GitHub 仓库、产品官网等公开 渠道上须附上原作者 GitHub 地址 https://github.com/PC2005-cloud/dsh-pet
- 形象出处:宠物形象为社区二创的 DeepSeek「大肥鱼」(鲸鱼娘),非 DeepSeek 官方 形象;原型「溟月」出自 B 站 @上善无形,DeepSeek 版(女仆鲸鱼娘)设计出自 B 站 @ZipZipPie
- 形象授权:CC BY-NC-SA 4.0 (署名 · 非商业 · 相同方式共享)。声明原文:「大肥鱼是遵守 CC BY-NC-SA 4.0 协议的形象, 不可以以任何形式商业化。若您非常喜爱该形象,希望其拥有实体,您可以自行定制。」
噜噜动作设计是本项目原创素材,授权跟随上方。
配置文件
配置存在 $DSH_HOME/startup-animation.json(一般是 ~/.dsh/startup-animation.json),
可以直接手改:
{
"boot": {
"enabled": true,
"file": "builtin/MP4/多重影像.mp4",
"durationSec": 8,
"audioEnabled": true,
"audioFile": "builtin/音频/宝宝安慰.mp3",
"audioVolume": 0.4
},
"wallpaper": {
"enabled": true,
"file": "builtin/图片/漫威-漫威宇宙.jpg",
"preset": "frosted",
"scrim": 0
}
}
file 可以写 builtin/... 包内相对路径,也可以写你自己素材的绝对路径。
durationSec 默认 5、范围 3–30;其余键都有合理默认值,见 index.js 的 DEFAULT_CONFIG。
wallpaper.file 是界面主题用的素材(与 boot.file 各记各的)。preset 取上面五套之一的
id,只决定颜色;scrim(0–0.8)决定画面压暗多少,出厂 0 = 最透;
blur(0–10px)/ saturate(0.6–1.6)是壁纸本身的两根微调。
旧配置里若还留着 glass 或 surfaceBlur,会被直接忽略(玻璃厚度与面板模糊都已经收掉)。
支持的素材
| 类型 | 格式 | 说明 |
|---|---|---|
| 视频 | mp4 m4v webm ogv ogg |
等待期间循环播放。内置为 1080p / 8–24s / faststart(dsh-大肥鱼 为 720p)。 |
| 图片 | gif apng webp png jpg jpeg |
gif/apng/webp 会动;静图带缓慢呼吸缩放。 |
| 音频 | mp3 wav m4a aac flac opus |
仅用于开机音频。 |
视频与图片除了当开机动画,也都能当界面主题(见上面的「界面主题」)。音频不行。
上传落盘目录:$DSH_HOME/startup-animation-media/,单文件上限 128 MiB。
内置素材库
以下全部随包分发,在列表里直接可选:
- MP4 —— 8 段,全部为 H.264 faststart(可直接流式播放,每段 1.6–6.2 MB)。
dsh-大肥鱼、薰衣草花语-等你爱我、少司缘带语音音轨(打开「视频带声播放」即可听到),其余六段无音轨 - 壁纸 —— 7 张,附带预生成的 480px 缩略图供列表使用
- 音频 —— 9 段语音
- 宠物 —— 噜噜 13 段 + 女仆鲸鱼娘 109 段透明动画(VP9-alpha webm)。 它们不进素材列表,只由宠物浮层取用。
所有素材均来自网络,感谢各位 UP 主的优秀作品。仅作演示用途,版权归原作者所有; 商业再分发前请先看 ASSETS.md 确认每个文件的来源。
它如何做到"不添乱"
- 覆盖层挂在
document.body上、不在#root里,不会干扰应用的水合(hydration)。 - 每条失败路径(文件不在、编码不支持、自动播放被拦、内核启动慢)都有时间上界, 统一退回原生启动页。
- 素材路由完整实现了
Range/ETag:拖动进度正常,切片响应不会被当成完整文件缓存。 - 上传素材是真删;内置素材只从列表隐藏,包体保持完整。
对未来 DSH 版本的兼容性
Harness 迭代很快,而这个插件用到两个内核扩展点(webserver/index-inject 做开机覆盖层,
webServer.register 做路由和素材服务)。两处都按"未来内核改了也只降级、不弄坏你的
Harness"来处理:
| 如果未来的 DSH 改了…… | 会发生什么 |
|---|---|
webserver/index-inject 的事件名或签名 |
插件打一条警告,不带动画正常启动;显示原生启动页 |
webServer 服务(路由、素材服务) |
不提供设置页入口;Harness 其余部分完全不受影响 |
设置页插槽 API(settings.section) |
设置入口消失,不抛异常 |
| 运行期其它任何意外 | 每条失败路径都回落到原生启动页——覆盖层永远不允许阻塞启动 |
声明的兼容范围(engines.dsh,并镜像一份到 dsh.engines,让插件管理器和市场从
任一位置都能读到)是 >=0.2.0。插件运行时不依赖任何 npm 包,浏览器半边只从宿主的模块表
require('react')——不存在"随包打进了某个会和内核版本脱节的库"这种隐患。
启动日志会同时写明插件版本和(能读到时)宿主内核版本。万一哪次升级把动画弄没了, 第一眼就该看那一行。
环境要求
- DeepSeek Harness 0.2.0+(Web 界面)
- Node.js ≥ 22.12.0(跟随 Harness 自带的运行时即可)
插件运行时不依赖任何 npm 包,安装时也不需要构建——纯 ESM + 静态素材。
卸载
dsh plugin --profile <你的 profile> remove dsh-plugin-startup-animation
$DSH_HOME/startup-animation-media/ 里上传的素材是你自己的数据,插件不会替你删。
开发
node tools/preflight.mjs # 全套检查 + 出发布目录
node selftest.mjs # 纯函数 + HTTP 语义测试
node tools/boot-runtime.mjs # boot.js 运行时行为测试(DOM 垫片 + 可控时钟)
node tools/client-test.mjs # 设置页行为测试(React 垫片)
node tools/boot-css-test.mjs # 开机动画样式测试(真浏览器)
node tools/host-smoke.mjs # 用真实路由处理器跑一遍 HTTP
node tools/make-thumbs.mjs # 重新生成列表缩略图(需要 ffmpeg)
node tools/make-posters.mjs # 重新生成视频卡片封面(需要浏览器)
node tools/optimize-builtin.mjs # 重新生成 faststart 变体(需要 ffmpeg)
许可证
MIT —— 见 LICENSE。
内置素材仅用于演示;商业再分发前请先看仓库里的 ASSETS.md 确认每个文件的来源。
No comments yet. Be the first to write one.