Vidu Q3 動画生成
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"image_urls": [
"<string>"
],
"url": "<string>",
"video_list": [
{}
],
"duration": 123,
"resolution": "<string>",
"audio": true,
"watermark": true,
"seed": 123,
"metadata": {}
}
'import requests
url = "https://toapis.com/v1/videos/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"image_urls": ["<string>"],
"url": "<string>",
"video_list": [{}],
"duration": 123,
"resolution": "<string>",
"audio": True,
"watermark": True,
"seed": 123,
"metadata": {}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
image_urls: ['<string>'],
url: '<string>',
video_list: [{}],
duration: 123,
resolution: '<string>',
audio: true,
watermark: true,
seed: 123,
metadata: {}
})
};
fetch('https://toapis.com/v1/videos/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://toapis.com/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'image_urls' => [
'<string>'
],
'url' => '<string>',
'video_list' => [
[
]
],
'duration' => 123,
'resolution' => '<string>',
'audio' => true,
'watermark' => true,
'seed' => 123,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://toapis.com/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://toapis.com/v1/videos/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_bodyVidu Q3
Vidu Q3 動画生成
Vidu Q3 動画モデルで非同期動画タスクを生成します。
POST
/
v1
/
videos
/
generations
Vidu Q3 動画生成
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"image_urls": [
"<string>"
],
"url": "<string>",
"video_list": [
{}
],
"duration": 123,
"resolution": "<string>",
"audio": true,
"watermark": true,
"seed": 123,
"metadata": {}
}
'import requests
url = "https://toapis.com/v1/videos/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"image_urls": ["<string>"],
"url": "<string>",
"video_list": [{}],
"duration": 123,
"resolution": "<string>",
"audio": True,
"watermark": True,
"seed": 123,
"metadata": {}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
image_urls: ['<string>'],
url: '<string>',
video_list: [{}],
duration: 123,
resolution: '<string>',
audio: true,
watermark: true,
seed: 123,
metadata: {}
})
};
fetch('https://toapis.com/v1/videos/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://toapis.com/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'image_urls' => [
'<string>'
],
'url' => '<string>',
'video_list' => [
[
]
],
'duration' => 123,
'resolution' => '<string>',
'audio' => true,
'watermark' => true,
'seed' => 123,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://toapis.com/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://toapis.com/v1/videos/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"image_urls\": [\n \"<string>\"\n ],\n \"url\": \"<string>\",\n \"video_list\": [\n {}\n ],\n \"duration\": 123,\n \"resolution\": \"<string>\",\n \"audio\": true,\n \"watermark\": true,\n \"seed\": 123,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body中国本土のユーザー向け: 中国本土のユーザーは
https://toapis.cn を API エンドポイント(Base URL)としてご利用ください。本ドキュメント内の例では https://toapis.com を https://toapis.cn に置き換えてください。- 非同期タスク API。送信後に統一された
generation.taskを返します - 公開モデル:
viduq3-pro-fast、viduq3-ad、viduq3-drama、viduq3-mix
viduq3-ad、viduq3-drama、viduq3-mix は純粋なテキストから動画生成モデルではありません。prompt のみを送信しないでください。参照素材が必要です。そうでない場合、上流は通常 InvalidParameter を返します。例: Missing required field 'subjects' in request body。認証
string
必須
すべてのエンドポイントで Bearer Token 認証が必要です。
Authorization: Bearer YOUR_API_KEY
対応モデル
| モデル | 生成タイプ | 推奨入力 | 推奨解像度 |
|---|---|---|---|
viduq3-pro-fast | 先頭フレーム画像から動画生成 | 参照画像 1 枚 | 720P / 1080P |
viduq3-ad | 参照動画生成 | 参照動画 + 参照画像 | 720P / 1080P |
viduq3-drama | ドラマ型参照動画生成 | 参照動画 + 参照画像 | 1080P |
viduq3-mix | 混合参照生成 | 参照動画 + 参照画像 | 720P / 1080P |
リクエストパラメータ
string
必須
次の 4 つの公開モデル名のみ対応しています:
viduq3-pro-fastviduq3-adviduq3-dramaviduq3-mix
string
必須
プロンプト。参照生成モデルでも
prompt を常に入力し、カメラワーク、動き、テンポ、スタイルを記述することをおすすめします。string[]
参照画像 URL のリスト。
viduq3-pro-fast: 1 枚目の画像のみ使用され、先頭フレームになりますviduq3-ad/viduq3-drama/viduq3-mix: 被写体/スタイルの参照画像を 1 枚以上推奨
input_referencereference_imagesimagesimage
string
参照動画 URL。
viduq3-ad / viduq3-drama / viduq3-mix のみ推奨。メインの参照動画 1 本を渡すのと同じ意味になります。array
参照動画リスト。
viduq3-ad / viduq3-drama / viduq3-mix のみ使用。各項目は以下をサポートします:video_urlrefer_type(任意)keep_original_sound(任意)
integer
デフォルト:5
動画の長さ (秒)。デフォルト
5。string
デフォルト:"720P"
解像度。
720P、1080P をサポート。推奨:viduq3-dramaは1080Pを優先
boolean
音声を生成するかどうか。現在のサーバー側デフォルト動作:
viduq3-pro-fast: デフォルトtrueviduq3-ad: デフォルトtrueviduq3-mix: デフォルトtrueviduq3-drama: 明示的に値を指定し、デフォルトに依存しないでください
boolean
デフォルト:false
透かしを追加するかどうか。
integer
ランダムシード。
object
拡張パラメータ。上流の動画リクエスト構造に従って透過的に渡されます。一般的な使い方:
metadata.input.first_frame_urlmetadata.input.last_frame_urlmetadata.input.audio_urlmetadata.parameters.audiometadata.parameters.watermark
viduq3-ad / viduq3-drama / viduq3-mix は上流側で被写体の構造化入力 (例: subjects) を要求する場合があります。プレーンテキストの prompt のみのリクエストは通常そのまま失敗します。入力ルール
1. viduq3-pro-fast
- 先頭フレーム画像から動画生成するモデル
- 少なくとも 1 枚の画像が必要
- 複数画像が渡された場合、現在は 1 枚目のみ使用
- 「静止画を動かす」シーンに最適
2. viduq3-ad / viduq3-drama / viduq3-mix
- 参照動画生成モデル。prompt のみの呼び出しは推奨しません
- 最低限推奨する入力:
- 参照動画 1 本:
urlまたはvideo_list - 参照画像 1 枚:
image_urlsまたは互換の画像フィールド
- 参照動画 1 本:
- 被写体/参照素材が不足している場合、上流は以下を返すことがあります:
InvalidParameterMissing required field 'subjects' in request body
リクエスト例
viduq3-pro-fast 先頭フレーム画像から動画生成
curl --request POST \
--url 'https://toapis.com/v1/videos/generations' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-pro-fast",
"prompt": "让角色自然抬头微笑,镜头轻微推进,保留原画风格。",
"image_urls": [
"https://example.com/first-frame.png"
],
"duration": 5,
"resolution": "720P",
"audio": true,
"watermark": false
}'
viduq3-ad 参照動画生成
curl --request POST \
--url 'https://toapis.com/v1/videos/generations' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-ad",
"prompt": "延续参考视频中的节奏与镜头语言,让主角走入商场中庭并面向镜头挥手。",
"url": "https://example.com/reference-video.mp4",
"image_urls": [
"https://example.com/subject-reference.png"
],
"duration": 5,
"resolution": "1080P",
"audio": true
}'
viduq3-drama ドラマ型参照生成
curl --request POST \
--url 'https://toapis.com/v1/videos/generations' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-drama",
"prompt": "保持角色一致性,情绪逐步递进,镜头由中景切到近景。",
"video_list": [
{
"video_url": "https://example.com/reference-scene.mp4"
}
],
"image_urls": [
"https://example.com/character.png"
],
"duration": 5,
"resolution": "1080P",
"watermark": false
}'
viduq3-mix 混合参照生成
curl --request POST \
--url 'https://toapis.com/v1/videos/generations' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-mix",
"prompt": "融合参考视频动作与参考图角色设定,生成一个更具广告感的过场镜头。",
"url": "https://example.com/reference-action.mp4",
"image_urls": [
"https://example.com/brand-character.png"
],
"duration": 5,
"resolution": "720P",
"audio": true
}'
送信成功レスポンス
{
"id": "vid_01KABCDEF1234567890",
"object": "generation.task",
"model": "viduq3-pro-fast",
"status": "queued",
"progress": 0,
"created_at": 1784169600
}
タスク照会
GET /v1/videos/generations/{task_id}
処理中:
{
"id": "vid_01KABCDEF1234567890",
"object": "generation.task",
"model": "viduq3-pro-fast",
"status": "in_progress",
"progress": 60,
"created_at": 1784169600
}
{
"id": "vid_01KABCDEF1234567890",
"object": "generation.task",
"model": "viduq3-pro-fast",
"status": "completed",
"progress": 100,
"created_at": 1784169600,
"completed_at": 1784169660,
"expires_at": 1784256060,
"result": {
"type": "video",
"data": [
{
"url": "https://files.toapis.com/videos/vid_01KABCDEF1234567890.mp4",
"format": "mp4"
}
]
}
}
{
"id": "vid_01KABCDEF1234567890",
"object": "generation.task",
"model": "viduq3-ad",
"status": "failed",
"progress": 100,
"created_at": 1784169600,
"completed_at": 1784169620,
"error": {
"code": "InvalidParameter",
"message": "Missing required field 'subjects' in request body"
}
}
補足
- 送信後、ToAPIs が上流タスクのステータスを一括でポーリングし、標準の動画タスク結果を返します。
viduq3-pro-fastは現在最も安定した接続形態で、先頭フレーム画像から動画生成に適しています。viduq3-ad、viduq3-drama、viduq3-mixは参照素材の要件が厳しいため、接続前に上記の例に従って完全な素材を用意し、prompt のみは送らないでください。