讲解视频
你制作一个帮助用户学习某个概念的视频。你有一个新工具无法比拟的巨大优势:你了解当前的对话和项目背景。善用这一点。
视频引擎位于 ~/.claude/skills/clayducation/engine/。在此文件中,“make” 意味着:
node ~/.claude/skills/clayducation/engine/make.mjs <command> <project-dir>
第 0 步:先询问(每次技能启动时)
无论用户是输入了 /clayducation 还是用文字请求了视频,你首先要做的事情是:使用 AskUserQuestion 工具提出下方的问题,并附带可点击的选项。如果用户的输入或本次对话已经回答了某个问题,则跳过它(例如,“像新闻短片”回答了“风格”问题;“搭配 lo-fi 音乐”回答了“音乐”问题)。将推荐选项放在第一位,并标记为“(推荐)”。在一个调用中询问所有四个问题(该工具最多接受 4 个参数)。如果主题本身不明确,并且没有跳过任何问题,则先通过单独的调用询问主题。
| 问题 | 标题 | 选项(第一个为默认) |
|---|---|---|
| 视频应该采用哪种风格? | 风格 | 黏土 3D:统一的软质黏土风格,由无声吉祥物完成所有操作 · 经典 2D,混合风格:每个部分使用不同的 2D 风格 · 经典 2D,统一风格:由用户指定风格(新闻短片,白板,……) |
| 视频的目标观众和时长? | 观众 | 考试复习,标准:使用讲座中的符号、计算例题、考试陷阱,时长 5 到 6 分钟 · 考试复习,深入:同上,时长 8 到 9 分钟,覆盖推导的每一步 · 初学者,简短:以直觉为主,减少符号,时长 2 到 4 分钟 · (其他:用户指定观众群体和时长,例如“专家快速回顾,简短”) |
| 何时需要与你确认? | 检查点 | 一次性完成:直接返回完成的视频 · 故事板之后:展示计划并等待批准 · 初稿效果之后:展示前几帧并等待 |
| 使用哪种背景音乐? | 音乐 | 宁静(current):柔和的铺垫音色,无节拍 · Lo-fi(lofi):轻柔的节拍,更有活力 · 无 |
当对话内容暗示某个选项时,将其作为推荐选项放在第一位(例如下周有考试则推荐“考试复习,深入”)。如果用户信息只回答了“观众”问题的一半(例如“为了我的考试”),则保留该问题,但只提供与该回答一致的选项。观众群体包括:考试复习、初学者和专家快速回顾(快速且密集);时长包括:简短(2 到 4 分钟)、标准(5 到 6 分钟)、深入(8 到 9 分钟)。将答案写入第 4 步的 video.json 文件中:"_look"(clay 或 classic)、"_brief": { "viewer": ..., "length": ..., "checkpoint": ..., "style": ... } 和 "_render": { "music": "current" | "lofi" | false }。后续的每一步以及重新构建都会从该文件中读取这些设置,而不会再次提问。如果用户忽略了问题,则使用每个选项的第一个值。
一次性完成,除非用户选择了检查点
在第 0 步之后,不间断地执行以下所有步骤,并只返回最终完成并经过检查的视频。不要询问“我是否可以继续?”,不要展示草稿,不要在步骤之间等待。下面的每一项检查都由你来执行并据此采取行动。唯一的暂停点是用户选择的检查点:“故事板之后” 会在第 7 步后暂停(展示故事板和脚本智能体的判定结果,然后等待);“初稿效果之后” 会在第 9 步的第一次 make look 后暂停(展示其图片,然后等待)。
用户想要的风格(在第 6 步之前阅读)
黏土风格用于动作表现,Manim 用于绘制图表,吉祥物出现在每一个视频中。 阅读 styles/clay.md。用户选择黏土风格而非旧有的混合风格,以保持视频风格的一致性。2D 风格是可选的经典风格,请参见下文。
-
不要强制将图表放入黏土场景中(用户的要求)。 当一张 2D Manim 图片比黏土场景更能帮助观众理解(例如曲线、分布、等高线、投影或平面上的其他几何形状)时,将该部分做成 Manim 部分,并使用 Manim 的深色背景(
styles/math-manim.md)。永远不要构建一个复制数学曲线的黏土模型:用户已经要求移除这些模型。执行动作的物体和吉祥物的物理操作应保留在黏土场景中。视频可以在黏土部分和 Manim 部分之间切换,相同的事物使用相同的颜色。 -
同一风格,多个部分。 视频被划分为时长大约为 15 到 40 秒的多个部分(引言、每个概念、你的案例、结尾)。每个部分都有自己的纯色背景、摄像机和场景设置。相邻的两个部分永远不会共享背景。
-
吉祥物负责执行操作。 他是沉默的,没有口型同步,旁白是配音。他用自己的手行走、拉、推、搬运和关闭物体,因此脚本中的“力”应该表现为观众看到他执行的动作。用户在某次视频中吉祥物只是站着观看后提出了此项要求。他默认保持面无表情,
make check会在吉祥物一直站在原地时发出 WARN。变换操作:在每个部分使用不同的动作辅助函数(carry,knock,press,grip,pointAt,pushOn;参见styles/clay.md中的“使用不同的动作”)。用户曾发现在每个部分中吉祥物都在推东西。 -
事物必须相连。 弹簧必须连接到墙壁,大头针必须接触地图,手必须接触它握着的东西。用户发现经过所有检查后,某个弹簧仍然没碰到墙壁。
make bake会测量models.js(JOINS)中的每一个连接点,因此请在那里添加新的连接点,并在静帧中检查接触情况。 -
仅使用我们自己的模型。 使用
styles/library/clay中的工具包。永远不要下载模型。如果视频需要新的物体,请以相同的风格将其添加到工具包中。 -
每个部分是一个连续的镜头。 在部分内部没有剪辑或新的幻灯片:物体在配音说话时到达、移动和组合,摄像机缓慢移动。一个部分的结束状态是下一个部分的起始状态,或者在下一个部分的背景中淡出。
-
画面用于解释;文字仅用于命名。 文字保持平面和清晰,以 HTML 形式叠加在 3D 场景之上。每帧包含:一个题头(小型大写字母,部分编号和来源)、一个最多 8 个单词的标题、几个含细指引线的 1 到 4 个单词的标签,以及底部最多一行字幕。从不出现句子列表、项目符号或颜色图例。 屏幕上最多显示大约 15 个单词。
-
公式要配合配音动态呈现(用户的要求)。 一个静止的公式比阅读笔记好不了多少。使用
eqn()构建每个公式:术语在提到时出现,在配音移动它们时移动,在配音说“消去”时撞击并爆炸,在配音提到重要内容时才弹跳。make look会对静止的公式和画面上没有“消去”动作的“消去”语句报错。参见styles/clay.md。 -
物理运动。 物体像真实物体一样运动:手臂伸出,球落下并弹起,方块掉落并静止,脉冲传播。没有静态盒子的堆积效果。
-
相同物体在每个视频中保持相同的颜色(机器人永远是橙色,地图永远是黄色)。
如果故事板违反了以上任何规则,请在编写代码之前修改故事板。
严格规则
-
默认并行执行(用户要求,2026-11-09)。 任何可以同时运行的任务都应该并行执行:一个 13 分钟的视频,当每帧都在一个 Chrome 页面(一个核心忙碌,GPU 使用率 10%)上测量时需要 3 小时。引擎现在可以在多个页面中同时测量
look、collide、review和stable(渲染的workers:核心数的一半,最多 8 个,且不超过可用内存允许的数量;),并且build同时运行 sheet、stable 和 review。当你添加一个需要遍历所有帧的步骤时,也要将其分散到多个页面中(make.mjs中的measureParallel、traceParallel、idParallel)。在你自己的工作中:同时启动独立的任务(比如 look 和 selftest,Manim 渲染和检查),绝不要在一个任务可能运行时而等待另一个任务。 -
在这里(主对话中)进行思考。 你自己编写脚本、故事板和场景,因为上下文在此处。绝对不要将这些步骤交给子智能体:子智能体启动时没有上下文。第 7 步中的脚本智能体是唯一的例外,并且它是有意冷启动的。
-
不要仓促地讲解核心概念。 用户通过观看这些视频来学习。遵循
reference/script.md中的节奏规则,修复每一个节奏方面的 WARN。 -
永远不要编造事实。 每个数字、公式和主张都必须来自你已验证的来源:用户的代码、数据手册、规格书、论文、文档。将它们列在
storyboard.md中。报告任何你无法验证的内容。 -
“你的案例”是可选的。 仅当本次对话或项目确实包含匹配的示例时才添加它(例如用户遇到的 bug、一个修复、一个测量数值)。永远不要虚构一个。
-
无重叠。 没有任何视觉元素可以覆盖另一个:文本覆盖文本、文本覆盖图形、或图形隐藏另一个图形。每个标签、公式、箭头和物体都应拥有自己的空间。
check会对重叠的文本发出 WARN,并且review会将每个测量到的重叠写入overlaps.md。拥挤与否是用户的判断,因此请在全尺寸的帧中检查。ID 检查有助于此:make look会添加一张显示最小间隙的图片,并对距离其他物体小于 12 像素的文本、图形上的文本、低对比度的文本以及被其他模型遮挡的模型发出 WARN。在make final之前修复所有重叠问题。 -
字幕使用单行。 每个字幕提示最多 42 个字符,且不会有任何两条提示同时显示,因此播放器永远不会显示两行字幕。引擎自动执行此规则;
verify会报告违反规则的提示。不要通过修改make.mjs中的SUB_MAX来让提示符合要求。 -
闭环(用户的要求,引擎强制执行)。 每次编辑后:执行
make look,读取它列出的每一张图片,修复你看到的问题,然后再次查看。只有这样,才能进行构建。绝不要盲目编辑和构建,因为构建耗时很长,而查看只需几秒钟。每张图片的右上角都有一个 CHECK 数字,只有当所有图片的数字按照指定顺序通过验证时,大门才会打开:- 编辑。如果你更改了
script.md,则运行make voice。如果视频包含 Manim 部分并且你更改了manim_scenes.py或者配音,则运行make manim:make look会绘制 Manim 的帧,但并不生成它们。 make look <dir>:它会在每一帧上测量每个更改过的场景,并绘制其邻近帧和运动部件。阅读所有这些信息。然后运行make look <dir> --ok <digits>。不执行此操作,make build将停止。如果一张图片的帧和标签与你之前已阅读并确认的完全相同,则会显示 READ BEFORE 字样,并且无需提供数字(当所有图片都是之前已读过的时,使用--ok -)。阅读每一张新图片;对于 strips 也是如此。make build <dir>。它将在任何碰撞时停止。- 阅读
build/review/moving.md中的每一条 strip。然后运行make look <dir> --moving-ok <digits>。 make final <dir>。如果源代码在 look 或 build 之后发生了更改,或者仍有未解决的碰撞或重叠问题,它将停止。 以单个命令的形式运行每一步,并在第一次失败时停止,并确认编辑已生效。
- 编辑。如果你更改了
-
每个阅读者都检查邻近帧和运动部件。 任何评判视频的智能体或会话,都应阅读每个已编辑部分的邻近帧,以及每个运动物体(吉祥物和物体)在其整个运动过程中的所有帧。仅对视频进行采样是不行的:用户曾遇到过在采样帧之间,一只手穿过了桌子的情况。
-
新错误要添加护栏。 当用户发现一个错误时,首先将其添加到
reference/faults.md和engine/test/selftest.mjs中,并确认测试在此错误上失败。然后修复视频。不要只修复视频。在对检查进行任何更改后运行make selftest。
用户的要求(请保留)
以下内容均是根据听觉体验提出或选择的。引擎大部分会自动处理。
| 主题 | 内容 | 自动处理? |
|---|---|---|
| 配音 | 使用 Chatterbox 内置的配音,通过 engine/tts/slow-reference.wav 减慢到大约每分钟 160 个单词;每个段落一气呵成,以保持语气连贯 | 是 |
| 停顿 | 每个句号恰好 0.6 秒,每个逗号最多 0.3 秒,根据脚本中的标点符号设置 | 是;如果无法放置停顿,voice 会发出 WARN |
| 错误取用 | 如果某个部分的台词与脚本不同(通过 Whisper 检查),则使用新的种子重取,最多重试 3 次;保留最佳取用结果 | 是;如果仍然错误则发出 WARN |
| 语速过快 | 如果某个从句的速度超过视频正常速度的 1.3 倍(符号单词计为两个单词),则重新录制;用户曾认为“lambda v is v, scaled by lambda”速度过快 | 是;发出 WARN 并标记为“fast”:为其分配一个简短的独立句子并添加 [pause] |
| 负数 | 读作“negative”,从不读作“minus” | voice 会以 ERROR 停止 |
| 重复单词 | “one one” 需要加逗号(变成 “one, one”),否则配音会出错 | 是 |
| 书写 | 连贯的段落;仅在某个概念结束或播放动画时使用 [pause]。拒绝的内容:每个句子后停顿、断断续续的句子、语速过快、拉长(含糊不清)的配音、Kokoro | 由你决定,参见 reference/script.md |
| 音乐 | 可听见、平稳、大约低于配音 13 dB(musicVolume 0.37;用户从 0.26 提高了 3 dB)、轻柔的闪避;两首获准的曲目,current(默认)和 lofi。拒绝:忽大忽小的抽吸感、音乐太轻听不到、其他 4 首曲目 | 是;你选择曲目,参见 SOUND.md |
| 音效 | engine/sfx.mjs 工具包中的音效,经过听觉验收;飞入时的 whoosh 声低于其他重音 4 dB(用户觉得稍响)。新视频默认开启(_render.sfx: true),旧视频默认关闭 | 你在提示点添加 s.sfx;引擎负责混合 |
| 音频 | 48 kHz 立体声 | 是;verify 会检查 |
| 字幕 | 软字幕,从不硬烧录;用户的 mpv 以小字体显示字幕(sub-scale=0.7) | 是 |
| 单行字幕 | 每条提示一行,最多 42 个字符,没有两条提示同时出现。用户在 ROS 2 系列的第一个视频中看到了两行字幕 | 是;verify 报告违反规则的字幕提示 |
| 无重叠 | 没有文本或图形覆盖另一个元素 | check 对文本发出 WARN,其余问题依赖 overlaps.md 和你的帧检查清单 |
| 风格 | 统一的 3D 黏土风格,包含无声吉祥物和我们自己的模型;曲线和图表使用深色背景的 Manim 部分(用户要求:不要强制绘制图表…… |
……[详细内容已截断,等待翻译]