◉GEMINI LABJP
●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down 10/23, 6 days left. Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down 10/23, 6 days left. Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…
Articles/Advanced
⬡ Advanced/2026-07-10Advanced

Images Made With a Retiring Model Can Never Be Made Again — Tracking Regenerability in a Ledger

When Gemini's image generation models shut down on August 17, the assets you made with them can no longer be reproduced the same way. Here is the ledger design and code I use to decide, before the deadline, which assets are regenerable and which must be frozen.

Gemini API249Image Generation7Model Migration8Asset ManagementIndie Development16

✦ Premium Article

I stopped mid-migration, staring at a directory.

The call-site audit was done. Every script and month-end batch that touched a retiring model ID had been found. All that remained was swapping in the new GA model. Then I opened the asset directory for my wallpaper app.

Several hundred images sat there, all produced by the model that is going away. Some already shipped. Some queued for re-export at new device resolutions. And I could not answer a simple question about any of them: if I send this same prompt to the new model, will I get the same look back?

Migration was never about rewriting a model ID. It was about settling the regenerability of past assets before the shutdown date arrives.

Migrating your call sites does not migrate your assets

The usual story about a deprecation notice has two acts. Find the call sites, pick the replacement model, swap it in. That territory is covered in auditing every call site before the August 17 shutdown.

Image generation, though, differs from text generation in one decisive way. The output itself becomes a long-lived asset.

With text, a new model that produces a semantically equivalent answer from the same input causes no practical trouble. Images do not work that way. If I regenerate one image out of a five-image wallpaper series with a new model, the palette and brushwork will not line up. Put them side by side and the seam is visible immediately.

So the real shape of the problem looked like this.

TargetBefore shutdownAfter shutdown
Code call sitesSwap the model IDStill fixable at any time
Existing assetsDetermine regenerabilityThe means of determining it is gone

That bottom-right cell is the whole point. Once the old model is retired, you cannot call it. Which means you can no longer measure how closely a new model's output resembles the old one. That measurement is only possible before the deadline. The moment I understood that asymmetry, my priorities reordered themselves.

What I had failed to record

The first wall I hit was that my assets carried no record of which model or which prompt had produced them.

File names were sequential: wp_aurora_03.png. The generation script held prompts in variables, saved the image on success, and exited. Back then I assumed I could always make more. Recording felt pointless. I never imagined the model disappearing.

That regret became the design requirement. Some information exists only at the moment of generation. Miss it, and it cannot be reconstructed later.

Six fields turned out to be the minimum a provenance ledger needs.

FieldWhy it matters
model_idPrimary signal for deprecation impact. Record the resolved model, never an alias like -latest
prompt / negative_promptThe only input for regeneration. A one-character difference changes the look, so store it verbatim
paramsAspect ratio, image count, safety settings — anything that steers the output
output_sha256Binds ledger rows to files. Survives renames and directory moves
embeddingThe reference vector for drift measurement. The old model's trace, kept after the model is gone
generated_atSeparates drift caused by minor model updates over time

The fifth field is the keystone. After the shutdown you cannot invoke the old model, but the images it produced are still sitting on disk. Embed them with gemini-embedding-2, store the vectors, and you can keep measuring how far any new model's output drifts from the original look — long after the model itself is gone. What disappears is the model, not the evidence of what it made.

✦

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
✦A provenance ledger schema that captures model ID, prompt, and output hash, plus a backfill script for assets that were never recorded
✦Measuring old-vs-new model output drift with gemini-embedding-2 image embeddings, using cosine 0.86 as the machine-readable regenerable/frozen boundary
✦A two-layer pipeline that skips generation for frozen assets and routes only derivative work (resolution variants) through the new model
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 $10 for lifetime access
View Membership →

Related Articles

◈ API / SDK2026-10-08
When a Deprecation Has No Shutdown Date: Re-Picking an Image Model on Three Conditions
gemini-nano-banana-2.1 went GA on October 6, and gemini-3.1-flash-image was deprecated with no shutdown date. Here is a table and a short script for choosing a replacement by resolution, reference images, and search grounding.
◈ API / SDK2026-08-17
After generated_images Disappeared: Three Branches Between the Response and a Saved File
Once you switch to generate_content, the line that breaks is usually the save. Here are the three branches on the response side - zero image parts, a shifting image count, and picking the extension - plus a receiver function you can drop in.
◈ API / SDK2026-08-14
Rewriting generate_images as generate_content, where the arguments actually go
Ahead of the August 17 Imagen shutdown, I checked the SDK directly: of the 17 arguments in GenerateImagesConfig, only 5 move across unchanged. Here is the mapping, a compatibility layer that keeps callers working, and a way to verify the request shape without an API key.