feat(video-from-script): 升级可灵视频生成使用官方 API 并添加失败重试机制
- 使用 AK/SK → JWT (HMAC-SHA256) 鉴权替代旧版 API Key - 支持多种凭证来源:~/.config/kling/.credentials 或 config.json - 更新 API 端点至官方规范 (v1/videos/image2video) - 添加 `--retry-failed` 参数支持失败 item 状态重置和重试 - 更新 manifest 文档添加状态机和失败处理说明 - 调整模型名称和参数格式以匹配新 API
This commit is contained in:
@@ -28,13 +28,12 @@ node pipeline.js validate --manifest <path>
|
||||
|------|------|------|--------|
|
||||
| `account` | 账号 ID | account.json | **init 自动** |
|
||||
| `imageModel` | `gemini` / `mj` | account.json | **init 自动** |
|
||||
| `videoModel` | `veo3-fast` / `grok-video-3` 等 | 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** |
|
||||
|
||||
**init 自动继承的字段不需要 AI 关心,不会出错。**
|
||||
|
||||
---
|
||||
|
||||
@@ -82,6 +81,85 @@ node pipeline.js validate --manifest <path>
|
||||
|
||||
---
|
||||
|
||||
## 状态机
|
||||
|
||||
### 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):
|
||||
|
||||
```bash
|
||||
# 只改 prompt 不改图片风格 → 重试即可
|
||||
node pipeline.js run --manifest <path> --phase images --retry-failed
|
||||
|
||||
# 需要换 prompt → 先改 item.imagePrompt,再重试
|
||||
# (改完后跑上面同一条命令)
|
||||
```
|
||||
|
||||
**视频生成失败**(videos 阶段 partial):
|
||||
|
||||
```bash
|
||||
# API 临时故障、网络超时 → 直接重试
|
||||
node pipeline.js run --manifest <path> --phase videos --retry-failed
|
||||
|
||||
# 提示词问题 → 先改 item.videoPrompt,再重试
|
||||
# (改完后跑上面同一条命令)
|
||||
|
||||
# 视频模型不可用 → 改 manifest.videoModel 或 account.json,再重试
|
||||
```
|
||||
|
||||
**全阶段重试**:
|
||||
|
||||
```bash
|
||||
node pipeline.js run --manifest <path> --retry-failed
|
||||
```
|
||||
|
||||
### `--retry-failed` 内部行为
|
||||
|
||||
1. 扫描所有 `status=failed` 或 `status=partial` 的 item
|
||||
2. 根据已有字段自动判断应重置到哪个阶段:
|
||||
- 有 `url` + `videoPrompt` + 无 `video` → 重置为可生视频(`status=done`)
|
||||
- 无 `url` + 有 `imagePrompt` → 重置为可生图(`status=pending`)
|
||||
3. 对应 `pipeline.phases` 重置为 `pending`
|
||||
4. 清除 `error` 字段
|
||||
5. 正常执行指定阶段
|
||||
|
||||
---
|
||||
|
||||
## 首尾帧模式
|
||||
|
||||
`mode: "framePair"` 时,`imagePrompt` 作为起始帧,每个 item 额外字段:
|
||||
|
||||
Reference in New Issue
Block a user