---
title: Extending video — Gemini Omni Flash 1.2 | Runware Docs
url: https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video
description: "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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-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.

[Watch video](https://runware.ai/docs/assets/source-hero.DXVagnpG.mp4)

*Source*

> **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.

[Watch video](https://runware.ai/docs/assets/output-hero.C0bV4H9w.mp4)

*Extended by 8 seconds*

> **Prompt**: 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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/editing-video) covers.

**TypeScript**:

```typescript
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'
  }
})
```

**Python**:

```python
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**:

```bash
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"
      }
    }
  ]'
```

**CLI**:

```bash
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
```

**JSON**:

```json
{
  "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"
  }
}
```

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.** `width` and `height` are rejected whenever `inputs.video` is present, and the output keeps the aspect ratio of the source. Each example here sets `resolution` to the tier its source was generated at.
- **Reference inputs are rejected.** An extension takes no `inputs.referenceImages` or `inputs.referenceVideos`, so anything new has to be described in the prompt.

### [Writing the continuation](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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:

**[Continuation]** The scene continues as one continuous drone shot, with no cuts., **[What happens next]** 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]** Audio: the waves and the light breeze carry on., **[Exclusions]** No music, no dialogue, no on-screen text.

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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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`:

```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.
```

[Watch video](https://runware.ai/docs/assets/source-timecodes.bjOKEqm9.mp4)

*Source*

> **Prompt**: 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.

[Watch video](https://runware.ai/docs/assets/output-timecodes.CGSiZNS7.mp4)

*Extended by 8 seconds*

> **Prompt**: 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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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:

[Watch video](https://runware.ai/docs/assets/source-shots.Bsnh0_KM.mp4)

*Source*

> **Prompt**: 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.

[Watch video](https://runware.ai/docs/assets/output-same-shot.DsOPA3L3.mp4)

*Same shot*

> **Prompt**: 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.

[Watch video](https://runware.ai/docs/assets/output-new-shot.CPZ2ciHB.mp4)

*New shot*

> **Prompt**: 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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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:

```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.
```

[Watch video](https://runware.ai/docs/assets/source-chain.C1uyz34M.mp4)

*Source*

> **Prompt**: 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.

[Watch video](https://runware.ai/docs/assets/output-chain-1.DzlMAfEq.mp4)

*Extended by 10 seconds*

> **Prompt**: 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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#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:

**TypeScript**:

```typescript
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'
  }
})
```

**Python**:

```python
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**:

```bash
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"
      }
    }
  ]'
```

**CLI**:

```bash
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
```

**JSON**:

```json
{
  "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"
  }
}
```

**Original**:

[Watch video](https://runware.ai/docs/assets/source-chain.C1uyz34M.mp4)

> **Prompt**: 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.

**Step 1**:

[Watch video](https://runware.ai/docs/assets/output-chain-1.DzlMAfEq.mp4)

> **Prompt**: 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.

**Step 2**:

[Watch video](https://runware.ai/docs/assets/output-chain-2.BMJy-wMY.mp4)

> **Prompt**: 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.

**Step 3**:

[Watch video](https://runware.ai/docs/assets/output-chain-3.GbwgQ8B0.mp4)

> **Prompt**: 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](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video#tips)

1. **Set the added length to extend, leave it out to edit.** The same `inputs.video` request does both, and `duration` is the field that tells them apart.
    
2. **Write only what happens next.** Open with "The scene continues" and go straight to the new action, since the source already shows the scene.
    
3. **Count timecodes from the end of the source.** `[0-3s]` is the first three added seconds, however long the clip before it runs.
    
4. **Say whether the shot continues or cuts.** Use "single continuous shot" or "Cut to", and describe the people who stay by what they wear.
    
5. **Direct the sound across the join.** Name the ambience that carries on and the section the music moves into, and keep new dialogue out.
    
6. **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.