Vidu Q4 API
Vidu Q4 Preview video by ShengShu with sound, from one frame or from references: 3 to 16 seconds, up to 4K. Up to 15 pictures in references, five aspect ratios and up to three voice recordings for the characters. Preview means a trial version: Vidu may still change how it works and what it costs.
For AI assistants:Download .mdAll documentation .mdOpen as text
Connect in three steps
- Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
- Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
- Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.
Ready-to-use code
Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.
curl -X POST "https://api.cyhub.ai/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "vidu",
"settings": {
"mode": "i2v",
"prompt": "Космонавт машет рукой, камера плавно поднимается вверх",
"version": "q4",
"resolution": "1080p",
"duration": 5,
"image_urls": [
"https://example.com/astronaut.jpg"
]
}
}'
curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"import time
import requests
API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
body = {
"model": "vidu",
"settings": {
"mode": "i2v",
"prompt": "Космонавт машет рукой, камера плавно поднимается вверх",
"version": "q4",
"resolution": "1080p",
"duration": 5,
"image_urls": [
"https://example.com/astronaut.jpg",
],
},
}
response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
time.sleep(5)
task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const body = {
"model": "vidu",
"settings": {
"mode": "i2v",
"prompt": "Космонавт машет рукой, камера плавно поднимается вверх",
"version": "q4",
"resolution": "1080p",
"duration": 5,
"image_urls": [
"https://example.com/astronaut.jpg"
]
}
};
async function main() {
let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
if (!response.ok) throw new Error(await response.text());
let task = await response.json();
while (task.status === "queued" || task.status === "running") {
await new Promise((resolve) => setTimeout(resolve, 5000));
response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
task = await response.json();
}
console.log(task.status, task.result);
}
main();Price before the run
Prices as of 17.10.2026: from 20 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| Animate a frame | from 20 ₽ |
| Turbo (faster, cheaper) tier = turbo | from 20 ₽ |
| Pro (more accurate) tier = pro | from 20 ₽ |
| From references | from 20 ₽ |
| Turbo (faster, cheaper) tier = turbo | from 20 ₽ |
| Pro (more accurate) tier = pro | from 20 ₽ |
| Mix (best picture) tier = mix | from 20 ₽ |
Send the same settings to POST /v1/price: the response shows the price of the run without charging you.
curl -X POST "https://api.cyhub.ai/v1/price" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "vidu",
"settings": {
"mode": "i2v",
"prompt": "Космонавт машет рукой, камера плавно поднимается вверх",
"version": "q4",
"resolution": "1080p",
"duration": 5,
"image_urls": [
"https://example.com/astronaut.jpg"
]
}
}'amount_minor: the price of the run in minor units (kopecks for rubles)currency: the wallet currencyavailable_minor: how much your balance has for new tasks right now
Modes
Each mode has its own parameters and examples. The mode is set by the mode field.
- Animate a frame
mode = i2v - From references
mode = r2v
Animate a frame
The model sets a picture in motion by the description, keeping what is on it. The video takes the aspect ratio of the picture.
Value of the mode field: i2v
This page is about Vidu Q4: send version = q4. Without the version field the task runs on q3.
Price in this mode from 20 ₽.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptRequiredWhat happens in the frame, who is in it, how the camera moves, what can be heard. Lines of the characters can be written right in the description, the lips will match.
Type: StringMinimum characters: 1Maximum characters: 5000audioOptionalWith sound (speech, effects and ambience) or silent. Sound costs nothing extra.
Type: StringAllowed values:onoffDefault:"on"What the options mean
The model generates the sound itself in the same pass: lip-synced speech, effects and ambience. It is not billed separately.
Silent: if you are going to add your own track.versionOptionalModel version. Q3 offers a choice of speed. Q4 Preview is newer: smoother motion and effects, quality up to 4K, in references up to 15 pictures and voice recordings for the characters, the clip is at least 3 seconds, one speed. Preview means a trial version: Vidu may change how it works and what it costs.
Type: StringAllowed values:q4Default:"q3"What the options mean
Q3: all modes and a choice of speed: Turbo, Pro and Mix.
Q4 Preview: the new Vidu version, so far only in the "Animate a frame", "From references" modes. Smoother motion and complex action (running, fights), better explosions, sparks and other effects, quality up to 4K. In references up to 15 images and voice recordings for the characters. The clip is at least 3 sec, there is one speed.
Preview means a trial version: Vidu may still change how it works and what it costs.tierOptionalSpeed: Turbo is faster and cheaper, Pro is more accurate with details, motion and faces. The price depends on it. Only for version Q3: Q4 Preview has one speed, the value is ignored.
Type: StringAllowed values:turboproDefault:"turbo"Applies only when:version=q3What the options mean
Turbo: faster and cheaper, good for tries and short clips.
Pro: more accurate with details, motion and faces, but more expensive. How much more depends on the mode and quality: the exact price is shown at the top, in the "Price" line.
Mix: only in the "From references" mode. The best picture and shot changes inside the clip, but noticeably pricier than Pro. Quality: 720p, 1080p.
The speed is chosen only with version Q3: Q4 Preview has one speed.resolutionOptionalVideo quality. 2K and 4K are only available with Q4 Preview. The price is per second and depends on the quality.
Type: StringAllowed values:540p720p1080p2K4KThe set depends ontier.Default:"720p"What the options mean
540p: the cheapest, for checking an idea.
720p: the usual choice.
1080p: maximum detail with Q3.
2K and 4K: only with Q4 Preview, the most detailed and the most expensive.
The price is per second, so quality and duration affect it together.durationOptionalLength in seconds, 1 to 16 (from 3 with Q4 Preview). The price is per second.
Type: IntegerMinimum: 1Maximum: 16Default:5Whenversion=q4: Minimum: 3image_urlsRequiredOne URL of the picture to animate.
Type: List (String, uri)Maximum items: 1
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: files_as_is = true
Input
- A description is needed in every mode.
- The price is per second of the clip and depends on the mode, version, speed and quality.
- Images are URLs of JPEG, PNG or WebP files up to 50 MB each.
- One side of a picture cannot be more than 4 times longer than the other.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
image_urls | Images | jpeg, jpg, png, webp | 1 | 50 MB |
Request example
Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.
Animate a photo with Q4 Preview
{
"model": "vidu",
"settings": {
"mode": "i2v",
"prompt": "Космонавт машет рукой, камера плавно поднимается вверх",
"version": "q4",
"resolution": "1080p",
"duration": 5,
"image_urls": [
"https://example.com/astronaut.jpg"
]
}
}The price is calculated when the task is accepted, currency RUB.
Output
- One MP4 video.
- Generation takes 1 to 10 minutes depending on length and quality.
| Kind | Formats | How many | Note |
|---|---|---|---|
video | mp4 | 1 |
A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "succeeded",
"finished_at": "2026-10-01T12:03:41+00:00",
"result": {
"caption": "Caption of the result: the model and its settings",
"texts": [],
"files_expire_at": "2026-10-08T12:03:41+00:00",
"files_expired": false,
"artifacts": [
{
"index": 0,
"kind": "video",
"filename": "video.mp4",
"size": 12582912,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
}
]
}
}From references
Up to seven pictures (up to 15 with Q4 Preview): characters, objects, clothes, settings, style. The model builds a scene from them and keeps them consistent through the clip. With Q4 Preview voice recordings can be added to the pictures. The length is 3 seconds or more.
Value of the mode field: r2v
This page is about Vidu Q4: send version = q4. Without the version field the task runs on q3.
Price in this mode from 20 ₽.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptRequiredWhat happens in the frame, who is in it, how the camera moves, what can be heard. Lines of the characters can be written right in the description, the lips will match.
Type: StringMinimum characters: 1Maximum characters: 5000audioOptionalWith sound (speech, effects and ambience) or silent. Sound costs nothing extra.
Type: StringAllowed values:onoffDefault:"on"What the options mean
The model generates the sound itself in the same pass: lip-synced speech, effects and ambience. It is not billed separately.
Silent: if you are going to add your own track.versionOptionalModel version. Q3 offers a choice of speed. Q4 Preview is newer: smoother motion and effects, quality up to 4K, in references up to 15 pictures and voice recordings for the characters, the clip is at least 3 seconds, one speed. Preview means a trial version: Vidu may change how it works and what it costs.
Type: StringAllowed values:q4Default:"q3"What the options mean
Q3: all modes and a choice of speed: Turbo, Pro and Mix.
Q4 Preview: the new Vidu version, so far only in the "Animate a frame", "From references" modes. Smoother motion and complex action (running, fights), better explosions, sparks and other effects, quality up to 4K. In references up to 15 images and voice recordings for the characters. The clip is at least 3 sec, there is one speed.
Preview means a trial version: Vidu may still change how it works and what it costs.tierOptionalSpeed: Turbo is faster and cheaper, Pro is more accurate with details, motion and faces. The price depends on it. Mix gives the best picture, costs more than Pro and has no 540p. Only for version Q3: Q4 Preview has one speed, the value is ignored.
Type: StringAllowed values:turbopromixDefault:"turbo"Applies only when:version=q3What the options mean
Turbo: faster and cheaper, good for tries and short clips.
Pro: more accurate with details, motion and faces, but more expensive. How much more depends on the mode and quality: the exact price is shown at the top, in the "Price" line.
Mix: only in the "From references" mode. The best picture and shot changes inside the clip, but noticeably pricier than Pro. Quality: 720p, 1080p.
The speed is chosen only with version Q3: Q4 Preview has one speed.resolutionOptionalVideo quality. 2K and 4K are only available with Q4 Preview. The price is per second and depends on the quality.
Type: StringAllowed values:540p720p1080p2K4KThe set depends ontier.Default:"720p"What the options mean
540p: the cheapest, for checking an idea.
720p: the usual choice.
1080p: maximum detail with Q3.
2K and 4K: only with Q4 Preview, the most detailed and the most expensive.
The price is per second, so quality and duration affect it together.durationOptionalLength in seconds, 3 to 16. The price is per second.
Type: IntegerMinimum: 3Maximum: 16Default:5aspect_ratioOptionalFrame aspect ratio.
Type: StringAllowed values:16:99:164:33:41:1Default:"9:16"What the options mean
16:9: landscape video
9:16: portrait (Stories, Reels)
4:3 / 3:4: classic format
1:1: square
In the "Animate a frame", "First and last frame" modes the pictures set the format, so the field is hidden.image_urlsRequiredOne to seven URLs of pictures with what must be in the video (up to 15 with Q4 Preview).
Type: List (String, uri)Maximum items: 15audio_urlsOptionalQ4 Preview only, optional: up to 3 URLs of MP3 voice recordings up to 50 MB, each 3 to 12 seconds. The model voices the characters' lines in similar voices, the lines themselves go in the prompt. Works only with audio=on. The recording goes in whole and is not billed separately. A trial Vidu feature: the voice is only loosely similar for now, Russian speech may sound accented.
Type: List (String, uri)Maximum items: 3Applies only when:version=q4andaudio=on
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: files_as_is = true
Input
- A description is needed in every mode.
- The price is per second of the clip and depends on the mode, version, speed and quality.
- Images are URLs of JPEG, PNG or WebP files up to 50 MB each.
- One side of a picture cannot be more than 4 times longer than the other.
- Every picture is at least 128 by 128 pixels.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
image_urls | Images | jpeg, jpg, png, webp | 15 | 50 MB |
audio_urls | Audio | mp3 | 3 | 50 MB |
Request example
Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.
A scene with a voice in Q4 Preview
{
"model": "vidu",
"settings": {
"mode": "r2v",
"prompt": "Девушка с первой картинки садится за столик кафе со второй картинки и говорит: «Как же я ждала этого вечера!»",
"version": "q4",
"resolution": "1080p",
"aspect_ratio": "4:3",
"duration": 8,
"image_urls": [
"https://example.com/girl.png",
"https://example.com/cafe.png"
],
"audio_urls": [
"https://example.com/voice.mp3"
]
}
}The price is calculated when the task is accepted, currency RUB.
Output
- One MP4 video.
- Generation takes 1 to 10 minutes depending on length and quality.
| Kind | Formats | How many | Note |
|---|---|---|---|
video | mp4 | 1 |
A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "succeeded",
"finished_at": "2026-10-01T12:03:41+00:00",
"result": {
"caption": "Caption of the result: the model and its settings",
"texts": [],
"files_expire_at": "2026-10-08T12:03:41+00:00",
"files_expired": false,
"artifacts": [
{
"index": 0,
"kind": "video",
"filename": "video.mp4",
"size": 12582912,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
}
]
}
}See also
Try Vidu Q4 through the API
One key opens every CyHUB model. Payment in rubles, and you see the price before the run.
Get an API key