使用 ManimGX 进行场景调度
仅进行布局。此技能不编写故事、对话或表演,也不与任何摄像机系统、视频生成器或制作工具绑定。它只回答一个问题:所有物体和角色在哪里,它们如何移动,光线从哪里来,每台摄像机在哪里、朝向哪里? 输出是一个短片,风格类似导演的平面图:完成的平面图先显示一秒,然后逐步构建地图,接着是移动路径,然后摄像机及其视野锥逐一出现,最后显示 180° 轴线和视线线。
用户可能是拥有完整分镜头列表的专业人士,也可能是仅有一句话描述的初学者。两者都必须得到相同质量的平面图。区别在于路径:完整的输入直接进入提议的布局;粗略的输入则先经过一轮简短的引导式输入,让用户决定布局,而不是由您猜测。这些问题也教初学者了解场景调度所需的信息。每条路径都以用户确认或纠正的计划结束,然后才进行渲染。
场景调度技巧——景别、摄像机高度、镜头感、布局法则、空间连续性以及如何描述每个镜头——参见 references/staging-craft.md。在选择摄像机、编写计划或进行最终检查之前,请阅读它。
仅根据您面前的场景工作。下面的问题模板、尺寸表和示例规格展示了形式和语法,而非内容:切勿将真实场景中的地点、道具、名称、位置或颜色套用到模板中。
完整输入——七个要素
当输入回答了以下七点时即为完整。在进行任何其他操作之前,请将每个收到的输入与它们进行核对。
| 序号 | 要素 | 确定的内容 | 地图需要它的原因 |
|---|---|---|---|
| 1 | 地点 | 场所的类型、大小和特征(小而紧凑或大而开阔、风格或时代),及其固定几何结构:墙壁、门、窗、对调度重要的物体 | 设定整个地图的比例,并决定存在哪些道具 |
| 2 | 位置 | 角色在何处、姿势(站立、坐、躺、跪……)、谁面向谁、相距多远 | 这些是“点”、姿势标签和方向箭头;180° 轴线由此绘制 |
| 3 | 朝向 | 关键特征(窗户、门、墙壁、道路)位于角色的哪一侧,相对于角色描述:“她右边的窗户” | 没有它,地图可能会镜像,所有背景都会出错 |
| 4 | 灯光 | 每个重要的光源,它在物理上位于何处、光线来自哪一侧、是硬光还是柔光 | 决定每张脸哪一侧被照亮,以及哪些镜头会逆光 |
| 5 | 环境 | 动作的其他侧有什么 | 它成为每个反打镜头的背景 |
| 6 | 镜头 | 有多少个镜头、顺序如何、以及每个镜头的景别、镜头和角度(A 的特写、居中的双人镜头、越过 A 的肩膀看 B……) | 这些就是摄像机 |
| 7 | 节奏 | 谁移动、从哪里移动到何处以及何时移动(站起、穿越、进入、离开、转身),以及每个镜头中发生了什么 | 移动会改变位置、朝向,有时会在场景中途改变轴线;移动绘制为路径 |
当输入明确说明某要素或使其毫不含糊时(例如,“他们面对面坐在卡座上”即代表填充了“位置”),该要素视为已填充。要素 7 仅当有人移动时才重要:如果每个节拍都是一句对话且无人移动,则不需要询问。
输入收集轮次——当信息不足时
- 根据七个要素对输入进行评分,保持静默。切勿向用户展示清单本身。
- 所有要素均已填充 → 跳过收集,直接进入工作流程。当用户表示不需要提问(“sorma”、“direkt yap”、“just do it”)时也跳过:用默认值填充空白;这些默认值在计划中列出(工作流程步骤 4)。
- 任何要素缺失 → 询问,使用用户的母语提问:
- 每次消息最多 3 个问题,总共最多 2 条消息。顺序:首先询问地点 → 位置 → 镜头,因为它们决定了地图结构;然后是朝向 → 灯光 → 环境;最后是节奏。
- 如果位置和位置同时缺失,在第一条消息中仅问这两个:其他每个问题的选项都取决于它们的回答。
- 每个问题都是选择题:2-4 个为该场景编写的选项,根据输入已有的信息构建,再加上一个最终的**“您决定”选项**(使用用户母语,例如“您提议”)。用户始终可以输入自己的答案。
- 将您会选择的选项标记为 (推荐) 并附上简短理由,以便初学者可以直接接受。
- 每个问题附带一行解释它为什么对地图重要。
- 如果您的环境具有结构化的选择题工具,请使用它;否则,在纯文本中编写带编号的问题和带字母的选项。
- 切勿询问输入已经回答的问题。切勿询问关于故事、对话或表演的问题:那不是此技能的职责。
- 当用户像专业人士一样写作(使用镜头、景别、“越过 A 的肩膀”、轴线等术语)时,完全按照给定的选择接受。仅询问真正缺失的要素,切勿重新讨论他们已经做出的决定。
- 在获得回答后,任何仍然未填充或回答为“您决定”的项目将被赋予合理的默认值。然后进入工作流程;步骤 4 中的计划是用户确认或纠正这些默认值的地方。
问题模板
这些显示每个问题的形式。根据您面前的场景重新编写措辞和选项;切勿逐字粘贴。
- 地点 — “这发生在哪里,这个地方是什么样子的?” → 根据输入构建的选项,例如 狭小、紧凑的室内 · 宽敞、开阔的室内 · 室外 · 您决定。原因:它设定了比例和存在哪些道具。
- 位置 — “他们是如何布置的?” → 适合输入中地点和人物的选项,结合位置和姿势(都坐着,面对面 · 并排 · 一人坐着,一人站着 · 您决定)。原因:180° 轴线在两个主要角色之间绘制。
- 朝向 — “<窗户/门/墙壁> 在 的哪一侧?” → 的左侧 · 的右侧 · 后面 · 后面。原因:没有它,地图可能会镜像,所有背景都会改变。
- 灯光 — “主光源从哪里来?” → 该地点存在的光源(从 <窗户/门> 一侧 · 从头顶固定装置 · 从场景中的实用灯 · 从其中一人身后(逆光) · 您决定)。仅当用户提到了光源时才询问硬光或柔光。原因:它决定每张脸哪一侧被照亮。
- 环境 — “他们另一侧有什么?” → 适合地点的选项。原因:它是每个反打镜头的背景。
- 镜头 — “您想如何拍摄?” → 我给您列个清单(数量、顺序、景别) · 经典覆盖:一个全景、两个过肩镜头、两个特写镜头 · 一个连续镜头 · 您决定。原因:这些就是摄像机。
- 节奏(仅当移动是合理的时)— “场景中有人移动吗?” → 不,所有人都待在原地 · <此场景建议的一个移动,为其编写> · 是的(告诉我谁、从哪里到何处以及何时移动) · 您决定。原因:移动绘制为路径,并且可以改变轴线。
工作流程
-
阅读场景 — 输入加上任何收集到的答案。提取:
- 地点、其固定几何体和对于调度重要的道具(墙壁、门、窗、家具、车辆、路径);
- 每个角色:他们在哪里、姿势、面向什么;
- 每个移动:谁、从哪里、经过哪里、到何处、结束时的朝向和姿势;
- 每个重要的光源(太阳、窗户、灯、实用灯):它在物理上位于何处、光线来自哪一侧、照到了谁;
- 主要关系——互相交谈或注视最多的那一对。这一对定义了 180° 轴线。如果移动改变了几何结构,则为其后的镜头决定轴线;
- 镜头。如果用户将其留给您或选择了经典覆盖,请自行构建(参见覆盖规则)。
然后在开始布局之前,先为自己回答三个问题:在场景中物理上发生了什么变化(谁移动了、拿起了什么、打开了什么);观众必须同时看到什么(两个人在同一帧中、一张脸和其后的门);哪些内容必须在各个镜头之间保持不变(被照亮的窗户、桌子、场景所依赖的物体)。答案决定了哪些道具被命名、哪些镜头必须是双人镜头以及轴线必须在何处保持。
-
以米为单位进行布局,使用真实世界尺寸(见下表)。地图惯例:+y 是从主摄像机/开场摄像机方向“进入场景”,+x 是向右。将主摄像机放在动作的南侧,朝北看。
-
编写场景规格文件(JSON,架构见下;完整 JSON Schema 参见
references/scene.schema.json),保存到工作目录,然后在不渲染的情况下进行验证:uv run <skill-dir>/scripts/staging_render.py scene.json --check(<skill-dir>是包含此 SKILL.md 的文件夹)。它会打印已解决的报告(摄像机位置、警告)或一行spec error: …;修复并重新检查,直到通过。 -
预览并获取批准——在任何渲染之前。 运行
uv run <skill-dir>/scripts/staging_render.py scene.json -o <name>.mp4 --preview(几秒钟)。它会写入<name>.preview.png(完成的平面图)和<name>.report.json。首先自己查看预览,修复明显的问题(如果您无法查看图像,请改为检查报告,并告知用户您无法检查图像)。然后向用户展示预览图片和一份用他们母语编写的简明计划:- 环境 — 空间大小、关键物体及其位置(相对描述加米数);
- 角色 — 位置、姿势、朝向;然后按顺序列出每个移动;
- 灯光 — 每个光源、它在哪里、照亮了谁的哪一侧;
- 摄像机 — 表格:序号、景别、镜头、位置(例如“A 前方右侧 2.9 米,眼平高度”)、它看到什么,以及一行关于此摄像机用途的解释(其在覆盖中的任务);
- 镜头描述 — 对于每台摄像机,根据规格文件和报告中的
frame数据,使用references/staging-craft.md中的模板编写的简短通俗语言帧描述:哪些人和物在帧内、在哪一侧、他们后面是什么、光线从哪一侧来、视线方向和轴线侧。中性和事实性:不含风格或情绪词汇,不含针对特定图像或视频工具的措辞; - 180° 轴线 — 哪一对、摄像机保持在轴线哪一侧、是否有任何镜头被镜像或越轴;
- 假设 — 您选择而非用户决定的每个值,并标记为假设;
- 备选方案 — 两到三个用户未提及的摄像机选项,每行一个及其权衡(参见
references/staging-craft.md中的“提供备选方案”)。仅当用户选择时才应用其中一个。 要求他们批准或纠正任何内容(“把门放在另一面墙上”、“让镜头 3 成为特写”、“她保持坐着”)。将纠正应用到规格文件,再次预览并展示修改后的计划;重复直到他们批准。仅在批准后渲染。仅在用户明确要求无需审查直接渲染时跳过此步骤;然后在交付时列出假设。
-
使用捆绑的引擎进行渲染
scripts/staging_render.py(路径相对于此技能文件夹;请勿重写或复制):uv run <skill-dir>/scripts/staging_render.py scene.json -o <name>.mp4 --quality h。 使用--quality l进行快速草稿。视频以完成的平面图显示 1 秒开始(--poster 1.0,默认值),然后交叉淡入逐步构建过程。第一帧也是社交平台上的缩略图,因此它必须显示整个结果;仅当用户要求纯构建过程时使用--poster 0。 它会打印一份 JSON 报告,包含每个角色、灯光和摄像机(位置、距离、水平视野,以及一个frame块,列出了在帧内可见的人和物及其在帧中的哪一侧,以及每个光源来自帧的哪一侧)和warnings(也保存为<name>.report.json),并保存<name>.last.png(完成的平面图)。 -
在交付前检查结果。 打开
<name>.last.png并查看它(如果您无法查看图像,则依赖报告并说明情况):每个标签可读、没有摄像机图标放在人物身上、锥体指向正确的拍摄对象、移动路径可读、图例未被截断。然后运行references/staging-craft.md中的最终空间一致性检查:各个镜头之间左右和视线一致、每个入场和出场是可能的、固定物体和主光源在每个镜头中位于相同的物理位置、没有未标记的越轴。读取warnings——必须向用户提及自动镜像的镜头或越轴的摄像机。修复规格文件并重新渲染(最多两轮)。 -
交付 视频、规格 JSON 文件(以便通过更改数字来编辑布局)以及更新到最终规格文件的已批准镜头描述。使用用户的母语,用两到三行说明哪些默认值仍然存在(仅限收集轮次中留空的或用户交回的),以及任何轴线警告。除非用户另有要求,否则地图标签使用英文。
覆盖规则(当镜头留给您时)
构建覆盖场景的最小集合,按分镜头脚本顺序,最多 8 个:
- 开场全景 — 所有人在帧内(
target: 所有角色名称的列表,size: "wide",lens: 35,from: "S")。 - 对于主要对 A/B: 每人的过肩镜头(
over_shoulder: B, target: A和反向)。选择肩膀,使两个摄像机都位于轴线的同一侧;引擎会镜像任何不符合的摄像机并报告。 - 关键节拍的单人镜头:
size: "cu"或"mcu",lens: 85/50,from: "front-left"/"front-right"(相对于角色的正面朝向),在轴线的同一侧。 - 道具插入镜头 用于任何动作所依赖的道具(
size: "insert",lens: 85,height: "high"用于桌子上的东西)。 - 移动后: 覆盖结束位置(
target: "A@1"),并为移动后的镜头设置它们自己的轴线("axis": ...)。
...(因翻译而截断)