Veo 3.1 is deprecated Oct 22. Your pipeline needs one edit

If your pipeline starts with a veo-3.1-*-preview call on the Gemini API, it has about a week left. Several of the guides you'll find when you search for this still say Veo 3.1 is current and that you can move to Omni whenever pricing settles. Google's deprecations table disagrees, and that's the document that decides whether your next request returns an MP4 or an error.
Quick answer: Veo 3.1 deprecated means exactly three model IDs on the Gemini API:veo-3.1-generate-preview,veo-3.1-fast-generate-preview, andveo-3.1-lite-generate-preview, all listed for shutdown on October 22, 2026, withgemini-omni-1.1-flashnamed as the replacement (Google's deprecations page). The hard way is a rewrite, because Omni is not a drop-in: a VeopredictLongRunningcall becomes a background job you submit toPOST /v1beta/interactionsand poll, with a 10-second base clip and 720p default output. The part you don't have to rewrite is everything after the clip: keep resize, captions, and watermarks behind one API call to FFmpeg Micro and the only thing that changes on October 22 is the generation step.
The three model IDs that stop working on October 22, 2026
Google's Gemini API deprecations page lists the three Veo 3.1 preview IDs together with the same shutdown date, so the question "is my ID one of them?" has a short answer: if the string contains preview, yes.
| Model ID | Status | Shutdown |
|---|---|---|
| `veo-3.1-generate-preview` | Deprecated | October 22, 2026 |
| `veo-3.1-fast-generate-preview` | Deprecated | October 22, 2026 |
| `veo-3.1-lite-generate-preview` | Deprecated | October 22, 2026 |
| `gemini-omni-flash-preview` | Deprecated | Already gone (Sept 30, 2026) |
| `gemini-omni-1.1-flash` | GA since Aug 27, 2026 | Replacement |
Google describes its published shutdown dates as the earliest possible retirement, communicated with advance notice, so in theory you get warning before the lights go out. In practice, plan for a 404 on the 22nd and be pleasantly surprised if you get a week of grace. The preview ID that died on September 30, gemini-omni-flash-preview, went away on its date, and we wrote up that swap to Omni 1.1 Flash when it did.
Vertex AI runs on a different clock, which buys weeks and not a fix
The Vertex AI route keeps the Veo call shape alive for a short while longer. Google's Vertex model page puts veo-3.1-generate-001 and veo-3.1-fast-generate-001 on a retirement date of November 17, 2026 or later, so moving the same prompt to Vertex is a stopgap that costs you an auth change and buys about four weeks. It also costs you the thing you actually wanted, which is one migration instead of two.
If your deadline pressure is real, use Vertex to get past the 22nd and schedule the Omni work for the same sprint. Don't treat the -001 IDs as the landing spot.
What the new call looks like: a generate call becomes a poll loop
The shape change is the whole migration. Veo on the Gemini API was a long-running predict: you posted to the model with an instances array and polled the returned operation name.
# Dies October 22, 2026
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/veo-3.1-generate-preview:predictLongRunning" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"instances":[{"prompt":"cyclist riding through neon rain, slow pan"}]}'
Omni is an Interactions call. You submit the request to the interactions collection as a background job, get an interaction ID back, and poll that ID until the video is ready. Check Google's Omni docs for the current field names before you ship, because the surface is young, but the endpoints are the part that matters to your code:
# Submit
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"inputs": [{"text": "cyclist riding through neon rain, slow pan"}],
"background": true
}'
# Poll
curl "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Three defaults move with the model. Omni generates a 10-second base clip, extendable in 10-second steps to roughly 40 seconds. Output is 720p by default, with 360p, 1080p, and 4K available. And responses over 4 MB hand back a URI instead of inline base64, which breaks any output handler that assumed it could always read bytes out of the JSON.
Three generation models moved in 30 days. Your resize step moved zero times.
Count the breaks a video builder absorbed this quarter. OpenAI removed the Videos API and every Sora 2 model ID on September 24 with no replacement named. Google deprecated gemini-omni-flash-preview on September 30. Azure Foundry retires sora-2 on October 15 with nowhere to go. LTX expires its V1 /v1/text-to-video and friends on October 26. The Veo 3.1 previews go dark on October 22.
Now count the changes to the steps after the clip. Reframing to 9:16 didn't change. Burning an SRT didn't change. Stamping a logo in the bottom-right corner didn't change. Compressing to a bitrate that TikTok accepts didn't change. The volatile layer in an AI video pipeline is the model, and it's the only layer most builders have abstracted the least.
That's the argument for putting the deterministic half behind an API you call the same way every month. One POST /v1/transcodes to FFmpeg Micro handles the resize, the caption burn, the watermark, and the compression, and it takes the Omni clip exactly the way it took the Veo clip, because it only cares about the file. Alexander Schmucker at TipsyTech Games describes going from three to four minutes of hand-editing per video to an automated pipeline, and that pipeline survived every one of the model changes above without a code edit. More than 300 builders run FFmpeg Micro from Make or n8n, and the quickstart is the fastest way to see the job shape: upload, submit, poll, download.
The n8n and Make swap: replace one node, touch nothing else
In n8n and Make, the migration is a single-node edit, assuming your scenario keeps generation and processing in separate nodes. Only the generation row changes:
| Pipeline step | Before Oct 22 | After Oct 22 |
|---|---|---|
| Generate clip | Gemini node, `veo-3.1-generate-preview` | Gemini node or HTTP Request, `gemini-omni-1.1-flash` |
| Save the file | Google Drive / S3 node | Unchanged |
| Reframe to 9:16, 1:1, 4:5 | FFmpeg Micro job node | Unchanged |
| Burn captions | FFmpeg Micro job node | Unchanged |
| Watermark | FFmpeg Micro job node | Unchanged |
| Publish | Social node | Unchanged |
For n8n, the built-in Google Gemini node exposes "Generate a Video" and "Download Video" operations. If your version doesn't offer an Omni-aware video operation yet, drop in an HTTP Request node pointed at /v1beta/interactions plus a Wait node for the poll, which is where most people end up anyway during a model transition. Check your templates too: the popular community workflow 11276 ("Generate & publish AI videos with Sora 2, Veo 3.1, Gemini and Blotato") hard-codes two models that are now dead or dying. If you've been through this before, the same decoupling logic applies as in getting FFmpeg out of your n8n Docker image.
For Make, the October 2, 2026 release note moved the Google Gemini AI "Generate a video" module to gemini-omni-1.1-flash, added output resolution and generation task options, and told scenario owners to reopen affected scenarios because the old model stopped working after September 30. Make's modules changed twice in ten days. Open each scenario, re-map the module's new fields, and leave the FFmpeg Micro module exactly as it is.
Pitfalls that cost people a weekend
Reading inline base64 unconditionally is the first one. Once a clip crosses 4 MB, Omni returns a URI, so your handler needs both branches or it will fail on exactly the clips you care about.
Assuming the model can hand you 1:1 or 4:5 is the second. Omni renders 16:9 and 9:16 and nothing else, same as every Veo variant before it, so square and vertical-portrait Meta placements are a post-generation job no matter which generator you pick. We covered what that means for ad pipelines in Meta generative video ads still leave you 3 render jobs.
Treating the provider URL as storage is the third, and it's the one that silently loses work. Google deletes a generated file after about two days. xAI's Batch API result URLs for video expire after one hour. Save and re-host before you do anything else in the run, including the human review step.
Last, watch your clip-length math. If your concat step assumed Veo's output duration and now receives a 10-second base clip, your stitched video gets shorter without anything throwing an error. Count duration from the file, not from a constant in your workflow.
What this costs to run
Generation pricing is per second and set by Google. The processing layer after it is priced on input duration at FFmpeg Micro: one token buys 10 seconds of input video, metered per second with no rounding up to the minute. A 10-second Omni clip is one token. A new account gets 200 tokens free, about 33 minutes of video, with no credit card, so a full migration test run of 200 clips fits inside the free tier. Billing follows the video you processed, not how long the servers took, and failed jobs are never billed, which matters while you're debugging a new model's output.
FAQ
Is Veo 3.1 really shutting down, or only the preview models?
The three preview IDs on the Gemini API are what Google lists for shutdown on October 22, 2026. Veo 3.1 as a model family continues on Vertex AI under the -001 IDs, which carry their own retirement date of November 17, 2026 or later.
What happens if I call veo-3.1-generate-preview after October 22?
A request to a retired Gemini model ID fails rather than silently falling back to a successor, so a workflow that doesn't check status will push an empty or errored item downstream. Add a status check on the generation node before the save step, whichever model you're on.
Will my Make scenario update itself to gemini-omni-1.1-flash?
Make updated the Google Gemini AI video module itself in its October 2, 2026 release, but the release note tells users to reopen affected scenarios, because the module gained new options and the old model stopped working. Open each scenario and re-map the fields by hand.
How do I get 1:1 or 4:5 video if Omni only renders 16:9 and 9:16?
Reframing to 1:1 or 4:5 happens after generation, as an explicit crop-or-pad job on the clip the model gave you. That step is identical whether the clip came from Veo, Omni, Kling, or a camera, which is why it's worth keeping it outside your generation code.
Does migrating to Omni change my caption step?
Captions keep working, but the timing inputs change if clip length changes. A caption file cut against a Veo-length clip won't line up against a 10-second Omni base clip, and the fix is timing math rather than a format swap, which we broke down in Transcription API to SRT isn't a format swap.
You have about a week to rewrite one call. If you'd rather the rest of the pipeline stay fixed through the next model move, the FFmpeg Micro quickstart creates a temporary API key and runs the upload, transcode, poll, and download for you, on the free tier, before you commit a line of workflow JSON.
About Javid Jamae
Founder & CEO at FFmpeg Micro
Javid is a software engineer, author, and entrepreneur with over 25 years of professional software development experience across enterprise, startup, and consulting environments. He founded FFmpeg Micro to make video processing accessible to developers through a simple, automation-first REST API.
You might also like

gemini-omni-flash-preview is deprecated. Swap to Omni 1.1 Flash
gemini-omni-flash-preview was deprecated September 30, 2026. Swap to gemini-omni-1.1-flash in n8n, Make or curl, then reframe the 1080p output to 9:16.

A model swap isn't the Sora API shutdown alternative for n8n
The Sora API shutdown alternative for n8n: swap in an async Veo 3.1 or Kling 3.0 call, then normalize the output with reframe, concat, captions and audio mix.
AI Avatar Video Automation Breaks at Assembly, Not Generation
AI avatar video automation stalls after the talking head renders. The assembly chain: stitch b-roll, burn captions, add a music bed, and ship 9:16 vertical.
Ready to process videos at scale?
Start using FFmpeg Micro's simple API today. No infrastructure required.
Get Started Free