GEMINI LABJP
GA — Gemini Omni Flash reached general availability on August 27 as gemini-omni-1.1-flash, the conversational video generation and editing modelEXTEND — You can now continue an existing clip by generating past its end, either through the extend task or straight from a prompt, working around the short duration limitRESOLUTION — video_config gains a resolution parameter offering 360p, 720p, 1080p, and 4k. The two highest tiers are produced by upscaling, so results vary with the sourceDEPRECATION — gemini-omni-flash-preview shuts down on September 30, so any production code still pointing at the preview endpoint needs to move overTRANSCRIBE — Gemini 3.5 Transcribe and Transcribe Live went GA on August 26 with language detection across 85+ languages, speaker diarization, and word-level timestampsSHUTDOWN — gemini-robotics-er-1.6-preview retires on August 31, two days from now, with the ER 2 line in public preview since July 30 as the migration pathGA — Gemini Omni Flash reached general availability on August 27 as gemini-omni-1.1-flash, the conversational video generation and editing modelEXTEND — You can now continue an existing clip by generating past its end, either through the extend task or straight from a prompt, working around the short duration limitRESOLUTION — video_config gains a resolution parameter offering 360p, 720p, 1080p, and 4k. The two highest tiers are produced by upscaling, so results vary with the sourceDEPRECATION — gemini-omni-flash-preview shuts down on September 30, so any production code still pointing at the preview endpoint needs to move overTRANSCRIBE — Gemini 3.5 Transcribe and Transcribe Live went GA on August 26 with language detection across 85+ languages, speaker diarization, and word-level timestampsSHUTDOWN — gemini-robotics-er-1.6-preview retires on August 31, two days from now, with the ER 2 line in public preview since July 30 as the migration path
Articles/API / SDK
API / SDK/2026-08-29Intermediate

Should Omni Flash Hand You the 4K, or Should You Upscale at the Last Step?

In Gemini Omni Flash, 1080p and 4K are upscaled outputs. Here is how to pick the upscale point by working backwards from your delivery target, plus a script that checks whether the detail matches the nominal resolution.

gemini110omni-flash2video6interactions-api5resolution

Premium Article

Every time a new iPhone ships, I add another branch to the resolution logic in my wallpaper apps. More points on screen means different real pixels in the file I hand over, so no matter how carefully the source is built, the last step is always cutting it to fit the bucket on the receiving end. On Android I once lost resources entirely to density splitting and had to move them into drawable-nodpi/ to get them back.

What decides the resolution of a delivered asset is not the source. It is the condition on the receiving side. As an indie developer, getting that order backwards turns straight into lost hours.

Now that gemini-omni-1.1-flash is generally available, you can pick a video output resolution anywhere from 360p to 4k. But the documentation is explicit that 1080p and 4K are produced by upscaling. Reaching for "4K, just to be safe" repeats exactly the mistake I made with wallpapers.

resolution lives in response_format, not video_config

The first thing to trip over is where the parameter goes. Resolution belongs in response_format, not in generation_config.video_config. What goes into video_config is task — one of text_to_video, image_to_video, reference_to_video, edit, or extend.

Put it in the wrong place and the request still succeeds. You simply get the default 720p back. There is no error to catch it, so run ffprobe on your very first output.

import base64
from google import genai
 
client = genai.Client()
 
interaction = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input="A drone shot of a mountain landscape at sunrise.",
    response_format={
        "type": "video",
        "aspect_ratio": "9:16",   # 16:9 is the default, so portrait must be explicit
        "resolution": "1080p",    # here, not in video_config
    },
)
 
with open("hires.mp4", "wb") as f:
    f.write(base64.b64decode(interaction.output_video.data))

Here is what the values mean.

ValueOutputHow it is produced
360p360pNative
720p720p (default)Native
1080p1080pUpscaled
4k4KUpscaled

So the native ceiling of this API is 720p. The 1080p and 4K options are names attached to a stretched version of that. The full table lives in the Gemini Omni Flash documentation.

What 4K adds, and what it does not

Knowing the word "upscaling" is not the same as knowing what it costs you. Before spending API calls, I checked the property on synthetic footage at my desk.

Three clips, all two seconds, 24fps, CRF 18, all with a nominal size of 3840x2160:

  1. A frame full of fine stripes and hard edges, authored at 3840x2160 from the start (native 4K)
  2. The same picture authored at 1280x720 and stretched to 3840x2160 with Lanczos (upscaled 4K)
  3. A smooth gradient with almost no fine detail, authored at 3840x2160 (native 4K, but flat)

Read them with ffprobe and all three report 3840,2160. The container metadata gives you nothing. The bitrate, on identical encoder settings, splits them wide open.

ClipNominal sizeBitrateFile size (2s)
Native 4K (detailed)3840x216017.19 Mbps4,299,566 B
Upscaled 4K3840x21607.25 Mbps1,812,869 B
Native 4K (flat)3840x21600.59 Mbps147,756 B

At the same size and the same CRF, the upscaled clip lands at roughly 42% of the native bitrate. An encoder does not spend bits on detail that is not there, which is obvious in hindsight and still worth measuring. Asking for 4K increases dimensions, not information.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You will be able to lock the delivery requirement before choosing a resolution, so you never ship a 4K file that gained dimensions and nothing else
You will be able to tell, with ffmpeg and about 40 lines of Python, whether a returned mp4 actually carries detail worth its nominal resolution
You will be able to decide resolution by payload size rather than by picture quality, using the fact that upscaled output lands at under half the bitrate at the same CRF
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Gemini Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

API / SDK2026-07-07
Extract Social Media Promo Metadata From Short Videos in One Omni Flash Pass
Hand a short clip to the public preview of Gemini Omni Flash once and get captions, chapters, and highlight timestamps back as structured JSON. Covers how this differs from a frame-extraction multi-call setup, where fps and media_resolution actually matter, and a per-clip cost estimate — from the angle of keeping an indie promo workflow moving.
API / SDK2026-08-23
Moving app AI work from runtime calls to a pre-ship batch pass
Where you put a Gemini call decides whether your request count scales with users or with assets. Here is the decision rule I used to move classification into a pre-ship batch pass, plus a resumable implementation.
API / SDK2026-08-22
Once You Pass Twenty Mediation Groups, How Do You Find the Setting That Went Missing?
As ad mediation groups multiply, missing sources and type drift accumulate quietly. Here is the split I settled on: normalize the settings into one matrix, let code confirm the gaps, and send Gemini only the cells that need judgment.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →