Guide2026/09/01

Migrate to the Gemini Omni 1.1 Flash API

Move from gemini-omni-flash-preview to GA gemini-omni-1.1-flash: the model-string swap, resolution parameter, scene extension and frame-control code, and costs.

Migrate to the Gemini Omni 1.1 Flash API

Quick Answer

Migrating to Gemini Omni 1.1 Flash is a one-line change: swap your model string from gemini-omni-flash-preview to gemini-omni-1.1-flash. The GA model (August 27, 2026) keeps the same Interactions API shape, the same ~$0.10 per second of 720p output, and the same prompting behavior — and unlocks four things the preview never had: a resolution setting with a cheap 360p draft tier, scene extension to 40 seconds, first/last frame control, and 1080p/4K output via upscaling. The legacy preview string still works, but it is now the deprecated path with no GA stability guarantees. This post is the migration checklist plus a consolidated, copy-ready code reference for every 1.1 capability. If you are integrating from zero, start with the API tutorial for keys, SDK setup, and fundamentals — then come back here for the 1.1 surface.

Key Takeaways

  • The migration is a model-string swap. Same interactions.create call, same input parts, same previous_interaction_id editing mechanism.
  • Add response_format={"resolution": ...} to your calls. 360p drafts cost roughly a third of 720p — draft cheap, upscale the keeper.
  • Scene extension and first/last frame are 1.1-only. They never existed on the preview string, so any workflow built around them requires the migration.
  • The preview string still answers, but treat it as legacy. Google marks gemini-omni-1.1-flash Generally Available; new stability guarantees attach to the GA ID, not the preview one.
  • Budget by output seconds, not by requests. Every generation, edit turn, and extension step renders new billed seconds.

The migration checklist

  1. Swap the model string everywhere you call the API: gemini-omni-flash-previewgemini-omni-1.1-flash.
  2. Re-run your smoke tests. Google announced no breaking parameter changes at GA, but if you shipped during the preview you may have workarounds (retry logic, quota backoffs) worth revisiting — GA quotas are governed by your AI Studio project settings, not preview-tier defaults.
  3. Add an explicit resolution. The preview was 720p-only, so your code probably never set one. Make the choice deliberate now that 360p/1080p/4k exist.
  4. Move iteration to 360p. If your product lets users retry or refine, drafting at 360p cuts the bill on every discarded take by roughly two-thirds.
  5. Delete preview-era hedges. "Parameters may change before GA" code comments, feature flags around Omni calls, fallback paths you added because the preview had no SLA — GA is the point where those can go.

Text-to-video on 1.1 (with resolution)

The call shape is unchanged from the API tutorial — only the model ID and the response_format block are new:

import base64
from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input="A marble rolling the length of a timber track, continuous smooth shot.",
    response_format={
        "resolution": "360p",  # 360p | 720p | 1080p | 4k
    },
)
with open("draft.mp4", "wb") as f:
    f.write(base64.b64decode(interaction.output_video.data))

JavaScript is the same swap:

import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});

const interaction = await ai.interactions.create({
  model: 'gemini-omni-1.1-flash',
  input: 'A marble rolling the length of a timber track, continuous smooth shot.',
  response_format: { resolution: '360p' },
});

if (interaction.output_video?.data) {
  fs.writeFileSync('draft.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}

Draft at 360p until the motion is right, then re-render the final prompt at the resolution you ship. The full draft-to-4K pipeline, with when upscaling beats re-rendering, is in Draft at 360p, upscale to 4K.

Scene extension: past 10 seconds, up to 40

New in 1.1: send a continuation prompt with previous_interaction_id and the model appends to the clip instead of re-editing it, reading the last 10 seconds for continuity.

# Step 1 — the base clip
base = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input="A chef plates a dish in a busy kitchen, handheld camera.",
    response_format={"resolution": "360p"},
)

# Step 2 — append, don't re-edit
extended = client.interactions.create(
    model="gemini-omni-1.1-flash",
    previous_interaction_id=base.id,
    input=[{"type": "text", "text": "Continue the scene: she carries the plate out to the pass."}],
    response_format={"resolution": "360p"},
)

Intent matters: "Make the apron red" re-renders the same clip (conversational editing); "Continue the scene..." appends new seconds. Same mechanism, different verb. Steps are 3–10 seconds each up to 40 seconds total — prompts, the uploaded-file path, and the regional restrictions are covered in How to extend videos to 40 seconds. Past 40 seconds you are back to storyboard stitching.

First and last frame: control both ends

Also 1.1-only: pin the opening and closing frames and let the model generate the path between them. Both images go in input before the text:

interaction = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input=[
        {"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
        {"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
        {"type": "text", "text": "Slow 120-degree orbit from the first framing to the second, tripod locked, no cut."},
    ],
    response_format={"resolution": "720p"},
)

The text prompt has one job: describe a camera path the two stills can actually share. Prompt patterns that keep the middle honest — and the failure modes when they don't — are in the first/last frame guide.

Conversational editing: unchanged, still the moat

Multi-turn editing works exactly as it did in the preview — previous_interaction_id plus a single, specific change per turn:

v1 = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input="A woman playing violin outdoors.",
)
v2 = client.interactions.create(
    model="gemini-omni-1.1-flash",
    previous_interaction_id=v1.id,
    input="Make the violin invisible.",
)

The one-instruction-per-turn discipline from the conversational editing guide applies verbatim on 1.1.

What migration costs (and saves)

Output bills per second of rendered video, at every resolution:

Resolution10-second clip40-second extended scene
360p draft~$0.30~$1.20
720p~$1.00~$4.00
1080p~$1.50~$6.00
4K~$3.00~$12.00

The 720p rate is the same ~$0.10/second the preview charged, so migrating costs nothing — while the 360p tier makes every iteration loop roughly three times cheaper than it was on the preview. Edit turns and extension steps bill at the same per-second rate as generations.

FAQ

Do I have to migrate off gemini-omni-flash-preview?

Not immediately — the preview string still works and Google has not published a shutdown date for it. But it is the legacy path: GA stability guarantees, the resolution parameter, scene extension, and first/last frame all attach to gemini-omni-1.1-flash. New code should not target the preview ID.

Is the migration really just a model-string swap?

For existing text-to-video, image-to-video, and conversational-editing code, yes — the Interactions API shape is unchanged. You only write new code if you adopt the new capabilities: response_format={"resolution": ...}, scene extension, or first/last frame inputs.

Did pricing change at GA?

No — 720p output is still ~$0.10 per second. What changed is that you now have a ~3x cheaper 360p draft tier below it and 1080p/4K tiers above it.

Can I mix preview and 1.1 calls in one editing session?

Keep a session on one model. previous_interaction_id chains assume the same model is reading its own context; switching IDs mid-chain is asking for continuity drift. Finish existing sessions on the preview string, start new ones on 1.1.

Where do I find the fundamentals — keys, SDK setup, parameters?

In the Gemini Omni Flash API tutorial, which covers AI Studio keys, SDK install, the Interactions API basics, and the full parameter table. This post covers only what changes when you move to 1.1.

Is Omni Flash affiliated with Google?

No. Omni Flash is an independent platform built for the Gemini Omni era. It is not affiliated with Google. Gemini, Gemini Omni, Omni Flash, and related names are trademarks of their respective owners.

Next steps