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: 첫 번째 이미지만 사용하여 첫 프레임으로 사용viduq3-ad/viduq3-drama/viduq3-mix: 피사체/스타일 참조 이미지 1장 이상 권장
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
- 첫 프레임 이미지-비디오 모델입니다
- 이미지를 최소 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 만 전달하지 마세요.