Flatten skill category directory structure

This commit is contained in:
2026-05-20 17:04:50 +08:00
parent 0dd552a6f7
commit 63f2baa4bd
354 changed files with 0 additions and 0 deletions
@@ -0,0 +1,110 @@
# 分镜规划
## 目标
根据脚本为每个场景规划分镜,**引用已生成的人设图、背景图和关键物件图**作为视频生成的参考素材,不再单独生成分镜图。
## 重点
- 分镜不再独立生成图片,而是为每幕映射已有的参考图(角色 `selected.jpg`、背景 `selected.jpg`、物件 `selected.jpg`
- 每幕需要编写视频生成提示词,描述画面动态和镜头运动
- 分镜文档是视频生成阶段的直接输入
## 流程
### 1. 解析脚本与关联素材
读取 `script.md` 提取每幕信息(场景名称、时间码、场景描述、歌词、视觉风格、关键物件)。
结合 `story_concept.md` 中的核心人物描述和各幕场景描述,为每幕标注:
- **出场角色**:场景中出现的角色名 → 对应 `characters/{character_name}/selected.jpg`
- **场景背景**:该幕的场景环境 → 对应 `backgrounds/{bg_name}/selected.jpg`
- **关键物件**:该幕出现的关键物件 → 对应 `props/{item_name}/selected.jpg`
判断规则:
- 场景描述中明确提及角色名或角色特征 → 标注该角色
- 场景描述为纯空镜/风景/物件特写 → 出场角色标注为 `(无)`
- 不确定时倾向于标注角色(宁多勿漏,用户可在预览时修正)
### 2. 生成分镜文档
将每幕信息写入 `storyboard.md`,为每幕生成:
- **出场角色**:该幕出现的角色**目录名**(即 `characters/` 下的子目录名,不是 design.md 中的 H1 显示名)
- **场景背景**:该幕对应的背景**目录名**(即 `backgrounds/` 下的子目录名)
- **关键物件**:该幕出现的关键物件**目录名**(即 `props/` 下的子目录名)
- **场景描述**:中文画面描述(从 script.md 同步)
- **视频提示词**:英文 prompt,描述画面动态、镜头运动、角色动作,引用参考图(如 `image 1 as background, image 2 as character`
- **参考图列表**:背景 `selected.jpg` + 角色 `selected.jpg`(如有)+ 物件 `selected.jpg`(如有)
### 3. 生成分镜图
为每幕生成分镜合成图,让用户在视频生成前预览实际画面构图。
**生成方式**:使用 `all_in_one_batch_image_generation`model_name: `all_in_one_pro`)或 `nano_banana_batch_image_generation_v2`model_name: `nano_banana_2`)批量生成,每幕 1 张。
**参考图传入**:通过 `image_paths` 传入背景 `selected.jpg` + 角色 `selected.jpg`(如有)+ 关键物件 `selected.jpg`(如有),并在提示词中用 `image 1 as background, image 2 as character` 等引用。
**提示词**:基于分镜文档的 `视频提示词:` 字段,但去除镜头运动描述(pan、dolly、tracking 等),仅保留画面构图、角色动作、光线氛围和风格描述。这是**静态画面**提示词,不同于视频提示词。
**宽高比**:统一 `16:9`
**存储**:保存到 `storyboard/` 目录,命名 `scene_01.jpg``scene_02.jpg` 等(序号与幕序一致)。
**写入分镜文档**:在 `storyboard.md` 每幕末尾追加 `候选图:``选定图:` 字段,记录生成的候选图路径。首次生成后默认选定第一张。
### 4. 用户审阅
调用 MCP 工具 `preview_and_collect_feedback` 启动预览:
- **script**: `.opencode/skills/mv-creator/scripts/render_preview.py`
- **args**: `[".mv/{song_name}/{theme}", "--type", "storyboard", "--lang", "{lang}"]`
- **feedback_path**: `.mv/{song_name}/{theme}/feedback.md`
预览页面按时间线展示各幕分镜卡片,显示每幕的参考图缩略图和视频提示词。
工具返回反馈内容后:
- `LGTM` → 进入视频生成阶段
- 其他 → 按建议修改分镜映射或视频提示词,更新 `storyboard.md`,重新校验和预览
## 输出格式
**严格按用户语言选择对应的 example 和字段名**(参见 SKILL.md「输出控制」和「Markdown 字段名中英对照表」):
- 中文用户:参考 `references/storyboard-example.md`
- 非中文用户:参考 `references/storyboard-example-en.md`
关键要点:
- 二级标题 `##` 用于每幕场景标题,与 `script.md` 的幕名保持一致
- 时间码行格式:`* M:SS - M:SS (Xs)`,与 `script.md` 一致
- 歌词引用以 `> ` 开头(从 script.md 同步)
- 每幕必须包含以下字段(中文/English):
- `出场角色/Characters` — 角色名(逗号分隔),无角色写 `(无)`/`(None)`
- `场景背景/Scene Background` — 对应的背景名
- `关键物件/Key Props` — 物件名(逗号分隔),无物件可省略
- `场景描述/Scene Description` — 画面描述(用户语言),缩进 2 空格
- `视频提示词/Video Prompt` — 英文 prompt,描述动态和镜头,引用参考图编号,缩进 2 空格
- `参考图/Reference` — 列表形式,每行注明用途,路径相对 theme 目录
- `候选图/Candidates` — 列表形式,每行记录候选图文件名和简要说明
- `选定图/Selected` — 用户选定的最终分镜图文件名
- 场景之间用 `---` 分隔
## 格式校验
storyboard.md 写入后,**必须**运行校验脚本:
```bash
python3 .opencode/skills/mv-creator/scripts/validate_storyboard.py .mv/{song_name}/{theme}/storyboard.md
```
校验规则:场景标题格式、时间码格式、必填字段完整性、出场角色目录及 `selected.jpg` 存在性、场景背景目录及 `selected.jpg` 存在性、关键物件目录及 `selected.jpg` 存在性、与 `script.md` 交叉校验(幕数和时间码一致)。
- **通过** → 启动预览供用户审阅
- **未通过** → 由 LLM 根据校验错误信息自动修正,修复后重新校验
## 文件存储
```
./.mv/{song_name}/{theme}/storyboard.md # 分镜规划文档
./.mv/{song_name}/{theme}/storyboard/ # 分镜图目录
├── scene_01.jpg # 各幕分镜图
├── scene_02.jpg
└── ...
```