- 使用 AK/SK → JWT (HMAC-SHA256) 鉴权替代旧版 API Key - 支持多种凭证来源:~/.config/kling/.credentials 或 config.json - 更新 API 端点至官方规范 (v1/videos/image2video) - 添加 `--retry-failed` 参数支持失败 item 状态重置和重试 - 更新 manifest 文档添加状态机和失败处理说明 - 调整模型名称和参数格式以匹配新 API
6.0 KiB
6.0 KiB
manifest.json 规范
pipeline.js init创建,Pipeline 执行,Agent 审查。禁止 AI 手写 manifest.json,必须通过
pipeline.js init初始化。脚本从 account.json 自动继承结构字段,AI 只提供创意内容(items 的 text/imagePrompt/videoPrompt/keyword)。
创建方式
# AI 生成创意内容后,通过脚本初始化
node pipeline.js init --account military --mode single \
--items '[{"text":"中文文案","imagePrompt":"English prompt","videoPrompt":"motion prompt","keyword":"关键词","keywordColor":"#FF6B35"}]'
# 或从文件读取
node pipeline.js init --account military --mode single --items-file ./items.json
# 校验已有 manifest
node pipeline.js validate --manifest <path>
顶层字段
| 字段 | 说明 | 来源 | 谁填充 |
|---|---|---|---|
account |
账号 ID | account.json | init 自动 |
imageModel |
gemini / mj |
account.json | init 自动 |
videoModel |
veo3-fast-frames / grok-video-3 / kling 等 |
account.json | init 自动 |
format |
画幅:9:16 / 16:9 |
account.json | init 自动 |
mode |
single 单图 / framePair 首尾帧 |
CLI 参数 | init 自动 |
references |
参考图数组,从 account.json styles.*.references 搬入 | account.json | init 自动 |
items |
素材数组(AI 提供创意内容) | CLI --items | AI → init |
references 字段
从 account.json 搬入,pipeline 直接使用,不再回读 account.json。
- Gemini → 读
file(本地路径,图生图用) - MJ → 读
url(公网 URL,--sref用)
items[] 字段
Agent 写入(创建时)
| 字段 | 说明 |
|---|---|
status |
固定写 "pending" |
text |
中文字幕文案 |
imagePrompt |
英文画面描述(给 Gemini/MJ) |
videoPrompt |
英文运动描述(给 Grok/VEO),描述镜头运动而非内容 |
keyword |
字幕高亮关键词 |
keywordColor |
高亮颜色 |
Pipeline 回写(执行后)
| 字段 | 说明 | 写入阶段 |
|---|---|---|
status |
pending → generating → done / failed |
images |
file |
生成的图片路径(相对 manifest) | images |
candidates |
MJ 拆分的 4 张候选图路径(Gemini 无此字段) | images |
url |
图片 OSS 公网 URL | upload |
video |
生成的视频路径 | videos |
videoDuration |
视频时长(秒),Grok=6, VEO=8 | videos |
videoUrl |
视频 OSS 公网 URL | videos |
audio |
TTS 音频路径 | tts |
duration |
音频时长(秒) | tts |
Agent 审查时可操作
- MJ 换选:
item.file = item.candidates[2] - 删除不合格 item:直接从 items 数组移除,重新跑
--phase images - 调整 prompt 重跑:改
imagePrompt,status 改回pending
状态机
item 生命周期
pending → [images] → done → [upload: url填入] → done → [videos] → done → [tts] → done
↓ ↓
failed failed + error
status 一旦进入 done 就不再回退。后续阶段通过检查"有前置字段 + 无后置字段"来识别待处理 item,不依赖 status 变化。
各阶段拾取条件
Agent 不需要记住这些条件,pipeline 内部自动匹配。仅供理解原理:
| 阶段 | item 被拾取的条件 |
|---|---|
| images | status=pending + 有 imagePrompt |
| upload | status=done + 有 file + 无 url |
| videos | status=done + 有 url + 有 videoPrompt + 无 video |
| tts | status=done + 有 text + 无 audio |
pipeline.phases 整体状态
每个阶段有独立状态:pending → running → done / partial / failed
done— 全部 item 成功partial— 部分 item 失败(其他成功)failed— 阶段整体异常中断
失败处理
用 --retry-failed 一条命令搞定。
根据失败阶段选择操作
图片生成失败(images 阶段 partial):
# 只改 prompt 不改图片风格 → 重试即可
node pipeline.js run --manifest <path> --phase images --retry-failed
# 需要换 prompt → 先改 item.imagePrompt,再重试
# (改完后跑上面同一条命令)
视频生成失败(videos 阶段 partial):
# API 临时故障、网络超时 → 直接重试
node pipeline.js run --manifest <path> --phase videos --retry-failed
# 提示词问题 → 先改 item.videoPrompt,再重试
# (改完后跑上面同一条命令)
# 视频模型不可用 → 改 manifest.videoModel 或 account.json,再重试
全阶段重试:
node pipeline.js run --manifest <path> --retry-failed
--retry-failed 内部行为
- 扫描所有
status=failed或status=partial的 item - 根据已有字段自动判断应重置到哪个阶段:
- 有
url+videoPrompt+ 无video→ 重置为可生视频(status=done) - 无
url+ 有imagePrompt→ 重置为可生图(status=pending)
- 有
- 对应
pipeline.phases重置为pending - 清除
error字段 - 正常执行指定阶段
首尾帧模式
mode: "framePair" 时,imagePrompt 作为起始帧,每个 item 额外字段:
| 字段 | 说明 | 谁填充 |
|---|---|---|
imagePrompt |
起始帧画面描述(与 single 模式复用同一字段) | AI |
lastFramePrompt |
结束帧画面描述 | AI |
lastFrame |
结束帧图片路径 | pipeline images 回写 |
lastFrameUrl |
结束帧 OSS URL | pipeline upload 回写 |
首尾帧规则:同一场景、视角一致、状态对比。VEO 检测到 lastFrameUrl 自动启用双图模式。
目录结构
output/{account}_{YYYYMMDD}_{NNN}/
├── manifest.json # 主清单
├── images/ # scene_{NN}_{keyword}.jpeg(首尾帧加 _last,MJ 候选加 _cand{1-4})
├── videos/ # scene_{NN}_{keyword}.mp4
└── audio/ # seg_001.mp3