Vidu Video
Vidu Q3 (viduq3-pro / viduq3-turbo) is the latest generation of Shengshu Technology's Vidu video model family. It supports text-to-video and image-to-video (single first-frame image) with durations of 1–16 seconds and audio-video co-generation enabled by default (dialogue and sound effects generated directly, at no extra charge). It uses the unified POST /v1/videos endpoint and returns an OpenAI Video style response (id / status / metadata.url), sharing the same task polling mechanism as other video models.
Billing
Vidu Q3 is billed by generated duration (seconds) × resolution-tier unit price; 540P / 720P / 1080P have different unit prices, and audio-video co-generation is free of extra charge. When size is omitted, billing follows 720P (the default tier). Exact unit prices and billing expressions are shown on the corresponding model card in the console "Model Plaza" (prices are intentionally omitted from this documentation).
Endpoints
- Create task:
POST $URL/v1/videos - Query task:
GET $URL/v1/videos/{task_id}
Supported Models
| Model name | Positioning | Resolutions | Duration |
|---|---|---|---|
viduq3-pro | Quality-first, better visuals and consistency | 540P / 720P / 1080P | 1–16 s |
viduq3-turbo | Speed-first, faster and more economical | 540P / 720P / 1080P | 1–16 s |
Within the same model name, the resolution tier is selected via the
sizerequest parameter (see "Parameters" below).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | yes | viduq3-pro / viduq3-turbo |
prompt | string | yes | Video description, up to 5000 characters; recommend specifying subject, action, scene, and camera movement |
size | string | no | Resolution tier: 540p / 720p / 1080p, defaults to 720P |
duration | integer | no | Output duration in seconds, range 1–16, defaults to 5 |
image | string | no | First-frame image URL (single, publicly accessible, for image-to-video) |
metadata.duration | number | no | Advanced override: output duration (seconds), takes precedence over top-level duration |
metadata.resolution | string | no | Advanced override: directly specify the resolution tier |
metadata.seed | integer | no | Random seed for reproducibility |
Capability scope
Vidu Q3 currently supports text-to-video and image-to-video with a single first frame. First/last-frame generation (2 images) and multi-image reference generation are not yet available — do not pass 2 images, otherwise the task will fail.
Request Example
Text-to-video
# 1. Create a video task (720P, 5 seconds)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "viduq3-pro",
"prompt": "Ultra-realistic fashion film style, an astronaut walking through dense fog, slow dolly-in",
"duration": 5,
"size": "720p"
}'
# 2. Query task status (replace {task_id} with the id returned above)
curl $URL/v1/videos/{task_id} \
-H "Authorization: Bearer $YOUR_API_KEY"import time
import requests
url = "$URL/v1/videos"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"model": "viduq3-turbo",
"prompt": "Ultra-realistic fashion film style, an astronaut walking through dense fog",
"duration": 5,
"size": "720p",
}
task = requests.post(url, json=payload, headers=headers).json()
task_id = task["id"]
while True:
result = requests.get(f"{url}/{task_id}", headers=headers).json()
if result["status"] in ("completed", "failed"):
break
time.sleep(8)
print(result)Image-to-video (first frame)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "viduq3-turbo",
"prompt": "The astronaut turns to face the camera and waves",
"image": "https://example.com/first_frame.png",
"duration": 5,
"size": "1080p"
}'First-frame image requirements
Publicly accessible PNG / JPEG / WEBP URLs are supported, up to 50 MB, with an aspect ratio between 1:4 and 4:1. The upstream server fetches the image itself; intranet or local addresses will fail.
Response Fields
Create and query return the same structure (OpenAI Video style):
| Field | Type | Description |
|---|---|---|
id | string | Task ID |
status | string | Task status (see below) |
metadata.url | string | Generated video URL (returned only when completed) |
progress | integer | Generation progress, 0–100 |
completed_at | integer | Completion timestamp (seconds, only when completed) |
error.message | string | Failure reason (only when failed) |
Task Status
| Status | Meaning | Suggested action |
|---|---|---|
queued | Queued | Keep polling |
in_progress | Generating | Keep polling |
completed | Succeeded | Get the video URL from metadata.url; download and save it promptly |
failed | Failed | Check error.message |
Poll every 5–10 seconds
Download and re-host the video as soon as the task completes: the video URL expires after a while.
Response Example
{
"id": "task_xxxxxxxx",
"status": "in_progress",
"progress": 30
}On completion:
{
"id": "task_xxxxxxxx",
"status": "completed",
"progress": 100,
"metadata": {
"url": "https://cdn.example.com/.../result.mp4"
},
"completed_at": 1788769182
}FAQ
Q: How do I write a better prompt?
Cover four elements: subject (who/what), action (what is happening), scene (where), and camera (how it moves, e.g. dolly-in / orbit / overhead). Vidu Q3 generates audio as well — you can describe the narration, dialogue, or sound effects you expect.
Q: Does the generated video have sound?
Yes. Vidu Q3 enables audio-video co-generation by default (dialogue + sound effects) at no extra charge.
Q: How long does a task take?
It depends on duration and resolution — 720P 5 seconds usually completes within 1–2 minutes; 1080P with longer durations takes more. Poll the query endpoint for the final status; tasks unfinished after 20 minutes are marked failed automatically.
Q: Do generated video links expire?
Yes. The video URL expires after some time — download and re-host it promptly once the task completes.
Q: Why does passing 2 images fail?
First/last-frame generation is not yet available. Pass a single first-frame image (image) for image-to-video, or no image for text-to-video.
