On November 5, 2026, Google made Gemini Omni 1.2 Flash (gemini-omni-1.2-flash) generally available across the Gemini API and Google Cloud. Two weeks after shutting down Veo 3.1 Preview in the developer API on October 22, Google is positioning Omni Flash as its default model for generating, editing and extending video with synchronized audio.

Three headline changes stand out:

  • Native 15-second clips, up from 10 seconds in Omni 1.1 Flash, selectable in one-second steps from 3 to 15 seconds.
  • A 30% price cut on video output tokens, dropping 720p generation from about $0.10 per second to roughly $0.07 per second ($12.00 per million video output tokens, down from $17.50).
  • Multi-turn conversational editing and stronger reference adherence, accepting up to 6 reference images and refining clips across turns without starting over.

One date in the release notes matters if you already ship on Omni 1.1: on December 3, 2026, every API call to gemini-omni-1.1-flash will automatically route to gemini-omni-1.2-flash.

I spent Friday evening wiring gemini-omni-1.2-flash up on Linux with Python 3.12, google-genai 3.0.0, raw REST calls and ffprobe. Because my AI Studio key is on the Free Tier, where Omni 1.2 enforces a hard zero-quota wall, I couldn't render paid clips from my own prompts. Everything else on the wire was testable right now, and the first bug hit in 90 milliseconds.

What I tested and where the Free Tier stops

My setup and test boundary:

  • Environment: Linux x86_64, Python 3.12.14, google-genai 3.0.0, ffprobe and a Free Tier AI Studio GEMINI_API_KEY.
  • What ran live ($0.00 spend): model discovery (models.list, models.get), input token accounting (countTokens) across text, reference images, uploaded 720p video and WAV audio, Files API upload latency, pre-quota schema validation on /v1beta/interactions, model-routing checks, stateful chaining and container inspection of Google's raw omni_*.mp4 API samples.
  • What blocked (HTTP 429): all four video generation calls I sent (5s 360p draft, 6s 720p alley tracking shot, 15s 720p timecoded clip via URI delivery, and 6s 2-image reference shot) returned Rate limit exceeded for model gemini-omni-1.2-flash (limit: 0 input tokens per minute on Free Tier) in 0.41 to 0.48 seconds.

Omni 1.2 Flash has zero Free Tier quota: 0 RPM and 0 RPD. Even a 3-second 360p draft (~$0.07) requires Paid Tier 1 billing enabled (8 RPM, 40 RPD, doubled from Omni 1.1). If you want to try 15-second clips manually without API billing, Google Vids includes them at no extra cost on Google and Workspace accounts.

Because I didn't run on a paid project, I haven't measured live video render times or visual drift on my own prompts. Google also published zero benchmarks comparing 1.2 against 1.1, so treat quality claims as untested until you run your own prompts.

Bug #1: Google's Python quickstart 404s out of the box

Gemini Omni models run on Google's stateful Interactions API (/v1beta/interactions), not generateContent, even though GET /v1beta/models/gemini-omni-1.2-flash (0.17s) still lists ["generateContent", "countTokens"] under supportedGenerationMethods.

If you install google-genai 3.0.0 and run the quickstart from Google's Omni docs:

from google import genai client = genai.Client() interaction = client.interactions.create( model="gemini-omni-1.2-flash", input="A marble rolling fast on a chain reaction style track, continuous smooth shot.", response_format={"type": "video", "duration": "5s", "resolution": "360p"}, ) 

It fails in 0.09 to 0.46 seconds with a 404:

NotFoundError: Error code: 404 - {'error': {'message': "Model 'gemini-omni-1.2-flash' not found. Did you mean 'gemini-omni-1.1-flash'?", 'code': 'not_found'}} 

"Did you mean 'gemini-omni-1.1-flash'?" is a red herring: gemini-omni-1.1-flash 404s on that path too (0.20s).

Inspecting client.interactions.sdk_configuration shows why. In google-genai 3.0.0, the Interactions sub-client defaults to Globals(api_version='v1') (POST /v1/interactions), where neither Omni 1.1 nor 1.2 exists. Both live only on v1beta. (Importing google.genai on Python 3.12 also emits two SyntaxWarning escape warnings in types.py.)

Passing api_version="v1beta" fixes the 404:

interaction = client.interactions.create( api_version="v1beta", model="gemini-omni-1.2-flash", input="A marble rolling fast on a chain reaction style track, continuous smooth shot.", response_format={"type": "video", "duration": "5s", "resolution": "360p", "delivery": "uri"}, ) 

Right behind that 404 sits a second SDK catch. When client.interactions.create(api_version="v1beta", ...) hits a 429, even a permanent limit: 0 Free Tier error, its internal retry loop retries silently for over 90 seconds per call before raising RateLimitError. Two calls hung my script for over three minutes before I killed it. Cap retries in CI so bad keys fail fast.

What I measured on the live API

Even without paid video output quota, several parts of the gemini-omni-1.2-flash stack respond on a Free Tier key.

1. Real input token counts (countTokens)

Omni 1.2 Flash bills inputs at $1.50 per million tokens across text, images and video. Calling POST /v1beta/models/gemini-omni-1.2-flash:countTokens returned HTTP 200 in 0.18 to 0.52 seconds:

  • 14-word text prompt: 16 TEXT tokens (0.19s), costing $0.000024.
  • Two reference PNGs (1280x720 mug card and 800x800 robot sheet) plus 11-token prompt: 527 tokens (11 TEXT + 516 IMAGE, or 258 tokens per image, 0.18s), costing $0.00079.
  • Six reference PNGs (the maximum allowed) plus 16-token prompt: 1,564 tokens (16 TEXT + 1,548 IMAGE, 0.20s), costing $0.00235.
  • Uploaded 5.0-second 720p 24fps MP4 with AAC audio plus edit prompt: Files API upload took 1.13s and reached ACTIVE in 3.49s (2 polls). countTokens returned 1,488 tokens in 0.30s: 13 TEXT + 1,315 VIDEO (263 video tokens/s) + 160 AUDIO (32 audio tokens/s), or 295 media tokens/s. That is $0.00223 for 5s, or about $0.0066 for a 15s input clip.

Input tokens are rounding error. Six reference images or a 15-second source video cost under two-thirds of a cent; over 99.5% of your bill is video output.

2. Schema checks that fail fast (HTTP 400)

POST /v1beta/interactions validates its request schema before checking quota, returning HTTP 400 in 0.18 to 0.21 seconds:

  • Duration needs "s": "duration": 5 fails; pass "3s" through "15s" (defaults to "10s").
  • Four resolutions: "480p" fails, listing '360p', '720p', '1080p', '4k'.
  • Two aspect ratios: "1:1" fails, listing '16:9' (default) and '9:16'.
  • Five task enums: "video_upscale" fails, listing 'text_to_video', 'image_to_video', 'reference_to_video', 'edit', 'extend'. Google advises omitting task unless prompting picks the wrong mode, and deprecates <FIRST_FRAME> and <IMAGE_REF_0> control tags.

3. Stateful chaining and silent model routing

To test multi-turn state lookup, I created a Turn 1 interaction on /v1beta/interactions with gemini-3-flash-preview (HTTP 200 in 3.22s, returning v1_Chds...), then passed that previous_interaction_id into gemini-omni-1.2-flash on Turn 2. A fake ID failed pre-quota with HTTP 400 in 0.32s, while the real v1_... ID passed state lookup across models and hit the Omni 1.2 quota gate in 0.88s. Avoid setting store=false on Turn 1 if you plan to edit later, since disabling storage breaks previous_interaction_id.

Sending "model": "gemini-omni-flash-preview" (shut down earlier) returned a 429 naming gemini-omni-1.1-flash (0.52s), confirming the gateway already aliases retired Omni IDs server-side ahead of the December 3 1.1 to 1.2 switch.

Output cost math and the 4 MB payload trap

Google bills Omni 1.2 Flash video output at $12.00 per million tokens (text and thinking tokens at $9.00 per million):

  • 360p: 1,931 tokens/s, or $0.023/s ($0.12 for 5s, $0.35 for 15s)
  • 720p (default): 5,792 tokens/s, or $0.070/s ($0.42 for 6s, $0.70 for 10s, $1.04 for 15s)
  • 1080p (upsampled): 8,688 tokens/s, or $0.104/s ($0.52 for 5s, $1.56 for 15s)
  • 4K (upsampled): 17,376 tokens/s, or $0.209/s ($1.04 for 5s, $3.13 for 15s)

Nine 15-second drafts at 360p ($3.13) cost the same as one 15-second render at 4K ($3.13). Draft at 360p or 720p, refine via previous_interaction_id, and render 1080p or 4K last. Batch API is unsupported.

Inspecting four raw omni_*.mp4 samples from Google's API docs (encoder: Google) and three launch-blog demos with ffprobe showed why delivery settings matter:

  • Container specs: raw outputs are H.264 (yuv420p) at 24 fps with 48 kHz stereo AAC at 2.37 to 4.54 Mbps.
  • The 4 MB inline limit: inline base64 responses cap out at 4 MB. Three of Google's four raw 720p doc samples (5.42 MB at 10s, 5.65 MB at 20s, 5.78 MB at 20s) exceed 4 MB; only one 10s clip (3.08 MB) fits. Always pass "delivery": "uri" for 10-to-15-second 720p+ clips and poll GET /v1beta/files/{id} until ACTIVE.
  • Provenance (SynthID + C2PA): alongside invisible SynthID watermarking, all four raw API MP4s carry a C2PA JUMBF manifest (jumdc2pa) signed by Google Media Processing Services under Google C2PA Root CA G3. The FFmpeg-reencoded blog demos (Lavf62.12.102) lost their C2PA box, while SynthID survives in the frames.
  • One doc slip: omni_misty_mountains_1080p.mp4, embedded right under Google's resolution: "1080p" example, is actually 1280x720 in ffprobe.

Four doc contradictions and what to fix before December 3

Reading Google's Keyword post, Cloud blog, Gemini API docs and Cloud Agent Platform model card side by side surfaced four mismatches:

  • 15 seconds does not apply to every mode: text, single-image, reference-to-video and edits reach 15 seconds (with 11-to-15s clips limited to 1 3s reference video instead of 3), but first-and-last-frame interpolation stays capped at 3 to 10 seconds. Passing "15s" with two keyframes returns an invalid argument error.
  • Audio references are gated: the DeepMind blog pitches 1-second voice cues, the Cloud blog says audio references need allowlisting, and the Gemini API docs mark audio uploads unsupported—even though countTokens already tokenizes WAV input at 32.5 AUDIO tokens/s.
  • Extended length (30s vs 40s): Gemini API docs cap multi-turn extension at 30 seconds total, while the Cloud model card implies up to 40 seconds.
  • Output token ceiling (65,536 vs 260,640): models.get lists outputTokenLimit: 65,536, yet 15s at 720p needs 86,880 tokens and 15s at 4K needs 260,640, matching the Cloud card's 260,640 limit.

Google also notes rough spots on fast sports action, rapid script changes and complex physics, no support for system instructions, temperature, top_p or negative prompt fields, and EEA/UK/Switzerland blocks on editing uploaded video.

If you run gemini-omni-1.1-flash today, four updates get you ahead of the December 3, 2026 automatic reroute:

  1. Pass api_version="v1beta" in google-genai 3.0.0 and cap retries so quota errors fail fast.
  2. Default to "delivery": "uri" on 10-to-15-second clips at 720p+ to avoid the 4 MB inline cap.
  3. Cap UI durations at 3–15s for standard generation and 3–10s for keyframe interpolation and extensions.

4. Strip deprecated <FIRST_FRAME> and <IMAGE_REF_0> tags and test gemini-omni-1.2-flash on staging now, banking the 30% price drop on your own schedule.

Originally published on Medium.