●NANOLITE — Nano Banana 2 Lite is here: Google's fastest and most cost-efficient Gemini Image model, made for running lightweight image generation cheaply●OMNIFLASH — Gemini Omni Flash is in public preview, a natively multimodal model that lets enterprises and developers build custom, dynamic video workflows●AGENTS — Managed Agents expand with background: true for async server-side runs and polling, remote MCP server integration, and refreshing credentials across interactions●MEMORY — The Memory Bank IngestEvents API is generally available, decoupling event ingestion from memory generation so you can stream content continuously●THROUGHPUT — Provisioned Throughput now lets you submit up to seven pending orders for the same model and region●DEPRECATE — Image generation models shut down on August 17, and the Grok 4.1 family on the Gemini Enterprise Agent Platform on August 20●NANOLITE — Nano Banana 2 Lite is here: Google's fastest and most cost-efficient Gemini Image model, made for running lightweight image generation cheaply●OMNIFLASH — Gemini Omni Flash is in public preview, a natively multimodal model that lets enterprises and developers build custom, dynamic video workflows●AGENTS — Managed Agents expand with background: true for async server-side runs and polling, remote MCP server integration, and refreshing credentials across interactions●MEMORY — The Memory Bank IngestEvents API is generally available, decoupling event ingestion from memory generation so you can stream content continuously●THROUGHPUT — Provisioned Throughput now lets you submit up to seven pending orders for the same model and region●DEPRECATE — Image generation models shut down on August 17, and the Grok 4.1 family on the Gemini Enterprise Agent Platform on August 20
Still image or short clip? Deciding feature placement from the cost gap between Nano Banana 2 Lite and Omni Flash
When I froze over whether a wallpaper app's hero asset should be a still image or a short moving loop, the deciding factor was not taste but the order of magnitude of the cost. Here is how to normalize Nano Banana 2 Lite and Omni Flash onto the same footing, down to a working decision function.
Should the hero asset on my wallpaper app's home screen stay a still image, or become a quiet three-to-five-second loop? That is where I stalled. A moving asset draws the eye — I knew that much. What I could not grasp, beyond a vague feeling, was what actually changes the moment you make it move.
The deciding factor turned out to be the order of magnitude of the price, not my preference. Once I lined up the July 2026 pricing for Nano Banana 2 Lite and Gemini Omni Flash side by side, it became clear these are numbers you must not compare on the same footing without care. Images run $0.034 per 1,000; video runs $0.10 per output second. Both hide behind the same word — "cheap" — yet per delivered asset they differ by three or four orders of magnitude. Here I want to leave behind the framework I use to turn that gap into a number and decide, feature by feature, which way to lean.
Normalize both prices to "one delivered asset"
The figures on the pricing page do not share a unit. One is per 1,000 images, the other per second. Staring at them in that state, intuition does not kick in, so the first move is to convert both to "how much does one asset that reaches a user cost?"
Model
List price
Per asset
Assumption
Nano Banana 2 Lite
$0.034 / 1,000 images
$0.000034 / image
One still image
Gemini Omni Flash
$0.10 / second
$0.50 / clip
One 5-second clip
Aligned to the same "one asset," a single 5-second clip costs roughly 14,700 times a still image. This is not a rounding matter. A million still images stays inside $34, while a million 5-second clips reaches $500,000. For an indie budget, that one line settled it: video is not something you hand out to every asset, but something you place on a select few.
The important part of normalizing is to set the video length to your real operating value. At first I treated "video equals a few seconds" loosely in my head. But five seconds versus eight changes the cost by sixty percent outright. Seconds should be held as a design variable, not a spec.
Deciding on list price alone gets you at month-end
The list price is only one generation call. In real operation, costs hang off both ends of it. The three items I folded into the formula after getting burned by an invoice were these.
The first is the regeneration rate. A composition or color rarely lands on the first try. For wallpaper images, to keep 100 I was actually generating 300 to 400 and sieving out the broken ones. If yield is one-third, the effective unit price is three times the list. Video weighs on this even harder, because — as covered below — each conversational re-edit is billed by the second again.
The second is moderation and review. If you serve generated output straight to users, you need a stage that rejects the inappropriate. By hand that costs time; by machine it adds another API bill. The review cost of a single still image can even exceed its generation price, and when it does, the "cheap to generate" advantage is cancelled out at review.
The third is delivery bandwidth and storage. This is where still image and video diverge decisively. Between a tens-of-KB image and a five-second clip that can reach several MB, CDN transfer volume shifts by two orders of magnitude. In an app with heavy downloads, there are situations where the monthly delivery bill matters more than the generation cost. When the delivery gap stacks on top of the generation gap, I realized video swells in cost not at the "make it" stage but at the "hand it out" stage.
✦
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
✦How to normalize the price of one image versus five seconds of video to a per-delivered-asset basis so the gap is a real number
✦The three hidden costs (regeneration rate, moderation, delivery bandwidth) that price alone hides, folded into the formula
✦A working decision function (TypeScript) that takes asset parameters and returns the recommended medium plus a monthly projection
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.
Running production on "probably about this much" is the most dangerous place to be. I turned the three items above into a formula and wrapped it in a function that takes asset parameters and returns the recommended medium and a monthly projection. Here is the minimal version I actually keep at hand, as-is.
type MediumInput = { monthlyAssets: number; // new assets delivered per month videoSeconds: number; // seconds per clip if going video yieldRatio: number; // kept / generated. 0.33 = 1 in 3 kept editPasses: number; // avg conversational re-edits per clip avgDownloads: number; // expected downloads per asset cdnPerGB: number; // CDN transfer price (USD/GB)};const IMAGE_PER_UNIT = 0.034 / 1000; // $/imageconst VIDEO_PER_SEC = 0.10; // $/secondconst IMAGE_MB = 0.05; // assumed still-image sizeconst VIDEO_MB_PER_SEC = 0.6; // assumed video size per secondfunction estimate(input: MediumInput) { const { monthlyAssets, videoSeconds, yieldRatio, editPasses, avgDownloads, cdnPerGB } = input; // Generation (divide back by yield). Video also bills re-edits by the second. const genImage = (IMAGE_PER_UNIT / yieldRatio) * monthlyAssets; const videoUnit = VIDEO_PER_SEC * videoSeconds * (1 + editPasses); const genVideo = (videoUnit / yieldRatio) * monthlyAssets; // Delivery (size x downloads x transfer price) const gbImage = (IMAGE_MB * avgDownloads * monthlyAssets) / 1024; const gbVideo = (VIDEO_MB_PER_SEC * videoSeconds * avgDownloads * monthlyAssets) / 1024; const cdnImage = gbImage * cdnPerGB; const cdnVideo = gbVideo * cdnPerGB; const image = genImage + cdnImage; const video = genVideo + cdnVideo; return { imageMonthlyUSD: Number(image.toFixed(2)), videoMonthlyUSD: Number(video.toFixed(2)), ratio: Number((video / image).toFixed(1)), recommend: video > image * 20 ? "image" : "video-ok", };}
The crux of this function is that it adds generation and delivery before comparing. Look at generation alone and the still image wins outright; add delivery and the gap narrows. Put the other way, while downloads have not grown, video's delivery cost is still small, so placing a single video on one hero asset is realistic. The recommend threshold — 20x here — is a design value you set from how much cost difference that feature can tolerate. Holding the number as a formula let me debate that threshold as a policy rather than a gut feeling.
Where I actually drew the line with this standard
The primary generation of several hundred backgrounds for the wallpaper app leans, without hesitation, on Nano Banana 2 Lite. You simply cannot put video's unit price on a stage you run at volume on the assumption of throwing most away. This is still image's exclusive territory.
On the other hand, a slot that places a single "image of the day" at the top of the app struck me as worth considering a quiet five-second loop for. This is a slot of maybe 30 clips a month, refined through repeated edits. Feeding the function 30 clips, 8 seconds, 2 edits, and modest downloads, the monthly video figure did not reach hundreds of times the still image; it landed within a range that fit the experience gain of a hero. It breaks if you spread it everywhere, but a single point of luxury holds. That line was the conclusion I drew from the numbers.
It ties cleanly into monetization, too. Assets like video, whose per-unit cost is clearly high, make sense to gate behind a rewarded-ad view or a premium membership. Hand out something that costs an order of magnitude more to everyone for free, and the deeper your downloads run, the deeper the loss. My thinking shifted toward reflecting the cost structure directly in the terms of delivery.
Fold the re-edit cost of conversational editing into the estimate
Omni Flash's signature is conversational editing — swapping characters, relighting a scene, changing the angle, all through natural-language instructions. That the original audio and video tracks are preserved natively is a real advantage when reworking a clip (hold this as a documented behavior and confirm exactly how it lands on your own assets).
From the decision-making angle, though, that ease of editing is simultaneously a cost risk. Each conversational edit incurs another charge by the second. Nudge a 5-second clip "a bit darker," "angle slightly up" three times, and that one clip's effective cost balloons from $0.50 to $2.00. I made editPasses an independent variable in the function above precisely to keep this "the more you fix it, the pricier it gets" property from hiding in the estimate. With a still image, reworking is regeneration at the same unit price; with video, the more you refine, the more the unit cost accumulates. Choose video "because it is easier to adjust" without knowing that asymmetry, and month-end gets you.
I too first saw the ease of editing as a pure advantage. Only after putting editPasses into the formula did it settle that it is both an advantage and a cost amplifier. Touch it, turn it into a number, and only then could I treat it as a design decision — that was the order it came in.
First, fill in this formula once for your own feature
If you have a feature you are stalling over right now — still image or video — put your own operating values into the function above and line up the two monthly figures. How many assets a month, what yield, how many downloads. Filling in just those three tends to reveal that much of the hesitation was a question of order of magnitude, not taste.
Cost design is unglamorous work, but get the order of magnitude wrong and indie development does not last. I am still updating the numbers as I operate, but I would be glad if this helps anyone stalling over the same placement decision. Thank you for reading.
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.