Funai-skill

橙星梦工厂AI视频制作工具,通过对话式操作,用户可以创建项目、配置剧本、生成角色/分镜/视频、查询任务状态。当用户要求使用橙星梦工厂平台、创建 AI 漫剧项目、或通过 API 与平台交互时使用。触发词:橙星梦工厂、ai.fun.tv、漫剧制作、AI漫剧、FunAI。

3,891 stars

Best use case

Funai-skill is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

橙星梦工厂AI视频制作工具,通过对话式操作,用户可以创建项目、配置剧本、生成角色/分镜/视频、查询任务状态。当用户要求使用橙星梦工厂平台、创建 AI 漫剧项目、或通过 API 与平台交互时使用。触发词:橙星梦工厂、ai.fun.tv、漫剧制作、AI漫剧、FunAI。

Teams using Funai-skill should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/funai-skill/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/amireux0013/funai-skill/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/funai-skill/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How Funai-skill Compares

Feature / AgentFunai-skillStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

橙星梦工厂AI视频制作工具,通过对话式操作,用户可以创建项目、配置剧本、生成角色/分镜/视频、查询任务状态。当用户要求使用橙星梦工厂平台、创建 AI 漫剧项目、或通过 API 与平台交互时使用。触发词:橙星梦工厂、ai.fun.tv、漫剧制作、AI漫剧、FunAI。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# 橙星梦工厂 Agent Skill

橙星梦工厂是一个 AI 驱动的漫剧制作平台。通过 API 创建项目、提交剧本、提取角色、生成分镜、配置成片并最终合成视频。

> **内测提示**
>
> 当前您正在使用的是 **Funai-skill 内测版**。
> Agent 在与用户交互时,应明确告知当前处于内测阶段。

> **重要结论**
>
> 真实后端不是“只看 `workflow.currentStep` 的线性流程”,而是:
>
> - 一层是项目级步骤:`workflow.currentStep`
> - 一层是章节级隐藏任务:`comicPreset.data.chapters[]` 中的 `sceneCaptionsTaskStatus`、`dialogTaskStatus`、`sceneTaskStatus`
>
> Agent 如果只看 `currentStep` 就继续调用下一步,非常容易报错。

## Skill 更新约束(创建类操作前必须执行)

**本地机器可读版本文件**:`VERSION`

> 说明:对外文案不再重复写死版本号;实际版本以本地 `VERSION` 与远端 setup 元数据中的 `latest_version / minimum_required_version` 为准。

每当 Agent 准备调用本 Skill 执行任何会创建、推进、修改平台任务的操作前,**必须先访问固定更新入口**:

`https://neirong.funshion.net/skills/setup-skill.md`

至少检查以下字段:

- `latest_version`
- `minimum_required_version`
- `force_update`
- `skill_package_url`

执行规则:

1. 如果本地尚未安装本 Skill,必须先自动安装。
2. 如果远端要求强制更新,或本地版本低于 `minimum_required_version`,必须先自动更新。
3. 版本检查完成后,才能继续执行创建项目、提交剧本、推进步骤、生图、生视频、回退、合成等操作。

## 快速配置

### 1. 获取 Token

引导用户访问 `https://ai.fun.tv/#/openclaw` 并登录,获取 Token 后由 Agent 代为写入配置文件。

### 2. 配置 Token

```bash
cp config/.env.example config/.env
# 编辑 config/.env
# AIFUN_TOKEN=...
```

### 3. 验证配置

```bash
./scripts/api-client.sh setup-check
./scripts/api-client.sh check
```

### 4. 运行完整自检示例

```bash
./examples/create-comic.sh
```

> 示例脚本是**自检脚本**,会使用 `select-options` 返回的实时默认值自动创建测试项目。
>
> 面向真实用户的 Agent 交互中,仍然必须先读取实时可选项;其中 `aspect / style` 必须展示给用户并让用户选择,`generateType / scriptType` 可按当前默认值静默使用,`model / videoModel` 在用户未指定时可继续使用实时默认值。
>
> 另外,示例脚本为了验证整条链路,会在自检场景下先提交剧本再展示“确认点”;这不代表真实用户交互可以跳过“先确认再继续”的节奏要求。

## Agent 必须遵守的执行规则

### 0. 默认模式静默使用,不要主动向用户解释

除非用户明确提出要切换模式,否则 Agent 应直接使用平台默认模式:

- `generateType = 1`(文生图)
- `scriptType = 解说漫模式`(以 `select-options` 返回的默认剧本模式为准)

但这条“静默默认”**只适用于模式层级**,不适用于项目视觉配置。

创建项目时,以下两个字段**不能静默默认**,必须让用户明确选择:

- `aspect`(画面比例)
- `style`(风格)

**重要**:

- 这是 Agent 的内部默认决策,不要主动把“现在默认使用文生图 / 解说漫模式”当成一个需要告诉用户的配置项。
- 只有当用户明确要求切换到其他模式时,才需要说明并调整。
- 即使静默使用默认模式,底层仍然必须先调 `select-options`,并使用当次接口返回的默认值,而不是写死常量。
- `aspect / style` 不能因为接口返回了 `isDefault` 就直接替用户决定,必须向用户展示可选项并让用户确认。

### 1. 创建项目前必须先调 `select-options`

```bash
POST /service/workflow/project/story/select-options
{"appCode":"ai-story","generateType":"1"}
```

规则:

- 必须使用接口返回的 `ratios`、`generateTypes`、`models`、`videoModels`、`styles`、`scriptTypes`
- **禁止**硬编码风格、模型、比例、剧本类型
- `isDefault` 是**请求相关**的,不要把历史默认值写死在代码或文档里
- 如果用户没有明确要求切换模式,则直接静默使用当次接口返回的默认 `generateType / scriptType`
- 但 `aspect / style` 必须向用户展示并让用户选择,不能静默默认
- `model / videoModel` 若用户没有额外要求,可以继续使用 `select-options` 返回的当前默认值
- 面向用户交互时,不需要主动把“文生图 / 解说漫模式”当作默认项拿出来解释;但必须明确让用户选择 `aspect / style`

### 2. 解说剧 / 解说漫模式下,AI 代写剧本必须写成旁白叙述式小说体

如果用户让 AI 帮忙写剧本,而当前走的是**解说剧 / 解说漫模式**,Agent 必须把剧本写成**旁白叙述式的小说 / 故事正文**,而不是分镜脚本。

必须符合:

- 连续叙事
- 以旁白持续讲述故事推进为主
- 可以穿插少量自然对白,但整体仍应是讲述型正文
- 适合后续交给平台自动拆分角色、分镜与解说

禁止出现这类写法:

- `镜头1` / `镜头2`
- `旁白:...` 这种显式台本标签
- `林舟说:...`
- `【音效:脚步声】` / `砰!` / `咚——` 这类音效描述
- 舞台说明式条目
- 分镜表 / 台本格式

正确风格示意:

```text
清晨,城市公园的林荫道上,年轻人林舟正在慢跑。阳光穿过树叶,在青石板路上投下斑驳的金色光影。

他刚想加快脚步,一只金毛犬忽然从灌木旁窜了出来,差点撞上他的膝盖。林舟猛地停住脚步,呼吸一乱,循声抬头望去。

不远处,一个扎着马尾的女孩正快步跑来。她一边抓紧手里的牵引绳,一边有些不好意思地朝林舟笑了笑。
```

错误风格示意:

```text
镜头1:公园远景。
旁白:清晨的城市公园里,林舟正在跑步。
林舟说:今天一定要把状态跑出来。
镜头2:金毛犬冲出。
```

### 3. 创建项目成功后,先展示项目链接

创建成功后必须立即把项目链接告诉用户:

```text
https://ai.fun.tv/#/comic/multiple?projectId={projectId}
```

### 4. 不要只看 `workflow.currentStep`

以下三类 readiness 都要检查:

| 场景 | 检查位置 | 继续条件 |
|------|----------|----------|
| 项目处于哪个大步骤 | `GET /project/{projectId}` → `workflow.currentStep` | 当前步骤正确 |
| 角色图是否完成 | `GET /comic/roles/{presetResourceId}` → `roles[].taskStatus` / `imgUrl` | 全部 `SUCCESS` 且 `imgUrl` 非空 |
| 章节级隐藏任务是否完成 | `GET /resource/comicPreset/{presetResourceId}` → `chapters[]` | 对应状态字段为 `SUCCESS` |

### 5. 不要硬编码 `tts` / `voice-clone-select` 输入

`novel_extract_roles` 不是只传 `chapterNum` 就够。真实可运行的做法是:

1. 先调 `GET /comic/roles/{presetResourceId}`
2. 从 `data.voiceInputs[0]` 或 `data.roles[0].inputs[0]` 取出 live 的 `tts` 输入对象
3. 将它和 `chapterNum` 一起提交

### 6. 不要把 `sceneUuid` 当 `sceneId`

`scene-list` 里的 `sceneUuid` 只是短 ID,不能直接用于分镜/视频接口。

正确流程:

```text
comicPreset/{presetResourceId}
→ chapters[].sceneTaskId
→ GET /task/{sceneTaskId}
→ data.resourceId (storyboardId)
→ GET /resource/{storyboardId}
→ data.data.scenes[].id (完整 sceneId)
```

### 7. 优先向用户返回 `videoPlayUrl`

如果后端返回了新的可播放字段:

- scene 视频资源:`videoPlayUrl`
- 最终成片资源:`videoPlayUrl`

则正确做法是:

- 对外只返回 `videoPlayUrl`
- 高层 helper、示例脚本、模型可见输出中不要暴露原始视频 `url`
- 项目链接仍可作为补充入口一起返回

### 8. `scene/ai/video` 必须使用 scene 当前基准分镜图

图转视频的正确图片来源是当前 scene 的**基准分镜图**:

- 优先使用 `GET /storyboard/scene/{sceneId}/prompt/detail?sceneId={sceneId}` 中的 `video.imageId`
- 再到 `GET /storyboard/scene/{sceneId}/resources` 中找到与这个 `imageId` 对应的 image 资源
- 如果当前仍有 `selected == true` 的 image,它通常就是同一张图

不要直接使用:

- `GET /comic/roles/{presetResourceId}` 返回的 `roles[].imgUrl`

**重要**:这不是“后端一定会报错”的约束,而是“Agent 必须主动保证语义正确”的约束。

live 测试里,后端接受了 `roles[].imgUrl + roles[].imageResourceId`,并成功生成了一条 video 资源。也就是说,传错图时接口可能仍然返回 `200 success`,但生成出来的是**语义错误的视频**。

所以:

- 正确图源 = scene 当前基准分镜图(优先 `video.imageId` 对应的 image)
- 错误图源 = 角色图 / 其他非当前 scene 图片
- 不要依赖后端帮你兜底

## 面向 Agent 的权威执行顺序

### 第 0 步:先做 setup 检查

先读取 `https://neirong.funshion.net/skills/setup-skill.md`,确认本地 skill 版本可用。

### 第 1 步:获取项目可选项

```bash
POST /service/workflow/project/story/select-options
{"appCode":"ai-story","generateType":"1"}
```

### 第 2 步:创建项目

使用上一步接口返回的实时值创建项目。

> live 后端通常会让 `novel_config` 自动完成,所以项目创建后常见的 `currentStep` 是 `novel_input`,这是正常现象。

> 如果用户没有特别说明,不要额外告诉用户“当前默认使用文生图 / 解说漫模式”。
>
> 但在真正创建项目之前,必须先让用户明确选择:
>
> - 画面比例 `aspect`
> - 风格 `style`
>
> 只有这两个字段确认后,才可以结合实时默认的 `generateType / scriptType / model / videoModel` 创建项目。

### 第 3 步:提交剧本

```bash
POST /service/workflow/project/step/next
{
  "userProjectId": "项目ID",
  "step": "novel_input",
  "inputs": [
    {"name": "content", "type": "text", "value": "剧本内容"},
    {"name": "scriptType", "type": "text", "value": "0"},
    {"name": "isSplit", "type": "text", "value": "0"}
  ]
}
```

返回 `resultId` 后轮询 `GET /task/{resultId}`。

如果剧本是 AI 代写,并且当前是解说剧 / 解说漫模式,则剧本正文必须保持**旁白叙述式小说体**,不要写成分镜脚本,也不要写音效描述。

### 第 4 步:智能分集

```bash
POST /service/workflow/project/step/next
{"userProjectId":"项目ID","step":"novel_opt","inputs":[]}
```

返回 `resultId` 后轮询任务。

### 第 5 步:等待角色图完成,再执行角色步骤

先调:

```bash
GET /service/workflow/comic/roles/{presetResourceId}
```

必须满足:

- `roles[].taskStatus == SUCCESS`
- `roles[].imgUrl` 非空

然后再调:

```json
POST /service/workflow/project/step/next
{
  "userProjectId": "项目ID",
  "step": "novel_extract_roles",
  "inputs": [
    {"type": "number", "name": "chapterNum", "value": 1},
    { ...来自 roles/voiceInputs 的 tts 输入对象... }
  ]
}
```

如果跳过这一步,常见报错是:

- `角色 [xxx] 图片未完成`

如果用户在这一阶段要求修改角色形象,则必须满足:

1. 当前 `workflow.currentStep == novel_extract_roles`
2. 先对目标角色发起新图生成
3. 等待新图在角色候选图列表里变成 `SUCCESS` 且 `imgUrl` 非空
4. 再显式应用这张新图
5. 最后重新读取角色列表,确认角色主图已切换,并把新的图片 URL 返回给用户

只生图不应用,不算修改完成。

### 第 6 步:等待 `sceneCaptionsTaskStatus=SUCCESS`,再执行智能分镜

先调:

```bash
GET /service/workflow/resource/comicPreset/{presetResourceId}
```

等待:

```text
chapters[chapterNum].sceneCaptionsTaskStatus == SUCCESS
```

补充说明:live 数据里,这类章节字段在短时间内可能先出现空值,再进入 `RUNNING / SUCCESS`。空值不一定代表异常,更不能据此提前推进下一步。

然后再调:

```json
POST /service/workflow/project/step/next
{
  "userProjectId": "项目ID",
  "step": "novel_scene_captions",
  "inputs": [
    {"type": "number", "name": "chapterNum", "value": 1},
    {"name": "imgGenTypeRef", "value": 1}
  ]
}
```

这个步骤返回的是 **`dialogTaskId`**,不是 `resultId`。

如果调早了,常见报错是:

- `该章节提取分镜场景任务未完成,请稍后再试`

### 第 7 步:轮询 `dialogTaskId` 后,还要再等 `sceneTaskStatus=SUCCESS`

轮询 `dialogTaskId` 成功后,仍然不能立刻推进到成片。

还需要再看:

```text
chapters[chapterNum].sceneTaskStatus == SUCCESS
```

补充说明:live 数据里,`sceneTaskStatus` 在一段时间内可能为空,再变成 `SUCCESS`;判断 readiness 时应继续轮询,而不是把空值直接当失败。

如果调早了,常见报错是:

- `该章节分镜图任务未完成,请稍后再试`

### 第 8 步:推进到成片步骤

等 `sceneTaskStatus=SUCCESS` 后,再调:

```json
POST /service/workflow/project/step/next
{
  "userProjectId": "项目ID",
  "step": "novel_chapter_scenes",
  "inputs": [{"type": "number", "name": "chapterNum", "value": 1}]
}
```

### 第 9 步:解析 storyboard 与 sceneId

用 `sceneTaskId -> task -> resourceId -> resource` 链路拿到:

- `storyboardId`
- `scenes[].id`
- `scenes[].image`

### 第 9.5 步:单场景图转视频(如用户明确要求)

先确认:

1. 当前步骤已处于 `novel_chapter_scenes`
2. `sceneTaskStatus == SUCCESS`
3. 使用完整 `sceneId`
4. 先取 `prompt/detail.video.imageId`,再从 `resources` 中找到对应 image 资源

推荐 payload 形态:

```json
{
  "sceneId": "完整 sceneId",
  "prompt": "来自 prompt/detail 的视频提示词",
  "cameraPrompt": "来自 prompt/detail 的镜头提示词",
  "model": "doubao-pro",
  "duration": "-1",
  "firstImage": "scene 当前基准分镜图 URL",
  "tailImage": "",
  "clarity": "720p",
  "imageId": "scene 当前基准 image 资源ID"
}
```

不要写成:

```text
firstImage = roles[].imgUrl
imageId = roles[].imageResourceId
```

因为这可能不会报错,却会生成错误语义的视频。

### 第 10 步:成片配置与合成

这里必须明确区分**成片设置阶段**和**视频合成阶段**。

#### 第 10A 步:进入 `novel_chapter_video` = 进入成片设置阶段

当章节从 `novel_chapter_scenes` 推进到 `novel_chapter_video` 后,用户并不是立刻就能看到最终成片。

live 测试里,这个阶段常见特征是:

- `workflow.currentStep = novel_chapter_video`
- `chapters[].currentStep = novel_chapter_video`
- `chapters[].currentSubStep = setting`

这表示当前处于**成片设置阶段**,此时需要准备并确认成片参数。

#### 第 10B 步:保存成片设置

顺序如下:

1. `POST /storyboard/prepareVideoComposite`
2. `GET /storyboard/getVideoSetting?userProjectId=...&type=2&chapterNum=1`
3. `POST /storyboard/saveVideoComposeConfig`

这一阶段主要对应:

- 封面设置
- 字幕设置
- 背景音乐
- 以及后续生成视频前需要确认的合成相关参数

在 live 测试中,`saveVideoComposeConfig` 成功后,章节仍可能保持:

- `currentSubStep = setting`

也就是说,**保存设置成功 ≠ 已经开始合成视频**。

#### 第 10C 步:点击“生成视频” = 真正发起视频合成

只有当调用:

4. `POST /project/step/action` with `step=novel_chapter_video`

之后,才是真正开始视频合成。

live 测试里,这一步会:

- 返回新的 `resultId`(视频合成任务 ID)
- 将章节的 `videoTaskId` 更新为新的任务 ID
- 让章节 `currentSubStep` 从 `setting` 进入 `video`

然后才需要:

5. 轮询返回的 `resultId`

live 自检里,这个最终合成任务可能会在 `QUEUED` 状态停留明显长于普通步骤;不要沿用前面普通任务的短轮询预算直接判超时。

#### 第 10D 步:只有合成任务成功后,用户才能看到最终成片

只有在视频合成任务 `SUCCESS` 后:

- 才会得到新的最终视频 `resourceId`
- 用户这时才能在平台里看到最终成片结果

换句话说:

- 进入 `novel_chapter_video` 不是最终成片完成
- 保存封面 / 字幕 / 背景音乐也不是最终成片完成
- **必须等视频合成任务成功后,最终成片才真正可见**

`saveVideoComposeConfig` 的可运行 payload 需要至少包含:

- `selectCover`
- `coverList`
- `selectCoverUrl`
- `selectMusicId`
- `selectTitleFont`
- `selectSubtitleFont`
- `title`
- `bgmVolume`
- `type`
- `chapterNum`
- `userProjectId`

#### 回退后必须重新合成

live 测试确认:

- 在 `novel_chapter_video` 合成成功后,章节会记录当前的 `videoTaskId`
- 一旦回退到 `novel_chapter_scenes` 再做调整,重新进入 `novel_chapter_video` 后,旧的合成结果不会自动变成新的最终成片
- 再次调用 `project/step/action` 时,会产生**新的** `videoTaskId`
- 最终也会生成**新的**视频 `resourceId`

这说明:

> **每次从成片步骤回退调整后,都必须重新合成视频。**

## 任务简报与逐步确认机制

Agent 的角色应该像“持续陪伴的智能漫剧助理”,而不是闷头执行器。

每完成一个用户可感知的重要任务,都应立即给用户一条简报,至少包含:

1. 刚完成了什么
2. 本步产出了什么关键结果
3. 下一步准备做什么
4. 如果需要用户决策,明确告诉用户要选什么
5. 明确询问用户:是否继续;如果当前步骤支持修改,再询问是否要修改当前结果

如果项目已创建,简报优先附上项目链接:

```text
https://ai.fun.tv/#/comic/multiple?projectId={projectId}
```

### 强制节奏要求

除纯技术性的中间动作外,Agent **不得**在用户没有确认的情况下自动把整条链路一路做完。

正确节奏是:

```text
完成一个大步骤
→ 详细汇报当前结果
→ 询问用户是否满意、是否继续下一步;如果当前步骤支持修改,再询问是否需要修改
→ 等用户确认后再继续
```

这里的“大步骤”至少包括:

- 创建项目完成
- 剧本写完 / 提交完成
- 角色整理完成
- 智能分镜完成
- 分镜图生成完成
- 图转视频完成
- 成片配置完成 / 合成完成

### 三个强制停点(不可跳过)

以下三个节点完成后,Agent 必须**立即停下来等待用户确认**,不能自动进入下一步:

1. **小说 / 剧本生成完成后**
   - 必须把完整或核心剧本内容回给用户
   - 明确询问:是否需要修改剧情、人物设定、语气风格
   - 用户确认后,才能继续提交剧本或进入后续步骤

2. **角色生成完成后**
   - 必须把每个角色的**角色图片的URL**返回给用户
   - 如果当前项目仍处于 `novel_extract_roles`(角色与配音)步骤,应主动询问用户是否需要修改某个角色的形象
   - 如果用户要求修改,必须先生成新图、等待新图完成、再显式应用新图;只有主图真正切换后,才算修改完成
   - 修改完成后,必须把新的角色图片 URL 返回给用户
   - 用户确认无误后,才能继续进入场景 / 分镜相关步骤

3. **场景 / 分镜生成完成后**
   - 必须把场景的**场景描述**返回给用户
   - 如果有可展示的分镜图,也应一并返回或说明项目链接中的查看方式
   - 如果用户对一个或多个场景不满意,应允许在 `novel_chapter_scenes` 步骤继续调整单场景的图片提示词或视频提示词后重新生成
   - 必须主动询问用户:
     1. 是否要将分镜图继续转为视频
     2. 还是直接进入“成片”界面,用当前分镜图直接合成
   - 用户明确选择后,才能继续进入图转视频或成片步骤

### 角色确认时必须包含的内容

角色确认阶段的回报,至少要包含:

- 角色名称
- 角色图片

不能只说“角色已生成完成”,而不把角色图片回给用户。

### 角色确认时的修改规则

角色形象修改只允许在 **角色与配音** 步骤执行。

角色确认阶段:

- 可以询问“是否要修改角色形象”
- 但前提是当前仍停留在 `novel_extract_roles`
- 如果项目已推进到后续步骤,就不能再按角色改图链路修改
- 只要执行了修改,就必须等待新图完成、显式应用,并把新的图片 URL 返回给用户

### 场景确认时必须包含的内容

场景确认阶段的回报,至少要包含:

- 场景名称或场景编号
- 场景描述
- 如已生成可视化结果,可附分镜图或项目链接查看方式

不能只说“场景已生成完成”,而不把场景描述回给用户确认。

### 场景不满意时的调整规则

如果用户对某一个或多个 scene 的结果不满意,Agent 应先判断问题属于哪一类:

- **图片本身不对**:调整 `sceneDescription + prompt` 后重生图
- **图片基本正确,但视频表现不对**:调整 `prompt(动作) + cameraPrompt(运镜)` 后重生视频

#### 分镜图重生图

重生图时,真实提示词由两部分共同组成:

- `sceneDescription`
- `prompt`

其中 `prompt` 里可能包含:

```text
@[人物](id:xxxx)
```

这类 live 人物引用用于保持角色一致性,不应随意删除。

#### 图转视频

图转视频时应区分:

- `prompt` = 动作
- `cameraPrompt` = 运镜

这里不要再使用图片侧的 `@[人物](id:xxxx)` 结构,而应直接写纯文本动作和镜头描述。

#### 多模态模型的可选增强

如果当前 Agent / 模型具备多模态看图能力,可在每次重生图或重生视频后先查看当前结果,再决定是否继续微调:

- 图片侧优先检查当前 `selected=true` 的 scene image
- 视频侧优先检查当前视频资源的 `videoCover`

然后再针对问题定向修改 prompt,而不是盲目重试。

### 分镜图完成后的下一步必须让用户二选一

当分镜图已经生成完成时,Agent 不能直接默认进入成片。

必须主动问用户:

1. **是否需要将分镜图转为视频**(会增加梦想值消耗)
2. **还是直接进入成片界面合成**(默认更省)

只有拿到这个选择后,才能继续往下执行。

### 哪些动作可以不单独等待确认

以下仍然属于同一步内部的技术动作,可以合并在一步里完成:

- 轮询任务状态
- 读取 `comicPreset` / `storyboard` / `task`
- 解析 `sceneId` / `storyboardId`
- 回退到分镜图步骤
- 读取 `select-options`

但是一旦形成了新的用户可感知结果,就必须停下来等确认。

## 生图 / 生视频约束

生图或生视频必须在 **分镜图步骤** 下执行,不能在成片步骤直接执行。

检查顺序:

1. `GET /project/{projectId}` 看 `workflow.currentStep`
2. 如果当前是 `novel_chapter_video`,先 `POST /project/step/prev`
3. 回到 `novel_chapter_scenes` 后再继续

live 测试确认:

- 回退成功后,`workflow.currentStep` 会变成 `novel_chapter_scenes`
- 章节的 `currentSubStep` 可能仍保留为 `video`

这不代表异常。真正要继续操作前,应继续确认:

- `sceneTaskStatus == SUCCESS`
- scene 当前基准 image 资源可用

## 梦想值规则

### 默认不消耗梦想值的推荐流程

默认流程是:

```text
分镜图生成完成 → 直接配置成片 → 合成最终视频
```

但这不意味着 Agent 可以自动一路执行到底。

正确做法是:

```text
分镜图生成完成
→ 先向用户展示分镜结果并询问是否修改 / 是否继续
→ 用户确认后再进入成片配置与合成
```

### 需要用户确认的高消耗操作

以下操作会消耗梦想值,必须先明确征得用户同意:

- 批量转视频 `check/batchAiVideo` 对应的真实转视频动作
- 单张图转视频 `scene/ai/video`
- 重绘分镜图 `scene/ai/image`

### `check/batchAiVideo` 只是查询,不是执行

它返回的是:

- `noVideoCount`
- 当前还有多少画面没有转动态

不要把这个接口误认为“已经开始批量转视频”。

## 常见问题与解决方案

### 1. Token 过期

- 错误:`401` / `未登录或登陆状态已失效`
- 解决:重新获取 token,更新 `config/.env`

### 2. 角色步骤失败

- 错误:`角色 [xxx] 图片未完成`
- 原因:角色图还没生成完,或者没有传 live `tts` 输入
- 解决:先检查 `GET /comic/roles/{presetResourceId}`,等角色就绪后把 `voiceInputs[0]` 一起提交

### 3. 智能分镜步骤失败

- 错误:`该章节提取分镜场景任务未完成,请稍后再试`
- 解决:等待 `sceneCaptionsTaskStatus=SUCCESS`

### 4. 推进成片步骤失败

- 错误:`该章节分镜图任务未完成,请稍后再试`
- 解决:等待 `sceneTaskStatus=SUCCESS`

### 5. `sceneUuid` 误用

- 错误:`分镜场景资源不存在`
- 原因:把短 ID 当成完整 `sceneId`
- 解决:按 `sceneTaskId -> storyboardId -> scenes[].id` 解析完整 sceneId

### 6. 图转视频拿错图片来源

- 现象:接口可能返回 `200 success`,但生成出来的视频内容与当前分镜不一致
- 原因:把 `roles[].imgUrl` / `roles[].imageResourceId` 当成了 `scene/ai/video` 的 `firstImage` / `imageId`
- 解决:必须改用 scene 当前基准分镜图资源(优先 `prompt/detail.video.imageId` 对应的 image 资源)

### 7. 视频配置保存失败

- 错误:`请选择封面`
- 原因:`saveVideoComposeConfig` 缺少 `coverList` / `selectCover` / `selectCoverUrl`
- 解决:先取 `getVideoSetting`,再按返回内容构造完整 payload

## 代码与参考文档

- `scripts/api-client.sh`:可复用的 API 工具函数与等待逻辑
- `examples/create-comic.sh`:按真实后端行为执行的完整自检流程
- `references/01-project-management.md`:项目创建与配置选项
- `references/02-script-management.md`:各步骤请求体与隐藏章节状态
- `references/03-character-management.md`:角色图状态与 `tts` 输入
- `references/05-storyboard-management.md`:storyboard / sceneId / 分镜资源
- `references/06-video-generation.md`:成片配置、批量视频检查与合成
- `references/07-task-status.md`:task 轮询与章节级隐藏状态
- `references/09-error-codes.md`:常见错误与处理方式
- `references/10-models-and-config.md`:实时配置与 workflow 总览
- `references/11-best-practices.md`:面向 Agent 的执行建议

Related Skills

---

3891
from openclaw/skills

name: article-factory-wechat

Content & Documentation

humanizer

3891
from openclaw/skills

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Content & Documentation

find-skills

3891
from openclaw/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities

tavily-search

3891
from openclaw/skills

Use Tavily API for real-time web search and content extraction. Use when: user needs real-time web search results, research, or current information from the web. Requires Tavily API key.

Data & Research

baidu-search

3891
from openclaw/skills

Search the web using Baidu AI Search Engine (BDSE). Use for live information, documentation, or research topics.

Data & Research

agent-autonomy-kit

3891
from openclaw/skills

Stop waiting for prompts. Keep working.

Workflow & Productivity

Meeting Prep

3891
from openclaw/skills

Never walk into a meeting unprepared again. Your agent researches all attendees before calendar events—pulling LinkedIn profiles, recent company news, mutual connections, and conversation starters. Generates a briefing doc with talking points, icebreakers, and context so you show up informed and confident. Triggered automatically before meetings or on-demand. Configure research depth, advance timing, and output format. Walking into meetings blind is amateur hour—missed connections, generic small talk, zero leverage. Use when setting up meeting intelligence, researching specific attendees, generating pre-meeting briefs, or automating your prep workflow.

Workflow & Productivity

self-improvement

3891
from openclaw/skills

Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Claude ('No, that's wrong...', 'Actually...'), (3) User requests a capability that doesn't exist, (4) An external API or tool fails, (5) Claude realizes its knowledge is outdated or incorrect, (6) A better approach is discovered for a recurring task. Also review learnings before major tasks.

Agent Intelligence & Learning

botlearn-healthcheck

3891
from openclaw/skills

botlearn-healthcheck — BotLearn autonomous health inspector for OpenClaw instances across 5 domains (hardware, config, security, skills, autonomy); triggers on system check, health report, diagnostics, or scheduled heartbeat inspection.

DevOps & Infrastructure

linkedin-cli

3891
from openclaw/skills

A bird-like LinkedIn CLI for searching profiles, checking messages, and summarizing your feed using session cookies.

Content & Documentation

notebooklm

3891
from openclaw/skills

Google NotebookLM 非官方 Python API 的 OpenClaw Skill。支持内容生成(播客、视频、幻灯片、测验、思维导图等)、文档管理和研究自动化。当用户需要使用 NotebookLM 生成音频概述、视频、学习材料或管理知识库时触发。

Data & Research

小红书长图文发布 Skill

3891
from openclaw/skills

## 概述

Content & Documentation