Claude Opus 5.5 is live on SeedRouter

Video

Gemini Omni 1.2 Flash

View Markdown

Generate 3–15 second Gemini Omni 1.2 Flash videos with native sound from text, images, first and last frames or references, or edit and extend a video, at 360p to 4K.

Gemini Omni 1.2 Flash is Google's multimodal video model for fast generation, conversational editing and cinematic control (updated November 2026). One model ID covers text to video, image to video, first and last frame interpolation, subject references from up to 10 images, editing a video and extending one. Every clip has native sound, runs 3–15 seconds and renders at 360p, 720p, 1080p or 4K. Send the request, keep the returned task ID, and read the finished video from the task. Media goes in as URLs.

Model IDs

Model IDModesResolutionsLength
gemini-omni-1.2-flashtext, image, frames, references, edit, extend360p, 720p, 1080p, 4k3–15 seconds

See the model page for current prices.

Quick example

curl https://api.seedrouter.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-omni-1.2-flash",
    "prompt": "A glass marble rolls fast along a wooden chain-reaction track through a sunlit workshop, one continuous smooth tracking shot. No text, no logos.",
    "resolution": "720p",
    "duration": 10,
    "aspect_ratio": "16:9"
  }'

Endpoint

POST https://api.seedrouter.ai/v1/videos/generations
HeaderValue
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

The response is a task ({"id": "task_...", "status": "processing"}), not the finished video. Poll GET /v1/tasks/{task_id} for the result. Keep API keys in server-side code.

Parameters

FieldTypeDefaultNotes
modelstringrequiredgemini-omni-1.2-flash
promptstringrequiredRequired in every mode: the shot, the change for an edit, or what happens next for an extension. Describe the sound too; put negative instructions here.
durationinteger103–15 seconds. At most 10 with first and last frames and for an extension (the added part). Ignored by an edit, which keeps the source length.
resolutionenum720p360p, 720p, 1080p or 4k (2160p means 4k), case-insensitive. 1080p and 4k are upsampled.
aspect_ratioenum16:916:9 or 9:16.
image_urlsURL listnoneOne image is the start frame; several are subject references. Up to 10 images in total, frames and role images included.
first_frame_imageURLnoneThe clip opens on this image; with last_frame_image the model interpolates between the two.
last_frame_imageURLnoneThe clip ends on this image. Needs a first frame.
image_with_rolesobject listnone{"url", "role"} with role first_frame, last_frame, or any other role for a reference. Give frames this way or with the two frame fields, not both.
video_urlsURL listnoneOne clip of at most 15 seconds to edit or extend.
omni_reference_task_typeenumautoauto, edit, extend, reference, text_to_video, image_to_video or reference_to_video.
extend_from_task_idstringnoneThe ID of one of your completed gemini-omni-1.2-flash tasks, to edit or extend its video without uploading it.

Every clip comes with sound; there is no sound switch. There is no negative_prompt, seed, audio input or callback_url. The schema is strict: unknown fields are rejected rather than ignored.

Modes

ModeHow to select it
Text to videoNo images and no video.
Image to videoOne image in image_urls, or a first frame.
First and last framefirst_frame_image and last_frame_image, or the two roles. At most 10 seconds.
ReferencesSeveral images in image_urls, or reference roles; omni_reference_task_type: "reference" to be explicit.
EditA video in video_urls or extend_from_task_id; auto or edit.
ExtendA video as above and omni_reference_task_type: "extend". Adds up to 10 seconds.

A video input edits unless you ask for extend; with a video, reference, text_to_video, image_to_video and reference_to_video are refused.

First and last frame

{
  "model": "gemini-omni-1.2-flash",
  "prompt": "Smooth transition, the camera slowly pushes in.",
  "first_frame_image": "https://example.com/start.jpg",
  "last_frame_image": "https://example.com/end.jpg",
  "duration": 8
}

Edit

{
  "model": "gemini-omni-1.2-flash",
  "prompt": "Make the violin invisible. Keep everything else the same.",
  "video_urls": ["https://example.com/clip.mp4"]
}

The edit keeps the source length; duration has no effect. Short, specific instructions work best; for a local change add "Keep everything else the same".

Extend an earlier task

{
  "model": "gemini-omni-1.2-flash",
  "prompt": "The camera keeps panning across the mountains.",
  "extend_from_task_id": "task_...",
  "omni_reference_task_type": "extend",
  "duration": 8
}

The result contains the original followed by the new part; the new seconds are billed, plus an eighth of the source length. To extend your own clip, send it in video_urls instead of extend_from_task_id.

Media inputs

Images and videos are public HTTP(S) URLs. Base64 data URIs are not accepted: upload the files to your own storage and pass their URLs. The video to edit or extend must be at most 15 seconds; its length is read when the request is accepted, and a video whose length cannot be read is rejected before anything is charged.

Pricing dimensions

Check the model pricing section for current rates. Gemini Omni 1.2 Flash is billed per second of video, at a rate set by the resolution:

text, image, frames, references:  cost = duration × rate
edit:                             cost = (source + source / 8) × rate
extend:                           cost = (added seconds + source / 8) × rate

source is the input video's picture length rounded up to whole seconds, measured when the request is accepted, so the amount reserved is the amount charged; the eighth covers reading the input video. Examples at 720p: editing a 6.2-second clip bills 7 + 7/8 = 7.875 seconds; extending an 8-second clip by 4 seconds bills 4 + 1 = 5 seconds. Failed tasks are not charged.

Output schema

Submission returns the task:

{"id": "task_...", "model": "gemini-omni-1.2-flash", "status": "processing", "created_at": 1789689600}

Get the task

GET https://api.seedrouter.ai/v1/tasks/{task_id}

Poll every 10–20 seconds until status is completed or failed. A network timeout while polling does not mean generation failed: keep the task ID and resume checking it. Do not create another task to check progress.

Completed task

{
  "id": "task_...",
  "model": "gemini-omni-1.2-flash",
  "status": "completed",
  "created_at": 1789689600,
  "finished_at": 1789689800,
  "output": {
    "video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4"
  }
}

Every video carries Google's invisible SynthID watermark. In our tests 720p clips of 5–8 seconds came back as MP4 (H.264) at 1280 × 720 with a stereo AAC track, 66–86 seconds after submission; an edit of a 3-second clip came back 3 seconds long.

Errors

Requests rejected before a task is created return an HTTP error with an error object and are not charged. A task that fails after acceptance returns HTTP 200 when queried, with status: "failed" and an error object.

See the shared error catalog for codes, HTTP statuses, and retry guidance.

{
  "id": "task_...",
  "model": "gemini-omni-1.2-flash",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

If submission itself times out, check your tasks before submitting again: the first request may have been accepted.

Tips

  • Describe subject, place, camera move, light and sound; the clip's audio follows the prompt.
  • Draft at 360p, then render the shot you keep at 1080p or 4k with the same request.
  • For an edit, change one thing at a time and say what must stay the same.
  • Add no text, no logos to keep invented marks out.