Gemini Omni Flash 1.2

Gemini Omni Flash 1.2 is Google's multimodal video model for generating, editing, and extending clips with native synchronized audio. It generates up to 15 seconds from text or a single starting image, edits source videos of up to 15 seconds with optional reference images, and keeps characters, products, and brand details consistent across reference images and videos. Output runs from 360p for quick drafts to 1080p and 4K for delivery, which suits high-volume work such as product clips, virtual try-ons, and ad variations.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesExtending video
How to extend a clip with Gemini Omni Flash 1.2: writing what happens next, keeping or cutting the shot, carrying the audio, and chaining extensions into a longer video.
Introduction
Gemini Omni Flash 1.2 can add seconds to the end of a clip you already have, from 3 to 10 per request. You send the clip with a duration and a prompt that says what happens next, and the model returns the source and its continuation as one video, sound included.
Extending fixes a shot that stops too early, such as a drone pass that ends before the villa or an unboxing that cuts before the product is out of the box. An extension takes no reference images, so everything new in the continuation comes from the source and the prompt.
A drone shot glides low over a turquoise lagoon toward a row of overwater villas with thatched roofs at a tropical island resort, in golden late-afternoon light, with gentle ripples on the water. Single continuous shot, no scene cuts. Audio: ocean waves and a light breeze. No music, no dialogue, no on-screen text.
The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text.
Request shape
The source clip goes in inputs.video, by URL or UUID, and sending duration turns the request into an extension. It sets how many seconds to add, from 3 to 10. Send the same request without duration and the model edits the clip in place instead, which Editing video covers.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'google:gemini@omni-flash-1.2',
positivePrompt: 'The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text.',
resolution: '1080p',
duration: 8,
inputs: {
video: 'https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/source-hero.mp4'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text.",
"resolution": "1080p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/source-hero.mp4"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "776be20d-5cce-4161-951f-bafbe72abbd9",
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text.",
"resolution": "1080p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/source-hero.mp4"
}
}
]'runware run google:gemini@omni-flash-1.2 \
positivePrompt="The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text." \
resolution=1080p \
duration=8 \
inputs.video=https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/source-hero.mp4{
"taskType": "videoInference",
"taskUUID": "776be20d-5cce-4161-951f-bafbe72abbd9",
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "The scene continues as one continuous drone shot, with no cuts. The drone flies on toward the nearest overwater villa, rises over its thatched roof, and tilts down in the same move onto its private deck, with an infinity pool and two white loungers. Audio: the waves and the light breeze carry on. No music, no dialogue, no on-screen text.",
"resolution": "1080p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/source-hero.mp4"
}
}Response
[
{
"taskType": "videoInference",
"taskUUID": "776be20d-5cce-4161-951f-bafbe72abbd9",
"videoUUID": "ea3d6ac5-d33a-4b57-a6fc-f55fc48a4e63",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/ea3d6ac5-d33a-4b57-a6fc-f55fc48a4e63.mp4"
}
]The source can run from 1 to 27 seconds and be up to 32 MiB. The response holds the whole video: the hero comes back as its 6 source seconds followed by the 8 new ones.
Two things work differently from a text-to-video request:
- Sizing goes through the resolution tier alone.
widthandheightare rejected wheneverinputs.videois present, and the output keeps the aspect ratio of the source. Each example here setsresolutionto the tier its source was generated at. - Reference inputs are rejected. An extension takes no
inputs.referenceImagesorinputs.referenceVideos, so anything new has to be described in the prompt.
Writing the continuation
The prompt describes only what happens next, since the source already shows the scene. Open with "The scene continues", then say what the camera and the subject do next and how the sound carries on:
The prompt never mentions the lagoon or the golden light, since the source already supplies them. There is no negative prompt either, so exclusions such as "No music" go at the end as plain sentences.
Timing the added seconds
Bracketed timecodes work in an extension, and they count from the start of the added part. On a 6-second source, [0-3s] covers seconds 6 to 9 of the finished video. Put one timecode per line and let the last one end at the duration:
The scene continues from the same overhead angle, with no cuts.
[0-3s] The hands fold back the tissue paper, revealing a matte black wireless earbuds case.
[3-6s] One hand lifts the case out and flips open the lid, showing the two earbuds inside.
[6-8s] The hands set the open case down in the center of the table and pull out of frame.
Audio: tissue paper rustling, then the soft click of the case lid. No music, no dialogue, no on-screen text.Overhead shot of a plain white gift box on a light oak table. Two hands lift the lid off and set it aside, revealing folded gray tissue paper inside. Soft daylight from a window. Single continuous shot, no scene cuts. Audio: cardboard sliding and tissue paper rustling. No music, no dialogue, no on-screen text.
The scene continues from the same overhead angle, with no cuts. [0-3s] The hands fold back the tissue paper, revealing a matte black wireless earbuds case. [3-6s] One hand lifts the case out and flips open the lid, showing the two earbuds inside. [6-8s] The hands set the open case down in the center of the table and pull out of frame. Audio: tissue paper rustling, then the soft click of the case lid. No music, no dialogue, no on-screen text.
Put the camera direction above the timecodes, where it holds for every beat. Keep one action per beat, and in a product reveal save the last beat for the product at rest, so the clip ends on it in full view.
Same shot or a new shot
By default the model often moves through several shots, so say which one the extension is. For the same shot, write "single continuous shot" or "no cuts" and describe where the camera goes next. For a new one, open with "Cut to" and give the new framing. Both prompts below extend the same source:
A woman trail runner in a teal running jacket and black tights runs along a narrow rocky ridge trail at sunrise, with mountains and a misty valley behind her. A drone tracks alongside her at shoulder height. Single continuous shot, no scene cuts. Audio: her footsteps on gravel, steady breathing, and wind. No music, no dialogue, no on-screen text.
The scene continues as the same single continuous shot, with no cuts. The drone keeps tracking alongside the same runner in the teal jacket and black tights as she reaches the top of the ridge, slows to a walk, and stops to look out over the valley. Audio: her footsteps slow down, and her breathing and the wind carry on. No music, no dialogue, no on-screen text.
Cut to a new shot: a low close-up at trail level as the same runner in the teal jacket and black tights runs toward the camera and past it, her trail shoes kicking up dust from the rocky path. Audio: the wind carries on across the cut, with her footsteps landing on gravel close to the camera. No music, no dialogue, no on-screen text.
Name the people who stay by what the viewer sees. Both prompts call her "the same runner in the teal jacket and black tights", which matters most across the cut: the framing changes completely, and the outfit is what ties the new shot to the source.
Carrying the audio
Every extension comes with new sound, and the model picks its own when the prompt says nothing about it. For ambience, name what carries on, as the hero does with "the waves and the light breeze carry on". For music, say which section the track moves into and what comes in. This brand spot opens on a solo piano intro:
The scene continues as the same single continuous shot, with no cuts, in the same dark studio with the same bottle. The camera keeps the same framing and circles slowly to the right as water ripples outward across the black stone around the bottle. Audio: the piano carries on, and the music moves into its next section as soft strings come in under the piano and the tempo lifts. No dialogue, no on-screen text.An unlabeled frosted glass perfume bottle with a brushed brass cap stands on a slab of wet black stone in a dark studio. A narrow beam of warm light sweeps slowly across the glass from left to right as the camera pushes in slowly, ending on a medium shot with the whole bottle in frame. Single continuous shot, no scene cuts. Audio: a sparse, slow solo piano intro. No dialogue, no on-screen text.
The scene continues as the same single continuous shot, with no cuts, in the same dark studio with the same bottle. The camera keeps the same framing and circles slowly to the right as water ripples outward across the black stone around the bottle. Audio: the piano carries on, and the music moves into its next section as soft strings come in under the piano and the tempo lifts. No dialogue, no on-screen text.
The audio line follows the same rule as the picture and covers only the change in the track.
Giving a speaker new lines in an extension is not supported. Put the speech in the source clip, and keep the extension to ambience and music with "No dialogue" in the prompt.
Chaining extensions
An extended video can go straight back in as the source of the next extension. Pass the previous result in inputs.video with the next duration, and keep going while the source stays within 27 seconds. The brand spot above runs 18 seconds after its first step, an 8-second step takes it to 26, and a 3-second ending closes it at 29 seconds. The second step sends the first result:
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'google:gemini@omni-flash-1.2',
positivePrompt: 'Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text.',
resolution: '720p',
duration: 8,
inputs: {
video: 'https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/output-chain-1.mp4'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text.",
"resolution": "720p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/output-chain-1.mp4"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "2d2af2ae-09a4-4c46-8175-480edeff285a",
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text.",
"resolution": "720p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/output-chain-1.mp4"
}
}
]'runware run google:gemini@omni-flash-1.2 \
positivePrompt="Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text." \
resolution=720p \
duration=8 \
inputs.video=https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/output-chain-1.mp4{
"taskType": "videoInference",
"taskUUID": "2d2af2ae-09a4-4c46-8175-480edeff285a",
"model": "google:gemini@omni-flash-1.2",
"positivePrompt": "Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text.",
"resolution": "720p",
"duration": 8,
"inputs": {
"video": "https://assets.runware.ai/guides/google-gemini-omni-flash-1-2/extending-video/output-chain-1.mp4"
}
}Response
[
{
"taskType": "videoInference",
"taskUUID": "2d2af2ae-09a4-4c46-8175-480edeff285a",
"videoUUID": "dbfa02fe-1463-423e-85e8-3334e0b309b2",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/dbfa02fe-1463-423e-85e8-3334e0b309b2.mp4"
}
]An unlabeled frosted glass perfume bottle with a brushed brass cap stands on a slab of wet black stone in a dark studio. A narrow beam of warm light sweeps slowly across the glass from left to right as the camera pushes in slowly, ending on a medium shot with the whole bottle in frame. Single continuous shot, no scene cuts. Audio: a sparse, slow solo piano intro. No dialogue, no on-screen text.
The scene continues as the same single continuous shot, with no cuts, in the same dark studio with the same bottle. The camera keeps the same framing and circles slowly to the right as water ripples outward across the black stone around the bottle. Audio: the piano carries on, and the music moves into its next section as soft strings come in under the piano and the tempo lifts. No dialogue, no on-screen text.
Cut to a sequence of close-ups of the same bottle that change on the beat: the brushed brass cap, the frosted glass edge catching the light, and water droplets beading on the black stone. Every shot stays a close-up until the end. Audio: the music reaches its full chorus, with strings over a steady beat. No dialogue, no on-screen text.
Cut back to a wide shot of the same bottle on the black stone, the camera holding still as the warm light settles on the glass. Audio: the music resolves as the beat drops out and the piano plays a final held chord that fades to silence. No dialogue, no on-screen text.
Write each step as the next section of the piece, in picture and in sound. Each prompt calls the product "the same bottle", since no reference image carries it from one step to the next.
Review each result before running the next step, because every later step builds on it. A result longer than 27 seconds cannot go back in, and a long source only takes a short extension, so plan the step lengths before you start and keep the last steps short.
Tips
-
Set the added length to extend, leave it out to edit. The same
inputs.videorequest does both, anddurationis the field that tells them apart. -
Write only what happens next. Open with "The scene continues" and go straight to the new action, since the source already shows the scene.
-
Count timecodes from the end of the source.
[0-3s]is the first three added seconds, however long the clip before it runs. -
Say whether the shot continues or cuts. Use "single continuous shot" or "Cut to", and describe the people who stay by what they wear.
-
Direct the sound across the join. Name the ambience that carries on and the section the music moves into, and keep new dialogue out.
-
Chain extensions for a longer video. Send each result back in as the next source while it is 27 seconds or under, and check it before you build on it. Keep the last steps short.