🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

rxw2023/WhaleAnimationBase

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

小鲸鱼 · 一直在游 —— The Long Swim

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/25 · 已提供中文文档

一个用于在纯 Canvas 2D 中制作手绘鲸鱼动画的入门套件:一个可复用的变形引擎、一部 45 秒的程序化影片、一个 BGM 节拍分析器以及一本复用手册——零依赖。

综合分
30.7
GitHub 分
30.7
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add rxw2023/WhaleAnimationBase
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · other
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 0 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/26
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/26(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
hero

鲸鱼动画基础
小鲸鱼 · 一直在游 —— The Long Swim

一套「手绘动画」起点包:可复用的形态混合引擎 + 45 秒程序化成片 + 配乐分析器 + 复用手册。
一只小鲸鱼从海里出发,穿过神经元、棱镜、双缝干涉、向日葵、太阳系、螺旋星系、黑洞与时空,
最后回到海里,继续游。

零运行时依赖:纯 Canvas 2D + Web Audio,双击 index.html 即可播放;离线出片也不需要 npm install。

license-blue)
runtime deps
render
output
audio
npm install

它是什么

一部用代码画出来的短片:1400 个粒子 + 一条 56 点的线 + 一只小鲸鱼,
在 45 秒里重组成 13 种形态。全片没有一处硬切——每个场景都是上一个场景形变过去的。

| 时间 | 幕 | 字幕 |
|---|---|---|
| 0.0–4.6 | 海洋 | 海 是 第一张 纸 |
| 4.6–8.4 | 神经元 | 世界 是一张 网 |
| 8.4–11.8 | 三棱镜色散 | 光 有 七种 颜色 |
| 11.8–15.0 | 双缝干涉 | 两 道 波 相遇 会唱歌 |
| 15.0–17.8 | 色彩光环 | 圆 转起来 就 开花 |
| 17.8–21.2 | 向日葵(黄金角叶序) | — |
| 21.2–24.4 | 太阳系(7 颗行星 + 土星环) | 谁 绕着 谁 转 |
| 24.4–28.0 | 螺旋星系 | 花心 是 另一座 星系 |
| 28.0–31.2 | 时空网格 + 引力波 | 引力 把 空间 压出 一个 坑 |
| 31.2–35.0 | 黑洞吸积盘 | 时间 在这里 变慢 |
| 35.0–38.4 | 宇宙隧道 | 穿 过 去 |
| 38.4–42.2 | 地出 | 隧道 尽头 有光 · 回头看 家 是一颗 蓝色的球 |
| 42.2–45.0 | 回到海洋 | 所以 继续 游 |

contact sheet

核心设计:没有「幕」,只有「形变」

常规做法是"一场一场画 + 硬切"。这里不是。全片只有 3 个从头到尾都存在的"演员":

| 演员 | 它变成过什么 |
|---|---|
| 粒子场(1400) | 海洋浮游 → 神经节点 → 光谱 → 干涉波前 → 同心环 → 葵花籽 → 行星轨道 → 星系旋臂 → 时空网格 → 吸积盘 → 隧道环 → 地球云 → 海洋 |
| 线(56 点) | 海面 → 树突 → 光束 → 正弦波 → 圆弧 → 花茎 → 椭圆轨道 → 旋臂 → 被弯折的光线 → 吸积盘缘 → 垂直光柱 → 月面地平线 → 海面 |
| 小鲸鱼 | 全片都在,只是越游越小、越游越远,最后又游回来 |

每个粒子的位置是两种形态的加权混合:

pos(i, t) = form形态A × (1 − k) + form形态B × k

所以粒子是真的从花盘飞到星系轨道上,不是叠化。位置、拖尾、粗细、颜色、透明度一起插值。

下面是"向日葵 → 太阳系 → 星系"这段的连续 6 帧(每帧间隔 0.7s,没有剪接):

morph

三条铁律

1. 每一帧都是时间 t 的纯函数——没有跨帧状态、没有 Math.random()。
换来两件事:帧能并行乱序渲染(5 个无头 Chrome 抢帧);同 t 永远出同一张图(可复现、可补帧)。
2. 随机分两种:hash(i) 是"物体本身长这样"(稳定);jit(a) 是"手在抖"
(每 1/12 秒重播种 → 线稿沸腾,就是手绘动画的 boil)。
3. 透明度要乘不要覆盖——所有绘制 helper 内部都是 alpha = alpha × (op/255)。

快速开始

git clone  && cd WhaleAnimationBase
不需要 install。直接:
双击 index.html

| 快捷键 | 作用 |
|---|---|
| 空格 | 播放 / 暂停 |
| ← → | 前后 1 秒 |
| Shift + ← → | 前后 5 秒 |
| R | 回到开头 |
| P | 导出当前帧 PNG |
| F | 全屏 |

调试参数:?t=22 静帧 · ?render=1 离线渲染模式 · ?bare=1 只留画布 · ?rig=1 角色姿势检查

index.html 用的是经典  而不是 ES module,所以 file:// 双击可用
(module 会被 CORS 拦)。同理 fetch 本地文件会失败,所有数据都写在 js 里。

技术栈

| 层 | 选择 |
|---|---|
| 运行时 | 原生 JS + Canvas 2D,经典 ,无框架无构建 |
| 循环 | requestAnimationFrame |
| 音频 | Web Audio API(OfflineAudioContext 离线合成 / MediaRecorder 录 WebM) |
| 图形 | 全程序化:粒子、贝塞尔、渐变、自写铅笔排线 hatchFill()。零图片 / 零贴图 / 零网络字体 |
| 出片 | Node + 原生 Chrome DevTools Protocol + ffmpeg(零 npm 依赖) |
刻意没用:Vite、TypeScript、React、Three.js、p5.js、p5.brush、puppeteer。
理由写在 REFERENCES.md §4/§7 —— 简单说:动画短片不需要 UI 工具链,
零依赖才能“双击即开 + 离线渲染零安装”,而手绘插画质感用 Canvas2D 就够。

配乐

成片用的是 The Chainsmokers & Coldplay《Something Just Like This》。BPM 不是猜的,是实测的:

node analyze_bgm.mjs assets/bgm.mp3 --target=45

| 项 | 实测值 |
|---|---|
| BPM | 103.00(BPM × 相位联合精修) |
| 第一拍 / 小节重拍 | 0.412 s |
| 每小节(4/4) | 2.330 s |

选段原则:让片子最贵的那一幕落在副歌上。 本片高潮是“黑洞”(片内 30.5s),
所以从原曲小节线 20.5318s 切 45 秒 → 黑洞落在副歌、片尾落在副歌高潮;
切点在小节线上 ⇒ 片内 t=0 就是重拍 ⇒ 整片节拍网格与歌曲重合(复核误差约 7 ms)。

⚠️ 版权:这首歌是商业发行作品。仓库里不包含它(见 .gitignore),
请自行准备音乐文件。发布的成片请换成自有或已授权音乐——换歌流程见 ANIMATION_GUIDE.md §6.1。

导出成片

node render.mjs --selftest                          # 自检:幕数 / 音轨 / JS 错误
node render.mjs --sheet=0,6,12,20,26 --cols=4 --w=430 --out=out/sheet.jpg   # 联络表(审片用)

整片(推荐)
node render.mjs --dumpdemo=out/demo.wav             # 没音乐时先导出内置合成音轨
node render.mjs --frames=0:45 --fps=30 --workers=5 --out=out/frames   # 逐帧,可断点续传
node render.mjs --encode --fps=30 --audio=assets/bgm-45s.m4a --out=out/video.mp4

只渲一小段
node render.mjs --clip=25:32 --fps=30 --audio=assets/bgm-45s.m4a --out=out/clip.mp4

需要本机有 Chrome 与 ffmpeg。渲染器不用 puppeteer,它用 Node 内置的 fetch /
WebSocket 直连 Chrome DevTools Protocol(--remote-debugging-port=0 + 读 DevToolsActivePort)。

实测:1350 帧 @ 5 workers ≈ 3–4 分钟,ffmpeg 编码 ≈ 2.5 分钟。

目录结构

WhaleAnimationBase/
├── index.html            # 播放器页面(经典  按顺序加载)
├── js/                   # 引擎 + 剧本
│   ├── core.js           # 内核:数学 / 确定性抖动 / 铅笔排线 / 纸纹 / 相机 / 手写字
│   ├── char.js           # 主角小鲸鱼(paint / sketch:铅笔稿 → 上色)
│   ├── props.js          # 道具:气泡 / 音符 / 波纹 / 海草 / 数据光点
│   ├── odyssey.js        # ★ 剧本:13 幕形态系统(换片子只改这个)
│   ├── audio.js          # 音频:示范 BGM 离线合成 / 外部 BGM / 节拍器 / 导出 WAV
│   └── main.js           # 播放器逻辑 + 离线渲染接口
├── render.mjs            # 离线渲染器:无头 Chrome 逐帧 → ffmpeg 编码
├── analyze_bgm.mjs       # 配乐分析器:实测 BPM / 拍点 / 段落结构 / 选段推荐
├── docs/                 # README 配图
│   ├── hero.jpg
│   ├── morph.jpg
│   └── sheet.jpg
├── assets/               # 用户自备音乐(已被 .gitignore 排除)
│   └── README.txt
├── out/                  # 渲染产物(已被 .gitignore 排除)
├── ANIMATION_GUIDE.md    # 复用手册
├── REFERENCES.md         # 参考资料 + 仓库地址
├── README.md
├── LICENSE
└── .gitignore

分层原则:把“画什么形状”和“怎么画”分开。 odyssey.js 只管形状与时间,
core.js 只管笔触与质感。所以想换材质(比如换成 p5.brush 水彩)只动 core.js 一层,
13 幕剧本一行不改。

文档

| 文件 | 内容 |
|---|---|
| ANIMATION_GUIDE.md | 复用手册:技术栈 / 引擎 API 速查 / 形态系统 / 时间轴与音频 / 出片 / 14 条踩坑记录 / 性能 / 新片检查清单 |
| REFERENCES.md | 参考资料:所有仓库与链接地址、视觉参考片分析、数学与物理公式出处、逐项标注实测/引用/存疑 |

已知取舍

- 实时播放吃性能:1400 粒子 + 多条曲线,低端机 30fps 可能掉帧;离线渲染不受影响。
- 手绘质感优先于物理正确:微波背景那一幕是多正弦叠加的视觉近似(真做要球谐函数);
引力波用指数衰减代替 1/r。逐条标注见 REFERENCES.md §8。
- 材质是「平涂 + 抖动线条 + 铅笔排线」,不是 p5.brush 那种水彩。想换水彩见 ANIMATION_GUIDE.md §11-C。
- 音画同步以 AudioContext 时钟为准;输出延迟大时用页面上的「偏移」微调。
- 参考片的原始出处未确认(B 站为搬运版),详见 REFERENCES.md §11。

许可

- 代码:MIT,见 LICENSE。
- 成片中的配乐:不属于本项目,版权归原权利人,未获授权,请勿公开分发带该音乐的成片。
- 参考与灵感来源见 REFERENCES.md,其中 p5.brush(MIT)与 PDoomVideo(ISC)的
代码均未被复制进本仓库——本项目只在架构思路层面受其启发。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群