📈 GH Trending Explorer 🎲 Surprise me

← all repos

NativeDog1 / dsh-boot-animation

git clone https://github.com/NativeDog1/dsh-boot-animation.git v0.4.2 · 20d ago

打开新对话、或打开你钉住的会话时,视频铺满整个窗口播放一段片头开机动画。支持换成自己的视频,每个会话只播一次或每次打开都播

+2
stars, 24h · #5,595
+~14
stars, 7 days · #6,337
+311
stars, 30 days · #1,667
316
★ total · +5% this week
25
forks · 8 open issues

Star history (as recorded here)

2026-10-20 · 309 ★ 2026-10-22 · 316 ★
LanguageJavaScript
License—
Created2026-09-25 (27d ago)
Last push1d ago
Watchers1
OwnerUser

Links

README excerpt
# dsh-boot-animation
给 DSH 加一段**开机动画**:每次打开 DSH 播一次,视频铺满整个窗口。
> English: README.en.md
- **每次启动 DSH 播一次**(0.4.2 起;在这之前是「每个新会话一次」,所以看起来像一次性的)
- **指定会话每次打开都播** —— 在侧边栏页脚点一下图钉即可
- **铺满窗口**、可跳过、放完自动关闭
- **可以换自己的片子**(三种方式,见下)
## 安装
 [code] 
> 仓库里已经提交了构建产物 `lib/`,也没有 `prepare` 生命周期脚本,
> 所以这条命令**不编译任何东西**,不会触发 pnpm 的 `allowBuilds` 构建授权。
> (等包发布到 npm 之后,也可以写成 `dsh plugin --profile web add dsh-boot-animation`。)
### 支持的 DSH 版本
| DSH 版本线 | 状态 |
|---|---|
| `0.1.5-rc.x` / `0.1.7-rc.x` | ✅ 支持(桌面版旧内核,以及 `npm i -g @deepseek-ai/dsh` 那条线) |
| `0.2.0-rc.x` | ✅ 支持(桌面版新内核,以及 `@next` 那条线) |
**本插件刻意不声明任何 `@deepseek-ai/dsh-*` 的 `peerDependencies`。** host 半边只用
`ctx.webServer`,客户端半边只通过**动态注入**取 `slots` / `uiSession`,两处都不静态
依赖某个宿主包。这样做的直接好处是:它**永远不会被 dsh 的版本兼容闸门跳过** ——
0.2.0 起那道闸门会把 `peerDependencies` 对不上的插件**整包跳过**,现象是"装上了、
但重启后什么也没发生",而且不报错(市场自己的兼容守卫也会拦)。其它插件要靠
`^0.1.5-rc.3 || ^0.2.0-rc.1` 这种 `||` 列表来适配,本插件不需要,也不会因为漏写
某条版本线而被跳过。
代价是宿主形状变了得自己容忍,这部分由测试守着:`verify-blank`(13 种宿主形状)、
`verify-session-id`、`verify-client-boot`(11 项 boot 安全)。例如"这是不是全新对话"
在 0.2.0 从 binding 上的 `blankBit` 挪到了 `session.getSnapshot().blank` —— 两种都读,
并且**订阅那个 face 本身**而不是采样一次。
装完**必须重启一次 DSH 服务**才生效(bundle 层是在启动时装配的):
 [code] 
### 装完看不到效果?先做这件事
DSH 的客户端 bundle 响应带 `cache-control: max-age=31536000, immutable`,
而 URL 上的 `rev` 是**进程 nonce**、不会随内容变化。所以浏览器会一直用**第一次抓到的副本**。
装好或升级后请在新窗口里按 **Ctrl+Shift+R(硬刷新)**。普通 F5 不够。
## 用法
### 「什么时候播」是一个开关(0.4.2 新增)
片库面板(页脚 **🎛**)里有一行明确写着:
 [code] 
| 开关 | 行为 |
|---|---|
| **开**(默认) | **每次启动 DSH 应用时播一次** —— 在启动后你进入的那个对话里播。同一轮使用中切会话、新建会话都不重复;下次打开 DSH 再播一次 |
| **关** | 回到原来的行为:只在**新建会话**时播一次(一个会话记一次,之后不再播) |
- 记录写在 `sessionStorage`(`dsh-boot-animation:boot`),浏览器把它限定在一个标签页里、
 关掉标签页就清掉,所以开关打开时的「一次」= **一次应用启动**,而不是「一个会话」
- **被钉住的会话两种模式下都一样**:钉住的会话仍然每次进入都重播,这个开关管不到它
- **开关本身存在宿主那边**(`$DSH_HOME/boot-animation/selection.json` 的 `playOnAppStart`),
 不存 localStorage —— localStorage 按来源(`host:port`)隔离,DSH 换个端口设置就丢了
- 界面上的开关状态是**读回宿主设置**显示的;宿主还没答复之前插件不做任何播放决定
> 0.4.1 及之前没有这个开关,固定是「每个会话只播一次」—— 于是同一个会话里片头只播一次、
> 之后**永远**不再出现。这就是「开了一次之后就再也没有见过」「是个一次性的」的成因。
> 0.4.2 把规则交给你选,默认值是新的「每次启动播一次」,所以**默认行为变了**:
> 如果你要的是老行为,把开关关掉即可。
>
> 直接按 F5 刷新页面**会**再播一次(开关打开时):sessionStorage 在同一个标签页里能扛过刷新。
> 如果你连着刷新好几次都看得到,那不是 bug。
### 让某个会话每次打开都播(推荐)
1. 打开那个会话
2. 点侧边栏最下面的 **🎞** 图标(就在「设置」旁边)
3. 图标变绿 **🎬** = 已钉住
之后**每次**进入这个会话都会播一遍 —— 切走再切回来、刷新页面,都会重播。
无论上面那个开关是开还是关,都一样。
再点一下图标取消。
> 注意:如果刚启动时你的活动主面板不是「对话」(比如停在某个插件的面板上),
> 当前会话还不存在,图钉是禁用状态。先打开一个对话即可。
### 只给某一个会话换片头(0.4.0 新增)
上面那个 🎞 图钉管的是「**什么时候播**」;如果你要管「**这个会话播哪一段**」,
用片库里的 **「仅本会话」**:
1. 打开那个会话
2. 点页脚 **🎛** 打开片头片库
3. 在你想播的那一行点 **「仅本会话」**
那一行会变成蓝底并挂上「本会话」徽章,面板顶部也会写明「本会话固定播放:xxx」,
旁边有 **「取消(回到全局)」**。之后**只有这个会话**播这一段 ——
其它会话、以及你在别处选的那一段,都不受影响。
「选它」改的是**全局**,「仅本会话」改的是**这一个会话**,两者互不覆盖。
优先级:**会话覆盖 → 随机 → 全局选择 → 环境变量 → `intro.mp4` → `videos/` → 内嵌内置片**。
会话覆盖连「随机播放」也压得住 —— 把一个会话钉住之后又被随手塞一段随机片,
那不是"钉住"的意思;但显式请求随机的调用(`mode=random`)仍然不被覆盖。
> 指的那一段被删掉或移走时,这个会话**回落到全局**而不是黑屏,并在 diagnostics 里
> 记一条 `conversation-override-stale`;文件回来了这条钉住自动生效
> (不会因为一次失联就被清掉)。
## 换自己的视频(片库)
插件现在是