mcpField
W
what-if-animation

what-if-animation

github.com/kelano86其他1298 次安装2 天前更新
代码仓库

关于 what-if-animation

用于制作 15–25 秒 What If 动画短片的 Skill,涵盖脚本、分镜、动画、声音到最终渲染的分阶段流程。它以 Claude 编写 SVG 画面并用 Remotion 渲染,语音和音效来自 ElevenLabs。

主要功能

  1. 01分阶段短片制作流程
  2. 02使用 Remotion 设计 SVG 镜头
  3. 03生成 ElevenLabs 语音与音效
  4. 04分镜和动画检查
  5. 05生成成本与渲染报告

适用场景

  1. 01根据主题制作短片
  2. 02动画制作前检查分镜
  3. 03检查节奏、混音和最终渲染

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kelano86/what-if-animation --skill what-if-animation

安装后在 Claude Code 中输入/what-if-animation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
README.md
.gitignore
opencode/commands/
what-if.md
references/
look.md
formula.md
sound.md
traps.md
kit.md
scripts/
board.py
master.py
plan.py
sfx.py
motiongrid.py
voice.py
wi.py
stills.mjs
mixcheck.py
studio/
.gitignore
package-lock.json
remotion.config.ts
package.json
studio/src/
Root.tsx
CastSheet.tsx
studio/src/engine/
episode.tsx
anim.ts
furnish.tsx
index.ts
fonts.ts
kit.tsx

详细介绍

假如动画

输入一行主题,产出一集 15-25 秒的成片。每一帧都是 Claude 编写的 SVG(由 Remotion 渲染);配音和音效来自 ElevenLabs。studio/src/episodes/ 中附有两个示例,都已准备好渲染:rewind(“假如你能倒回 10 秒?”——展示能力的片段:镜头倒放,体现这项能力)和 copy-paste(“假如你能复制粘贴任何东西?”——本技能的首次完整运行:全新的厨房布景、科学环节的示意图,以及悬念式黑屏)。开始前,请先阅读与主题最接近的示例。

文件内容
references/formula.mdWhat If 的七拍公式、15-25 秒的节奏结构、脚本规则、如何选择主题
references/look.md经过校准的视觉风格、节奏、镜头词汇,以及分镜和动态效果检查清单
references/kit.md构建模块:引擎、角色、布景、房间套件、灯光、UI、视觉风格,以及如何添加每一项
references/sound.md编写声音事件、提示词、音量、电量成本
references/traps.md两集示例中所有耗费时间的问题
studio/Remotion 项目:复制一次,之后每集都在其中制作
scripts/配音、计划、静帧、分镜、音效、混音检查、动态网格、成片(需要 Python 3.9+ 和 Node)

规则

  • 只能使用原创角色。 Pip(主角,视觉风格 B)和他的朋友 Mo 是我们的原创角色,妹妹、妈妈和机器装置上的西装角色也一样。绝不能使用某个频道自己的主角,也不能使用与知名卡通角色相似的角色:请在角色表上检查每个新造型(Mo 最初的帽子因设计过于相似而被弃用)。
  • 故事必须原创。 公式可以共享,但这一集不能属于别人。不要重制某个频道的标题。
  • 绝不要声称热门频道是用 Claude 或其他工具制作的。没人说过他们是怎么制作的。
  • 只按名称处理密钥。 ELEVENLABS_API_KEY,从环境变量或 studio 上层目录中的 .env 文件读取。绝不打印、粘贴或硬编码密钥。
  • 报告每次运行消耗的 ElevenLabs 点数: 脚本会将点数记录到 out/<slug>/costs.json,master.py 会在 report.json 中汇总。配音的成本从账户历史记录中读取(精确值);音效片段不会显示在历史记录中,因此其成本来自账户计数器,该计数器可能有延迟:报告前请重新读取。交付剧集时要告知点数。copy-paste 运行消耗了 152 点(配音 78 点,12 个新音效片段 74 点)。
  • 先做分镜,再做动画。 静帧通过自检(步骤 5),且在有人参与审核的情况下由对方看过分镜前,不得渲染视频。
  • 所有事实都必须真实。 脚本中的数字必须先在剧集的 science 字段中计算并注明来源。

设置(每台机器只需一次)

需要 Node 18+、已加入 PATH 的 ffmpeg 和 ffprobe、装有 numpy 和 Pillow 的 Python 3.9+,以及 ElevenLabs 密钥。

cp -r <skill>/studio ./what-if-studio && cd what-if-studio && npm install

以下所有操作都在该 studio 文件夹中运行;<skill> 是本技能的文件夹。若要离线工作或使用自己的品牌字体,请将显示字体放入 public/fonts/,并在 src/studio.config.ts 中设置 titleFont(默认标题字体 Bricolage Grotesque 和 UI 字体会在渲染时从 Google Fonts 加载)。若要将现有 studio 更新到较新的引擎,请将 <skill>/studio/src/engine 复制到其 src/engine。

工作流程

按顺序完成以下步骤。每一步结束后都要先查看成果,再进行下一步。

1. 脚本

阅读 references/formula.md。先在 YouTube 上搜索这个设想:如果某个 What If 频道已经做过完全相同的一集,就更改能力或规则。根据主题行,确定能力的名称、规则、三个逐步升级的演示,以及转折点(一个带数字的真实事实)。编写 src/episodes/<slug>/episode.json,其中包含 id(PascalCase,即合成名称)、slug、topic、title(两行)、script(每拍一条)和 science(每项事实包含:论点、推算过程、来源)。共 45 到 65 个词。按节奏大声读出来:每句话都必须能让人脑海中浮现画面。

2. 配音
python <skill>/scripts/voice.py <slug>

用 ElevenLabs 生成一条带字符时间戳的配音(356 个字符的复制粘贴版本花了 78 个积分),然后剪辑停顿,让节奏符合该类型的步调:public/<slug>/voice.wav 和 src/episodes/<slug>/words.json。检查时长(15-25 s)和打印出的词语时间。用 episode.json 中的 gaps 调整停顿,然后重新运行:配音会缓存,因此这次免费。修改一个词就会再次调用 API。

3. 镜头列表

为脚本中的每张画面设计一个镜头(通常为 9 到 14 个),每次剪辑都变换景别和角度(远景、插入镜头、中景、特写、过肩镜头、俯拍、仰拍;参见 references/look.md)。添加到 episode.json:

  • shots:{ "id": "S1", "size": "medium", "set": "kitchen", "key": 14, "note": "what we see" }(key 是分镜显示的该镜头自身时钟的帧)
  • edit:每次剪辑对应一个 { "shot": "S1", "at": "cookie" },以剪辑落点所在的词作为提示(plan.py 会列出提示形式;reverse、from、to 和 look 用于改变镜头时钟的特殊效果)
  • fx:单帧闪光和抖动,{ "at": "S3+2", "kind": "flash" }
python <skill>/scripts/plan.py <slug>

它会写入 timeline.json 和 out/<slug>/shotlist.md,并打印节奏。开场每分钟争取剪辑 27 次以上,且不要出现超过约 3 s 的静止镜头;在绘制任何内容前,先修正它标出的问题。

4. 分镜

阅读 references/kit.md 了解构建模块。编写 src/episodes/<slug>/shots.tsx,每个镜头对应一个组件,组件仅由其时钟 t 决定(复制两个示例中 shots.tsx 的模式);再编写 index.tsx(集数及其特殊效果风格),然后将该集添加到 src/episodes/index.ts。此时,每个镜头只需在其 key 帧上正确即可。如果某个主题需要的场景库里没有,就用房间套件构建,并将其添加到 src/engine/sets/(以及该技能的副本)中,以便下一集使用;复制粘贴的那次运行就添加了厨房和示意图。新增角色或服装时,先添加外观,再在角色表上检查(npx remotion still src/index.ts Cast out/cast.png)。

npx tsc --noEmit
node <skill>/scripts/stills.mjs <slug>
python <skill>/scripts/board.py <slug>

out/<slug>/storyboard.jpg:每个镜头一张带说明文字的静帧。

5. 自查静帧

查看分镜,然后以全尺寸打开 out/<slug>/board/ 中的每张静帧,并逐镜头如实执行 references/look.md 中的分镜检查清单。记下所有问题,修复后只重新渲染那些镜头(stills.mjs <slug> S3 S7),重新生成图页并再次检查。重复此过程,直到通过为止。遇到问题时,先查看 references/traps.md,再想办法解决。如果有人参与审核,现在就把图页给对方看,并在制作动画前记录对方的意见。

6. 动画

从关键姿势开始,让每个镜头动起来:用 poseAt 设置关键帧,加入预备动作、停顿和过冲;用 faceAt 设置表情;用 kf 设置摄像机运动;再加入特殊效果风格和 fx。然后渲染草稿并检查运动:

python <skill>/scripts/master.py <slug>
python <skill>/scripts/motiongrid.py <slug> S2 S5
node <skill>/scripts/stills.mjs <slug> --frames 120 240

对照 references/look.md 中的运动检查清单,把网格当作翻页动画来查看;修复并重新渲染,直到效果清晰易读。

7. 音效

阅读 references/sound.md。在 episode.json 中添加 sound:片段(提示词和时长)、每个可见动作对应一个按镜头提示的事件、每个地点的环境音、音乐底轨和音量。先检查库里已有的内容,再生成:

python <skill>/scripts/sfx.py <slug> --dry
python <skill>/scripts/sfx.py <slug>

它会打印所用积分,并在 timeline.json 中设置各音轨的音量。然后检查每个词是否都清晰可辨:

python <skill>/scripts/mixcheck.py <slug>

它会列出说话期间音效或音乐与人声相差不到 3 dB 的时刻。用于表现某个词的音效应落在该词之后紧接的停顿中,不能与词同时出现;关键台词下方的背景音(如嗡鸣或持续低音)要调低;如果大部分音轨都盖过人声,就调低 sfx_lu。重新运行 sfx.py 和检查,直到只剩有意为之的重叠(标题轰鸣、转场)。

8. 完成并交付
python <skill>/scripts/master.py <slug>

渲染视频,将混音调整到 -14 LUFS、峰值低于 -1 dBTP,并写入 out/<slug>/report.json(时长、响度、语速、积分)。戴上耳机,从头到尾完整听一遍最终文件。交付 out/<slug>/<slug>-final.mp4 和 out/<slug>/storyboard.jpg,并附上时长、使用的 ElevenLabs 积分,以及你认为仍可改进的地方。

单集文件存放位置

路径内容
src/episodes/<slug>/episode.json你编写的所有内容:剧本、科学内容、镜头、剪辑、特效、声音
src/episodes/<slug>/shots.tsx, index.tsx绘图内容:每个镜头一个组件,以及超能力的视觉效果
src/episodes/<slug>/words.json, timeline.json由 voice.py 和 plan.py 写入(sfx.py 会添加音量)
public/<slug>/voice.wav、sfx.wav、music.wav
out/<slug>/分镜静帧、storyboard.jpg、shotlist.md、动态网格、渲染文件、costs.json、report.json
library/sfx/每个生成的音效片段,供所有单集共用

评论

支持 Markdown