feat(video-from-script): 重构工作流为子Agent分步执行并新增提示词模板系统

将视频制作工作流拆分为独立子步骤:分镜 → 图片提示词 → 生图 → 视频提示词 → 生视频 → 成片,每步由子Agent独立执行。引入prompts/目录统一管理提示词模板(分镜.md、图片提示词.md、视频提示词.md),通过account.json的storyboardPrompt/imageStylePrompt/videoStylePrompt字段引用。

变更内容:
- 新增confirmed机制和pipeline.js confirm命令,生图后必须人工确认才能继续
- manifest schema改用shotDesc/narration/duration/directorRef替代旧字段
- 文件命名规则从keyword改为slug(从shotDesc/narration派生)
- 删除旧的storyboard-rules.md和prompt-rules.md
- pipeline.js脚本拆分为lib/目录下的独立模块(cmd-init/cmd-confirm/cmd-validate/phase-*)
- 新增cmd-create-account支持一键创建带prompts目录的账号
- capcut_assemble支持narration字段替代text作为字幕源
- 新增.gitclaude/settings.json权限配置
This commit is contained in:
2026-04-30 21:18:31 +08:00
parent 7f955647fe
commit 86b9b7948d
32 changed files with 2826 additions and 1292 deletions

View File

@@ -11,12 +11,18 @@
accounts/ # 项目根目录下
├── _template/ # 新账号模板(复制此目录创建新账号)
│ ├── account.json
│ ├── prompts/ # 提示词模板目录(子 Agent 系统提示词)
│ │ └── .gitkeep
│ ├── references/ # 参考图目录
│ │ └── .gitkeep
│ └── styles/ # 风格文件目录(可多个)
│ └── .gitkeep
└── {account}/ # 用户创建的账号(目录名 = account.json 的 id输出目录用 name 命名)
├── account.json
├── prompts/ # 提示词模板(账号专属)
│ ├── 分镜.md # 口播文案 → 分镜表
│ ├── 图片提示词.md # shotDesc → imagePrompt
│ └── 视频提示词.md # shotDesc → videoPrompt
├── references/ # 参考图(所有风格共用)
│ ├── ref_001.png
│ └── ref_002.png
@@ -38,6 +44,9 @@ accounts/ # 项目根目录下
"imageModel": "gemini",
"videoModel": "kling",
"batchSize": 30,
"storyboardPrompt": "prompts/分镜.md",
"imageStylePrompt": "prompts/图片提示词.md",
"videoStylePrompt": "prompts/视频提示词.md",
"capcut": {
"effects": ["录制边框 III"],
"filter": "电影感:40",
@@ -61,6 +70,9 @@ accounts/ # 项目根目录下
| `imageModel` | string | 默认图片模型 |
| `videoModel` | string | 默认视频模型 |
| `batchSize` | number | 默认批量生成数量 |
| `storyboardPrompt` | string | 分镜提示词模板路径(相对于账号目录) |
| `imageStylePrompt` | string | 图片提示词模板路径(相对于账号目录) |
| `videoStylePrompt` | string | 视频提示词模板路径(相对于账号目录) |
| `capcut.effects` | string[] | CapCut 特效名称列表 |
| `capcut.filter` | string | CapCut 滤镜,格式 "名称:强度" |
| `capcut.subtitleStyle` | object | 字幕样式(字号、颜色、高亮色、加粗) |
@@ -68,66 +80,50 @@ accounts/ # 项目根目录下
---
## 提示词模板prompts/
每个账号在 `prompts/` 目录下维护三个子 Agent 提示词模板:
| 文件 | 用途 | Step |
|------|------|------|
| `分镜.md` | 口播文案 → 分镜表shotDesc/narration/duration/directorRef | Step 1 |
| `图片提示词.md` | shotDesc + directorRef → imagePrompt | Step 2-A |
| `视频提示词.md` | shotDesc + directorRef → videoPrompt | Step 3-A |
这些文件定义了子 Agent 的角色、入参、出参、词库和示例。路径在 account.json 中以相对路径引用Agent 读取 account.json 后自动定位。
### 与 style 文件的关系
- **prompts/** — 子 Agent 的系统提示词(定义 HOW 生成提示词)
- **styles/** — 视觉规则参考(定义 WHAT 风格应该长什么样:颜色、构图、禁止项)
- prompts 模板内部会引用 styles 中定义的色彩体系、构图规则等
---
## 风格文件styles/
每种视觉风格一个文件,文件名即风格名。文件内同时包含图片和视频的提示词策略
每种视觉风格一个文件,文件名即风格名。文件内包含视觉规则参考
### 风格文件结构
```markdown
# 风格名称(英文短横线命名)
# 风格名称
一句话描述风格。
---
## 图片提示词
### 核心视觉要素
<!-- 必选的视觉元素 -->
### 场景/背景规则
<!-- 背景要求 -->
## 核心视觉要素
### 色调方案
<!-- 可选的色彩组合 -->
### 构图模式
<!-- 支持的构图类型 -->
### 图片 Prompt 模板
<!-- 生成 prompt 时的固定结构 -->
### 示例
<!-- 2-3 个完整示例 -->
### MJ/Gemini 参数
<!-- 模型专用后缀参数 -->
### 模型参数(MJ/Gemini/Kling
### 图片禁止项
<!-- 不得出现的元素 -->
---
## 视频提示词
### 运镜规则
<!-- 运镜方式、节奏 -->
### 动态元素要求
<!-- 光影、角色动作、环境氛围 -->
### 视频 Prompt 模板
<!-- VEO/Grok prompt 结构 -->
### 示例
<!-- 2-3 个完整示例 -->
### VEO/Grok 后缀
<!-- 模型专用后缀 -->
### 视频禁止项
<!-- 不得出现的元素 -->
### 禁止项
```
### 风格文件命名
@@ -158,12 +154,13 @@ node scripts/pipeline.js create-account \
### 手动创建
1. 复制 `_template/` 目录,重命名为账号 ID
2. 编辑 `account.json` 填写账号信息
3.`references/` 中放入参考图(所有风格共用
4. 上传参考图到 OSSURL 写入 account.json
2. 编辑 `account.json` 填写账号信息(含 prompts 路径)
3.`prompts/` 中放入提示词模板(从 `工作流程/` 草稿区复制
4. `references/` 中放入参考图(所有风格共用)
5. 上传参考图到 OSSURL 写入 account.json
- `node scripts/oss-upload.js ../../accounts/{id}/references/{图片文件}`
- 将返回的 URL 写入 `styles.{styleName}.references[].url`
5.`styles/` 中创建风格文件(至少一个)
6.`styles/` 中创建风格文件(至少一个)
### 校验账号
@@ -171,7 +168,7 @@ node scripts/pipeline.js create-account \
node scripts/pipeline.js validate-account --account military
```
检查id 匹配、必填字段、参考图完整性、风格文件存在、OSS URL 有效。
检查id 匹配、必填字段、prompts 模板存在、参考图完整性、风格文件存在、OSS URL 有效。
## 添加新风格