解说视频
你制作的视频能够帮助用户学习一个概念。你相比普通工具有一个巨大优势:你了解当前对话和项目。善用这些信息。
引擎位于 ~/.claude/skills/kaleidoscope/engine/。在此文件中,make 命令意味着:
node ~/.claude/skills/kaleidoscope/engine/make.mjs <command> <project-dir>
步骤 0:先询问(每次技能启动时)
无论用户是输入 /kaleidoscope 还是用文字请求视频,你的第一件事是通过 AskUserQuestion 询问以下问题,并提供可点击选项。如果用户的消息或当前对话已经回答了某个问题,则跳过该问题(例如,“像新闻片那样”回答了风格问题,“带低保真音乐”回答了音乐问题)。将推荐选项放在第一位并标记为“(推荐)”。在单个调用中询问所有四个问题(该工具最多接受 4 个)。如果主题本身不明确且没有跳过任何问题,则在单独的调用中先询问主题。
| 问题 | 标题 | 选项(第一个为默认) |
|---|---|---|
| 视频应该使用哪种风格? | 风格 | 黏土 3D:统一的柔和黏土风格,由无声吉祥物完成所有动作 · 经典 2D,混合:每个部分使用不同的 2D 风格 · 经典 2D,统一风格:用户指定(新闻片、白板等) |
| 视频面向谁,时长多少? | 观众 | 考试复习,标准版:使用课程中的符号、数值示例、考试陷阱,5 至 6 分钟 · 考试复习,深度版:同上,8 至 9 分钟,包含推导的每一步 · 初学者,短片:先讲直觉,减少符号,2 至 4 分钟 · (其他:用户指定观众和时长,例如“专家复习,短片”) |
| 什么时候向你确认? | 检查点 | 一次性生成:直接返回完成的视频 · 分镜后:展示计划并等待批准 · 第一帧后:展示初帧并等待 |
| 哪种音乐? | 音乐 | 宁静(current):柔和的垫音,无节拍 · 低保真(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会在他停留在一个位置时发出警告。 -
物体必须连接。 弹簧要触及其墙壁,图钉要接触其地图,手要握住它拿的东西。用户曾发现一个弹簧在各项检查都通过后却未接触墙壁。
make bake测量models.js中的每个连接点(JOINS),因此新的连接点要添加到那里,并在静帧中检查接触。 -
仅使用我们自己的模型。 使用
styles/library/clay中的工具包。永远不要下载模型。如果视频需要新物体,以相同风格将其添加到工具包中。 -
每个部分是一个连续镜头。 部分内部没有剪辑和新的幻灯片:物体随着语音到达、移动和连接,摄影机缓慢移动。部分结束于下一个部分开始的状态,或者在下一个部分的背景中消失。
-
画面解释,文字仅用于命名。 文字保持平面和清晰,通过 HTML 覆盖在 3D 场景上。每帧包含:起头语(小型大写字母,包括部分和来源)、最多 8 个字的标题、几个 1 到 4 个字的标签(带细引线),以及底部最多一行说明文字。永远不要出现一列句子、子弹列表、颜色含义图例。 屏幕上最多约 15 个字。
-
公式演绎语音(用户要求如此)。 静止的公式不比读笔记更好。使用
eqn()逐个构建公式:术语随着语音逐个出现,当语音移动时移动,当提到“消去”时闪烁或爆裂,仅在提到重要内容时弹跳。make look会对静止的公式以及“消去”句子但屏幕上没有消去动画的情况给出错误。参见styles/clay.md。 -
物理运动。 物体像真实对象一样运动:手臂伸展、球落下弹跳、积木下落并停稳、脉冲传播。没有静态盒子的堆积。
-
同一对象在所有视频中保持相同颜色(机器人始终为橙色,地图始终为黄色)。
如果分镜违反了以上规则,在编写代码前修改分镜。
硬性规则
- 在此处,即主对话中,进行思考。 你自己编写脚本、分镜和场景,因为上下文就在这里。切勿将这些步骤交给子智能体:子智能体开始时没有上下文。第 7 步中的脚本智能体是唯一例外,它特意以无上下文状态启动。
- 切勿仓促对待核心解释。 用户通过这些视频学习。遵循
reference/script.md中的节奏规则,并修复所有节奏警告。 - 切勿编造事实。 每个数字、公式和主张都来自你验证过的来源:用户的代码、数据手册、规格书、论文、文档。将它们列在
storyboard.md中。报告你无法验证的任何内容。 - “你的案例”是可选的。 仅当当前对话或项目中确实有匹配的示例时才添加(例如用户遇到的错误、修复、测量到的数字)。切勿凭空捏造。
- 无重叠。 任何视觉元素都不能覆盖另一个:文字叠文字、文字叠图形、或一个图形隐藏另一个图形。每个标签、公式、箭头和对象都有自己的空间。
check会在文字重叠时发出警告,review会将每个测量到的重叠写入overlaps.md。拥挤程度由用户判断,因此请在全尺寸的帧中检查。ID 检查也有帮助:make look会添加一张显示最小间隙的图像,并在文字与其他元素距离小于 12 像素、文字叠在图形上、文字对比度低以及模型被其他元素遮挡时发出警告。在make final之前修复所有重叠。 - 字幕每行不超过一行。 每个字幕提示最多 42 个字符,且不能同时显示两个提示,因此播放器永远不会显示两行。引擎会自动处理;
verify会报告违反规则的提示。不要通过修改make.mjs中的SUB_MAX来强制适应某个提示。 - 闭包循环(用户要求如此,引擎强制执行)。 每次编辑后:
make look,阅读它列出的所有图像,修复你所看到的,然后再次查看。只有这样才能构建。切勿盲目编辑和构建,因为构建耗时较长,而查看只需要几秒钟。每张图像的右上角有一个检查数字,只有当所有图像的数字按顺序匹配时,门才会打开:- 编辑。如果你更改了
script.md,运行make voice。如果视频包含 Manim 部分并且你更改了manim_scenes.py或语音,运行make manim:make look绘制 Manim 帧,但不会生成它们。 make look <dir>:它会测量每个场景的每一帧,并绘制其临近帧和运动部分。全部阅读。然后运行make look <dir> --ok <digits>。若无此操作,make build会停止执行。make build <dir>。遇到任何碰撞时会停止。- 阅读
build/review/moving.md中的每个片段。然后运行make look <dir> --moving-ok <digits>。 make final <dir>。如果源文件在查看或构建之后发生变化,或者存在未解决的碰撞或重叠,则停止。 将每一步作为独立命令运行,在第一次失败时停止,并确认编辑已应用。
- 编辑。如果你更改了
- 每个读者都检查临近帧和运动部分。 任何判断视频的智能体或会话都读取每个编辑部分的临近帧,以及每个移动对象的所有帧:吉祥物和物体,在其整个运动过程中。视频的抽样帧不计数:手掌可能在抽样帧之间穿过桌面。
- 新缺陷需添加防护措施。 当用户发现缺陷时,首先将其添加到
reference/faults.md和engine/test/selftest.mjs中,并确认测试在该缺陷上失败。然后修复视频。不要只修复视频。每次修改检查后运行make selftest。
用户要求的内容(保留这些)
每个项目都是用户要求或通过试听选择的。引擎会自动完成大部分工作。
| 主题 | 内容 | 自动完成? |
|---|---|---|
| 语音 | Chatterbox 的内置语音,通过 engine/tts/slow-reference.wav 减慢到约 160 词/分钟;每个段落一口气读完以保持语调 | 是 |
| 停顿 | 句号精确停顿 0.6 秒,逗号最多 0.3 秒,根据脚本的标点设置 | 是;若无法设置停顿则 voice 发出警告 |
| 不好的录音 | 词句与脚本不同的部分(Whisper 检查)使用新种子重录,最多重试 3 次;保留最佳录音 | 是;若仍有误则发出警告 |
| 快速片段 | 短语速度超过视频常规节奏 1.3 倍(符号词计数加倍)则重录;用户发现“lambda v is v, scaled by lambda”过快 | 是;警告“fast”:为其单独设短句并加 [pause] |
| 负数 | 读作“negative”,切勿读作“minus” | voice 出错并停止 |
| 重复词 | “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 中的工具包,经过试听确认;飞入嗖嗖声比其他音效低 4 dB(用户觉得有点响)。新视频启用(_render.sfx: true),旧视频禁用 | 你在提示音处添加 s.sfx;引擎混合 |
| 音频 | 48 kHz 立体声 | 是;verify 检查 |
| 字幕 | 软字幕,从不烧录;用户的 mpv 以较小字体显示(sub-scale=0.7) | 是 |
| 单行字幕 | 每个提示一行,最多 42 个字符,不能同时显示两个提示。用户在 ROS 2 系列的第 1 个视频中看到两行 | 是;verify 报告违反规则的提示 |
| 无重叠 | 任何文字或图形都不覆盖另一个 | check 警告文字重叠,overlaps.md 和你的帧检查清单处理其余部分 |
| 风格 | 统一的 3D 黏土风格,带无声吉祥物,以及我们自己的模型;曲线和图表使用 Manim 深色背景(用户要求:不要强行将图表放入黏土)。已拒绝:下载的模型、全深色视频、文字列、颜色图例、堆积幻灯片 | make check 对既非黏土也非 Manim 的场景或没有吉祥物的视频报错;其余内容由你负责,参见“用户想要的风格” |
| 数学 | 五个公式步骤(需要、图片、公式、含义、验证)。曲线、图表或逐步变化的公式使用 Manim:manim() 用于 2D,或 manim({ threeD: true }) 用于 3D 图片,不使用手绘画布 | make check 对孤立公式发出警告;其余内容由你负责,参见 reference/script.md 和 styles/math-manim.md |
| 测验 | 分镜中不含任何测验 | 你负责 |
| 观看 | mpv <dir>/out/<slug>.mp4 | 放入报告 |
机器设置
在第 1 步前运行 make config。它会打印本机的设置,由安装程序或 /setup-kaleidoscope 写入。
voice 行指定语音:Chatterbox(自然,在 NVIDIA GPU 或 Apple Silicon 上效果最佳)或 Kokoro(小型快速,在 CPU 上运行,约 150 词/分钟)。项目可以在 video.json 中选择自己的语音:"_tts": {"engine": "kokoro"}。在没有 GPU 的情况下,Chrome 使用 SwiftShader 渲染帧,ffmpeg 使用 libx264 编码。
…
[以下内容已截断,无法完整翻译]