Wan
curl --request POST \
--url https://api.mixroute.ai/v1/video/generationsimport requests
url = "https://api.mixroute.ai/v1/video/generations"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.mixroute.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixroute.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixroute.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixroute.ai/v1/video/generations")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixroute.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body動画シリーズ
Wan
Wan 3.0、2.7、2.6の動画生成、参照入力、編集、および非同期タスク処理。
Wan
curl --request POST \
--url https://api.mixroute.ai/v1/video/generationsimport requests
url = "https://api.mixroute.ai/v1/video/generations"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.mixroute.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixroute.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixroute.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixroute.ai/v1/video/generations")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixroute.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyWanは単一のMixRoute動画エンドポイントを使用します。modelをルートに置き、プロバイダーのinputオブジェクトとparametersオブジェクトをmetadata内に配置してください。モデルのバージョンごとに入力プロトコルが異なるため、以下から正確なIDとスキーマを選択してください。
利用可能なモデルは、アカウントのモデルリストによって異なります。アカウントのリストに返されないベンダーモデルや日付付きスナップショットが利用可能であると想定しないでください。
プロンプトにはmetadata.input.promptを使用してください。互換性のためのフォールバックはmetadata.prompt、次にトップレベルのpromptの順です。metadata.input.promptがある場合は、それが優先されます。プロンプトまたは有効なメディア入力を指定し、選択したモデル固有の必須入力ルールに従ってください。
ネイティブフィールドは名前を変更せずに転送されます。新しいプロバイダーフィールドは、本来のinput/parameters内の位置に指定できます。モデル固有の組み合わせは上流サービスが検証します。これは、すべてのモデルがそのフィールドに対応するという意味ではありません。
first_clipを使用するI2Vの継続生成では、durationは追加秒数だけではなく、元のクリップを含む最終的な合計の長さを指定します。R2VではImage 1 / Video 1形式の参照を使用し、画像と動画を別々に数えます。Wan 2.7では、Wan 2.6 T2V/R2Vのsizeフィールドではなくresolution/ratioを使用します。shot_typeは使用されなくなりました。I2Vの出力は元のアスペクト比に従い、ratioは省略します。
Wan 2.6 R2Vでは、Wan 2.7のImage/Videoラベルではなく、reference_urlsの順序に従ってcharacter1、character2などを使用します。参照には、公開されたHTTP/HTTPSまたはアクセス可能なOSS URLが必要です。標準のWan 2.6モデルではaudio=falseは使用できません。音声なしの出力にはI2V FlashまたはR2V Flashを使用してください。従来のエフェクトテンプレートは、これらのモデルに共通する機能ではありません。
Flashの各バリアントは、対応するI2V/R2Vの入力プロトコルを維持しています。I2V Flashはinput.img_urlとparameters.resolutionを、R2V Flashはinput.reference_urlsとparameters.sizeを使用します。I2V Flashの動作を駆動する音声には、WAV/MP3形式、3~30秒、最大15 MBの音声を使用してください。
環境に依存しないリクエストには公開URLを使用してください。OSSの一時リンクとプロバイダーのアセットIDは、上流のアカウントとリージョンにスコープが限定されており、選択したチャネルからアクセスできる必要があります。サードパーティのCDNの結果URLからデータを取得する際は、MixRouteキーを送信しないでください。
MIXROUTE_API_KEYを設定し、example.comのメディアURLをアクセス可能なソースファイルに置き換えてください。POSTごとに別のタスクが作成されます。タイムアウトした送信を自動的に繰り返さないでください。
上流の完全な結果はdata.dataに保持されます。usageとrequest_idはそこから読み取ってください。UNKNOWNは、上流のタスクが存在しないか有効期限切れであることを意味し、必ずしも生成エラーではありません。約15秒ごとにポーリングし、レート制限や一時的なエラーが発生した場合は間隔を延ばしてください。上流のタスク照会と結果リンクには保持期間の制限があり、通常は24時間です。完了した出力は速やかに保存してください。
最終的な請求額はコンソールの請求明細で確認してください。送信時に、完了前にクォータが確保されることがあります。リクエストの見積もりと最終精算額は異なる場合があります。入力された長さ、負の長さ、ゼロの長さを、無料のタスクを取得する方法とみなさないでください。
POST https://api.mixroute.ai/v1/video/generations
モデル
| モデルID | モード | 解像度 | 長さ(秒) |
|---|---|---|---|
| wan3.0-video-prime | 高速オールインワン | 480P / 720P / 1080P | 2-30 / -1 |
| wan3.0-video | オールインワンの動画生成 | 480P / 720P / 1080P | 2-30 / -1 |
| wan2.7-t2v | テキストから動画を生成 | 720P / 1080P | 2-15 |
| wan2.7-i2v | 画像から動画への生成 | 720P / 1080P | 2-15 |
| wan2.7-r2v | 参照から動画への生成 | 720P / 1080P | 2~15(動画なし) / 2~10(動画あり) |
| wan2.7-videoedit | 動画編集 | 720P / 1080P | 2-10 |
| wan2.6-t2v | テキストから動画を生成 | 720P / 1080P | 2-15 |
| wan2.6-i2v | 画像から動画への生成 | 720P / 1080P | 2-15 |
| wan2.6-i2v-flash | 高速な画像から動画への生成 | 720P / 1080P | 2-15 |
| wan2.6-r2v | 参照から動画への生成 | 720P / 1080P | 2-10 |
| wan2.6-r2v-flash | 参照からの高速動画生成 | 720P / 1080P | 2-10 |
リクエストの全体構造
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | はい | 正確なMixRouteモデルID。 |
metadata | object | はい | modelを除く、プロバイダーのリクエストボディを格納するコンテナ。 |
metadata.input | object | はい | ネイティブの入力オブジェクトです。プロンプトとメディアの要件は、選択したモデルによって異なります。 |
metadata.parameters | object | いいえ | ネイティブの生成設定です。フィールド名とネスト構造を維持してください。 |
Authorization: BearerとMixRouteキーで認証してください。Alibabaキー、ワークスペースID、リージョン別エンドポイント、X-DashScope-Asyncヘッダーは不要です。input/parametersをルートに置いたり、その内容を平坦化してmetadataに直接入れたりしないでください。
Wan 3.0
wan3.0-video-primeはwan3.0-videoと同じinput/parametersスキーマを使用し、より高速に生成します。このセクションのルールは両方に適用されます。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
metadata.input.prompt | string | モード別 | テキストの指示です。最大20000文字で、超過分は切り捨てられます。メディアを指定しない場合は必須です。 |
metadata.input.media | object[] | モード別 | メディア項目。promptを指定しない場合は必須です。以下の組み合わせを使用してください。 |
metadata.input.media[].type | string | モード別 | 各項目に必須: first_frame、last_frame、reference_image、reference_video、reference_audio、file、またはlink。 |
metadata.input.media[].url | string | モード別 | 項目ごとに必須です。公開されたHTTP/HTTPS URLを指定します。対応する画像にはBase64データURIを使用できます。ネイティブのOSSリソースは、ルートのアカウントからアクセスできる必要があります。 |
metadata.parameters.resolution | string | いいえ | 480P、720P、または1080P。省略した場合、MixRouteが1080Pを明示的に補完します。 |
metadata.parameters.ratio | string | いいえ | adaptive(デフォルト)、16:9、4:3、1:1、3:4、または9:16。延長にはadaptiveを使用します。 |
metadata.parameters.duration | integer | いいえ | デフォルトは5です。元の動画がない場合: 2~30秒。動画がある場合: 元の動画の合計の長さと生成する動画の長さの合計は30秒以下である必要があります。-1を指定すると長さが自動的に選択されます。 |
metadata.parameters.audio | boolean | いいえ | デフォルトはtrue。falseにすると、音声トラックのない動画を生成します。 |
metadata.parameters.seed | integer | いいえ | -1または0~2147483647。-1または省略時はランダムなシードが選択されます。再現性は保証されません。 |
metadata.parameters.prompt_extend | boolean | いいえ | プロンプトの書き換え。デフォルトはtrueです。 |
metadata.parameters.watermark | boolean | いいえ | AIの透かしを追加します。デフォルトはfalse。 |
メディアの種類
| type | 制限 / 用途 |
|---|---|
first_frame / last_frame | それぞれ最大1つ。最初のフレームのみ、または最初と最後のフレームを指定します。最後のフレームだけを使用しないでください。 |
reference_image | 画像は最大10枚。 |
reference_video | 動画は最大5本、各1~15秒、合計最大15秒です。 |
reference_audio | 音声クリップは最大5つ、各1~15秒、合計で最大15秒。 |
file | 公開ドキュメント1つ。最大100 MBで、ページ形式の場合は最大50ページです。 |
link | ログインが不要で、公開アクセスできるウェブページを1つ指定します。 |
- フレームモード(first_frame/last_frame)は、reference_*、file、linkと併用できません。Wan 2.7 I2Vとは異なり、Wan 3.0のフレームモードには動作を駆動する音声を含めることができません。
- 参照画像、動画、音声は組み合わせて使用できます。fileとlinkは相互排他ですが、どちらもreference_*メディアと併用できます。種類ごとのすべての上限と、メディア項目全体で20件という上限を守ってください。
- メディアは、種類ごとの順序に従ってImage 1、Video 1、Audio 1、または图1、视频1、音频1として参照してください。
- 編集と延長には、reference_videoとそれに対応するプロンプトが必要です。延長にはratio=adaptiveを使用してください。編集では、adaptiveとduration=-1を指定すると元のフレーミングが保持され、モデルが長さを決定します。いずれの場合も、入力動画の長さと出力の長さの合計は30秒以内に収める必要があります。
Wan 3.0は、size、negative_prompt、template、img_url、first_frame_url、last_frame_url、audio_urlを使用しません。ゲートウェイは従来のフィールドを削除し、audio_urlをreference_audio項目に変換できます。新しいリクエストではinput.mediaを直接使用してください。
Wan 2.7
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
metadata.input.prompt | string | モード別 | 最大5000文字で、超過分は切り捨てられます。T2V/R2Vでは必須です。I2V/VideoEditでは、必須のメディアが存在する場合は任意です。 |
metadata.input.negative_prompt | string | いいえ | 除外する内容。最大500文字で、超過分は切り捨てられます。 |
metadata.input.audio_url | string | いいえ | T2Vのみ:生成を駆動する音声のURL。WAV/MP3、2~30秒、最大15 MB。長い音声はトリミングされ、短い音声では動画の末尾が無音になります。 |
metadata.input.media | object[] | モード別 | I2V、R2V、VideoEditでは必須です。モードごとに項目の種類と組み合わせが異なります。 |
metadata.input.media[].type | string | モード別 | メディア項目ごとに必須です。以下のモデル固有の型を使用してください。 |
metadata.input.media[].url | string | モード別 | メディア項目ごとに必須です。公開HTTP/HTTPS URLを指定します。画像入力はdata:image/…;base64,…にも対応しています。アクセス可能なネイティブのOSS参照にも対応しています。 |
metadata.input.media[].reference_voice | string | いいえ | R2Vのreference_image/reference_videoのみ: 声質の参照URL。WAV/MP3、1~10秒、最大15 MB。参照動画の声を上書きします。 |
metadata.parameters.resolution | string | いいえ | 720Pまたは1080P(デフォルト)。大文字と小文字を正確に指定してください。 |
metadata.parameters.ratio | string | いいえ | T2V/R2V/VideoEdit: 16:9、9:16、1:1、4:3、または3:4。T2V/R2Vのデフォルトは16:9です。R2Vでは最初のフレームが指定されている場合、ratioは無視されます。VideoEditでは省略時に元の動画に従います。I2Vは入力画像または動画に従い、この設定を使用しません。 |
metadata.parameters.duration | integer | いいえ | T2V/I2V: 2~15秒、デフォルトは5。R2V: 動画参照なしでは2~15秒、動画ありでは2~10秒、デフォルトは5。VideoEdit: 省略すると元の長さを維持します。2~10を指定すると先頭からその長さに切り詰めます。 |
metadata.parameters.audio_setting | string | いいえ | VideoEditのみ:auto(デフォルト)では、プロンプトに従って音声を処理します。originでは元の音声を保持します。 |
metadata.parameters.prompt_extend | boolean | いいえ | プロンプトの書き換え。デフォルトはtrueです。 |
metadata.parameters.watermark | boolean | いいえ | AIの透かしを追加します。デフォルトはfalse。 |
metadata.parameters.seed | integer | いいえ | 0~2147483647。省略時はランダムです。同じシードでも同じ出力になるとは限りません。 |
入力モード
| モデル | メディアの規則 |
|---|---|
wan2.7-t2v | promptと、任意のinput.audio_url。media配列は使用しません。 |
wan2.7-i2v | first_frame、first_frame+driving_audio、first_frame+last_frame、first_frame+last_frame+driving_audio、first_clip、またはfirst_clip+last_frame。各タイプは最大1回まで指定できます。 |
wan2.7-r2v | reference_image/reference_video項目は合計1〜5個で、任意でfirst_frameを1つ指定できます。reference_voiceは各参照項目に属し、独立したメディア種別ではありません。 |
wan2.7-videoedit | video項目(type=video)を必ず1つ指定し、必要に応じて最大4つのreference_image項目を追加できます。 |
Wan 2.6
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
metadata.input.prompt | string | モード別 | 最大1500文字で、超過分は切り捨てられます。T2V/R2Vでは必須、元画像を指定したI2Vでは任意です。R2Vの参照にはcharacter1、character2などを使用します。 |
metadata.input.negative_prompt | string | いいえ | 除外する内容。最大500文字で、超過分は切り捨てられます。 |
metadata.input.img_url | string | モード別 | I2Vのみ、必須: 最初のフレームの画像URL、または画像のBase64データURI。 |
metadata.input.audio_url | string | いいえ | T2V/I2Vのみ:生成を駆動する音声のURL。WAV/MP3、2~30秒、最大15 MB。 |
metadata.input.reference_urls | string[] | モード別 | R2Vのみ、必須: ソースURLを1~5件指定します。画像は最大5枚、動画は最大3本、全体で最大5件です。各ソースは1つの被写体を識別します。 |
metadata.input.reference_video_urls | string[] | いいえ | 非推奨の、動画のみを受け付けるR2V入力。動画は最大3本です。reference_urlsを優先し、両方の形式を混在させないでください。 |
metadata.parameters.size | string | いいえ | T2V/R2Vのみ:サイズ表のwidth*height。デフォルトは1920*1080。 |
metadata.parameters.resolution | string | いいえ | I2Vのみ:720Pまたは1080P(デフォルト)。アスペクト比は最初のフレーム画像に従います。 |
metadata.parameters.duration | integer | いいえ | T2V/I2VおよびI2V Flash: 2~15秒。R2VおよびR2V Flash: 2~10秒。デフォルトは5。 |
metadata.parameters.prompt_extend | boolean | いいえ | T2V/I2Vのみ: プロンプトの書き換え。デフォルトはtrueです。R2Vの設定ではありません。 |
metadata.parameters.shot_type | string | いいえ | single(デフォルト)またはmulti。T2V/I2Vではprompt_extend=trueの場合にのみ有効です。R2Vはこのフィールドを直接使用します。プロンプト内のショット指示より優先されます。 |
metadata.parameters.audio | boolean | いいえ | I2V Flash / R2V Flashのみ:true(デフォルト)は音声を生成し、falseは無音の出力を生成します。I2V Flashではfalseがinput.audio_urlより優先されます。標準の2.6モデル用の切り替え設定ではありません。 |
metadata.parameters.watermark | boolean | いいえ | AIの透かしを追加します。デフォルトはfalse。 |
metadata.parameters.seed | integer | いいえ | 0~2147483647。省略時はランダムです。同じシードでも同じ出力になるとは限りません。 |
T2V / R2Vのサイズ
| ティア | sizeで使用できる値 |
|---|---|
| 720P | 1280*720, 720*1280, 960*960, 1088*832, 832*1088 |
| 1080P | 1920*1080, 1080*1920, 1440*1440, 1632*1248, 1248*1632 |
メディアの制約
| 入力 | 制約 |
|---|---|
| 画像 | JPEG/JPG、透過なしのPNG、BMP、WebP。各辺240〜8000 px、最大20 MBです。Wan 3.0/2.7では、長辺と短辺の比率も8:1以下に制限されます。 |
| Wan 3.0の参照動画 | MP4/MOV。各動画1〜15秒、合計最大15秒、16 fps以上、各辺240〜4096 px、比率最大8:1、ファイルあたり最大100 MBです。 |
| Wan 2.7動画 | MP4/MOV。各辺240~4096 px、比率は最大8:1、最大100 MB。first_clip/VideoEditの元動画は2~10秒、R2Vの参照動画は1~30秒です。 |
| Wan 2.6 R2V video | reference_urls: MP4/MOV、1~30秒、最大100 MB。非推奨のreference_video_urls形式では2~30秒が必要です。 |
| 音声 | WAV/MP3、各ファイル最大15 MB。Wan 3.0の参照音声: 1~15秒、合計最大15秒。Wan 2.7のreference_voice: 1~10秒。T2Vの駆動音声 / I2Vのdriving_audio: 2~30秒。 |
| Wan 3.0のファイル | docx、doc、xlsx、xls、pptx、ppt、pdf、txt、key、pages、numbers、md。最大100 MB。PDF/Word/PowerPoint/Keynote/Pagesのドキュメントは最大50ページ。 |
リクエスト例
Wan 3.0 Video Prime
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan3.0-video-prime",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop."
},
"parameters": {
"resolution": "480P",
"duration": 2,
"audio": false
}
}
}'
Wan 3.0 Video
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan3.0-video",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop. Static camera, soft studio lighting."
},
"parameters": {
"resolution": "480P",
"ratio": "16:9",
"duration": 2,
"audio": false,
"prompt_extend": false,
"watermark": false
}
}
}'
Wan 2.7 T2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.7-t2v",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop. Static camera, soft studio lighting."
},
"parameters": {
"resolution": "720P",
"ratio": "9:16",
"duration": 2,
"prompt_extend": false,
"watermark": false
}
}
}'
Wan 2.7 I2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.7-i2v",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop. Static camera, soft studio lighting.",
"media": [
{
"type": "first_frame",
"url": "https://example.com/reference.png"
}
]
},
"parameters": {
"resolution": "720P",
"duration": 2,
"prompt_extend": false,
"watermark": false
}
}
}'
Wan 2.7 R2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.7-r2v",
"metadata": {
"input": {
"prompt": "Image 1 slowly rotates on a white tabletop. Static camera, soft studio lighting.",
"media": [
{
"type": "reference_image",
"url": "https://example.com/reference.png"
}
]
},
"parameters": {
"resolution": "720P",
"ratio": "1:1",
"duration": 2,
"watermark": false
}
}
}'
Wan 2.7 VideoEdit
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.7-videoedit",
"metadata": {
"input": {
"prompt": "Change the mug color to blue while preserving the original motion and white tabletop.",
"media": [
{
"type": "video",
"url": "https://example.com/source.mp4"
}
]
},
"parameters": {
"resolution": "720P",
"duration": 2,
"watermark": false
}
}
}'
Wan 2.6 T2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.6-t2v",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop. Static camera, soft studio lighting."
},
"parameters": {
"size": "1280*720",
"duration": 2,
"prompt_extend": false,
"watermark": false
}
}
}'
Wan 2.6 I2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.6-i2v",
"metadata": {
"input": {
"prompt": "A red ceramic mug slowly rotates on a white tabletop. Static camera, soft studio lighting.",
"img_url": "https://example.com/reference.png"
},
"parameters": {
"resolution": "720P",
"duration": 2,
"prompt_extend": false,
"watermark": false
}
}
}'
Wan 2.6 R2V
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.6-r2v",
"metadata": {
"input": {
"prompt": "character1 slowly rotates on a white tabletop. Static camera, soft studio lighting.",
"reference_urls": [
"https://example.com/reference.png"
]
},
"parameters": {
"size": "1280*720",
"duration": 2,
"watermark": false
}
}
}'
最初と最後のフレーム
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan2.7-i2v",
"metadata": {
"input": {
"prompt": "A closed gift box slowly opens, revealing a red ceramic mug.",
"media": [
{
"type": "first_frame",
"url": "https://example.com/first.png"
},
{
"type": "last_frame",
"url": "https://example.com/last.png"
}
]
},
"parameters": {
"resolution": "720P",
"duration": 5
}
}
}'
プロンプトなしのファイル入力
curl --request POST "https://api.mixroute.ai/v1/video/generations" \
--header "Authorization: Bearer $MIXROUTE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "wan3.0-video",
"metadata": {
"input": {
"media": [
{
"type": "file",
"url": "https://example.com/product.pptx"
}
]
},
"parameters": {
"resolution": "480P",
"duration": 5
}
}
}'
レスポンスとポーリング
送信するとMixRouteのtask_id(およびその別名id)が返されます。これは上流のタスクIDではありません。{
"id": "TASK_ID",
"task_id": "TASK_ID",
"object": "video",
"model": "wan3.0-video",
"status": "queued"
}
GET https://api.mixroute.ai/v1/video/generations/{task_id}
| ゲートウェイのステータス | 上流側のステータス | 操作 |
|---|---|---|
NOT_START / QUEUED | PENDING | 待機して再度照会してください。 |
IN_PROGRESS | RUNNING | ポーリングを続けてください。 |
SUCCESS | SUCCEEDED | data.result_urlを取得します。 |
FAILURE | FAILED / CANCELED / UNKNOWN | 処理を停止し、data.fail_reasonと上流のレスポンスを確認してください。 |
{
"code": "success",
"message": "",
"data": {
"task_id": "TASK_ID",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://example.com/generated.mp4",
"fail_reason": "",
"data": {
"request_id": "UPSTREAM_REQUEST_ID",
"output": {
"task_id": "UPSTREAM_TASK_ID",
"task_status": "SUCCEEDED",
"video_url": "https://example.com/generated.mp4"
},
"usage": {
"output_video_duration": 2,
"SR": 480,
"video_count": 1
}
}
}
}
result_urlはSUCCESSの後にのみ読み取ってください。失敗時、ゲートウェイがresult_urlにエラーテキストを格納することがあるため、必ずしもURLとは限りません。code=“success”のエンベロープは、照会が成功したことだけを意味し、生成の成功を意味するものではありません。
Pythonのワークフロー
import os
import time
from urllib.parse import quote, urlparse
import requests
BASE_URL = "https://api.mixroute.ai"
def create_video(session, payload):
response = session.post(BASE_URL + "/v1/video/generations", json=payload, timeout=120)
response.raise_for_status()
result = response.json()
task_id = result.get("task_id") or result.get("id")
if not task_id:
raise RuntimeError(result.get("message") or result)
return task_id
def wait_for_video(session, task_id, timeout_seconds=1200):
url = BASE_URL + "/v1/video/generations/" + quote(task_id, safe="")
deadline = time.monotonic() + timeout_seconds
delay = 15
while time.monotonic() < deadline:
remaining = deadline - time.monotonic()
if remaining <= 0:
break
try:
response = session.get(url, timeout=min(30, remaining))
except (requests.Timeout, requests.ConnectionError):
delay = min(delay * 2, 60)
else:
if response.status_code in (429, 500, 502, 503, 504):
delay = min(delay * 2, 60)
else:
response.raise_for_status()
result = response.json()
if result.get("code") not in (None, 0, 200, "0", "200", "success"):
raise RuntimeError(result.get("message") or result)
task = result.get("data") or {}
status = str(task.get("status", "")).upper()
if status == "SUCCESS":
video_url = task.get("result_url", "")
parsed = urlparse(video_url)
if parsed.scheme not in ("http", "https") or not parsed.netloc:
raise RuntimeError("Successful task has no valid video URL")
return task
if status in {"FAILURE", "FAILED", "EXPIRED", "CANCELED", "CANCELLED"}:
raise RuntimeError(task.get("fail_reason") or task)
if status not in {"QUEUED", "NOT_START", "PENDING", "IN_PROGRESS", "RUNNING"}:
raise RuntimeError("Unknown task status: " + status)
delay = 15
remaining = deadline - time.monotonic()
if remaining <= 0:
break
time.sleep(min(delay, remaining))
raise TimeoutError("Video task is still pending; keep its task ID and query it later")
if __name__ == "__main__":
payload = {
"model": "wan3.0-video",
"metadata": {
"input": {"prompt": "A red ceramic mug slowly rotates on a white tabletop."},
"parameters": {"resolution": "480P", "ratio": "16:9", "duration": 2, "audio": False},
},
}
with requests.Session() as session:
session.headers["Authorization"] = "Bearer " + os.environ["MIXROUTE_API_KEY"]
task_id = create_video(session, payload)
print("task_id:", task_id, flush=True)
task = wait_for_video(session, task_id)
print(task["result_url"])
print(task.get("data", {}).get("usage", {}))