# Storyboarder Storyboard

> Storyboarder将小说原文转化为完整分镜提示词。包含内部台词密度自检循环（最多3轮）。

- Skill: `wddxh/storyboarder-storyboard` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add wddxh/storyboarder-storyboard`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wddxh/storyboarder-storyboard/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wddxh (https://skillmd.com/u/wddxh)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wddxh/storyboarder-storyboard

---


## 输入

### 文件读取
- 从 `story/episodes/$ARGUMENTS[0]/outline.md` 的「本集资产清单」中提取本集引用的资产名称
- 使用 Glob 获取 `assets/**/*.md` 全部文件路径列表，仅读取文件名与清单中资产名称匹配的文件
- `story/episodes/$ARGUMENTS[0]/keyframes.json` — 必须读取（关键帧描述与序号，决定每个 shot 引用哪些 keyframe）
- 使用 Glob 获取 `assets/keyframes/$ARGUMENTS[0]/*.md` — 必须列出（本集所有关键帧 .md，用于 shot 引用）
- `story/episodes/$ARGUMENTS[0]/novel.md` — 必须读取
- `story/episodes/$ARGUMENTS[0]/outline.md` — 必须读取（含资产清单）
- `config.md` — 必须读取
- 根据 $ARGUMENTS[0] 计算上一集集数（如 $ARGUMENTS[0] 为 ep02 则上一集为 ep01），读取 `story/episodes/{上一集}/outline.md` — 若上一集存在则读取
- `story/episodes/{上一集}/storyboard.md` — 若存在则读取末尾 2-3 个镜头
- `skills/storyboarder-storyboard/rules.md` — 必须读取并严格遵循（输出格式、字段约束、规则）

### 动态参数（$ARGUMENTS）
- `$ARGUMENTS[0]` — 当前集数（如 ep01）

## 职责描述

### 核心使命

把本集小说原文转化为完整分镜——每个镜头是即梦视频模型的一次独立提交，提示词必须自包容（不能跨镜头引用）、画面与声音必须连贯叙事、状态必须与上下镜头衔接。**每个 shot 必须围绕 keyframes 展开**：keyframes.json 是 director 提供的本集视觉锚点序列，每个 shot 必须引用 ≥1 张 keyframe 作为画面参考；相邻 shot 若需要画面连续，应在前 shot 末尾与后 shot 起始引用同一张 keyframe（首尾共享）。下游消费者是即梦视频模型（按镜头独立生成视频片段）和 director-review-storyboard（审稿）。模型不会"理解整集剧情"——它只看本镜头提示词；任何跨镜头引用、画面与台词分离、抽象比喻都会让生成失败。

### 工作思路

**整体规划（动笔前）：**

1. **建立三层认知**：通读 novel + outline，建立三层心理模型——剧情层（核心事件/转折/结局）、信息层（本集需要观众知道的事——身份/世界观/伏笔，对照「本集信息传达」清单）、状态层（每个角色的视觉与知识状态如何演变）。三层缺一会导致铺垫漏掉或状态突变
2. **读 keyframes.json 建立视觉锚点序列**：按集内序号通读所有 keyframe 的 narrative_purpose + composition，形成本集"视觉节拍"——每张 keyframe 是一个剧情视觉节点，shot 规划必须围绕这些节点展开，而不是脱离 keyframes 自由切分
3. **划分场景节拍 + 围绕 keyframes 切分 shot**：把 novel 拆成场景单元（同时空），每个场景内识别关键节拍。**按 config「单镜头时长」规划每个 shot 包含哪些 keyframe 对应的剧情**——若一个 shot 时长够覆盖多张 keyframe 的画面演进（如 12s 内角色从抬头→说话→低头），则该 shot 引用多张 keyframe；若一个 keyframe 的画面需要长时间表现（如静态对峙）则单 keyframe 撑一个 shot。**对照 config「每集分镜数」预算分配镜头**——总数应贴近 config 设定
4. **首尾策略决定**：第 1 集——根据剧情类型设计开场抓眼方案（紧张/悬念/视觉冲击/不公感），主角内心独白做自我介绍；续集——第一镜头与上一集结尾自然衔接，必要时写过渡，不跳过上一集暗示的过渡；集尾镜头呼应集尾钩子，最后几秒包含结束转场

**每个镜头的设计：**

5. **shot ↔ keyframe 引用映射**：本 shot 涵盖的剧情画面对应 keyframes.json 中的哪些 KF-id？两处都要写：(a) 头部「引用资产」字段加入 keyframe 引用（用于人类可读与自检）；(b)「画面与声音描述」正文中以 `画面参考 [KF-id](path)：{叙事}` 形式引用同一批 keyframe（用于视觉锚定）；头部声明与正文引用必须一致。**相邻 shot 画面连续时**（如本 shot 结束在 KF-005 的画面、下 shot 起始就在 KF-005 的画面）首尾共享同一 keyframe：本 shot 末段引用 KF-005，下 shot 首段也引用 KF-005，作为视觉衔接锚
6. **节奏曲线分配**：先定本集节奏曲线——铺垫段偏长（让观众进入情境）、冲突段加快（短镜头切换）、情绪沉淀偏长、高潮按戏剧需要（极长慢推或极短切换）。**若 config「单镜头时长」是范围**（如 10-15s）→ 在范围内按节奏需要灵活分配，不要每个镜头都同样时长；**若 config「单镜头时长」是单一数字**（如 12s）→ 每个镜头时长必须严格等于该值，节奏曲线只通过镜头数量、内容密度、景别变化来体现。**镜头总数遵循 config「每集分镜数」**
7. **景别按叙事功能选择**：远/全景建立场景与空间、中景表现互动与动作戏、近景承载对白和反应、特写放大情绪/关键道具/决定性表情、俯/仰表达力量关系或视角差异。**一段戏的景别要有变化**（远→中→近→特的节奏），全程同一景别会让观众疲倦
8. **镜头运动按情绪选择**：固定（稳定叙事/对白）；推（聚焦关键/情绪积累）；拉（揭示全貌/情感后撤）；摇/移/跟（跟随角色或揭示空间）；升/降（突破或压抑）。静态戏不强行加运动，运动戏不忘加运动
9. **声音设计层级**：信息传达**优先用主角内心独白**——短视频节奏快，观众无法慢慢推断，内心独白还能增强代入感；其次对白和讨论；最后才是旁白；旁白必须以具体角色口吻并标声音特征；任何镜头不得超过 2s 无声窗
10. **状态衔接先于内容**：写本镜头前先提取上一镜头结束状态（视觉位置/姿势/手持物 + 知识"已告知什么"），本镜头开头要么直接衔接（描述与上一镜头结束一致的起始状态），要么用一两句写出过渡。任何视觉或知识突变必须有显式过渡描写。**衔接通过本镜头自身的描述实现，绝不通过"延续上镜头"等引用实现**
11. **「画面与声音描述」连贯叙事**：每个时间段是一段连贯文字，画面动作与台词自然交织。视觉描述用 AI 视频模型能理解的具体直白语言——直接描写身体姿态、动作轨迹、面部表情、环境细节、光影效果——禁止文学比喻和抽象修辞。禁止画面/台词/音效分栏列项
12. **画面文字与不可感知信息处理**：招牌/屏幕/信件等画面文字 → 改角色读出（AI 难以稳定渲染文字）；气味/温度/触感等不可感知信息 → 改角色台词表达

**整集级自检：**

13. **keyframe 覆盖自检**：枚举 keyframes.json 中所有 KF-id，每张 keyframe 必须至少被一个 shot 引用；未被引用的 keyframe 必须返工（要么补 shot 引用，要么 director 该 keyframe 是冗余的——但 storyboarder 无权删 keyframe，只能补引用）。**每个 shot 必须引用 ≥1 张 keyframe**——零 keyframe 引用的 shot 必须返工
14. **铺垫覆盖**：枚举本集铺垫元素（伏笔/关键对白/知识传递点/状态变化标记）+ 标记回收点，逐项映射到具体镜头，时序检查（铺垫镜头编号 < 回收镜头编号）。未落地或时序倒挂的元素必须返工
15. **时长综合流程**：估算非台词时间（动作 1-5s/氛围 1-4s/转场 1-2s）→ 推算台词可用时间 → 创建阶段心算评估 → 综合判断（过长/过短/合理）。脚本批量验证由自检/审核阶段兜底

### 常见误区

- **零 keyframe 引用 shot** — 模型容易写出"画面我自己描述就够了"的 shot 而忘了引用 keyframe — 每个 shot 必须引用 ≥1 张 keyframe 作为视觉锚点；自检必查
- **跳过 keyframe** — keyframes.json 有 N 张，模型只引用了部分 — 每张 keyframe 必须至少被一个 shot 引用，未被引用必须补
- **相邻 shot 画面连续却不共享 keyframe** — 本 shot 结尾画面 = 下 shot 起始画面，但两 shot 引用了不同 keyframe → 视频生成时画面不连续 — 首尾共享同一 keyframe
- **跨镜头引用** — 模型本能想写"延续上镜头""角色继续之前的动作"，是人类拍摄思路；但 dreamina 每镜头独立生成，没有上下文；rules.md 已禁但写流畅故事时本能违反 — 每镜头独立描述完整起始状态
- **画面与台词分离** — 模型容易按"画面/台词/音效"三块结构化输出（rules.md 已示例错误格式），结构化看着整齐但视频模型需要一段连贯叙事 — 把台词嵌入动作描写中，自然交织
- **铺垫漏掉** — 小说有伏笔但分镜跳过，因为铺垫不在大纲事件里，模型容易认为"不重要" — 执行铺垫覆盖自检（枚举铺垫+回收点+时序）
- **状态突变** — 上镜头角色跪着，下镜头突然站立没有过渡，模型按剧情节点直跳 — 执行状态连贯自检（前镜头结束状态=本镜头开头状态？）
- **台词超时** — 模型本能按"剧情需要的台词量"写，不管 5 字/秒上限 — 执行时长综合流程，关键是脚本验证不是估算

## 规则参考

- `skills/storyboarder-storyboard/rules.md` — 必须读取并严格遵循

## 分镜自检

生成分镜后，按照 `skills/storyboarder-storyboard/rules.md` 中的输出格式、字段约束和规则逐条自检（最多 3 轮）：
1. 全部达标 → 完成
2. 不达标 → 按照反馈修正问题 → 重新自检
3. 3 轮后仍有不足 → 接受当前结果

## 输出

### 文件操作
- 使用 Write 将分镜写入 `story/episodes/$ARGUMENTS[0]/storyboard.md`

