Toonfacts:动画卡通科普短片,一个技能搞定
用通俗语言说出你的需求。这一个技能即可完成全部工作:创意、事实、脚本、镜头规划、字幕、ElevenLabs 配音、构建、自检、渲染以及后续更新。永远不要让用户解释风格:风格已在此技能中定义。
模式(从用户话语中选择)
| 用户说 | 模式 | 读取文档 |
|---|
| "新视频"、"新视频关于 X"、"给我个惊喜"、"制作下一个短片" | 新建 | docs/new-video.md |
| "更新视频 "、"修正视频"、"在 中更改 X"、"应用最新规则" | 更新 | docs/update-video.md |
| "继续视频 "(在手动步骤如保存音频后) | 继续 | docs/new-video.md,从第一个缺失的阶段继续 |
| "审查视频"、"检查 "、"检查这个 mp4" | 审查 | 仅 docs/review.md |
| "视频创意"、"给我些想法" | 创意 | 仅 docs/new-video.md 阶段 1:研究真实故事和趣闻,按故事强度和钩子强度评分,记录到 videos/_ideas.md,展示前 5 名及其一句话故事、故事结构和草稿钩子,不构建任何内容 |
| "更新技能" | 升级 | 仅预检步骤 2,然后报告版本变更 |
如果请求不明确,未提及视频时选择新建,提及具体视频时选择更新。视频的构建方式和外观见 docs/engine.md;新建和更新模式均使用它。 | | |
操作规则(所有模式)
- 镜头必须与旁白意思一致,并经过机械检查。 每个镜头声明其意图(读取什么、谁在看什么、什么瞄准什么、拿着什么)并调用
assertScene;每个绘制在道具上的字符串都通过 fitText。tools/check_scene.py 会在这些调用缺失时阻止渲染。永远不要渲染未通过的关卡,也永远不要通过缩小文字或放宽公差来修复裁剪的标识:修正几何体。
- 钩子是一个门禁,而非装饰。 在
docs/new-video.md 阶段 2 的钩子门禁通过之前,不编写任何脚本;在 templates/review_checklist.md 顶部的钩子块通过之前,不交付任何视频。薄弱的第一行是重写的理由,永远不要后期修补。
- 不要提问。 做出合理选择,记录在视频的
NOTES.md 中,继续前进。仅在无法创建配音(见 docs/new-video.md 阶段 3)、缺少必要工具或无法撤销决策时停止。
- 每个视频一个文件夹,所有内容都在其中:
videos/<slug>/(slug = 标题的小写单词以连字符连接)。最终 MP4 和 publish.txt 在顶层,工作文件在 source/,旧渲染在 versions/。临时文件(静帧、联系表、测试渲染)仅放在 work/<slug>/ 中。永远不要只将工作留在对话中。
- 每条配音只花费一次 ElevenLabs 积分(一次录制)。仅当旁白文字改变、音频无法使用或录制未通过
docs/new-video.md 阶段 3 步骤 4 的性能检查(笑场或过度表演)时重新生成——此时仅重录一次,并减少标签数量。
- 自然优于表现力。 叙述者从不笑:全篇没有
[laughs] 或 [chuckles],整个脚本最多 3 个标签,配音文本中无感叹号。画面承担喜剧效果;叙述者对自己的笑话发笑是 AI 录制的明显标志。
- 永远不要打印或保存 API 密钥。 ElevenLabs MCP 由用户在 Claude Code 中添加;直接使用已连接的 MCP。
- 永远不要发布或上传 视频。交付物为最终 MP4、缩略图和经过研究的
publish.txt(标题、描述、话题标签、标签)。
- 最终回复: 少量行(制作或更改的内容、位置、关键选择、下一步操作)。无需逐步回顾。
预检(静默执行,每次运行,每种模式)
- 项目和文件夹。 找到 Remotion 项目(包含
package.json 和 src/ 的文件夹)。如果缺失则创建 videos/、videos/_ideas.md 和 work/。
- 保持此技能更新。 如果此技能文件夹是 git 克隆,静默执行
git pull --ff-only 并读取 CHANGELOG.md 了解变更;仅当发生变更时才在最终回复中提及新版本。如果不是 git 克隆,则跳过。
- 工具。 检查
ffmpeg、Python 3 和 @remotion/three(如果缺失则在项目中安装 @remotion/three 和 three)。查找 ElevenLabs MCP 工具(名称如 text_to_speech、generate_speech、creative_generate_speech、list_voices、speech_to_text、transcribe);如果延迟加载,则使用 ToolSearch 加载。如果没有找到,继续到配音阶段,编写 NEEDS_AUDIO.md 说明必须连接 ElevenLabs MCP(或提供音频),然后停止。
- 旧独立技能。 如果
.claude/skills/cartoon-3d-short/ 或 .claude/skills/new-video/ 也存在,不要使用它们。在最终回复中告知用户一次可以删除这两个文件夹,因为此技能已取代两者。
- 遗留辅助文件。 删除
video-ideas/SKILL-UPDATE.md(第一行以 "# Instructions for Claude Code" 开头)和 video-ideas/README.md(第一行 "# video-ideas")如果存在。绝不能删除其他任何文件。
- 重命名旧的发布文件(一次)。 发布文件现在是纯文本,而非 Markdown,因为用户复制内容时不希望看到渲染效果。对于每个
videos/<slug>/publish.md,将其复制为 videos/<slug>/publish.txt,过程中去除 Markdown(删除 #、**、反引号、表格竖线;将标题转为大写并保持内容一致),并在最终回复中告知用户可以删除哪些 publish.md 文件。绝不能自行删除它们。
- 迁移旧布局(一次,通过移动,绝不删除)。 如果从旧版本遗留了
video-ideas/ 或 out/:
video-ideas/_ideas.md 变为 videos/_ideas.md。
- 对于每个
video-ideas/<slug>/:publish.md(或 publish.txt)移至 videos/<slug>/publish.txt;所有其他文件(script.md、voiceover*.mp3、words.json、NOTES.md、REVIEW.md、CHANGES.md、NEEDS_AUDIO.md、审查表)移至 videos/<slug>/source/。
- 将
out/ 中的每个最终渲染与对应的 slug 匹配(通过文件名或标题如 The_Man_Who_...):最新的变为 videos/<slug>/<slug>.mp4,较早的按日期变为 videos/<slug>/versions/<slug>_v1.mp4、_v2.mp4。
out/ 中的所有其他内容(静帧、联系表、QA、测试渲染、每个视频的临时文件夹)移至 work/legacy-out/,上述两个辅助文件移至 work/legacy/。无法匹配的内容也保留在那里。
- 完成后,在最终回复中列出移动内容(一个简短列表),并告知用户可以删除空的
video-ideas/ 和 out/ 文件夹。不要触碰 src/、public/、scripts/、audio/ 或 backup/,并保留已存在于 work/ 中的文件。
文件夹结构
videos/ # 所有已完成或进行中的视频,每个视频一个文件夹
_ideas.md # 每个使用或拒绝的话题(先读取,最后追加)
<slug>/
<slug>.mp4 # 最终视频:准备上传的文件
thumbnail.jpg # 构建的封面,2160x3840(非原始帧)
publish.txt # 标题、描述、话题标签、标签、类别、置顶评论 + 研究来源
source/ # script.md voiceover.mp3 words.json NOTES.md REVIEW.md CHANGES.md
versions/ # 之前的渲染:<slug>_v1.mp4 ...(由更新模式保留)
work/ # 临时文件,可安全删除:静帧、联系表、QA、测试渲染、REMOTION_TMP(如果没有其他驱动器)
<slug>/
此技能包含的内容
| 路径 | 说明 |
|---|
docs/new-video.md | 新建和继续:创意、研究、脚本、配音、构建、审查、交付 |
docs/update-video.md | 更新:分类变更、保护旧版本、应用变更、重新渲染、回归检查 |
docs/review.md | 审查循环(联系表、检查、评分、修复) |
docs/engine.md | 视频的构建方式和外观要求:流水线、每段视频的规则、取景、光照、镜头流程、字幕、反应、质量关卡 |
references/story_format.md | 六拍故事格式、喜剧工具箱、节奏数值 |
references/(其他) | 风格圣经、测量报告、参考帧和表 |
templates/ | 渲染器源代码(bridge/)、音频合成、脚本、镜头计划、脚本和审查模板 |
docs/history/ | 两个早期仓库的 README、CHANGELOG 和原始措辞存档。非操作说明 |
tools/review_video.sh | 长度、跳切和响度检查及联系表 |
tools/make_thumbnail.py | 设计 2160x3840 的竖屏缩略图:裁剪出角色,放在生成的背景上,堆积文字 |
tools/check_scene.py | 阻止渲染:镜头未声明其物理真实性,或道具文字未经过适配 |
tools/check_voice.py | 检查配音录制:速度、停顿、响度,以及讲述过快(笑声、赶拍)的秒数 |