FilmForge Story
故事先行:在绘画、配乐或购买之前,电影必须存在于纸上,精确到秒,并按信用定价。此技能会编写三个文件:story-bible.md、screenplay.md、shotlist.yaml(模板位于 templates/)。当镜头列表验证通过且其计划适配信用时,阶段门即通过。
路径:scripts/、templates/ 和 config/ 以下均为本技能内的文件夹(加载时显示的基目录),由 ./install.sh 放置。如果从仓库克隆工作,它们位于仓库根目录的 tools/、templates/ 和 config/。
步骤 1. 前提与论点
- 前提: 一句话,谁想要什么,代价是什么。
- 论点: 结尾证明的一句话。
如果两者中任何一个写成两句话,故事尚未找到。请在此处继续工作;所有下游内容都继承于此。
步骤 2. 核心:六大引擎
优秀的短动画电影都做同样几件事。填写每一行;一部电影如无法填满任何一行,则缺少某个部分。
| 引擎 | 检验标准 |
|---|---|
| 一个关系 | 电影围绕的两个角色。其他所有人都服务于他们。 |
| 一个缺陷,带有代价 | 主角的缺陷在屏幕上为某人带来了真实的代价。 |
| 一个令人心碎的选择 | 主角亲手放弃了自己想要的东西。 |
| 一个反转 | 观众所相信的并非真实,而真相早已埋下伏笔。 |
| 一个镜像 | 一个在早期撒谎、在晚期揭示真相的画面。 |
| 同一个构图,出现两次 | 电影开场和结尾使用同一构图,中间的一切改变了它。 |
工作示例(《灯笼飞蛾》,仓库文本示例,36 秒):一个关系:灯塔女孩与余烬飞蛾,她整个冬天握到的第一个温暖之物。一个带有代价的缺陷:她想留住温暖,而托住飞蛾时,船正漂向礁石。一个选择:她朝熄灭的灯张开手,让飞蛾飞入其中。一个反转:飞蛾并未烧尽;黎明时灯罩上布满了上百只小余烬飞蛾。一个镜像:她在灯镜中的倒影,独自一人被飞蛾照亮,随后消失在光束的光芒中。同一个构图出现两次:夜晚熄灭的灯塔开场,黎明温暖的灯塔结尾。
步骤 3. 设置与回报
一张表格,其中没有任何内容只出现一次。每一行:什么被埋下(镜头)以及它回报什么(镜头)。如果一个画面没有回报,要么剪掉它,要么给它一个回报。来自《灯笼飞蛾》的行:开场帧中熄灭的灯 / 同一帧在黎明,灯变暖;她随身携带的空灯笼 / 飞蛾消失后,它留在地板上;一只飞蛾在她指尖 / 一百只飞蛾在玻璃上;没有一丝暖金色 / 光束闪耀金色。
步骤 4. 色彩剧本
每个场景一行:时间范围、3 到 5 种颜色、情绪。添加承载意义的规则(“灯点亮之前没有暖金色”,“灯点亮前唯一的暖色是飞蛾的橙色”,“黎明前天空没有蓝色”)。规则成为连续性总账中的 forbid 条目,每幅画作都会测量。
步骤 5. 剧本,按时标注
- 场景带有时间范围;镜头带有开始时间、时长、构图,以及仅相机能拍摄的内容,使用现在时态。如果某个节拍无法被相机拍摄,则不在电影中。
- 每个场景下方,写出音乐的功能(乐器、能量、指定的重音、书写的静默)。《灯笼飞蛾》的剧本在“黑暗”下写“低沉的嗡嗡声,每小节一个柔和的敲击。寒冷而孤独。”在“光明”下写“0:24 的重音,然后是温暖的完整和弦”。如果音乐已经存在(一首歌、一段钢琴曲),故事按其章节顺序行进,每个章节下一行情绪标注,镜头或页面随之转动。
- 文字:只说出画面无法表达的内容(谁在说话、他们为什么离开、谁死了、结局意味着什么)。无对白是一种优势:它对任何地方的任何人都有感染力。旁白要么手写在屏幕上,要么说出;无论哪种方式,之后会在电影时间中计时(forge-sound)。
步骤 6. 按信用调整电影规模
paint_credits = credits x 0.95 - sheets - plates - proofs - score
paintings = floor(paint_credits / (price x 1.3)) # 1.3 = 重绘缓冲
runtime = paintings x average hold # 绘画保持:4 到 6 秒
工作示例:70 信用(66.5 可花费),两张板和一个摄影片(8.25,加缓冲约 11.8),64 秒配乐(9.28):剩余约 45.4 可用于绘画,因此 12 幅绘画,每幅 2.75 加缓冲:一部 60 秒电影,每个保持 5 秒。《灯笼飞蛾》6 个镜头运行 36 秒;budget.py 计划它为 39.08(超出 66.50 可花费),已有花费之外剩余 27.42:可再容纳 7 幅绘画及重拍。
规模设定规则:
- 主角帧优先:命名 2 到 4 个必须让人产生感受的镜头。它们先于一切作为试样被绘制。
- 只在其他方法无效时才使用真实运动(飞行、作为高潮的变形)。在其他地方,使用关键姿势快切(
poses: 2)并在后期添加活力。 - 在故事允许的地方重复使用摄影片或绘画(
kind: reuse):两次出现的同一构图引擎是免费的。
步骤 7. 镜头列表
编写 shotlist.yaml(架构:references/shotlist-schema.md)。每个镜头:id、scene、dur、kind、framing、beat、characters、refs(每个角色的设计稿)、cut_on,以及音乐简报命名故事重音时使用 pin。然后:
python3 scripts/shotlist.py validate shotlist.yaml
python3 scripts/budget.py shotlist.yaml --production production.yaml
迭代直到验证显示无错误且预算显示 FITS。需要关注的警告:绘画保持低于 1.5 秒或超过 10 秒、旁白快于每秒 2.4 个单词、角色在画面中但未附加其设计稿。
输出格式
story-bible.md:前提、论点、六大引擎、世界、角色(代号、外貌、愿望、动作)、道具与状态、设置与回报、色彩剧本、制作规则。screenplay.md:带有时间、音乐笔记的场景,以及带有开始时间、时长、构图、动作、台词的镜头。shotlist.yaml:验证通过、适配预算。- 一份简短报告:运行时长、镜头数量、已规划与可用信用对比、主角帧、唯一风险。
阶段门检查表
- 前提和论点各为一句话
- 六大引擎全部填写;每个设置得到回报
- 色彩剧本及其规则
- 每个镜头可拍摄;每个节拍跟随其音乐
-
shotlist.py validate:无错误 -
budget.py:显示 FITS,储备金未动用 - 主角帧已命名
修复表
| 症状 | 修复方法 |
|---|---|
| 结尾不落地 | 选择缺失或由主角选择;或反转未埋下。重新检查引擎 3 和 4 |
| 感觉像幻灯片 | 节拍描述状态而非动作,将每个节拍重写为画面中正在变化的东西 |
| 超出预算 | 更少、更长的保持;重复使用摄影片;使用关键姿势而非视频;然后删除优先级 3 的镜头 |
| 旁白警告 | 减少字数,或让台词跨过下一个剪辑(旁白存在于电影时间中) |
| 角色看起来不像同一批人 | 非故事问题:forge-style-lock(设计稿、锚点、比例锁定) |
参考文档
references/story-engine.md:六大引擎详细说明,附《灯笼飞蛾》分解references/shotlist-schema.md:每个镜头列表字段、其值及由哪个工具读取