🌸 DSH Neon Splash v3
给 DeepSeek Harness 桌面端做的一段"开屏动画" ✧٩(ˊωˋ*)و✧
黑屏 → 画面从朦胧中醒来 → 终端自己敲起命令 → 登录 → 编译成 AR HUD → 主界面浮现
场景预览
✨ 这是什么呀?
这是一段约 42.6 秒的开屏动画,在你打开 DSH 桌面端(或从最小化恢复)时铺满整个屏幕。
它不是简单的淡入淡出,而是一个有叙事的小剧场 (๑˃̵ᴗ˂̵)و
0 – 900 纯黑,静一下 ← 暗场
900 – 4300 画面由高度模糊(64px)逐渐清晰 ✨ ← 醒来
4300 – 6500 > running Deepseek Harness ┐
6500 – 8100 > 连接工作区模型 ▰▰▰▰▰▱▱▱ 62% ├ 同一个终端
8100 – 8220 屏幕四周浮出边框 │
8220 – 15220 12 个插件预载 0→100 + 参数可视化 ┘
15220 – 17820 登录:桌宠 + 用户名 + 8 位密码 ← 等你点击
17820 – 24220 代码 → 编译成 AR HUD ┐
24220 – 27220 HUD 由中心展开 │
27220 – 32420 文字 + 加大的 designed by Z1ro2 ├ 白底动画
32420 – 38420 全屏代码弹幕涨满再变稀 │
38420 – 42420 遮罩淡出,主界面浮现 ┘
💡 登录之后那五段是白底界面动画,整体时长是"正常速度的两倍" ——
因为好看的部分值得多看一会儿嘛 (๑´ㅂ`๑)
而预载和打字保持原速,那两段是"等待与输入",放慢只会显得卡 (。•́︿•̀。)
🎬 亮点
| |
|---|
| 🌫️ 醒来 | 不是眨眼、不是幕布,而是画面从 64px 模糊里"聚焦"出来,同时由暗到亮 |
| ⌨️ 自己敲字 | 终端真的在逐字输入,每一击都有 8bit 打字音 |
| 📊 数码进度条 | 12 个插件按权重分配时间窗(像并行加载),右侧还有参数可视化小条 |
| 💗 可换主色 | 默认粉色 #ff3d84,但一处定义、全局传播 —— 换色后辉光、边框、弹幕全都跟着变 |
| 🎹 音效全部现场合成 | 零音频素材文件,全是 Web Audio 实时算出来的 8bit / chiptune |
| 🕐 三套时段氛围 | 正午 / 黄昏 / 夜晚,按系统时间自动切换,边界可编辑 |
| ⚙️ 什么都可调 | 播放模式、节奏、主色、用户名、模型名、雨量、音效、女声,全在设置页 |
关于那套音效 🎵
没有一个音频文件。 全部是程序化合成的(脉冲波主音、三角波低音、噪声、
音高按半音阶量化、快速琶音做装饰音),还搭了一条卷积混响总线 ——
连混响用的脉冲响应都是现场算出来的噪声尾 ✨
| 时机 | 声音 |
|---|
| 开屏 | 噪声上扫 + 大三和弦上行琶音 |
| 每一处逐字输入 | 每个字符一声闷闷的短音 |
| 每行跑满 | 三音上行"叮" |
| 点击 SIGN IN | 明亮上扬的"通关"音:五音冲刺 + 落在高音大三和弦 |
| 确认用户 | 真人女声播报 welcome back, master |
🔇 没有底噪。 所有音效都是一次性的(自带包络、响完就结束),
所以也永远不会出现"动画结束了声音还在嗡嗡响" ✌️
📦 安装
前置
- DeepSeek Harness 桌面端(已能正常启动)
- Node.js ≥ 18
方式一:从 GitHub 安装(推荐)٩(◕‿◕。)۶
# 1) 安装到你的 DSH profile(把 <your-profile> 换成你的 profile 目录)
cd <DSH_HOME>/profiles/<your-profile>
pnpm add github:<你的用户名>/<仓库名>
或者直接用本地 clone:
git clone https://github.com/<你的用户名>/<仓库名>.git
cd <DSH_HOME>/profiles/<your-profile>
pnpm add link:../../path/to/<仓库名>
# 2) 在 profile 的 cordis.patch.yml 里加一行(追加到数组末尾即可)
- insert:
- id: neon-splash-v3
name: dsh-neon-splash-v3
config:
enabled: true
playMode: both # both | launch | restore | never
accent: '#ff3d84' # 主色,换成你喜欢的颜色 (๑˃̵ᴗ˂̵)و
# 3) 重启 DeepSeek Harness 桌面端
⚠️ 必须重启应用,不是刷新页面!
宿主半侧的模块是进程启动时加载并缓存的,光是刷新的话新插件不会生效 (´・_・`)
方式二:从源码构建 🛠️
仓库里的 client.js 是生成物(内含 164KB 场景图 + 76KB 女声素材的 base64)。
如果你要改动画本身,请改模板而不是直接改生成物:
git clone https://github.com/<你的用户名>/<仓库名>.git
cd <仓库名>
pnpm install
# 永远不要直接编辑 client.js(手改会把 base64 编码搞坏)
# 要改的是这个:.preview/client.template.js
node .preview/build-client.mjs # 模板 + 素材 → client.js
node .preview/run-gates.mjs "<node 路径>" # 跑完 16 道门禁
⚙️ 配置一览
设置页里能改的(也可以用 cordis.patch.yml 直接写):
点开看全部字段 🔍
- id: neon-splash-v3
config:
enabled: true
playMode: both # both | launch | restore | never
timeSource: system # system | noon | dusk | night
periods:
noon: { start: '11:00', end: '17:00' }
dusk: { start: '17:00', end: '20:00' }
night: { start: '20:00', end: '05:00' }
compactOnRestore: false # 从最小化恢复时用精简节奏
timings: # 单位毫秒
blackScreen: 900 # 纯黑静止
open: 3400 # 醒来:模糊 → 清晰
boot: 2200 # 终端第一行
connect: 1600 # 连接模型
loading: 7000 # 预载 12 个插件
glassesHold: 100 # 边框浮出后静置
login: 2600 # 登录打字
braindance: 6400 # 代码 → HUD
hudExpand: 3000 # HUD 展开
hudText: 5200 # 文字 + 署名
particles: 6000 # 全屏弹幕
fadeOut: 4000 # 遮罩淡出
model: deepseek-account/deepseek-flash
accent: '#ff3d84' # 主色 🎨
accentDeep: '#c2185b' # 深色衬底
username: 'Z1ro2' # 登录界面显示的名字
soundEnabled: true
soundVolume: 0.7
voiceEnabled: true
voiceLine: 'welcome back, master'
voiceReverb: 0.45
voiceBoost: 1.2 # 女声响度 +20%
rainDensity: 1
codeRain: 1.4
waveIntensity: 1
braindanceLight: 0.55
petAnims: ['原地小憩沉眠', '东张西望']
timeScale: 1 # 整体快慢(0.05–4)
allowSkip: true
🧪 那 16 道门禁
这个项目最"较真"的地方:改完一行命令,就能知道有没有把动画改坏 ᕦ(ò_óˇ)ᕤ
node .preview/run-gates.mjs "<node 路径>"
| 门禁 | 守着什么 |
|---|
check-css | CSS 模板没被反引号截断(这个坑真实踩过 4 次) |
check-hooks | React Hook 都在 early return 之前 |
check-classic | 客户端能当经典脚本解析(import.meta 会让整批 bundle 连坐失效) |
check-config | 宿主 Config schema 合法 |
check-defaults | 客户端兜底值与宿主默认值不漂移 |
check-archive | 文档里写的默认值与实现一致 |
smoke-headless | 真正求值一遍模块,抓求值期未定义变量 |
check-stages | 阶段编号、映射、渲染引用三者一致 |
check-eyesync | 开屏的模糊 / 亮度同源驱动 |
check-cover | 已回退的"交接层"没有被加回来 |
check-accent | 换色是否全局传播 |
check-audio | 音效与女声不静默失效 |
check-hostui | 已移除的"宿主 DOM 操作"没有被加回来 |
check-danmaku | 弹幕密度包络 0 → 铺满 → 0 |
check-login | 登录按钮 → 继续播放 这条路径的卡死隐患 |
run-login-flow | 完整走一遍登录流程 |
😅 为什么这么较真?
因为这个插件改一行 CSS 注释就能让整段动画消失(反引号截断模板),
而且客户端的语法错误会连坐整批插件一起失效。
有了门禁,就不必靠"刷新页面看看坏没坏"来验证了 ✌️
📁 项目结构
dsh-neon-splash-v3/
├── index.js 宿主半侧:Config schema(所有可调项的定义)
├── client.js ⚠️ 生成物,不要手改
├── cordis.patch.yml bundle 补丁:插入到 DSH 插件列表的那一行
├── icon.svg 插件图标
├── locale/ 中英文案
├── assets/ 场景图 + 女声素材
├── README.md 使用与实现文档(含踩坑全景记录)
├── ARCHIVE.md 完整工作记录:设计决策、故障全景、改哪里
├── CHANGELOG.md 更新日志
└── .preview/ 开发工具(编辑器源码也在这里)
├── client.template.js ✅ 真正要改的源码
├── build-client.mjs 模板 + 素材 → client.js
└── check-*.mjs 16 道门禁
🗒️ 更新日志
完整记录见 CHANGELOG.md 📖
[0.2.0] — 2026-10-12 🌸
从"能跑"到"经得起反复改"
- ✨ 完整设置页(调色盘 / 节奏 / 时段 / 音效 / 女声)
- ✨ 主色一处定义、全局传播
- ✨ 时段系统 + 四种播放模式
- ✨ 16 道自动化门禁
- 🔧 登录后白底动画延长一倍,打字音改成更闷的短音
- 🔧 登录按钮音效改为明亮上扬的"通关"音
- 🐛 修了一堆:女声静默失效、图片必然 404、设置"选了又跳回去"、
刷新后完全不播放、登录按钮卡死…
- 🗑️ 移除了眼皮眨眼、环境底噪,以及两次失败的宿主 UI 适配尝试
[0.1.0] — 2026-10-11 🎬
第一个能跑的版本
- 完整 42.6 秒开屏叙事
- 启动终端 / 登录界面 / AR HUD / 全屏弹幕
- 8bit 音效全部程序化合成
- 女声播报
⚠️ 已知问题
- 开屏揭幕时,会话地图顶端的胶囊可能短暂透出 (´・_・
) 试过两次修复(改宿主 DOM / 改揭幕形态),**都已回退** —— 前者会把宿主 UI 弄坏,后者观感明显变差。代价大于收益,所以保持现状。 详细复盘见 [ARCHIVE.md`](ARCHIVE.md) 第五节。
💝 素材说明
assets/window-scene.jpg 与 assets/voice-welcome-back.mp3 均为作者自有素材,
随本项目以 MIT 一起提供,可自由使用。
- 除此之外没有任何第三方素材 —— 所有画面都是 CSS / Canvas 程序化绘制,
所有音效都是 Web Audio 实时合成 (๑˃̵ᴗ˂̵)و
📄 许可
MIT © 2026 Z1ro2
designed by Z1ro2
如果这个动画让你的每次启动都开心了一点点,那就太好了 (。・ω・。)ノ♡