Vidu: Q2 Text-to-Video
Vidu Q2は、テキストによるシーンの指示から動画を生成します。長さは1–10秒、出力は540p、720p、1080pで、五つのアスペクト比に対応します。このviduq2プロファイルでは、プロンプトでスタイルと動きを指定し、非同期タスクから結果を取得します。
モデルについて
この説明はモデルの機能を紹介するものです。Ailootで利用できる入力、出力、オプションは、選択したメソッドごとに以下に記載されています。
Vidu Q2は、viduq2で選ぶテキストから動画を生成するプロファイルを通じて、文章で描写したシーンから動画を生成します。必須入力は、正確なモデルIDとシーンを説明するプロンプトです。外観と動きを文章で指定できる短い商品コンセプト、場所の全景、人物の動作に使います。この設定済みメソッドはテキストから動画を生成するもので、その説明はセレクターに別途の参照画像モードや動画編集モードを割り当てるものではありません。
画面に見せる流れを中心に指示を組み立てます。被写体、場所、動作、ショットの大きさ、カメラの動き、最後の構図を指定します。商品コンセプトでは、卓上の物、素材を横切る光、認識しやすい細部で終わるゆっくりしたカメラの寄りを説明します。場所のシーンでは、注目点に近づく前に周囲の環境を示します。意図した結末の時間を確保できるよう、動作を選んだクリップの長さに合わせます。
プロンプトの上限は2,000文字です。重要な被写体と動作を先に書き、望む結果に影響する照明、素材、環境、カメラの細部を追加します。ビジュアルスタイルはプロンプト内で指定します。Q2専用ガイドでは、個別のstyleとmovement_amplitudeパラメーターはこのモデルには作用しないと説明されています。そのためgeneralまたはanimeのプリセットや動作の振幅設定は、明確なシーンの説明の代わりにはなりません。
モデル固有の長さ設定は、一〜十秒の整数秒を受け付けます。Q2固有の解像度の選択肢は540p、720p、1080pで、文書上の既定値は720pです。動作と用途に合わせ、長さと解像度を一緒に選びます。短い見せ場と長時間の動きでは必要なタイミングが異なります。要求する長さを増やす場合は、同じ指示を単に引き延ばすのではなく、画面の流れに役立つものにします。最終配置の準備では、返されたクリップの実際の寸法と長さを確認します。
文書化されたaspect_ratioの選択肢は16:9、9:16、3:4、4:3、1:1で、既定値は16:9です。ガイドには、Q2ファミリー向けに3:4と4:3が明記されています。生成前に画角を選び、それに合う構図を説明します。縦長では主な被写体を見やすく保ち、横長では幅を周囲の環境に使います。終わりの画面は、予定するページやプレゼンテーション、後から加えるキャプションに十分対応できる、明瞭なものにします。
seedフィールドは変化を制御します。省略するか0を指定するとランダム値が選ばれ、非ゼロ値を指定すると、再現可能な生成向けに文書化された固定seedの設定が選ばれます。版を比較するときは、返されたseedをプロンプトと設定とともに保持します。共通の操作説明には、Q3モデル専用のaudioとoff_peak制御も記載されています。これらのQ3設定は、このQ2プロファイルに割り当てられた機能ではありません。文書化されたテキスト入力と動画出力を基にリクエストを組み立てます。
生成は非同期です。送信時にはtask_idと初期状態が返り、新規作成タスクにはcreatedが使われます。処理を追跡する間は、このタスクIDを保持します。文書の結果照会は、成功した結果にstate=successを使い、creations配列を返します。各項目の動画URLはcreations[].urlにあります。タスクが常に一つだけの生成物を含むと考えず、返されたすべての動画を保存します。
結果の文書には、実際の動画の長さ、fps、解像度の幅と高さも報告されると記載されています。例のフレームレートや寸法を固定のQ2仕様と見なさず、報告された値を完成クリップとともに保持します。タスク作成レスポンスには、リクエスト設定とともにcredits値が含まれます。各動画とその生成設定の関係を保てるよう、報告されたタスクのメタデータと完了したタスクIDを結果とともに保存します。
元の指示と照らして、シーケンス全体の被写体の外観、物の形、動作方向、カメラの連続性、意図した最後の画面を確認します。改訂では、指示に合わなかった具体的な細部を示し、シーンのうまくいった部分を保ちます。後で実際の成果物を基に比較できるよう、プロンプト、正確なセレクター、設定、タスクID、完成動画を一緒に保管します。
Ailoot Ultra · 動画 POST /v1/videos viduq2
viduq2はじめに
Vidu Q2は、テキストによるシーンの指示から動画を生成します。長さは1–10秒、出力は540p、720p、1080pで、五つのアスペクト比に対応します。このviduq2プロファイルでは、プロンプトでスタイルと動きを指定し、非同期タスクから結果を取得します。
- 対応する入力
- テキスト
- 結果
- 動画
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · 動画 POST /v1/videos
- 入力の種類
text- 出力の種類
video
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 viduq2 | デフォルト— |
フィールドprompt | 種類string | 要件必須 | 値と制限 条件: 生成するシーンを記述してください。文書に記載された上限は2000文字です。Ailootは文字列が空でないことを確認し、テキストを保持します。 | デフォルト— |
フィールドduration | 種類integer | 要件任意 | 値と制限 最小値: 1 最大値: 10 条件: viduq2固有の説明では、長さは1–10秒の整数で指定します。モデル固有のデフォルトの長さは文書に記載されていません。 単位: 秒 | デフォルト— |
フィールドseed | 種類string | 要件任意 | 値と制限 条件: ランダムにするには、省略するか文字列"0"を送信してください。ゼロ以外のseedを指定すると、文書に記載された固定seedの動作が選択されます。数値範囲は指定されていません。 | デフォルト— |
フィールドaspect_ratio | 種類string | 要件任意 | 値と制限 16:9, 9:16, 3:4, 4:3, 1:1 | デフォルト16:9 |
フィールドresolution | 種類string | 要件任意 | 値と制限 540p, 720p, 1080p 条件: viduq2固有の一覧では、1–10秒に対するこれらの料金区分が記載されています。共通の列挙値と表には360pも記載されていますが、その適用について一覧との矛盾があるため、ここでは断定しません。 | デフォルト720p |
フィールドstyle | 種類string | 要件任意 | 値と制限 general, anime 条件: 共通リクエストではこのフィールドを受け付けますが、文書にはviduq2では効果がないと明記されています。 | デフォルトgeneral |
フィールドmovement_amplitude | 種類string | 要件任意 | 値と制限 auto, small, medium, large 条件: 共通リクエストではこのフィールドを受け付けますが、文書にはq2モデルでは効果がないと明記されています。 | デフォルトauto |
入力素材の組み合わせ
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, prompt |
パラメータoptional | 仕様duration, seed, aspect_ratio, resolution, style, movement_amplitude |
パラメータmaterial_types | 仕様text |
パラメータadditional_properties | 仕様true |
パラメータvalidation_scope | 仕様Ailootはmodel/promptの文字列が空でないことを検証します。以下の任意項目の型と上限は、文書に記載されたリクエスト契約です。その他のリクエストフィールドは、選択したモデル向けに保持されます。 |
メソッドのエイリアス: /v1/videos/generations
ライフサイクル: submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
作成は一度だけ行い、返された公開idとpolling_urlを保持してください。
元の操作をポーリングして状態を読み取ってください。successになり、所有するcreations[].urlの結果が得られた時点で完了とみなします。
返された所有動画のURLをすべてダウンロードしてください。この例から、出力数、長さ、フレームレートが固定されていると判断しないでください。
料金
最終料金の計算方法
表示料金は生成前の費用の見積もりです。最終請求額は、元の生成処理に記録された費用から計算されます。実測された出力時間や予測数量が、そのまま最終的な課金数量になるわけではありません。
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 未指定 高速モードが選択されている場合
- Flex モード
- 未指定 flex モードが選択されている場合
- 最大推論量
- 未指定 推論量が最大で、調整に既定値(default)を使用する場合
比較用の推定料金
設定別の価格
各料金を表示された条件と照合してください。選択肢となる設定の各組には、いずれか1つの料金を適用します。
| 設定 | 料金表 | 予測数量 | 料金 |
|---|---|---|---|
| 設定基本トークン料金 | 料金表基本料金 | 予測数量— | 料金 入力 · 入力トークン · 比較専用の見積もり — / 1K トークン 出力 · 出力トークン · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ読み取り · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ書き込み · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ書き込み、1時間 · 比較専用の見積もり — / 1K トークン |
| 設定生成費用の見積もり | 料金表— | 予測数量生成1回分の概算 | 料金 出力 · 推定生成コスト · 比較専用の見積もり $5.12 生成前の見積もり この見積もりは追加料金ではなく、完了した生成処理に対する固定料金でもありません。 |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · 動画
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
cat > request.json <<'JSON_REQUEST'
{"model":"viduq2","prompt":"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene."}
JSON_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_POLL'
import json
from pathlib import Path
from urllib.parse import quote,urljoin,urlsplit
r=json.loads(Path("result.json").read_text())
i=r.get("id")
if not isinstance(i,str) or not i:raise SystemExit("Keep original response/headers/id; do not resubmit creation.")
u=urljoin("https://api.ailoot.ai",r.get("polling_url") or "/v1/videos/"+quote(i,safe=""))
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/videos/"):raise SystemExit("Use the actual Ailoot lookup path.")
Path("poll-url.txt").write_text(u)
PY_POLL
curl --fail-with-body --silent --show-error "$(cat poll-url.txt)" -H "Authorization: Bearer $AILOOT_API_KEY" -D status-headers.txt -o status.json
set -eu
python3 - <<'PY_ASSETS'
import json
from pathlib import Path
from urllib.parse import urlsplit
r=json.loads(Path("status.json").read_text())
if r.get("state")!="success":raise SystemExit("Poll the same original job until its owned result is returned.")
creations=r.get("creations")
if not isinstance(creations,list) or not creations:raise SystemExit("No completed video creations.")
urls=[]
for item in creations:
value=item.get("url") if isinstance(item,dict) else None
values=[value] if isinstance(value,str) else value
if not isinstance(values,list) or not values:raise SystemExit("No completed video URL.")
for u in values:
if not isinstance(u,str):raise SystemExit("Invalid returned URL.")
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/media/assets/") or not p.path.endswith("/content") or not p.query:raise SystemExit("Wait for the actual Ailoot-owned signed result.")
urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_ASSETS
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" -o "video-${index}.bin"
index=$((index + 1))
done < asset-urls.txt
結果を受け取って保存
Ailoot Ultra · 動画
JSONにはネイティブの状態とcreations配列が保持され、公開id/provider_task_id/polling_urlが追加されます。選択された動画URLは公開前には空で、完了後にAilootが所有する署名付きURLになります。
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
完了した結果をすべて保存
完了した動画や返されたファイルをすべて保存し、実際に返されたすべてのアセットURLから取得してください。
creations[].urlに実際に返されたすべてのURLをダウンロードしてください。コンテンツのインデックスは、実際に返された出力の一つを識別します。
元のレスポンスを確認する場合
固定された宣言には、最終的な失敗状態の列挙がありません。未認識の状態やresult_pending_checkエラーがある場合は、元のレスポンス/ヘッダー/idを保持し、同じ操作を確認してください。結果不明の作成リクエストは決して再送信しないでください。
レスポンスのフィールド
| フィールド | 種類 | 意味 |
|---|---|---|
フィールドid | 種類string | 意味返された公開Ailootタスクまたは操作の識別子。 |
フィールドprovider_task_id | 種類string | 意味公開idとは別の、元のタスク識別子。 |
フィールドpolling_url | 種類string | 意味元のタスクに対して返されたAilootの照会パス。 |
フィールドtask_id | 種類string when supplied | 意味作成レスポンスに含まれる元の識別子。 |
フィールドstate | 種類string when supplied | 意味ネイティブのタスク状態。固定された保留状態はcreated、完了状態はsuccessです。 |
フィールドerr_code | 種類string when supplied | 意味タスクの診断情報。保存された仕様には、エラーコードの列挙リストは宣言されていません。 |
フィールドcreations[].url | 種類string|string[] | 意味選択された完了済み動画の各URLは、Ailootが所有する署名付きURLに置き換えられます。 |
フィールドcreations[].video.duration | 種類number when supplied | 意味返された動画の長さ。実際に完了した結果を確認してください。 |
フィールドcreations[].video.fps | 種類integer when supplied | 意味返されたフレームレート。固定のフレームレートは保証しません。 |
フィールドcreations[].video.resolution.width | 種類integer when supplied | 意味返された出力の幅(ピクセル)。 |
フィールドcreations[].video.resolution.height | 種類integer when supplied | 意味返された出力の高さ(ピクセル)。 |
エラーと次の手順
| レスポンス | 条件 | 次の手順 |
|---|---|---|
レスポンス400 · invalid_request_error | 条件JSON/モデルが無効、必須文字列が未指定または空、あるいはコンテンツのインデックスが無効です。 | 次の手順 |
レスポンス401 · authentication_error | 条件Ailoot APIキーが無効です。 | 次の手順 |
レスポンス403 · permission_error | 条件このAPIキーのグループには、このメディアルートを利用する権限がありません。 | 次の手順 |
レスポンス404 · not_found_error | 条件元のタスクまたは要求された出力が存在しないか、同じユーザー/APIキー/グループの所有物ではありません。 | 次の手順 |
レスポンス502 · result_pending_check | 条件元の送信またはステータスが不完全、あるいは照合できません。元のIDを保持し、再送信しないでください。 | 次の手順 |
レスポンス503 · result_pending_check | 条件元の紐付け、ルート、または所有メディアを引き続き確認しています。その元の操作の確認を続けてください。 | 次の手順 |
レスポンス503 · server_error | 条件メディアサービス、または元のタスクの保存領域を利用できません。 | 次の手順 |
エイリアス
モデルのエイリアス
Ailoot Ultra viduq2
メソッドパスのエイリアス
/v1/videos/generations
関連する呼び出し用ID
FAQ · Vidu: Q2 Text-to-Video
- 利用できる入力と結果は何ですか?
POST /v1/videos·viduq2:text→video- リクエストはどの項目を使用しますか?
POST /v1/videos·viduq2:model,prompt,duration,seed,aspect_ratio,resolution,style,movement_amplitude- どの制限が適用されますか?
POST /v1/videos·viduq2:duration.minimum:1;duration.maximum:10