# `outline.md` 格式 spec 视频章节规划的产出文件。**用户可以直接编辑**,所以格式必须人类友好 (用 markdown 不用 JSON / YAML)。 !重要:阅读此文件后必须继续阅读 [`CHAPTER-CRAFT.md`](CHAPTER-CRAFT.md) 的全部内容,了解对网页效果的真实需求,然后再开始编写 outline > ## ⚠️ outline 是开发计划,不是视觉规划 > > outline 只规划**节奏 + 内容 + 信息密度**: > > - 章节切分 / 每章 step 数 / 每步估时 > - 每步屏幕内容(hero / 标语 / 数据 / 列表项) > - 章节级**信息池**(从 article 抽的数字 / 引用 / 案例 / 标签) > > **outline 里的 step 数是初始预估**。最终 step 数以章节实现时的 > `narrations.ts` 为准——后者既是 step 数源,也是音频合成源 > (详见 [`CHAPTER-CRAFT.md`](CHAPTER-CRAFT.md) 「代码层最小约束」+ > [`AUDIO.md`](AUDIO.md))。如果实现时章节 step 数和 outline 不一致, > 回过来同步 outline 即可,不需要纠结"对得严丝合缝"。 > **写 outline 前必读**(双源原则,[CHAPTER-CRAFT.md Part 0 原则 10](CHAPTER-CRAFT.md#10-双源原则scriptmd-定节拍--articlemd-定画面密度)): > > - **`script.md`** —— 决定**节拍**:按 `---` 切节拍,每节拍 1~2 step、估时 > - **`article.md`**(如有)—— 决定**画面信息密度**:每章首段抽**信息池** --- ## 抽象示例(看格式) ````markdown # Video Outline > **主题**:``(Checkpoint Plan 已选定)—— <一句话风格描述> > **总时长**:约 分 秒(口播 ~ 字 ÷ 4 字/秒) > **章节数**: 章 / 步 --- ## 1. — <章节标题>( steps · ~s) **信息池**(chapter agent 按需挂角标 / 副标 / pull-quote / mono cue): - <类型:数字 / 引用 / 出处 / 案例 / 词义 / 时间 / 对比 / ...>:<内容> —— <来源 article §X / Lxx> - ... **开发计划**: - step 1 (~Ts) — <屏幕内容> - ... 口播节选: > <1~3 句节选,对应到 script.md 完整文本> --- ## 2. — ... ```` > **关于时长**:outline 里**只**写 step 的 `(~Ts)` 口播估时(音画对齐 > 用),**绝对不写**动画时长 / 错峰量 / keyframe 数值。这些都在章节开发 > 阶段决定([`CHAPTER-CRAFT.md`](CHAPTER-CRAFT.md) Part 3 时长参考)。 > **想看具象示例**: > - 钩子型开场结构 → [`EXAMPLES/hook-chapter/`](EXAMPLES/hook-chapter/) > - 列举型章节结构 → [`EXAMPLES/list-reveal/`](EXAMPLES/list-reveal/) > - 科技测评类(实测 / 对比 / 跑分) → [`EXAMPLES/case-tech-review/`](EXAMPLES/case-tech-review/) --- ## 字段约定 ### 顶部 metadata block 用引用块(`>`)形式,方便扫一眼整体规模: | 字段 | 必填 | 说明 | |---|---|---| | **主题** | ✓ | Checkpoint Plan 必须已选定。chapter agent 实现时按主题颜色 / 字体 token 走,动画 / 节奏 / 视觉演示由章节自由发挥 | | **总时长** | ✓ | 估算口播时长(中文 ~ 250 字 / 分钟) | | **章节数** | ✓ | `N 章 / M 步` | ### 章节标题:`## N. — (<S> steps · ~<T>s)` | 部分 | 规则 | |---|---| | `N` | 1-indexed 顺序,对齐 `chapters.ts` 的注册顺序 | | `<id>` | **小写 + 连字符**。会成为 React `key` / 文件夹名 (`src/chapters/0N-<id>/`) / 音频子目录 (`public/audio/<id>/`) | | `<title>` | 给人看的中文标题。**不会**进 React 代码 | | `<S> steps` | 该章 step 总数 | | `~<T>s` | 该章口播总估时(中文 ~ 4 字/秒) | 合法 id:`coldopen`、`hook`、`why-good`、`why-good-text-render`。 不合法:`why_good`(用连字符)、`Hook`(小写)、`第一章`(拉丁字符)。 ### 章节首段「信息池」(**双源原则核心落地**) 每章独立列出从 `article.md` 抽的细节集合,**让 chapter agent 实现每步 画面时按需取用**——可能挂成右下角 mono 角标 / 副标小字 / pull-quote 引用 / 数据浮层。 #### 信息池条目格式 ``` - <类型>:<具体内容> —— <来源 article §X / Lxx 或简注> ``` > **没 article(用户直接给 script)**:信息池退化为"主动设计画面信息 > 密度"——靠数字 / 对比 / 元数据等让画面比口播信息密。可以列"画面 > 装饰元素池"而非"article 抽取池"。 ### Step 列表:每步 **1 行** ``` - step N (~Ts) — <屏幕内容> ``` | 规则 | 原因 | |---|---| | `step N` 1-indexed | agent 实现时 `if (step === N - 1) ...`(注意零基偏移) | | **`(~Ts)`** 必填 | 按 script.md 本步对应口播段字数 ÷ 4 估算(中文 ~ 4 字/秒)。范围 3~10s | | **屏幕内容** | 一句话讲清楚这一步舞台上有什么:hero / 标语 / 数据 / 装饰元素。**≤ 1 行**,再多就该拆 step | | **不写动画** | 写死 = 翻译机化(详见本文件顶部框) | | **不写时长数值 / 错峰量** | 这些在章节开发阶段决定 | | **不写实现手段** | filter / SVG / Canvas 选型留给 chapter agent | ### 口播节选(每章末尾,可选但推荐) 精炼 1~3 句,**不是完整稿子**,仅供章节规划阶段对照"这章在讲什么"。 完整文本回 `script.md`。`outline.md` 章节 = `script.md` 中两个明显 主题切换之间的段落。 > 音频合成([`AUDIO.md`](AUDIO.md))会**回到 `script.md`** 切分完整 > 文本,**不**用 outline 节选。 --- ## 命名规则速查 | 对象 | 规则 | 示例 | |---|---|---| | 章节 id | 小写 + 连字符 | `coldopen`, `why-good` | | 章节文件夹 | `0N-<id>` | `src/chapters/01-coldopen/` | | 章节组件 | PascalCase | `Coldopen.tsx`, `WhyGood.tsx` | | 章节 CSS 类前缀 | 章节缩写(避免跨章冲突) | `.cd-` / `.wg-` / `.mg-` | | 音频子目录 | `<id>/` | `public/audio/coldopen/` | | 音频文件 | `<step-N>.mp3` (1-indexed) | `public/audio/coldopen/1.mp3` | --- ## 章节切分的经验法则 - **每章 3~8 步**。少于 3 步太薄;多于 8 步观众会忘记这章在讲啥 - **总时长 ÷ 30 秒** ≈ 章节数(一章约 30~60 秒讲完) - **每章 = 一个聚焦主题**。"为什么强 + 怎么用" 是两章,不是一章 - **章节边界 = 口播稿里讲者会换语气 / 换主题的位置**。读 `script.md` 时哪里你下意识想"咳一声接下一段",那里就是章节边界 - **慢节奏 / 长镜头风主题**(midnight-press / 电影感片头)每章可少到 2~3 step;**信息密集型**(科技测评 / 对比表)每章可放宽到 8~10 step --- ## 素材清单(outline.md 末尾) ```markdown ## 素材清单 ### 1. coldopen - ✓ <资源 1 描述> (<已就位路径>) - ⚠️ <资源 2 描述>(待提供) - ⚠️ <资源 3 描述>(待提供) --- ## 自检(写完 outline **强制**执行,不可跳过) > ⚠️ **硬性流程**:outline 写完后**必须**走自检 → 修改 → 提交 三步。 > **禁止**写完直接进入 Checkpoint Plan 让用户对齐。 > > **执行方式**(按能力降级): > > 1. **优先 Agent Teams**:开一个独立 reviewer agent,传入 `outline.md` > + 本节自检清单 + `script.md` / `article.md` 路径,让它**逐项核查 + > 出结论**(哪几条 fail + 证据)。 > 2. **其次 subAgent**:当前 agent 没 Teams 但能开 subagent,用 subagent > 走同样流程。 > 3. **都没有**:自己**严格逐项**核查。 > > 拿到结论后**先按 fail 项改 outline,再进入 Checkpoint Plan**。 - [ ] 每个 step 都是**单一句屏幕内容描述**,没有"动画"行 / "手段"行 - [ ] 没有任何 step 写了具体毫秒 / 秒数(除 `(~Ts)` 口播估时) - [ ] 每章首段都有「信息池」block,至少 3 条 article 抽取项,**每条 必带来源标注**(`—— 来源 article §X / Lxx`)—— 没标注 chapter agent 回不到原文 - [ ] **所有 step `(~Ts)` 累加 ≈ 顶部声明的总时长**(误差 < 10%)—— 不 一致说明节奏规划失真 - [ ] 章节切分符合"每章 3~8 步 / 30~60s 一聚焦主题"经验 - [ ] 末尾「素材清单」分章节列出,✓ / ⚠️ 标注清楚 - [ ] 脚本不得包含标题、序号等非口播内容,仅包含人类正常可读的内容 写完看一眼:**outline 是不是干净到 chapter agent 看了能立刻开工 + 还有 设计空间**?是 = 合格。如果你看了都觉得"太空,agent 不知道动画选什么"