Skip to content

Vidu video generation

Vidu's video-generation models are available in two engines:

engineNotes
viduVidu 2.0 (default / q1 models). Flat 600 Buzz. Text-to-video, image-to-video, first-last-frame interpolation, anime style.
vidu-q3Vidu Q3. Per-second pricing, 4 resolution tiers, turbo mode, native audio, first-last-frame support.

Default choice for new integrations: engine: "vidu-q3" for its per-second pricing and output quality. Use engine: "vidu" for simple text-to-video or anime-style clips where the flat cost model is predictable.

All Vidu jobs exceed the 100-second timeout — always submit with wait=0.

Vidu (engine: "vidu")

Text-to-video

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "steps": [{
    "$type": "videoGen",
    "input": {
      "engine": "vidu",
      "prompt": "A cat sitting on a windowsill watching rain fall outside",
      "duration": 4,
      "aspectRatio": "16:9",
      "style": "General"
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Image-to-video

Pass one image in images[] to animate it. The first image is the start frame; the second (optional) is the end frame:

json
{
  "engine": "vidu",
  "prompt": "The subject looks up and smiles warmly",
  "images": ["https://image.civitai.com/.../photo.jpeg"],
  "duration": 4,
  "aspectRatio": "16:9"
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

First-last-frame interpolation

Pass two images to interpolate between a start and end frame:

json
{
  "engine": "vidu",
  "prompt": "Smooth transition from morning to evening",
  "images": [
    "https://example.com/start.jpeg",
    "https://example.com/end.jpeg"
  ],
  "duration": 4
}

Anime style

json
{
  "engine": "vidu",
  "prompt": "Cherry blossoms falling gently in the breeze",
  "duration": 4,
  "style": "Anime"
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Parameters

FieldDefaultNotes
engine— ✅"vidu"
prompt— ✅Generation prompt.
model"default""default", "q1". "q3" is the separate vidu-q3 engine.
duration44 or 8 seconds.
aspectRationull"16:9", "9:16", "1:1". Inferred from image if omitted.
style"General""General" or "Anime".
images[][]Up to 2 images (start frame / end frame).
movementAmplitudenull"auto", "small", "medium", "large".
enableBackgroundMusicfalseAdd background music to the output.
enablePromptEnhancertrueLLM expands the prompt before generation.

Cost

Flat 600 Buzz per clip, regardless of duration, style, or model.


Vidu Q3 (engine: "vidu-q3")

Vidu Q3 offers finer resolution control, a turbo speed tier, native audio generation, and per-second pricing.

Text-to-video

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "steps": [{
    "$type": "videoGen",
    "input": {
      "engine": "vidu-q3",
      "prompt": "An eagle soaring over snow-capped mountain peaks at golden hour",
      "duration": 5,
      "resolution": "720p",
      "aspectRatio": "16:9"
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Turbo mode

Turbo roughly halves cost and runtime with modest quality reduction:

json
{
  "engine": "vidu-q3",
  "prompt": "A city street at night with neon lights",
  "duration": 5,
  "resolution": "720p",
  "turbo": true,
  "enableAudio": false
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

First-last-frame interpolation

Pass up to 2 images — the first is the start frame, the second is the end frame:

json
{
  "engine": "vidu-q3",
  "prompt": "Smooth transition from a rainy day to sunshine",
  "images": [
    "https://example.com/rainy.jpeg",
    "https://example.com/sunny.jpeg"
  ],
  "duration": 5,
  "resolution": "720p"
}

Two-image maximum

Vidu Q3 accepts at most 2 images (start + end frame). Sending more returns a 400.

Parameters

FieldDefaultNotes
engine— ✅"vidu-q3"
prompt— ✅Generation prompt.
duration51–16 seconds.
resolution"720p""360p", "540p", "720p", "1080p"
turbofalseFaster, cheaper generation with modest quality trade-off.
enableAudiotrueGenerate synchronized audio in the output.
aspectRationull"16:9", "9:16", "1:1", "4:3", "3:4". Inferred from images if omitted.
images[][]0–2 images (start + optional end frame).

Cost

Per-second pricing. total = costPerSecond × duration.

TurboResolutionBuzz/sExample — 5 s
No360p / 540p91455
No720p / 1080p2001 000
Yes360p / 540p46230
Yes720p / 1080p100500

Reading the result

json
{
  "status": "succeeded",
  "steps": [{
    "name": "0",
    "$type": "videoGen",
    "status": "succeeded",
    "output": {
      "video": { "id": "blob_...", "url": "https://.../signed.mp4" }
    }
  }]
}

Blob URLs are signed and expire — refetch the workflow or call GetBlob for a fresh URL.

Long-running jobs

Vidu jobs typically take 1–4 minutes depending on duration and resolution. Use wait=0 + polling or webhooks:

  • Webhooks (recommended): type: ["workflow:succeeded", "workflow:failed"] — see Results & webhooks
  • Polling: GET /v2/consumer/workflows/{workflowId} every 10–30 s

Troubleshooting

SymptomLikely causeFix
400 with "images maxItems"More than 2 images on vidu-q3Trim to at most 2 (start + end frame).
400 with "duration must be one of"Sent 2 or 6 for viduvidu accepts only 4 or 8.
No audio in outputenableAudio: false on vidu-q3Set enableAudio: true (the default).
Step failed, reason = "no_provider_available"No Vidu worker availableRetry shortly.

Civitai Developer Documentation