動画生成

動画モデルは 1 回のレスポンスではなくタスクとして応答します。POST /v1/videos はタスク ID と "status": "queued" を返し、GET /v1/videos/{task_id} でタスクが completed または failed になるまで進捗を確認します。完了したら、生成物は metadata.url にある署名付き URL です。この URL には Expires パラメーターが付くため、リンクを保存せずファイル自体をダウンロードしてください。失敗したタスクは上流のコードとメッセージを error.codeerror.message に載せるので、リクエストに足りなかったフィールドはたいていそれで分かります。POST /v1/video/generations も同じハンドラーに届くので、そのパスに合わせて実装済みのクライアントはそのまま使えます。

POST /v1/videos
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-i2v",
    "prompt": "the cat turns and walks toward the camera",
    "input_reference": "https://example.com/first-frame.jpg",
    "size": "1280*720",
    "duration": 5
  }'

# {"id":"task_9f2c...","task_id":"task_9f2c...","object":"video",
#  "model":"wan2.7-i2v","status":"queued","progress":0}
GET /v1/videos/{task_id}
curl https://api.chinaapi.ai/v1/videos/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"id":"task_9f2c...","object":"video","model":"wan2.7-i2v",
#  "status":"completed","progress":100,
#  "metadata":{"url":"https://.../output.mp4?Expires=..."}}
テキストから動画

wan2.7-t2v

必須フィールドは modelprompt だけです。sizeduration を省略すると、ゲートウェイは 1280*720 の 5 秒で送信します。

画像から動画

wan2.7-i2v

静止画を動かします。input_reference には公開アクセスできる画像 URL を渡し、それが最初のフレームになります。sizeduration も一緒に送ってください。

参照素材から動画

wan2.7-r2v

参照素材から動画を作ります。input_reference は参照画像 1 枚を受け取ります。複数渡すときは代わりに images を使い、video_url で参照動画を追加します — 参照は合わせて 5 件までです。input_referenceimages を同時に送らないでください。ゲートウェイは input_reference だけを残します。

動画編集

wan2.7-videoedit

プロンプトで既存のクリップを編集します。video_url には元動画を渡します。元動画は 2〜10 秒の MP4 または MOV である必要があり、出力は size で決まります。

30 秒の動画

doubao-seedance-2-5-260628

参照画像は images に入れます。input_reference は 1 枚だけ受け取り、両方送った場合は両方とも送信されます。長さは secondsduration、ベンダー固有のパラメーターは metadata に入れ、resolution480p720p のどちらかです。

Seedance 2.0

doubao-seedance-2-0-260128

リクエストの形は doubao-seedance-2-5-260628 と同じで、metadata.contentrole の規則もそのまま当てはまります。doubao-seedance-2-0-fast-260128doubao-seedance-2-0-mini-260615 は品質と引き換えに速度とコストを取ります。また 2.0 系は画像か動画の参照が最低 1 つ必要で、2.5 のように音声だけの入力は受け付けません。

Kling 3.0

kling-v3

先頭フレームは image に入れます。このファミリーは input_reference を一切読みません。mode の既定は stdduration の既定は 5 秒です。残りは metadata が受け持ちます — 終了フレームの image_tailonoff を取る sound(既定は off)、それに negative_promptcfg_scalecamera_control です。

低価格帯

kling-3.0-turbo

テキストから動画なら prompt だけ、先頭フレームを付けるなら image を足せば、上流が求める contents 配列はゲートウェイが組み立てます。サイズ関連は metadata.settings の下です — resolution720p1080pduration は 3〜15 秒、aspect_ratio16:99:161:1 のいずれかです。音声は常に付き、切り替えるスイッチはありません。

複数画像の参照

kling-v3-omni

複数の画像をまとめて参照して生成します。パラメーターはすべて metadata の中にあり、resolution フィールドは存在しません — 品質の段階は mode です。下の実例を参照してください。

ネイティブ音声

MiniMax-H3

ゲートウェイ自身のフィールドを受け取り、上流のペイロードは自動で組み立てます。image または input_reference が先頭フレーム、images が参照画像、video_url が参照動画になります。size768P2K を選び、duration は 4〜15 の整数です。テキストのみのリクエストでは、adaptive 以外の metadata.ratio を明示する必要があります。

Hailuo

MiniMax-Hailuo-2.3

MiniMax-Hailuo-2.3-FastMiniMax-Hailuo-02 も同じ扱いです。これらがトップレベルから読むのは promptdurationsize だけで、画像はすべて metadata 経由 — first_frame_imagelast_frame_imagesubject_reference のいずれか — で渡します。

480P 対応

happyhorse-1.1-t2v

happyhorse-1.1-i2vhappyhorse-1.1-r2v も同じです。フィールドは wan2.7 ファミリーと同じ promptinput_referencesizeduration で、こちらは 480P にも価格が付いているため、wan2.7 が拒否する 832*480 を受け付けます。参照を複数渡すときは metadata.input.media に入れてください。images フィールドが起こす自動組み立ては wan2.7-r2v 専用です。

ヒント サイズはアスタリスクで幅と高さをつないで 1280*720 のように書きます。x は使えません。832x480invalid size: 832x480, example: 1920*1080 が返ります。duration は秒数の整数です。wan2.7-i2vwan2.7-r2vwan2.7-videoedit ではゲートウェイが size を解像度の段階に折りたたみ、上流には 2 段階しかありません。720P には 1280*720、1080P には 1920*1080 を送ってください。832*480 のような 480P のサイズはこの 3 つに価格が設定されておらず、その場で拒否されるか、いったん受け付けられたうえで上流が InvalidParameter で失敗させます。失敗したタスクは返金されますが、いずれにせよ往復が無駄になります。wan2.7-t2v は値をそのまま受け取ります。
ヒント Kling ファミリーは size から縦横比を読み取りますが、その対応表はサイズを x でつづります — 1280x7201920x1080720x12801080x19201024x1024512x512 — そして表にない値はエラーにならずに 1:1 になります。したがって kling-v3 にアスタリスク形式の 1280*720 を送ると、苦情ではなく正方形の動画が返ります。構図が重要なときは metadata.aspect_ratio を直接指定してください。
ヒント MiniMax-Hailuo-2.3MiniMax-Hailuo-2.3-FastMiniMax-Hailuo-02 は、トップレベルの imageinput_referenceimagesvideo_url を何も言わずに捨てます。リクエストは成功しますが、テキストから動画として実行され、その料金で課金されます。画像は metadata.first_frame_image に入れ、終了フレームは metadata.last_frame_image、被写体の参照は metadata.subject_reference を使ってください。MiniMax-H3 はこのファミリーの例外で、トップレベルのフィールドを読みます。
kling-v3-omni · multi-image reference
curl https://api.chinaapi.ai/v1/video/generations \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3-omni",
    "prompt": "the character from the references walks through a neon-lit street",
    "metadata": {
      "image_list": [
        {"image_url": "https://example.com/character.jpg"},
        {"image_url": "https://example.com/outfit.jpg"},
        {"image_url": "https://example.com/scene.jpg"}
      ],
      "mode": "std",
      "duration": "5",
      "aspect_ratio": "16:9",
      "sound": "off"
    }
  }'
GET /v1/video/generations/{task_id}
curl https://api.chinaapi.ai/v1/video/generations/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"code":"success",
#  "data":{"task_id":"task_9f2c...","status":"SUCCESS",
#          "progress":"100%","fail_reason":"",
#          "result_url":"https://.../output.mp4"}}
ヒント 参照画像に type は付けません。このフィールドは first_frameend_frame を示すためだけにあります。先頭フレームがない場合は aspect_ratio が必須です。mode は品質の段階で stdpro4k のいずれか。上流の既定は pro で表示価格の 1.33 倍、4k は 5 倍で課金されるため、想定どおりの料金にするには mode を明示してください。duration"3" から "15" までの文字列、sound の既定は off です。参照動画は video_list に入れ、必ず "refer_type": "feature" を指定します。編集モードの base は渡した動画の長さで課金され、送信前に価格を出せないため拒否されます。 参照画像には上流側の最小サイズもあります。アイコン程度の小さな画像は送信こそ通りますが、タスクは Image pixel is invalid で失敗します。失敗したタスクは返金されますが、往復は無駄になります。
ヒント 2 つのパスは結果を別々の形で返します。GET /v1/videos/{task_id} は OpenAI の動画形式で答え、ファイルは metadata.url、進捗は数値です。GET /v1/video/generations/{task_id}{"code": "success", "data": {…}} で答え、ファイルは data.result_urldata.statusSUCCESSFAILURE のような大文字の語、data.progress"100%" のような文字列で、失敗の理由は data.fail_reason に入ります。送信したパスと同じ側をポーリングしてください。
doubao-seedance-2-5-260628 · first frame
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "the subject slowly turns toward the camera",
    "images": ["https://example.com/first-frame.jpg"],
    "seconds": "5",
    "metadata": {"resolution": "480p"}
  }'
doubao-seedance-2-5-260628 · reference mode
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "keep the subject from the reference image",
    "seconds": "5",
    "metadata": {
      "resolution": "480p",
      "ratio": "16:9",
      "content": [
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/reference.jpg"},
          "role": "reference_image"
        }
      ]
    }
  }'
ヒント role のない画像は参照ではなく先頭フレームとして読み取られます。出力の縦横比はその画像に従い、ratio を一緒に送ると InvalidParameter.TaskTypeConstraint で拒否され、seconds の 2 もそこでは拒否されます(5 なら通ります)。generate_audio は上流の既定が true なので、metadata で false にしない限り音声トラック付きのファイルが返ります。metadata.content の各要素に role を付けると参照モード全体 — 画像 30 枚・動画 10 本・音声 10 本まで、音声のみの入力、30 秒を一度に生成 — が使え、そこでは ratio も受け付けられます。