dsh-startup
DeepSeek Harness 的深海下潜启动开屏:深度尺与探测器、角色出场视频、海底地形与珊瑚礁、气泡与生物荧光
- Stars
- 1
- Language
- HTML
- Created
- Oct 25, 2026
- Updated
- Oct 26, 2026
Introduction
dsh-startup
给 DeepSeek Harness 做的一次深海下潜式启动动画:深度尺与探测器、鲸鱼娘出场视频、海底地形与珊瑚礁、气泡与生物荧光。

A deep-sea dive splash screen for DeepSeek Harness — depth gauge, submersible probe, a character reveal video, seafloor relief, coral reef and bioluminescent particles. Pure HTML/CSS/JS, no build step, no framework.
它长什么样
整段约 10.8 秒,然后自动消失:
0.0s 黑场淡出,海底背景亮起
1.0s 主标题「下潜到能思考的深度」以字距收紧 + 模糊对焦浮出
1.6s 第一行读数:声呐阵列校准 · 波束 48 通道收敛
2.4s 金色细线扫开
2.55s 她的出场视频切到无缝循环段 —— 之后一直在动
2.6s 第二行读数:相位锁定 · 采样率 96 kHz
3.6s 第三行读数:全部就绪 · 开始下潜
5.5s 深度走到 1000m:数字闪一下、尺底一圈冲击波(落点反馈)
8.45s ★ 硬切:文字、尺、标签、鲸鱼线稿、声呐一帧消失
8.47s 底部 DEEPSEEK HARNESS 逐个起飞(弧线 + 拖影 + 放大),落成大字标
9.25s 底部补一行 LINK ESTABLISHED
9.80s 副行 BOOT SEQUENCE · 001 淡入
10.31s 整体淡出
10.8s 结束
深度是有意义的:左侧深度尺的读数决定出现什么生物。
| 深度带 | 生物 |
|---|---|
| 0–250m 光合带 | 海龟(远处的影子) |
| 250–600m 微光带 | 鱼群 |
| 600–1000m 深渊带 | 海马 |
珊瑚礁、气泡、浮游、海雪、体积光则一直在。
安装
适用于 DSH Desktop(Windows),不需要 Node、npm 或 git。 前提:DSH Desktop 已经安装过、并且至少启动过一次(这样 profile 目录才存在)。
第 1 步:把插件文件放到本地
A. 下载 ZIP(推荐,不用命令行)
-
点右上角绿色的
Code→Download ZIP -
解压到任何一个长期保留的目录 —— 盘符随意(C/D/E 都行),例如:
D:\dsh-startup E:\apps\dsh-startup C:\Users\<你的用户名>\dsh-startup⚠️ 别放在「下载」「桌面」「Temp」这类会被清理的地方。 安装只是建一个指向这份代码的链接,这份目录被删掉或挪走,插件就失效了。 路径里最好别带空格和中文,能少一类麻烦。
B. 用 git(如果你已经装了 git)
git clone https://github.com/holy-ovo/dsh-startup.git D:\dsh-startup
下面所有命令里的 D:\dsh-startup 都只是示例,换成你自己的实际路径即可。
解压/克隆完成后,打开这个文件夹,你应该能看到:
install.ps1 uninstall.ps1 package.json splash.html client.js index.js assets\
看不到
install.ps1说明解压层级错了(有的解压工具会多套一层dsh-startup-master),进到真正含package.json的那一层再继续。
第 2 步:运行安装脚本
方法 A:在文件夹里开终端
- 打开你解压出来的那个文件夹(例如
D:\dsh-startup) - 在地址栏里输入
powershell回车(会在当前目录开一个 PowerShell 窗口) - 粘贴下面这行并回车:
powershell -ExecutionPolicy Bypass -File .\install.ps1
方法 B:已经在 PowerShell 里
cd D:\dsh-startup # 换成你的实际目录
powershell -ExecutionPolicy Bypass -File .\install.ps1
看到下面三行就是成功了:
✓ 链接已建立: ...\profiles\web\node_modules\@klasjdfkl\dsh-startup
✓ 已登记到 package.json(备份: package.json.bak-install)
装好了。**完全退出 DSH Desktop 再打开**
脚本具体做了三件事(都可以撤销):
| 动作 | 位置 |
|---|---|
| 建一个目录链接,指向你解压的这份代码 | %APPDATA%\dsh-desktop\harness\profiles\web\node_modules\@klasjdfkl\dsh-startup |
| 登记依赖 | 同目录 package.json 的 dependencies |
| 加入加载列表 | 同目录 package.json 的 dsh.profile.bundles |
改 package.json 之前会自动备份成 package.json.bak-install。
第 3 步:完全退出 DSH Desktop,再重新打开
这一步不能跳过,也不能用“刷新页面”代替。
- 关闭主窗口后,检查右下角系统托盘还有没有 DSH 图标 → 右键 → 退出 / Quit
- 或者在任务管理器里结束
DSH Desktop
原因:插件的清单只在客户端启动时读取一次;只刷新网页不会重新读 bundles。
第 4 步:确认装上了
两个验证点,任一个成立就说明成功:
- 打开客户端时能看到深海下潜的开屏动画;
- 设置 → 插件 → 已安装 列表里有
@klasjdfkl/dsh-startup 0.1.0。
开屏只在启动时出现一次,持续约 10.8 秒;右下角有「跳过」按钮。
卸载
cd D:\dsh-startup
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1
然后同样退出客户端再打开。
它会删掉那个目录链接,并把包名从 dependencies 和 dsh.profile.bundles 里移除。
不会删除你解压的代码目录。
常见问题
| 现象 | 原因与解决 |
|---|---|
无法加载文件 ...install.ps1,因为在此系统上禁止运行脚本 | 少了 -ExecutionPolicy Bypass。用文档里完整的命令,不要直接双击 |
找不到 profile 目录:... | DSH Desktop 从没启动过,或装的不是 Windows 桌面版。先正常打开一次客户端再试 |
在 ... 里找不到 package.json | 你在错误的目录执行了脚本。cd 到含 package.json 的那一层 |
| 脚本成功,但打开客户端没反应 | 没有完全退出再打开(只刷新页面无效),或托盘里还有旧进程 |
| 插件列表里没有它 | 同上;也可能被杀毒软件删掉了目录链接,重跑一次脚本 |
| 想立刻撤销 | 跑 uninstall.ps1,或用 package.json.bak-install 覆盖回 package.json 再重启 |
手动安装(不想运行脚本时)
如果你想自己看清楚每一步,等价于脚本所做的三件事:
# 1. 建目录链接
mkdir "%APPDATA%\dsh-desktop\harness\profiles\web\node_modules\@klasjdfkl"
mklink /J "%APPDATA%\dsh-desktop\harness\profiles\web\node_modules\@klasjdfkl\dsh-startup" "D:\dsh-startup"
# 2. 编辑 %APPDATA%\dsh-desktop\harness\profiles\web\package.json
# a) dependencies 里加: "@klasjdfkl/dsh-startup": "link:D:/dsh-startup"
# b) dsh.profile.bundles 里加:"@klasjdfkl/dsh-startup"
# 3. 退出并重开 DSH Desktop
它怎么工作(给改代码的人)
DSH 的插件是宿主半边:通过 webServer 注册路由,再往首页注入两行。
// index.js
export default {
name: 'dsh-startup',
inject: ['webServer'],
apply(ctx) {
// 1) 视频路由(带 Range,<video> 才能 seek)
ctx.webServer.register({ kind: 'exact', path: '/dsh-startup/intro', handler: createVideoHandler(ASSET) })
ctx.webServer.register({ kind: 'exact', path: '/dsh-startup/idle', handler: createVideoHandler(ASSET_IDLE) })
// 2) 首页注入:一行 html(结构 + 样式)+ 一行 script(驱动)
ctx.on('webserver/index-inject', (table) => {
table.push({ kind: 'html', placement: 'body', html: readText('splash.html') })
table.push({ kind: 'script', placement: 'body', text: readText('client.js') })
})
},
}
三个刻意的设计:
- 必须发生的事全部由纯 CSS 完成。 开屏的消失是一条 CSS 动画
(
@keyframes dsh-sp-hide),脚本挂了、视频挂了,它照样在 10.8 秒后收掉。 脚本只做增强。 - 每次渲染首页时重读
splash.html/client.js。 改样式只要刷新页面, 不用重启宿主(只有index.js的改动才需要重启)。 - 时间锚点 kill switch。 一旦
<html>被打上dsh-splash-done, 之后任何重复注入的副本都会直接不可见,不会再播一遍。
可调参数
| 项 | 位置 | 当前值 |
|---|---|---|
| 开屏时长 | splash.html 的 animation: dsh-sp-hide 10.8s | 10.8s |
| 切到循环段的时刻 | client.js 的 SWITCH_AT | 2.55s |
| 深度带阈值 | client.js 的 setZone()(0.25 / 0.6) | 250m / 600m |
| 深度推进节奏 | client.js 的 DROPS | 四个落点 2.60/3.60/4.60/5.50s,深度总体 5.5s 到底 |
| 落点反馈 | .sp-impact 的 animation-delay | 5500ms,一圈 1.05s 的冲击波 |
| 气泡数量 | splash.html 的 .sp-bubbles | 28 颗 |
| 收尾飞行节奏 | .sp-endmark b 的 calc(8.47s + var(--i) * 48ms),飞行 600ms | 48ms/字 |
| 时间码精度 | paintHud() 的百分秒位 | T+00:03.40 |
| 右缘刻度 | .sp-rticks 的两层 repeating-gradient | 主刻度 120px / 次刻度 24px |
| 底部进度线 | .sp-slug::after 的 scaleX(var(--pr)) | 随下潜从左到右 |
| 数据脊读数 | client.js 的 paintHud() | 压力 = 深度×0.1 bar;温度 = 18 − 深度×0.014;约 11 次/秒 |
| 鲸鱼线稿 | splash.html 的 .sp-mark | 19vw / 6% |
已知限制
- 视频分辨率:538×646,在 2K 屏上会被放大近 2 倍,边缘偏软。
要更清晰需要重出 1080×1296 的素材,改
assets/即可,代码不用动。 - 生物是手绘路径:海龟、海马、鱼群是手写的 SVG 曲线,做了模糊 + 降透明度的 "远处影子"处理。近看仍然能看出是手绘。
- Windows 合成层:视频和文字层都加了
translateZ(0),否则 Electron 里 硬件解码的视频可能跑到 overlay 平面、盖住文字。 - 每次刷新都会播:目前没有"每次启动只播一次"的节流。
开发
index.js 宿主半边:两条路由 + 注入行
splash.html 结构与全部样式(单文件,无构建)
client.js 切段 / 深度尺 / 深度带 / 收尾
assets/ intro.webm(出场 4.04s)· idle.webm(循环 2.92s)
改完 splash.html 或 client.js → 刷新页面即可看到。
改 index.js → 需要重启宿主。
发版
powershell -ExecutionPolicy Bypass -File .\release.ps1
同步代码 → 升版本号 → 打包 tarball → 提交推送 → 建 GitHub Release。
市场条目用 releases/latest/download/ 指向 tarball,发版后自动跟随,不用改目录。
先看会改什么就加 -DryRun。