jpskill.com
🛠️ 開発・MCP コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

🛠️ Funai Skill

Funai-skill

対話形式でAI動画を制作できる

⏱ コードレビュー 1時間 → 10分

📺 まず動画で見る(YouTube)

▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗

※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。

📜 元の英語説明(参考)

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

🇯🇵 日本人クリエイター向け解説

一言でいうと

対話形式でAI動画を制作できる

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o funai-skill.zip https://jpskill.com/download/4845.zip && unzip -o funai-skill.zip && rm funai-skill.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4845.zip -OutFile "$d\funai-skill.zip"; Expand-Archive "$d\funai-skill.zip" -DestinationPath $d -Force; ri "$d\funai-skill.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して funai-skill.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → funai-skill フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
13

💬 こう話しかけるだけ — サンプルプロンプト

  • Funai Skill を使って、最小構成のサンプルコードを示して
  • Funai Skill の主な使い方と注意点を教えて
  • Funai Skill を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] Funai-skill

橙星夢工場 Agent Skill

橙星夢工場は、AI 駆動の漫画制作プラットフォームです。API を通じてプロジェクトを作成し、スクリプトを提出し、キャラクターを抽出し、絵コンテを生成し、完成した作品を構成し、最終的にビデオを合成します。

ベータ版のヒント

現在、Funai-skill ベータ版をご利用いただいております。 Agent はユーザーとの対話において、現在ベータ段階であることを明確に伝える必要があります。

重要な結論

実際のバックエンドは「workflow.currentStep のみを見る線形プロセス」ではなく、次のようになっています。

  • 1 つのレイヤーはプロジェクトレベルのステップ: workflow.currentStep
  • 1 つのレイヤーはチャプターレベルの隠しタスク: comicPreset.data.chapters[] 内の sceneCaptionsTaskStatusdialogTaskStatussceneTaskStatus

Agent が currentStep だけを見て次のステップを呼び出すと、エラーが発生しやすくなります。

Skill 更新の制約(作成系の操作を実行する前に必須)

ローカルマシンで読み取り可能なバージョンファイル: VERSION

説明: 外部向けドキュメントではバージョン番号を繰り返しハードコードしません。実際のバージョンは、ローカルの VERSION とリモートのセットアップメタデータ内の 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. トークンの取得

ユーザーを https://ai.fun.tv/#/openclaw に誘導し、ログインしてトークンを取得した後、Agent が代わりに設定ファイルに書き込みます。

2. トークンの設定

cp config/.env.example config/.env
# config/.env を編集
# AIFUN_TOKEN=...

3. 設定の検証

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

4. 完全な自己診断サンプルの実行

./examples/create-comic.sh

サンプルスクリプトは自己診断スクリプトであり、select-options から返されるリアルタイムのデフォルト値を使用してテストプロジェクトを自動的に作成します。

実際のユーザー向け Agent インタラクションでは、リアルタイムのオプションをまず読み取る必要があります。その中で aspect / style はユーザーに表示して選択させる必要がありますが、generateType / scriptType は現在のデフォルト値でサイレントに使用できます。model / videoModel はユーザーが指定しない場合、リアルタイムのデフォルト値を引き続き使用できます。

また、サンプルスクリプトは全リンクを検証するために、自己診断シナリオでまずスクリプトを提出してから「確認点」を表示します。これは、実際のユーザーインタラクションで「まず確認してから続行する」というリズム要件をスキップできるという意味ではありません。

Agent が遵守すべき実行ルール

0. デフォルトモードはサイレントに使用し、ユーザーに積極的に説明しない

ユーザーがモードの切り替えを明確に要求しない限り、Agent はプラットフォームのデフォルトモードを直接使用すべきです。

  • generateType = 1(テキストから画像生成)
  • scriptType = 解说漫模式select-options から返されるデフォルトのスクリプトモードに従う)

ただし、この「サイレントデフォルト」はモードの階層にのみ適用され、プロジェクトの視覚設定には適用されません。

プロジェクト作成時、以下の2つのフィールドはサイレントデフォルトにせず、ユーザーに明確に選択させる必要があります。

  • aspect(画面比率)
  • style(スタイル)

重要:

  • これは Agent の内部的なデフォルト決定であり、「現在、テキストから画像生成 / 解说漫モードをデフォルトで使用しています」ということをユーザーに伝える設定項目として積極的に提示しないでください。
  • ユーザーが他のモードへの切り替えを明確に要求した場合にのみ、説明して調整する必要があります。
  • デフォルトモードをサイレントに使用する場合でも、基盤ではまず select-options を呼び出し、そのインターフェースから返されるデフォルト値を使用する必要があります。ハードコードされた定数を使用しないでください。
  • aspect / style は、インターフェースが isDefault を返したからといって、Agent がユーザーに代わって直接決定するべきではありません。ユーザーに選択肢を提示し、確認させる必要があります。

1. プロジェクト作成前に select-options を呼び出す必要があります

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

ルール:

  • インターフェースから返される ratiosgenerateTypesmodelsvideoModelsstylesscriptTypes を使用する必要があります。
  • スタイル、モデル、比率、スクリプトタイプをハードコーディングすることは禁止です。
  • isDefaultリクエストに関連するものであり、過去のデフォルト値をコードやドキュメントにハードコードしないでください。
  • ユーザーがモードの切り替えを明確に要求しない場合、そのインターフェースから返されるデフォルトの generateType / scriptType を直接サイレントに使用します。
  • ただし、aspect / style はユーザーに表示して選択させる必要があり、サイレントデフォルトにすることはできません。
  • model / videoModel は、ユーザーが追加の要求をしない場合、select-options から返される現在のデフォルト値を引き続き使用できます。
  • ユーザーとのインタラクションでは、「テキストから画像生成 / 解说漫モード」をデフォルト項目として積極的に説明する必要はありません。ただし、aspect / style はユーザーに明確に選択させる必要があります。

2. 解说劇 / 解说漫モードでは、AI によるスクリプト作成はナレーション形式の小説体で記述する必要があります

ユーザーが AI にスクリプト作成を依頼し、現在のモードが解说劇 / 解说漫モードである場合、Agent はスクリプトをナレーション形式の小説 / 物語の本文として記述する必要があり、絵コンテスクリプトではありません。

以下の要件を満たす必要があります。

  • 連続的な物語
  • ナレーションによる物語の進行が主
  • 少量で自然な対話を挿入してもよいが、全体としては物語形式の本文であるべき
  • その後、プラットフォームが自動的にキャラクター、絵コンテ、ナレーションを分割するのに適している

以下の記述方法は禁止です。

  • 镜头1 / 镜头2(シーン1 / シーン2)
  • 旁白:...(ナレーション:...)のような明示的な台本タグ
  • 林舟说:...(林舟が言う:...)
  • 【音效:脚步声】 / 砰! / 咚—— のような効果音の記述
  • 舞台指示形式の項目
  • 絵コンテ表 / 台本形式

正しいスタイルの例:

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

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

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

誤ったスタイルの例:

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

3. プロジェクト作成成功後、まずプロジェクトリンクを表示する

作成成功後、すぐにプロジェクトリンクをユーザーに伝える必要があります。

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

4. workflow.currentStep だけを見ない

以下の3種類の準備状況をすべて確認する必要があります。

シナリオ 確認場所 続行条件
プロジェクトがどの主要ステップにあるか GET /project/{projectId}workflow.currentStep 現在のステップが正しい
キャラクター画像が完了したか GET /comic/roles/{presetResourceId}roles[].taskStatus / imgUrl すべて SUCCESSimgUrl が空でない
チャプターレベルの隠しタスクが完了したか GET /resource/comicPreset/{presetResourceId}chapters[] 対応するステータスフィールドが SUCCESS

5. tts / voice-clone-select 入力をハードコーディングしない

novel_extract_roleschapterNum を渡すだけでは不十分です。実際に実行可能な方法は次のとおりです。

  1. まず GET /comic/roles/{presetResourceId} を呼び出す
  2. data.voiceInputs[0] または data.roles[0].inputs[0] からライブの tts 入力オブジェクトを取得する
  3. それを chapterNum と一緒に提出する

6. sceneUuidsceneId として使用しない

scene-list 内の sceneUuid は単なる短い ID であり、絵コンテ/ビデオインターフェースに直接使用することはできません。

正しいフロー:

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

7. ユーザーに videoPlayUrl を優先的に返す

バックエンドが新しい再生可能なフィールドを返した場合:

  • シーンビデオリソース: videoPlayUrl
  • 最終完成作品リソース: videoPlayUrl

正しい方法は次のとおりです。

  • 外部には videoPlayUrl のみ返す
  • 高レベルのヘルパー、サンプルスクリプト、モデルの可視出力には元のビデオ url を公開しない
  • プロジェクトリンクは補足的な入り口として一緒に返すことができます

8. scene/ai/video はシーンの現在の基準絵コンテ画像を使用する必要があります

画像からビデオへの変換の正しい画像ソースは、現在のシーンの基準絵コンテ画像です。

  • 優先的に GET /storyboard/scene/{sceneId}/prompt/detail?sceneId={sceneId} 内の video.imageId を使用します。
  • 次に、GET /storyboard/scene/{sceneId}/resources でこの imageId に対応する画像リソースを見つけます。
  • 現在も selected == true の画像がある場合、それは通常同じ画像です。

直接使用しないでください。

  • GET /comic/roles/{presetResourceId} から返される roles[].imgUrl

重要: これは「バックエンドが必ずエラーを返す」という制約ではなく、「Agent が意味的な正確さを積極的に保証しなければならない」という制約です。

ライブテストでは、バックエンドは roles[].imgUrl + roles[].imageResourceId を受け入れ、ビデオソースの生成に成功しました。つまり、誤った画像を渡した場合でもインターフェースは 200 success を返す可能性がありますが、生成されるのは意味的に誤ったビデオです。

したがって:

  • 正しい画像ソース = シーンの現在の基準絵コンテ画像(優先的に video.imageId に対応する画像)
  • 誤った画像ソース = キャラクター画像 / その他の現在のシーン以外の画像
  • バックエンドがフォールバックしてくれることに依存しないでください

Agent 向けの権威ある実行順序

ステップ 0: まずセットアップチェックを行う

まず https://neirong.funshion.net/skills/setup-skill.md を読み込み、ローカルのスキルバージョンが利用可能であることを確認します。

ステップ 1: プロジェクトのオプションを取得する

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

ステップ 2: プロジェクトを作成する

前のステップのインターフェースから返されたリアルタイム値を使用してプロジェクトを作成します。

ライブバックエンドは通常 novel_config を自動的に完了させるため、プロジェクト作成後の一般的な currentStepnovel_input となりますが、これは正常な現象です。

ユーザーが特に指定しない限り、「現在、テキストから画像生成 / 解说漫モードをデフォルトで使用しています」とユーザーに伝える必要はありません。

ただし、実際にプロジェクトを作成する前に、ユーザーに明確に選択させる必要があります。

  • 画面比率 aspect
  • スタイル style

これら2つのフィールドが確認された後でなければ、リアルタイムのデフォルトである generateType / scriptType / model / videoModel と組み合わせてプロジェクトを作成することはできません。

ステップ 3: スクリプトを提出する

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 によって作成され、現在のモードが解说劇 / 解说漫モードである場合、スクリプトの本文はナレーションでなければなりません。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

橙星梦工厂 Agent Skill

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

内测提示

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

重要结论

真实后端不是“只看 workflow.currentStep 的线性流程”,而是:

  • 一层是项目级步骤:workflow.currentStep
  • 一层是章节级隐藏任务:comicPreset.data.chapters[] 中的 sceneCaptionsTaskStatusdialogTaskStatussceneTaskStatus

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

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

3. 验证配置

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

4. 运行完整自检示例

./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

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

规则:

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

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

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

必须符合:

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

禁止出现这类写法:

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

正确风格示意:

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

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

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

错误风格示意:

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

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

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

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

4. 不要只看 workflow.currentStep

以下三类 readiness 都要检查:

场景 检查位置 继续条件
项目处于哪个大步骤 GET /project/{projectId}workflow.currentStep 当前步骤正确
角色图是否完成 GET /comic/roles/{presetResourceId}roles[].taskStatus / imgUrl 全部 SUCCESSimgUrl 非空
章节级隐藏任务是否完成 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. 不要把 sceneUuidsceneId

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

正确流程:

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 步:获取项目可选项

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

第 2 步:创建项目

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

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

如果用户没有特别说明,不要额外告诉用户“当前默认使用文生图 / 解说漫模式”。

但在真正创建项目之前,必须先让用户明确选择:

  • 画面比例 aspect
  • 风格 style

只有这两个字段确认后,才可以结合实时默认的 generateType / scriptType / model / videoModel 创建项目。

第 3 步:提交剧本

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 步:智能分集

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

返回 resultId 后轮询任务。

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

先调:

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

必须满足:

  • roles[].taskStatus == SUCCESS
  • roles[].imgUrl 非空

然后再调:

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. 等待新图在角色候选图列表里变成 SUCCESSimgUrl 非空
  4. 再显式应用这张新图
  5. 最后重新读取角色列表,确认角色主图已切换,并把新的图片 URL 返回给用户

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

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

先调:

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

等待:

chapters[chapterNum].sceneCaptionsTaskStatus == SUCCESS

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

然后再调:

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 成功后,仍然不能立刻推进到成片。

还需要再看:

chapters[chapterNum].sceneTaskStatus == SUCCESS

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

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

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

第 8 步:推进到成片步骤

sceneTaskStatus=SUCCESS 后,再调:

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 形态:

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

不要写成:

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 步:点击“生成视频” = 真正发起视频合成

只有当调用:

  1. POST /project/step/action with step=novel_chapter_video

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

live 测试里,这一步会:

  • 返回新的 resultId(视频合成任务 ID)
  • 将章节的 videoTaskId 更新为新的任务 ID
  • 让章节 currentSubStepsetting 进入 video

然后才需要:

  1. 轮询返回的 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. 明确询问用户:是否继续;如果当前步骤支持修改,再询问是否要修改当前结果

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

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

强制节奏要求

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

正确节奏是:

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

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

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

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

以下三个节点完成后,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 里可能包含:

@[人物](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 资源可用

梦想值规则

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

默认流程是:

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

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

正确做法是:

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

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

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

  • 批量转视频 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/videofirstImage / 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 的执行建议

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。