Генерация видео 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 в качестве эндпоинта (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 — не чистые модели text-to-video. Не передавайте только prompt; требуется хотя бы референс-материал. Иначе апстрим обычно возвращает InvalidParameter, например Missing required field 'subjects' in request body.Аутентификация
string
обязательно
Все эндпоинты требуют Bearer Token аутентификацию.
Authorization: Bearer YOUR_API_KEY
Поддерживаемые модели
| Модель | Тип генерации | Рекомендуемый ввод | Рекомендуемое разрешение |
|---|---|---|---|
viduq3-pro-fast | Image-to-video по первому кадру | 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: используется только первое изображение в качестве первого кадраviduq3-ad/viduq3-drama/viduq3-mix: рекомендуется одно или несколько референсных изображений субъекта/стиля
input_referencereference_imagesimagesimage
string
URL референсного видео.Рекомендуется только для
viduq3-ad / viduq3-drama / viduq3-mix. Эквивалентно передаче одного основного референс-видео.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
- Модель image-to-video по первому кадру
- Требуется минимум 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 image-to-video по первому кадру
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— наиболее стабильная форма интеграции на сегодня, подходит для image-to-video по первому кадру.viduq3-ad,viduq3-dramaиviduq3-mixпредъявляют более строгие требования к референс-материалам. Перед интеграцией подготовьте полный набор материалов по примерам выше и не передавайте только prompt.