🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

启动动画与屏保 lxj5820/dsh-boot-animation

DeepSeek 客户端v0.3.0
lxj58201 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

用全屏短片替换启动页,闲置时自动盖上屏保

65.9/100
综合分
313
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/lxj5820/dsh-boot-animation.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
静态安装检查有提示项,装前建议看一眼 README
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-boot-animation」归属 alice-marx/dsh-boot-animation,装到的可能不是本插件

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-boot-animation @ 0.3.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 09:17:16

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 55 处,展示前 47 条)
  • 写入本地文件
    entry.js:70
    appendFileSync(TRACE_PATH, `${new Date().toISOString()} ${line}\n`, 'utf8')
  • 读取本地文件
    entry.js:571
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    entry.js:581
    const info = await stat(path)
  • 读取本地文件
    entry.js:586
    children = await readdir(path, { withFileTypes: true })
  • 读取本地文件
    entry.js:592
    const childInfo = await stat(join(path, child.name))
  • 读取本地文件
    entry.js:610
    const info = await stat(absolute)
  • 读取本地文件
    entry.js:633
    const inside = await readdir(absolute, { withFileTypes: true })
  • 执行外部命令来自配置/变量
    entry.js:933
    const child = spawn(command, args, { detached: true, stdio: 'ignore' })
  • 写入本地文件
    entry.js:962
    writeFileSync(TRACE_PATH, `boot-animation startup trace\nplugin dir: ${import.meta.url}\n`, 'utf8')
  • 写入本地文件
    entry.js:1350
    await mkdir(dir, { recursive: true })
  • 发起网络请求
    lib/client.js:930
    fetch(MANIFEST, { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:946
    fetch(SCREENSAVER_MANIFEST, { cache: 'no-store' })
  • 发起网络请求
    lib/client.js:1275
    fetch(REVEAL + '?pool=' + encodeURIComponent(which), { method: 'POST', cache: 'no-store' })
  • 发起网络请求
    lib/client.js:1322
    fetch(OPTIMIZE + '?name=' + encodeURIComponent(name), { method: 'POST', cache: 'no-store' })
  • 读取本地文件
    src/remux.js:194
    const buffer = readFileSync(file)
  • 写入本地文件
    src/remux.js:265
    mkdirSync(target, { recursive: true })
  • 写入本地文件
    src/remux.js:266
    writeFileSync(out, output)
  • 读取本地文件
    src/remux.js:330
    const info = statSync(file)
  • 写入本地文件
    src/remux.js:349
    mkdirSync(scratchDir, { recursive: true })
  • 读取本地文件
    src/remux.js:351
    if (!existsSync(produced)) throw new Error('重排没有产出文件')
  • 读取本地文件
    src/remux.js:352
    if (statSync(produced).size !== sizeBefore) throw new Error('重排后的长度变了')
  • 写入本地文件
    src/remux.js:355
    mkdirSync(backupDir, { recursive: true })
  • 读取本地文件
    src/remux.js:356
    if (existsSync(backup)) rmSync(backup, { force: true })
  • 删除本地文件
    src/remux.js:356
    if (existsSync(backup)) rmSync(backup, { force: true })
  • 写入本地文件
    src/remux.js:357
    renameSync(file, backup)
  • 删除本地文件递归
    src/remux.js:360
    rmSync(scratchDir, { recursive: true, force: true })
  • 读取本地文件
    src/remux.js:363
    if (!existsSync(file) && existsSync(backup)) renameSync(backup, file)
  • 写入本地文件
    src/remux.js:363
    if (!existsSync(file) && existsSync(backup)) renameSync(backup, file)
  • 删除本地文件
    src/remux.js:377
    rmSync(file, { force: true })
  • 删除本地文件递归
    src/remux.js:379
    rmSync(scratchDir, { recursive: true, force: true })
  • 删除本地文件递归
    src/remux.js:383
    rmSync(scratchDir, { recursive: true, force: true })
  • 执行外部命令固定命令
    src/idle-probe.js:89
    spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true })
  • 执行外部命令固定命令
    src/idle-probe.js:139
    spawn('taskkill', ['/pid', String(dying.pid), '/T', '/F'], {
  • 执行外部命令固定命令
    src/idle-probe.js:190
    spawned = spawn('powershell', [
  • 读取本地文件
    build-client.mjs:33
    const source = readFileSync(SOURCE, 'utf8')
  • 写入本地文件
    build-client.mjs:42
    writeFileSync(TARGET, HEAD + source + TAIL)
  • 执行外部命令来自配置/变量
    build-client.mjs:47
    execFileSync(process.execPath, ['--check', TARGET], { stdio: 'inherit' })
  • 读取本地文件
    build-client.mjs:49
    const written = readFileSync(TARGET, 'utf8')
  • 发起网络请求
    src/boot-screen.js:1081
    fetch(manifestUrl, { cache: 'no-store' })
  • 发起网络请求
    src/client.js:928
    fetch(MANIFEST, { cache: 'no-store' })
  • 发起网络请求
    src/client.js:944
    fetch(SCREENSAVER_MANIFEST, { cache: 'no-store' })
  • 发起网络请求
    src/client.js:1273
    fetch(REVEAL + '?pool=' + encodeURIComponent(which), { method: 'POST', cache: 'no-store' })
  • 发起网络请求
    src/client.js:1320
    fetch(OPTIMIZE + '?name=' + encodeURIComponent(name), { method: 'POST', cache: 'no-store' })
  • 发起网络请求
    src/screensaver.js:73
    return fetch(url, { cache: 'no-store' })
  • 发起网络请求
    src/screensaver.js:435
    fetch(url, { cache: 'no-store' })
  • 发起网络请求
    src/screensaver.js:1200
    fetch(url, { cache: 'no-store' })
  • 发起网络请求
    src/screensaver.js:2408
    fetch(url, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件:用全窗口视频片段替换内核启动页,随后淡入应用。中文说明见 MANUAL.md

README

由 DeepSeek 最新模型翻译生成
dsh-boot-animation 给 DSH 换掉原生启动页,再给闲置的界面加一层屏保。两个功能各自独立开关,不改 DSH 本体源码,升级 DSH 不受影响。 | 功能 | 一句话 | | 启动动画 | 打开页面时用一段全屏短片盖住 DSH 的启动页,片尾交叉溶解进界面。 | | 屏保 | 闲置一段时间后用全屏层盖住界面,点一下或按任意键收回,退出时播特效。 | 特性 - 素材按扩展名支持四类:视频(.mp4 .m4v .webm .mov)、静态图(.png .jpg .jpeg .avif)、动图(.gif .webp)、Live2D 模型(含 .model3.json 的文件夹)。.svg 与 .mkv 一律忽略。 - 片头池多片随机,先把池子里每条轮一遍再重来,不会连着重复同一条;底部进度条跟内核真实的启动进度走。 - 启动路径上每个走不下去的地方都有上界:素材清单 10 秒不应答就当作没有素材、某段片子 6 秒出不来画面就换下一段、时长未知走 20 秒兜底、内核 15 秒不就绪就提示「启动较慢,点击继续」;Esc / 空格 / 回车随时直接进。 - 设置全在「设置 → 插件」的「启动动画」卡片里,不用重启 DSH:屏保那几项立刻生效,启动动画那几项下次启动生效。 - 屏保两个触发条件任一满足即出现:整机闲置(Windows 读系统闲置计数)与窗口失去焦点。
展开完整文档(README 剩余 1 节)
dsh-boot-animation

给 DSH 换掉原生启动页,再给闲置的界面加一层屏保。两个功能各自独立开关,不改 DSH 本体源码,升级 DSH 不受影响。

| 功能 | 一句话 |
| 启动动画 | 打开页面时用一段全屏短片盖住 DSH 的启动页,片尾交叉溶解进界面。 |
| 屏保 | 闲置一段时间后用全屏层盖住界面,点一下或按任意键收回,退出时播特效。 |

特性

- 素材按扩展名支持四类:视频(.mp4 .m4v .webm .mov)、静态图(.png .jpg .jpeg .avif)、动图(.gif .webp)、Live2D 模型(含 .model3.json 的文件夹)。.svg 与 .mkv 一律忽略。
- 片头池多片随机,先把池子里每条轮一遍再重来,不会连着重复同一条;底部进度条跟内核真实的启动进度走。
- 启动路径上每个走不下去的地方都有上界:素材清单 10 秒不应答就当作没有素材、某段片子 6 秒出不来画面就换下一段、时长未知走 20 秒兜底、内核 15 秒不就绪就提示「启动较慢,点击继续」;Esc / 空格 / 回车随时直接进。
- 设置全在「设置 → 插件」的「启动动画」卡片里,不用重启 DSH:屏保那几项立刻生效,启动动画那几项下次启动生效。
- 屏保两个触发条件任一满足即出现:整机闲置(Windows 读系统闲置计数)与窗口失去焦点。
- 屏保收回必须点一下或按一个键;鼠标移动不算「回来」,也不会重置窗口失焦的计时(只有 Windows 的整机闲置计数会因为它归零)。
- 屏保退出三种特效:粒子消散 / 重力下坠 / Glitch 宽带位移,默认每次随机挑一个;关掉是普通淡出。特效是透明的,碎开时露出的是你的界面。
- 屏保可轮换(15 秒 / 30 秒 / 1 分钟 / 5 分钟,默认不轮换):到点就换下一条,带交叉溶解,且不会连着放同一条。
- 不改 DSH 源码:只往 注入脚本,再提供一张设置卡片。
- 指针互动特效(水波涟漪 / 星屑吸附)的实现仍在代码里,但卡片上已不提供入口——这个效果在桌面版上一直没能稳定工作,所以入口被撤了。设置字段与实现都保留,现有配置不会丢。细节见 MANUAL.md。

环境要求

| 条件 | 要求 |
| DSH | 0.2.0-rc.2。这一版换了插件提供设置的接法(声明 Config,不再注册命名空间),更旧的 DSH 要用旧版插件 |
| Node.js | ^22.19.0 或 >=24 |
| 浏览器 | Chromium 内核(Chrome / Edge)。Firefox 没测过 |

装法

三条路,选一条。细节与撤销办法见 INSTALL.md。

路 A:官方命令

dsh plugin --profile web add <解压出来的目录>

这条路会让 pnpm 把依赖也装好,装完重启一次 DSH。桌面版(DSH Desktop)的 profile 叫 desktop,而这条命令不允许直接改它,桌面版请走路 B 或路 C。

路 B:Windows 脚本(免重启)

powershell -ExecutionPolicy Bypass -File tools\install.ps1

路 C:macOS / Linux 脚本

sh tools/install.sh --profile desktop # 桌面版 sh tools/install.sh # dsh web 用的那个(默认 web)

路 B / 路 C 是同一件事:找 DSH 的位置(先看 DSH_HOME,再找 ~/.dsh)、在 profile 的 node_modules 里建目录链接、往 cordis.patch.yml 追加一行、并把设置卡片需要的 @deepseek-ai/schemastery(DSH 自带那份,要 3.18.4 及以上)链上。不碰 package.json,不跑 pnpm。 找不到 profile 会明确报错并列出有哪些 profile,装之前自动备份 cordis.patch.yml;大多数 profile 会热加载,不热加载的脚本会提醒你手动重启。撤销用 tools/uninstall.ps1 / tools/uninstall.sh,参数同上。

装完刷新浏览器:看到深海底背景 + 一条短片铺满窗口就是装好了。左侧菜单里没有「启动动画」这一项,几乎只有一个原因——插件旁边链接的 schemastery 太旧(缺 .volatile()),卡片会静默消失,控制台留一条 boot-animation: 开头的告警。

启动动画

打开页面时依次是:深海底背景 + 一条从片头池随机取来的素材铺满窗口 → 底部一条细进度条跟内核的启动进度走 → 片尾开始溶解进界面 → 覆盖层整个移除。

短片以静音开始(Chromium 不允许没有用户手势的带声音自动播放)。点一下画面才开声音,这一下故意不进入——手势解锁需要时间起效,绑成一次点击就是「刚出声就进界面」。进入交给片尾;想早点进,点一下或按 Esc / 空格 / 回车。

进入方式三选一:

| 方式 | 什么时候进 | 片子循环 |
| 片尾交叉溶解(默认) | 从片尾前「淡入时长」开始溶解,放完那一刻正好进 | 否 |
| 放完再淡 | 片子完整放完、停住,再淡出 | 否 |
| 点击才进 | 一直循环播放,直到你点一下 | 是 |

三种方式(「点击才进」除外)都还要等内核就绪——淡入就是界面显形的过程,内核没好就溶解出一个还没搭好的界面。片头放完但内核还没跟上时,画面停在最后一帧等它。

退场时片子的声音会和画面一起淡出,不会出现「画面没了声音还在响」或「声音被硬切掉」。地址后面加 ?dshbootdiag=1 可以让底部提示行变成实时读数(当前素材类型、是否循环、进度与音频状态),用来判断卡在哪一步。

屏保

默认关,因为它会抢屏幕——默认开着的话,你正在读文档、三分钟没动鼠标,画面会突然被盖住。要用就在设置里自己打开。

多久算离开:默认 3 分钟,可选 1 / 3 / 5 / 10 分钟或自定义 1–60 分钟。

怎么算「离开」:两个条件任一满足就触发——① 整台电脑一段时间没有任何输入(不管 DSH 是不是当前窗口);② DSH 窗口失去焦点。两者互补:① 抓「你人走开了」,② 抓「你切去别的程序了」。
怎么收回:点一下,或者按任意键。鼠标移动不会把它弄掉(碰一下不该就把画面清了)。底部那行「点击或按任意键继续」就是提示这件事,可以在设置里关掉。移动本身也不重置「窗口失去焦点」那一半的计时,只有整机闲置计数会因为它归零——所以「读长网页时晃一下鼠标屏保就不出现」这个效果,在 Windows 上成立。

退出特效:收回时画面碎开飘散,四选一——随机(默认,每次退出重新挑)/ 粒子消散(往右飘)/ 重力下坠(往下掉)/ Glitch 宽带位移。关掉就是普通淡出。特效是透明的,碎块飞走时露出来的是你的对话界面,不是黑底。系统开了「减少动态效果」会自动退化成普通淡出。

轮换:屏保挂着的时候可以每隔一段时间换一条,可选 15 秒 / 30 秒 / 1 分钟 / 5 分钟,默认「不轮换」。换的时候是把画面换掉,不是收回屏保——收回还是要点一下;换的时候不播退出特效,带交叉溶解,并且先把池子里每条都放一遍再开始第二轮,绝不会连着放同一条。

声音:默认静音(这一层盖住屏幕时没人在看,突然出声会吓人)。设置里一个滑块管两件事:拖到最左=静音,往右就有声音。只对视频有效,图片 / 动图 / Live2D 模型本来就没有音频路径。

不会盖住开机动画:启动动画还在演的时候屏保不会出来。窗口最小化时也不会出来(没人在看)。

一个做不到的事先说清楚:窗口被别的窗口盖住时屏保照样会出来。浏览器只能可靠知道「窗口是不是最小化了」,拿不到「被压在下面」这个状态——那是操作系统层面的事实。这不是坏了,是能力边界。

设置在哪里

设置 → 插件 → 「插件配置」,找到「启动动画」这一行,点一下展开。默认是收起的,和其他插件一样。

| 控件 | 默认 | 作用 |
| 开启启动动画 | 开 | 启动动画的开关。关掉=不注入启动动画那一行,回到 DSH 原生启动页(屏保是另一个开关,不受影响) |
| 播放影片声音 | 开 | 关掉是彻底静音:不尝试开声音,声音按钮也不生成 |
| 点鼠标直接进入 | 关 | 打开后按一下画面就直接进,不再用第一下解锁音频 |
| 显示底部提示文字 | 开 | 关掉只隐藏底部那行操作提示,标题和进度条保留 |
| 淡入时长 | 2 秒 | 1 / 1.5 / 2 / 3 / 4 秒 |
| 进入方式 | 片尾交叉溶解 | 片尾交叉溶解 / 放完再淡 / 点击才进 |
| 片头素材池 | 全选 | 勾选哪些参与随机轮播;每行带时长与状态徽章,可「预览」 |
| 启用屏保 | 关 | 屏保是抢屏幕的行为,必须自己打开 |
| 屏保时长 | 3 分钟 | 闲置多久算「离开」:1 / 3 / 5 / 10 分钟,或自定义 1–60 分钟 |
| 退出时播放特效 | 开 | 关掉=收回时只做普通淡出 |
| 退出特效 | 随机 | 随机 / 粒子消散 / 重力下坠 / Glitch 宽带位移 |
| 随机切换 | 不轮换 | 屏保挂着时多久换一条:15 秒 / 30 秒 / 1 分钟 / 5 分钟 |
| 屏保声音 | 静音 | 一个滑块管两件事:拖到最左=静音,往右就有声音。只对视频有效 |
| 屏保素材 | 全选 | 勾选 assets/screensaver/ 里哪些参与轮播,每行带类型徽章和「预览」 |
| 显示「点击或按任意键继续」提示 | 开 | 屏保底部那行说明 |

生效方式分两种:屏保那几项立刻生效(每次出现前都会重新读一遍设置);启动动画那几项下次启动就用新的,想现在看效果就点卡片上的「刷新」,页面会重新播一遍。

换自己的素材

两个池子,两个文件夹,不要混着放:片头是演一遍就交接,屏保是盖住等你回来。

| 池子 | 文件夹 | 放什么 |
| 片头池 | assets/videos/ | 视频(另外三类技术上也能放,但片头只演一遍,用视频才有意义) |
| 屏保池 | assets/screensaver/ | 视频 / 图片 / 动图 / Live2D 模型文件夹 |

- 卡片里两个小节各有一个按钮(打开片头文件夹 / 打开屏保文件夹),直接在系统文件管理器里打开对应目录,目录不存在会自动建一个。网页自己没有打开本地文件夹的权限,所以这一步是让 Host 侧替你做的。
- 视频推荐 mp4(H.264 + AAC),兼容性最好。看片头池那一行:带黄色 未优化 徽章的是索引表(moov)在文件末尾,浏览器要整段下完才出画面——点右边的「优化」,它在插件进程里把索引表无损挪到最前(只搬位置、不重编码),原片自动备份到 assets/videos/originals/(这个子目录不参与轮播)。图片和动图不需要这一步。
- 其它两个徽章:一直没有画面 是能开始播但 8 秒内一帧都没出来,放启动动画只会看到背景色;浏览器播不了 是浏览器拒绝解码。遇到就换一段,或重新导出成 H.264 mp4。
- 刷新页面就生效,新素材是每次请求实时扫描出来的,不用重启、不用重新构建。
- 屏保池的行没有「未优化」徽章也没有「优化」按钮——重排是 mp4 的事,而屏保池里还可能有图片、动图、模型。

已知限制

- 屏保的「整机闲置」那一半只有 Windows(读 GetLastInputInfo)。其他平台只剩「窗口失去焦点」这一半,屏保仍能用,但触发会迟钝一些。
- 进入前的等待等于片长。播完才进,抽到 15 秒那段就要看满 15 秒——随时点一下或按 Esc 提前进。
- 屏保里的 Live2D 模型需要自己装适配器:把一个函数挂到 globalThis.__DSH_BOOT_ANIM_LIVE2D__ 上,接口约定写在 src/renderers.js 顶部。插件不含 Live2D 运行时(那是专有库)。没有适配器时这一条会被跳过,卡片上标「无适配器」。
- 卡片的文案是硬编码中文,没走 DSH 的 locale 字典。
- 启动动画依赖 DSH 启动页的 [data-dsh-boot] 结构(读进度弧、识别启动失败都靠它)。DSH 大改版可能失效,失效只是退回原生启动页,不会崩。
- 屏保的触发条件与收回语义没有离线测试覆盖——要真实窗口的闲置、失焦与点击才能验,只能在装机后自己试。

文档导航

| 文档 | 给谁 | 内容 |
| MANUAL.md | 用它的人 | 设置逐项含义、徽章含义、换素材、出问题怎么办 |
| INSTALL.md | 装机的人 | 三条安装路、装完检查、卸掉 |
| AGENTS.md | 维护者 | 架构、两条依赖的 DSH 事实、每条踩出来的规则、改动后要不要重启、怎么自检 |

tools/ 里有五个离线自检套件(verify-pools / verify-encoding / verify-icon-route / verify-client-card / verify-exit-effects),都不需要 DSH 在跑:

node tools/verify-pools.mjs # Host 半侧:两个池的清单、字节路由、整张路由表
node tools/verify-encoding.mjs # UTF-8 无 BOM、中文没坏、注入的脚本里没有 </script
node tools/verify-icon-route.mjs # 卡片图标路由与它的白名单
node tools/verify-client-card.mjs # 设置卡片,对着桩 DOM
node tools/verify-exit-effects.mjs # 屏保的退出特效、选择器,以及九个字段真的从实时配置读

另有四个装机脚本(install.ps1 / uninstall.ps1 / install.sh / uninstall.sh)。更早的开发工具(命令行版重排、媒体诊断、浏览器自检、更宽的 verify/ 套件)不随包发出,需要时看 AGENTS.md。

许可

代码是 MIT,见 LICENSE:改、用、再分发、商用都可以,保留版权声明即可。

素材不是。 assets/videos/ 和 assets/screensaver/ 里的视频是作者自己的原创动画,作者保留全部权利,不在 MIT 范围内。随插件原样使用(非商用)没问题;不得转售、不得商用、不得抽出来单独分发。要商用请先取得作者书面许可,或者把这些片子删掉换成你自己的。

assets/icon/ 里的三个图标属于代码,跟着 MIT 走。
预览分享卡片长什么样 ↓lxj5820/dsh-boot-animation
分享 · DeepSeek Harness Hub
lxj5820/dsh-boot-animation

用全屏短片替换启动页,闲置时自动盖上屏保

回到顶部