Skip to content

Gemini Omni video generation ​

Google's Gemini Omni 1.1 Flash is a fast multimodal video model: text and up to six reference images in, a 3–10 second MP4 with a synchronized audio track out, at 360p, 720p, 1080p or 4K. The operation (text-to-video, image-to-video, first-last-frame, reference) is inferred from the number of images passed, exactly like Veo 3.

modelAlso known asNotes
1.1-flashGemini Omni 1.1 FlashDefault and only variant today.

Two things set it apart from Veo 3:

  • You don't pick a duration. The model chooses 3–10 s to fit the prompt. Because of that, the step is billed on the seconds actually delivered — see Cost.
  • It's fast. A 360p clip typically returns in well under a minute; 720p in one to two.

Jobs can exceed the 100-second request timeout — submit with wait=0 (or a short wait) and poll or use webhooks.

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": "gemini-omni",
      "model": "1.1-flash",
      "prompt": "A red marble rolling down a wooden spiral track, close-up, soft daylight, continuous smooth shot",
      "aspectRatio": "16:9",
      "resolution": "720p"
    }
  }]
}
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

Draft at 360p ​

Roughly a third of the 720p price and the fastest turnaround. Iterate on the prompt here, then re-run the keeper at 720p or above:

json
{
  "engine": "gemini-omni",
  "prompt": "A lighthouse standing on rocky cliffs at sunset, waves crashing below, cinematic",
  "aspectRatio": "9:16",
  "resolution": "360p"
}
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 ​

One image animates that image:

json
{
  "engine": "gemini-omni",
  "prompt": "The subject slowly turns and looks into the distance, pensive",
  "images": ["https://.../start.jpeg"],
  "resolution": "720p"
}
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 ​

Two images are treated as the first and last frame:

json
{
  "engine": "gemini-omni",
  "prompt": "A smooth, natural cinematic transition between the two scenes",
  "images": ["https://.../start.jpeg", "https://.../end.jpeg"],
  "resolution": "720p"
}
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

Reference-to-video ​

Three to six images are references for characters, objects or style. Refer to them in the prompt as <IMAGE_REF_0>, <IMAGE_REF_1>, … in the order you passed them:

json
{
  "engine": "gemini-omni",
  "prompt": "The character from <IMAGE_REF_0> walks through the setting of <IMAGE_REF_1>, then waves at the camera",
  "images": ["https://.../character.jpeg", "https://.../setting.jpeg", "https://.../style.jpeg"],
  "resolution": "720p"
}
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

Operations — how images count determines operation ​

images[] lengthOperation
0text-to-video
1image-to-video
2first-last-frame-to-video
3–6reference-to-video

More than six images returns a 400.

Parameters ​

FieldDefaultNotes
engine— ✅"gemini-omni"
model"1.1-flash"Only "1.1-flash" today.
prompt— ✅Generation prompt. Put negatives in the prompt — there is no negativePrompt.
aspectRatio"16:9""16:9" or "9:16".
resolution"720p""360p", "720p", "1080p", "4k". 1080p and 4K are upscaled from 720p.
images[][]0–6 images. Count determines operation type.

Not supported by the model, so not exposed: duration, seed, negativePrompt, generateAudio (audio is always generated), enablePromptEnhancer.

Cost ​

Omni is priced per delivered second, by resolution:

resolutionBuzz / secondReserved at submit (10 s cap)
360p85850
720p2502 500
1080p3003 000
4k4004 000

Because the model decides the length, the exact charge isn't known up front:

  1. Submit — the 10-second cap for your resolution is reserved. A whatif=true request reports this cap as the estimate, and a real submit is rejected with 400 (requiredBuzz / availableBuzz in the body) if your balance can't cover it.
  2. Complete — the step's cost is settled to ceil(seconds × rate) for the clip that came back and the difference is refunded automatically. A 6.4 s clip at 720p costs 1 600 Buzz, not 2 500.
  3. Fail or cancel before any video was produced — the full reservation is refunded.

Reading the result ​

json
{
  "status": "succeeded",
  "cost": { "base": 1600, "total": 1600 },
  "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 ​

360p usually completes in under a minute; 720p in one to two; 4K can take several. 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 requiredBuzz / availableBuzzBalance below the 10 s cap for the chosen resolutionTop up, or drop to 360p for drafts.
400 "must be one of 16:9, 9:16"Unsupported aspect ratioOmni is landscape or portrait only; no 1:1.
400 on imagesMore than six imagesPass at most six.
Clip is shorter than expectedThe model chose the lengthAsk for it in the prompt ("a ten-second continuous shot"); you're only billed for what came back.
Step failed, reason = "blocked"Google content policyDon't retry the same input.
Step failed, reason = "no_provider_available"Google API queue busyRetry shortly.

Civitai Developer Documentation