GEMINI LABJP
VIDEO — Agentic video understanding reached 3.7 Flash, 3.6 Flash, and 3.5 Flash-Lite on September 1. The model navigates the timeline itself rather than sampling frames at a fixed rateTOKENS — Because it pulls transcripts, frames, or audio only when it needs them, Google measures up to 88% fewer tokens on long-form contentSCOPE — It works across both the Interactions and GenerateContent APIs. If you have costed out long-video work before, the assumptions have movedMUSIC — Lyria 3.5 entered public preview on September 3, generating full-length songs at 44.1 kHz stereoCONTROL — Lyria 3.5 accepts text and image inputs, with better musical coherence, more natural vocals, and finer control over duration and structureROBOTICS — gemini-robotics-er-2-streaming-preview is tuned for real-time streaming over the Live API, with function calling that blocks on physical robot actionsVIDEO — Agentic video understanding reached 3.7 Flash, 3.6 Flash, and 3.5 Flash-Lite on September 1. The model navigates the timeline itself rather than sampling frames at a fixed rateTOKENS — Because it pulls transcripts, frames, or audio only when it needs them, Google measures up to 88% fewer tokens on long-form contentSCOPE — It works across both the Interactions and GenerateContent APIs. If you have costed out long-video work before, the assumptions have movedMUSIC — Lyria 3.5 entered public preview on September 3, generating full-length songs at 44.1 kHz stereoCONTROL — Lyria 3.5 accepts text and image inputs, with better musical coherence, more natural vocals, and finer control over duration and structureROBOTICS — gemini-robotics-er-2-streaming-preview is tuned for real-time streaming over the Live API, with function calling that blocks on physical robot actions
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.

gemini115omni-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-09-06
Two Ways to Make a Longer Shot in Gemini Omni 1.1, and Two Different Ways They Break
Omni 1.1 extends scenes in 10-second steps up to 40 seconds cumulative, and interpolates between a pinned first and last frame. Which one you use is decided before your first generation, not after. Here is the planner I run first and the drift check I run last.
API / SDK2026-09-05
Gemini 3.8 Flash Costs the Same Per Token and Can Still Raise Your Bill
Gemini 3.8 Flash carries the same per-token price as 3.7 Flash, but it is designed to work harder, so output tokens can grow and your bill with them. Here is what to measure before you switch, and how to price it across the January boundary.
📚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