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:
2026-04-29 21:56:47 +08:00
parent 0b3ab3a2aa
commit 5619d753cc
4 changed files with 340 additions and 98 deletions

View File

@@ -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 额外字段: