ModelSell Docs
VideosVidu Video

Vidu Generic Video Format

Call Vidu Q2 and Q3 with /v1/videos, map images, seconds, size, and metadata.vidu_operation, and query generic results.

Create JSON tasks with POST /v1/videos or POST /v1/video/generations, using your ModelSell Bearer API Key. See the overview for enabled models and operations.

Q3 image to video

curl --max-time 300 "$MODELSELL_BASE_URL/v1/videos" \
  -H "Authorization: Bearer $MODELSELL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "viduq3-turbo",
    "prompt": "The camera slowly pulls back as the person in the reference image waves.",
    "images": ["https://example.com/first-frame.png"],
    "seconds": "5",
    "size": "720p",
    "metadata": {
      "vidu_operation": "img2video",
      "audio": false,
      "is_rec": false,
      "watermark": false,
      "seed": 0
    }
  }'

Set environment variables as shown in Base URL and Authentication, then replace the image URL. Generic creation returns the public task ID in id:

{
  "id": "task_example_vidu",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "queued"
}

Common field mapping

Generic fieldVidu upstream fieldNotes
modelmodelUse an authorized model name
promptpromptVideo description; required for reference generation
imagesimagesImage URL / data URI array; preserve first/last-frame order
secondsdurationExamples use string "5", converted to integer seconds
sizeresolutionA supported tier such as 720p
Listed metadata fieldsCorresponding top-level fieldsSee below

Native duration is an integer; generic examples use a string seconds. Do not mix response formats or use pixel dimensions such as 1920x1080 for this resolution tier.

Select an operation explicitly

Set metadata.vidu_operation:

ValueImagesRequirement
text2videoNoneModel supports text to video
img2videoOne first frameModel supports image to video
start-end2videoTwo images, first then lastModel supports first/last frames
reference2videoReference imagesModel and channel support reference generation

When omitted, routing generally follows image count: one image selects image-to-video, two select first/last frames, and more images select references. Multiple Q4 images select references. Automatic selection does not add model capabilities. Set the operation explicitly, especially for a single viduq2 reference image or two images intended as references.

A single Q2 reference image

This model supports reference generation; choose reference2video explicitly:

{
  "model": "viduq2",
  "prompt": "Keep the reference teapot's design and create a product video in warm morning light.",
  "images": ["https://example.com/teapot.png"],
  "seconds": "5",
  "size": "720p",
  "metadata": {
    "vidu_operation": "reference2video",
    "aspect_ratio": "16:9",
    "audio": false,
    "watermark": false
  }
}

For text generation, remove images, choose a text-capable model, and select text2video. For first/last frames, provide two images and select start-end2video. Q4 examples apply only after model and channel access is enabled; changing the operation cannot bypass model limits.

Vidu extension parameters

Generic requests map these fields from metadata:

resolution, aspect_ratio, audio, is_rec, seed, off_peak, watermark, wm_position, wm_url, payload, meta_data, callback_url, sounds, subjects, auto_subjects.

vidu_operation selects the path. When size is omitted, metadata.resolution can specify the resolution. Explicit false and 0 values retain their meaning; meta_data must remain a JSON-encoded string. See Request Parameters for types, ranges, and availability. Do not use off_peak: true on current channels; use is_rec: false for Q3.

metadata is not an arbitrary provider-field pass-through. For Q2 bgm, movement_amplitude, voice_id, or new native fields, use the /ent/v2/... native format and confirm model and channel support.

Query the generic result

Use the actual id from creation:

export TASK_ID="<returned-task-id>"
curl --max-time 300 "$MODELSELL_BASE_URL/v1/videos/$TASK_ID" \
  -H "Authorization: Bearer $MODELSELL_API_KEY"

Generic status is queued, in_progress, completed, or failed. On success, read video_url or metadata.url; the cover is metadata.cover_url, and complete creations are in metadata.creations:

{
  "id": "task_example_vidu",
  "object": "video",
  "model": "viduq3-turbo",
  "status": "completed",
  "progress": 100,
  "video_url": "https://example.com/generated-video.mp4",
  "metadata": {
    "url": "https://example.com/generated-video.mp4",
    "cover_url": "https://example.com/cover.jpg",
    "credits": 35
  }
}

Credits are metering information; the illustrative value is not a fixed price. Queries do not incur another generation charge. Download results before their URLs expire. If a task fails, retain its error information and public ID; do not recreate it merely because generation takes longer than expected.

On this page