Skip to content

Vidu Video

Vidu Video creates short video generation tasks. You can generate videos from a text prompt, or provide images as an image-to-video input, start/end frames, or reference images.

After creating a task, the API returns a task ID immediately. Poll the task until it reaches a terminal state. When the task is completed, read the final video URL from metadata.url or download it through the content endpoint.

Endpoints

CapabilityMethodPath
Create video taskPOST/v1/videos
Retrieve video taskGET/v1/videos/{task_id}
Download video contentGET/v1/videos/{task_id}/content
Unified create endpointPOST/v1/video/generations
Unified retrieve endpointGET/v1/video/generations/{task_id}

/v1/videos and /v1/video/generations accept the same request fields. New integrations should prefer /v1/videos.

Supported Models

ModelDescription
viduq3-turboSpeed-oriented model for fast generation and iteration
viduq3Stronger visual consistency for multi-shot videos
viduq3-mixBalanced visual quality and motion
viduq2Recommended for reference-image and subject-consistency workflows

Available models may vary by account access and platform availability.

Supported Modes

ModeHow to call
Text to videoUse prompt without image inputs
Image to videoUse image, images, or input_reference with one image
Start/end framesUse images with two image URLs
Reference image videoUse images with multiple reference images

Request Parameters

http
POST /v1/videos
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
ParameterRequiredDescription
modelYesVidu model name, such as viduq3-turbo, viduq3, viduq3-mix, or viduq2
promptYesVideo prompt describing the subject, motion, scene, camera language, and style
durationNoVideo duration in seconds. You can also use the string field seconds
secondsNoDuration as a string, such as "5". Use either seconds or duration
sizeNoOutput spec. Use a resolution such as 720p or 1080p, or an aspect ratio such as 16:9, 9:16, or 1:1
imageNoSingle image URL, equivalent to one item in images
imagesNoImage URL array. One image is usually image-to-video input; two images can be start/end frames; multiple images can be references
input_referenceNoSingle reference image URL, equivalent to a single image input
metadataNoVidu-specific extension parameters

Common metadata fields:

FieldDescription
resolutionOutput resolution, such as 720p or 1080p
aspect_ratioOutput aspect ratio, such as 16:9, 9:16, or 1:1
movement_amplitudeMotion level: auto, small, medium, or large
bgmWhether to add background music
audioWhether to generate a video with audio. Actual behavior depends on the selected model
audio_typeAudio type, such as all, speech_only, or sound_effect_only
payloadCustom passthrough string returned with the task result

Image URLs must be publicly reachable. Common supported image formats include jpg, jpeg, png, and webp.

Examples

Text-to-Video

bash
curl -X POST https://cubicspaces.cloud/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "viduq3-turbo",
    "prompt": "A cinematic shot of a glass cube floating above a quiet lake at sunrise, soft reflections, slow camera push in",
    "duration": 5,
    "size": "16:9",
    "metadata": {
      "resolution": "720p",
      "movement_amplitude": "auto"
    }
  }'

Image-to-Video

bash
curl -X POST https://cubicspaces.cloud/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "viduq3",
    "prompt": "Keep the product shape consistent. The camera slowly rotates around the product on a clean studio background.",
    "images": [
      "https://example.com/product.png"
    ],
    "duration": 5,
    "size": "1:1",
    "metadata": {
      "resolution": "720p",
      "movement_amplitude": "small"
    }
  }'

Start/End Frame

When you provide two images, the system treats them as start and end frames. This is useful for transition videos.

bash
curl -X POST https://cubicspaces.cloud/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "viduq2",
    "prompt": "Create a smooth transition from image 1 to image 2, keep lighting natural and motion fluid.",
    "images": [
      "https://example.com/start.png",
      "https://example.com/end.png"
    ],
    "duration": 5,
    "size": "16:9"
  }'

Reference Image

When you provide multiple images, the system treats them as reference assets. This is useful when you need subject consistency.

bash
curl -X POST https://cubicspaces.cloud/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "viduq2",
    "prompt": "Use the subject from the reference images. The character walks through a bright modern gallery, keeping identity and outfit consistent.",
    "images": [
      "https://example.com/ref-1.png",
      "https://example.com/ref-2.png",
      "https://example.com/ref-3.png"
    ],
    "duration": 5,
    "size": "9:16",
    "metadata": {
      "resolution": "720p"
    }
  }'

Response and Retrieval

A successful create request returns a video task object:

json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "queued",
  "progress": 0,
  "created_at": 1770000000
}

Save id; use it to retrieve task status and download the generated video.

Retrieve the task:

bash
curl https://cubicspaces.cloud/v1/videos/task_xxx \
  -H "Authorization: Bearer YOUR_API_KEY"

While the task is running, the response usually looks like:

json
{
  "id": "task_xxx",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "in_progress",
  "progress": 30,
  "created_at": 1770000000
}

When the task is completed:

json
{
  "id": "task_xxx",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "completed",
  "progress": 100,
  "created_at": 1770000000,
  "completed_at": 1770000600,
  "metadata": {
    "url": "https://example.com/generated-video.mp4"
  }
}

When the task fails, the response has status: "failed" and the reason is in error.message:

json
{
  "id": "task_xxx",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "failed",
  "progress": 100,
  "created_at": 1770000000,
  "completed_at": 1770000030,
  "error": {
    "code": "task_failed",
    "message": "The video generation task failed."
  }
}

Status Values

StatusDescription
queuedSubmitted and waiting
in_progressGenerating
completedCompleted
failedFailed. Check error.message

For long-running tasks, start polling after 1 to 5 minutes, then continue with shorter intervals if the task is still running.

Download Video Content

After the task is completed, you can download or play the content endpoint directly:

bash
curl -L https://cubicspaces.cloud/v1/videos/task_xxx/content \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output vidu-result.mp4

If the task is not completed yet, the content endpoint returns an error. Check that status is completed first.

Notes

  • Prompts should describe the subject, motion, camera, scene, and style. Avoid very short noun-only prompts.
  • Image-to-video, start/end frame, and reference-image inputs require publicly reachable image URLs.
  • Supported duration, aspect ratio, resolution, and audio behavior can vary by model. If you are unsure, start with duration: 5 and resolution: "720p".
  • Result video URLs may expire. Production systems should download or transfer the video soon after completion.