Veo 3.1 preview ids shut down October 22: a swap checklist

Three Veo 3.1 preview ids end on October 22, 2026, and Google points to gemini-omni-1.1-flash. A request translator and the Sume model id for the same family.

5 min readSume
All posts

Google's deprecations page lists veo-3.1-lite-generate-preview, veo-3.1-generate-preview and veo-3.1-fast-generate-preview as shutting down on October 22, 2026, with gemini-omni-1.1-flash as the recommended replacement. That is 17 days after 2026-10-05. Sume's catalog does not carry Veo 3.1, but it does carry the Omni model under the id gemini-omni-flash-1.1.

What the page says

Veo 3.0 and 2.0 ids already shut down on June 30, 2026, and the older 3.0 previews on November 12, 2025. The Omni Flash row shows no shutdown date announced. Note the id order differs by product: Google writes gemini-omni-1.1-flash, Sume writes gemini-omni-flash-1.1.

Veo preview shutdowns and the replacement id (read 2026-10-05)
Google idShutdown dateRecommended replacement
veo-3.1-lite-generate-preview2026-10-22gemini-omni-1.1-flash
veo-3.1-generate-preview2026-10-22gemini-omni-1.1-flash
veo-3.1-fast-generate-preview2026-10-22gemini-omni-1.1-flash
veo-3.0-generate-0012026-06-30veo-3.1-generate-preview

Check each feature before you swap

Veo takes 4, 6 or 8 seconds, so every Veo duration fits inside Sume's 3 to 10 second Omni range. Veo reference images top out at three and Omni on Sume allows ten. Two things do not carry over: Veo's video extension (Sume exposes no extend field) and Veo's lastFrame argument, which maps to end_image_url on the Video Router or a last_frame entry in frame_images on /v1/videos.

A translator that fails loudly

The function below maps a Veo-style settings dict to a Sume body and raises on anything it cannot carry over, so a silent downgrade never ships.

def veo_to_sume(req):
    if req.get("extend"):
        raise ValueError("extend is not exposed on Sume's Omni row")
    res = req.get("resolution", "720p").lower()
    if res not in ("720p", "1080p", "4k"):
        raise ValueError(f"unsupported resolution {res}")
    body = {
        "model": "gemini-omni-flash-1.1",
        "prompt": req["prompt"],
        "duration": int(req.get("seconds", 8)),
        "resolution": res.upper() if res == "4k" else res,
        "aspect_ratio": req.get("aspect_ratio", "16:9"),
    }
    if body["aspect_ratio"] not in ("16:9", "9:16"):
        raise ValueError("Omni takes 16:9 or 9:16 only")
    frames = []
    if req.get("image"):
        frames.append({"type": "image_url", "frame_type": "first_frame",
                       "image_url": {"url": req["image"]}})
    if req.get("last_frame"):
        frames.append({"type": "image_url", "frame_type": "last_frame",
                       "image_url": {"url": req["last_frame"]}})
    if frames:
        body["frame_images"] = frames
    return body

print(veo_to_sume({"prompt": "A kite over dunes", "seconds": 6, "resolution": "1080p"}))

Cutover week plan

Because the shutdown date applies to the preview ids, an old id that works today may return an error after the date. A test that calls the old id on the 23rd would be a useful tripwire in staging.

  • Day 1: list every place that sends a Veo preview id, including cron jobs and staging.
  • Day 2: run your ten worst prompts through both ids and keep the outputs.
  • Day 3: switch the default and keep the old id behind a flag until the 22nd.
  • After the 22nd: delete the flag and the old id from config.

Cost and cutover

Move the traffic in a weekend, not on the 22nd. Run both ids in parallel, compare outputs on your ten worst prompts, and switch the default. On Sume the Omni 1080p tier lists at $0.15 per second and bills $0.1875 per second before cent rounding, so an 8-second clip is $1.20 list and $1.50 billed. See the Video Router for the catalog.

Sources

Related posts

More in Models

All Models posts

Written by Sume