This commit is contained in:
2026-04-29 21:26:42 +08:00
parent 1333a2c751
commit 0b3ab3a2aa
5 changed files with 585 additions and 27 deletions

View File

@@ -37,14 +37,14 @@ description: 素材生产路由。根据用户意图分发到对应子技能i
| "生图"、"批量图片" | 生图 | `image-generator` |
| "图片成片"、"图片轮播" | 已有图片 → 组装 | `capcut` |
| "图文成片"、"生图+成片" | 生图 → TTS+字幕+组装 | `image-generator``capcut` |
| "图生视频"、"图片转视频" | 生图 → AI视频 → 组装 | `image-generator` → Grok/VEO → `capcut` |
| "首尾帧"、"帧动画"、"关键帧" | 生图(成对) → VEO视频 → 组装 | `image-generator`(帧对) → VEO → `capcut` |
| "图生视频"、"图片转视频" | 生图 → AI视频 → 组装 | `image-generator` → Grok/VEO/Kling`capcut` |
| "首尾帧"、"帧动画"、"关键帧" | 生图(成对) → 视频过渡 → 组装 | `image-generator`(帧对) → VEO/Kling`capcut` |
| "文案转视频"、"配音视频" | 生图 → TTS+字幕+组装 | `image-generator``capcut` |
| 只说"做视频" | **询问**:图文成片 / 图生视频(单图/首尾帧) | — |
**"图生视频"的后续追问**:用户说"图生视频"时,追问视频模式:
- **单图模式**:一张图 → 一段视频Grok VEO
- **首尾帧模式**:起始帧+结束帧 → 一段过渡视频(VEO
- **单图模式**:一张图 → 一段视频Grok / VEO / Kling
- **首尾帧模式**:起始帧+结束帧 → 一段过渡视频VEO / Kling
---
@@ -73,8 +73,8 @@ Step -1: 意图确认(进入任何步骤前必须完成,逐项确认,缺
- 有参考图/风格参考?
3. 视频模式(涉及视频时必问):
- 单图模式1 张图 → 1 段视频Grok VEO
- 首尾帧模式2 张图 → 过渡视频(VEO
- 单图模式1 张图 → 1 段视频Grok / VEO / Kling
- 首尾帧模式2 张图 → 过渡视频VEO / Kling
4. 账号确认:
- 扫描 accounts/*/account.json 获取最新账号列表
@@ -84,7 +84,7 @@ Step -1: 意图确认(进入任何步骤前必须完成,逐项确认,缺
- 确认后记住 account ID
5. 参数确认:
- 画幅9:16 / 16:9、生图模型Gemini / MJ、视频模型VEO / Grok
- 画幅9:16 / 16:9、生图模型Gemini / MJ、视频模型VEO / Grok / Kling
- 有账号时从 account.json 继承默认值,只问是否覆盖
→ 以上 5 项全部确认后agent 写出完整执行计划,让用户最终确认:
@@ -121,7 +121,7 @@ Step 2: Prompt 生成 + Manifest 初始化(分镜 + 风格 → 英文 prompts
- 输入:分镜表 + style.md + account.json
- 子 Agent 将每个 shot 的中文画面描述结合风格文件,生成:
· imagePrompt英文画面描述给 Gemini/MJ
· videoPrompt英文运动描述给 Grok/VEO
· videoPrompt英文运动描述给 Grok/VEO/Kling
· keyword, keywordColor
- **禁止 AI 手写 manifest.json**,必须通过脚本初始化:
```bash
@@ -196,18 +196,21 @@ digraph single_image {
prompt [label="videoPrompt"]
grok [label="Grok\n6s 视频", fillcolor="#fff3e0"]
veo [label="VEO\n6-8s 视频", fillcolor="#e8f5e9"]
kling [label="Kling\n6s 视频", fillcolor="#e1f5fe"]
result [label="视频输出", shape=oval, fillcolor="#e3f2fd"]
img -> prompt
prompt -> grok
prompt -> veo
prompt -> kling
grok -> result
veo -> result
kling -> result
}
```
- 每条文案生成 1 张图 + 1 个 videoPrompt
- Grok 和 VEO 都支持
- Grok、VEO 和 Kling 都支持
- 提示词描述运动:"slow zoom in on subject"
### 首尾帧模式
@@ -221,17 +224,22 @@ digraph frame_pair {
last [label="结束帧"]
prompt [label="videoPrompt"]
veo [label="VEO\n6-8s 过渡视频", fillcolor="#e8f5e9"]
kling [label="Kling\n6s 过渡视频", fillcolor="#e1f5fe"]
result [label="视频输出", shape=oval, fillcolor="#e3f2fd"]
first -> veo
last -> veo
prompt -> veo
first -> kling
last -> kling
prompt -> kling
veo -> result
kling -> result
}
```
- 每条文案生成 **2 张图**firstFrame + lastFrame+ 1 个 videoPrompt
- **VEO 支持**images 数组传两张图)
- **VEO 和 Kling 支持**images 数组传两张图)
- 起始帧和结束帧必须是**同一场景的不同状态**
- 提示词描述过渡:"transition from idle machines to active production"
@@ -240,7 +248,7 @@ digraph frame_pair {
| 图片数量 | N 张 | 2N 张 |
| 生图耗时 | 标准 | ~2 倍(可并行) |
| 视频连贯性 | 仅运动 | 场景变化(更强) |
| 可用模型 | Grok + VEO | 仅 VEO |
| 可用模型 | Grok + VEO + Kling | VEO + Kling |
| 适用场景 | 风景、人物展示 | 状态变化、叙事过渡 |
---
@@ -288,7 +296,7 @@ digraph single_image_video {
agent1 [label="Agent 1\nimage-generator\n生图 + videoPrompt"]
gate1 [label="人工卡点\n用户挑选图片", shape=diamond, fillcolor="#fff9c4"]
agent2 [label="Agent 2\nGrok / VEO\n单图输入并行生成视频"]
agent2 [label="Agent 2\nGrok / VEO / Kling\n单图输入并行生成视频"]
agent3 [label="Agent 3\ncapcut\n视频片段 + 字幕 → 成片"]
agent1 -> gate1 -> agent2 -> agent3
@@ -303,7 +311,7 @@ digraph frame_pair_video {
agent1 [label="Agent 1\nimage-generator\n成对生图\n(firstFrame + lastFrame)\n可并行"]
gate1 [label="人工卡点\n检查首尾帧连贯性\n同一场景/相似视角", shape=diamond, fillcolor="#fff9c4"]
agent2 [label="Agent 2\nVEO\n双图输入\nimages:[first, last]"]
agent2 [label="Agent 2\nVEO / Kling\n双图输入\nimages:[first, last]"]
agent3 [label="Agent 3\ncapcut\n视频片段 + 字幕 → 成片"]
agent1 -> gate1 -> agent2 -> agent3
@@ -317,6 +325,7 @@ digraph frame_pair_video {
| Grok | 6s | 任意 | ✅ | ❌ | 快、稳定 | yunwu.ai |
| Veo3-fast | ~8s | 16:9, 9:16 | ✅ | ✅ | 超分、中文增强 | jimmyai.cn |
| Veo3-fast-frames | ~8s | 16:9, 9:16 | ✅ | ✅ | 多帧、质量最高 | jimmyai.cn |
| Kling | 6s | 任意 | ✅ | ✅ | 快、首尾帧支持 | yunwu.ai |
图生视频注意事项:
- **并行执行**:先同时提交所有任务(并发 3再并行轮询结果
@@ -328,22 +337,24 @@ digraph frame_pair_video {
### 视频大小一致性
- **同批次同模型**,不混合 Grok720P/6sVEO超分/8s
- **同批次同模型**,不混合 Grok720P/6sVEO超分/8s和 Kling6s
- 画幅统一跟随 manifest 顶层 `format`(默认 `9:16`
- 个别 item 降级到备用模型时,在 manifest 中标记 `"videoModel"` 以便追踪
### 视频生成失败降级
**降级链**: `Grok ↔ VEO → 可灵(Kling)`
**降级链**: `Grok ↔ VEO Kling`
**触发**: 同一 item 重试 5 次仍失败 → 用备用模型单独补生成
```bash
# Grok 失败 → VEO 补
# Grok 失败 → VEO/Kling
node veo-video-generator.js --image <url> --prompt <prompt> -o ./videos
node kling-video-generator.js --image <url> --prompt <prompt> -o ./videos
# VEO 失败 → Grok 补
# VEO 失败 → Grok/Kling
node grok-video-generator.js --image <url> --prompt <prompt> -o ./videos
node kling-video-generator.js --image <url> --prompt <prompt> -o ./videos
```
**规则**: 逐 item 降级,不卡整批次。补完后上传 OSS回写 `videoUrl`,继续 `tts → assemble`
@@ -375,7 +386,7 @@ output/{account}_{YYYYMMDD}_{NNN}/
**核心规则**
- 脚本检测 `lastFrameUrl` → 首尾帧模式(传 images:[url, lastFrameUrl]);否则 → 单图模式(传 images:[url]
- 顶层 `format` 自动传给 VEO/Grok 作为画幅比例
- 顶层 `format` 自动传给 VEO/Grok/Kling 作为画幅比例
- `account` 字段驱动 capcut_assemble 读取对应 account.json 的字幕风格配置
---
@@ -448,7 +459,7 @@ shot 3-N交替: close-up→ wide→ close-up
每条文案生成:
- `imagePrompt`:画面描述(英文,给 Gemini/MJ
- `videoPrompt`:运动描述(英文,给 Grok/VEO
- `videoPrompt`:运动描述(英文,给 Grok/VEO/Kling
videoPrompt 规则:
- 描述**运动**而非内容("zoom in" 而非 "a cat"
@@ -457,14 +468,14 @@ videoPrompt 规则:
- **收敛原则**:基于图片已有内容,仅描述镜头运动和微动效果
- **禁止**:大幅度环境切换、场景变化、人物位置跳变
- **推荐写法**镜头运动slow zoom/pan/dolly+ 星座/光效微动 + 保持静止氛围
- **画幅继承**manifest.json 顶层 `format` 字段(如 `"9:16"`)会自动传给 VEO无需命令行 `-a`
- **画幅继承**manifest.json 顶层 `format` 字段(如 `"9:16"`)会自动传给 VEO/Kling,无需命令行 `-a`
### 首尾帧模式提示词
每条文案生成:
- `imagePrompt`:起始帧画面(英文,与 single 模式复用同一字段)
- `lastFramePrompt`:结束帧画面(英文)
- `videoPrompt`:过渡描述(英文,给 VEO
- `videoPrompt`:过渡描述(英文,给 VEO/Kling
**首尾帧提示词设计原则**