Communitygithub.com

kbohara315/what-if-animation

根据一个主题句(例如“如果你能倒回10秒?”),制作一部黄昏简笔画风格的“What If”动画短片,时长15-25秒。

what-if-animation 是什么?

该技能能够将一句“What If”主题句,自动转化为一部完整的、风格统一的动画短片。它严格遵循2026年10月在YouTube上流行的“What If”频道的七拍子叙事公式、黄昏简笔画视觉风格和剪辑节奏。整个工作流程完全代码化:使用Claude编写脚本并生成每一帧SVG动画(由Remotion渲染),利用ElevenLabs合成配音和音效,并自动完成剪辑、混音和母带处理(达到-14 LUFS响度标准)。技能内置了两个完整的示例项目,并附有详细的参考文档(公式、视觉风格、搭建模块、音效设计及常见陷阱),指导用户快速上手。该技能适用于用户要求制作“What If”短片、动画、或特定主题的简笔画讲解视频。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add kbohara315/claude-what-if-studio

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

What If 动画短片

输入一个主题句,即可输出一部完整的15-25秒短片。每一帧都是由Claude编写、Remotion渲染的SVG;语音和音效由ElevenLabs生成。 studio/src/episodes/目录下内置了两个可直接渲染的示例:rewind(“如果你能倒回10秒?”,演示片段:倒放镜头作为能力展示)和copy-paste(“如果你能复制粘贴一切?”,技能的首次完整运行:新的厨房场景、科学节奏的原理图、以及悬念黑屏)。在开始前,请先阅读与你的主题最接近的示例。

文件内容
references/formula.md七拍子What If公式、15-25秒结构、脚本规则、选题方法
references/look.md画面风格、节奏、镜头语言、以及分镜和动态检查清单
references/kit.md构建模块:引擎、角色、场景、房间套件、灯光、UI、外观及添加方法
references/sound.md音效事件编写、提示词、音量、成本
references/traps.md两个示例集制作过程中所有耗时的陷阱总结
studio/Remotion项目:仅需复制一次,每个短片都基于此项目开发
scripts/voice, plan, stills, board, sfx, mixcheck, motiongrid, master(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、Python 3.9+(带 numpy 和 Pillow),以及一个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个字符的copy-paste片段花费了78个信用点),然后按照该类型的节奏裁剪静音部分:生成 public/<slug>/voice.wav 和 src/episodes/<slug>/words.json。检查时长(15-25秒)及其打印出的单词时间。可以通过修改 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秒;在开始绘制任何内容之前,修复脚本标记出的问题。

4. 分镜

阅读 references/kit.md 了解构建模块。编写 src/episodes/<slug>/shots.tsx,每个镜头一个组件,每个组件是其时钟 t 的纯函数(参考两个示例的 shots.tsx 中的模式),以及 index.tsx(短片及其能力外观),然后将该短片添加到 src/episodes/index.ts。在此步骤中,每个镜头只需要在其 key 帧上正确显示即可。当某个主题需要库中没有的场景时,使用房间套件构建它并将其添加到 src/engine/sets/ 中(以及该技能的副本中),以便下一个短片可以使用,就像copy-paste运行中添加厨房和原理图一样。新角色或服装:添加外观,然后在角色表上检查它(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。将 sound 添加到 episode.json:添加音效片段(提示词和时长)、每个可见动作对应的提示事件、每个位置的环境音、背景音乐及其音量。检查库中已有的音效,然后生成:

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/所有生成的音效片段,由所有短片共享

相关技能