---
title: Extending a video with Gemini Omni Flash 1.1 — Gemini Omni Flash 1.1 | Runware Docs
url: https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video
description: "How to extend a clip past the 10-second ceiling with Gemini Omni Flash 1.1: sending duration with inputs.video, prompting continuation, and chaining extensions."
---
### [Introduction](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#introduction)

A single Gemini Omni Flash 1.1 call tops out at **10 seconds**. Extension is how a clip gets past that: you hand the model footage you already have, tell it what happens next, and it continues the shot with the characters, the motion, and the audio carried forward. Runs stack up to a **total of 30 seconds**.

The mechanism is the same `inputs.video` parameter that drives editing, and **`duration` is what separates the two**. Send `inputs.video` on its own and the model edits the clip in place. Send `inputs.video` with a `duration` and the model extends it instead.

[Watch video](https://runware.ai/docs/assets/seed-aerial.PcelHbsi.mp4)

*The starting clip: 8 seconds, generated from a prompt*

> **Prompt**: A continuous aerial drone shot flying low and steady over calm open sea at sunrise, in a single unbroken scene. The camera moves forward at a constant speed a few metres above the water, small swells passing underneath, and a line of white offshore wind turbines stands ahead catching the first warm light, their blades turning slowly. Cold blue water, warm low sun on the horizon, clear sky. Energy brand cinematography, smooth and stable. The audio is steady wind over the water and the low rhythmic whoosh of the turbine blades, no music, no dialogue.

The eight-second aerial above is the source for everything that follows. This guide covers the request shape, how to prompt a continuation, when to cut instead, how audio carries across the join, and how far a chain of extensions can run.

### [The request](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#the-request)

An extension call carries the source clip, a prompt describing what happens next, and the `duration` that turns the call into an extension.

TypeScriptPythoncURLCLIJSON

```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.1',
  positivePrompt: 'The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, and the same smooth drone motion.',
  inputs: {
    video: 'https://example.com/seed-aerial.mp4'
  },
  resolution: '720p',
  duration: 8
})
```

```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.1",
            "positivePrompt": "The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, and the same smooth drone motion.",
            "inputs": {
                "video": "https://example.com/seed-aerial.mp4"
            },
            "resolution": "720p",
            "duration": 8
        })

asyncio.run(main())
```

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "d9e4f306-0b1c-4245-d3e4-f50617283940",
      "model": "google:gemini@omni-flash-1.1",
      "positivePrompt": "The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, and the same smooth drone motion.",
      "inputs": {
        "video": "https://example.com/seed-aerial.mp4"
      },
      "resolution": "720p",
      "duration": 8
    }
  ]'
```

```bash
runware run google:gemini@omni-flash-1.1 \
  positivePrompt="The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, and the same smooth drone motion." \
  inputs.video=https://example.com/seed-aerial.mp4 \
  resolution=720p \
  duration=8
```

```json
{
  "taskType": "videoInference",
  "taskUUID": "d9e4f306-0b1c-4245-d3e4-f50617283940",
  "model": "google:gemini@omni-flash-1.1",
  "positivePrompt": "The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, and the same smooth drone motion.",
  "inputs": {
    "video": "https://example.com/seed-aerial.mp4"
  },
  "resolution": "720p",
  "duration": 8
}
```

Response

```json
[
  {
    "taskType": "videoInference",
    "taskUUID": "d9e4f306-0b1c-4245-d3e4-f50617283940",
    "videoUUID": "6c7d8e9f-0a1b-4234-c5d6-e7f809123456",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/6c7d8e9f-0a1b-4234-c5d6-e7f809123456.mp4"
  }
]
```

- `inputs.video` takes a **public URL or the UUID** of an earlier Runware generation. For extension the source may run anywhere from **1 to 30 seconds**, and the file itself is capped at **32 MB**.
- `duration` is what makes this an extension rather than an edit. It sets the **length of the new material**, from 3 to 10 seconds.
- `resolution` is the only sizing parameter accepted here. `width` and `height` are **rejected outright** whenever `inputs.video` is present.
- `inputs.referenceImages` and `inputs.referenceVideos` **cannot ride along**. Extension is a two-input operation: the source clip and the prompt.

> [!WARNING]
> Sending `duration` alongside `inputs.video` silently changes what the call does. If you meant to **edit** a clip in place and passed a duration out of habit, you get an extension instead, with no error to tell you. Leave `duration` out for edits, as covered in the [editing guide](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/editing-video).

### [Prompting a continuation](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#prompting-a-continuation)

The model reads the tail of the source clip as context, so the prompt only needs to name **what happens next** and **what has to stay the same**. Writing it as a continuation instruction rather than as a scene description is what keeps the join invisible.

Two clauses do most of the work. Open with **"the scene continues without a cut"**, and close with an explicit list of what carries over: the character, the wardrobe, the location, the light.

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

*The 8-second source plus an 8-second continuation*

> **Prompt**: The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, the same forward direction, and the same smooth drone motion. The audio continues with steady wind over the water and the low whoosh of the blades passing, no music, no dialogue.

The sea, the sunrise light, the altitude, and the forward speed all carry across the join because the prompt named them. **What you leave unnamed is what drifts**, which is the single most common cause of the light or the camera speed shifting halfway through a clip.

Keep the continuation to the **same number of beats you would give a fresh call**. Eight seconds holds one action comfortably. Asking a continuation to cover four steps compresses each one the same way it would in a standalone generation.

### [Continuing versus cutting](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#continuing-versus-cutting)

An extension does not have to be a continuous take. Telling the model the scene **cuts to a new shot** gets you an edit point instead of a seamless join, which is how a single source clip turns into a two-shot sequence.

**Continues**:

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

*Continuation: the same flight, carried on*

> **Prompt**: The scene continues without a cut. The drone keeps flying forward at the same steady speed and the same low altitude, closing the distance and passing between two of the white turbines as their blades sweep slowly overhead. Keep the same calm sea, the same sunrise light, the same forward direction, and the same smooth drone motion. The audio continues with steady wind over the water and the low whoosh of the blades passing, no music, no dialogue.

**Cuts**:

[Watch video](https://runware.ai/docs/assets/output-extend-cut.S8HQFDYx.mp4)

*Cut: a new shot from the shore*

> **Prompt**: The scene cuts to a new shot: a low static shot from a pebble shore at the same sunrise, looking out across the water at the same line of white turbines on the horizon. Match the cold blue and warm sunrise look of the previous footage. The audio changes with the cut to waves washing over pebbles in the foreground and a light breeze, no music, no dialogue.

The continuation holds one flight and one direction. The cut drops to the shore and starts a new angle, keeping only the light and the subject. **Say which one you want.** Left ambiguous, the model decides, and a continuation prompt that reads like a fresh scene description usually gets read as a cut.

### [Carrying the audio across](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#carrying-the-audio-across)

Audio extends with the picture, and it follows the same rule: **whatever the prompt names, carries**. A continuation that says nothing about sound inherits the source's bed, which is usually right. A continuation that needs the sound to change has to say so.

[Watch video](https://runware.ai/docs/assets/output-extend-audio.Cjpeui9S.mp4)

*Play with sound. The applause arrives at the join, six seconds in.*

> **Prompt**: The scene continues without a cut. A presenter in a dark jumper walks on from the wing, crosses to the lectern, and turns to face the audience. Keep the same stage, the same lectern, the same blue LED wall, and the same camera framing. The audio changes as she walks on: a loud wave of applause and cheering rises from the audience and settles as she reaches the lectern, over the same quiet room tone, no music, no dialogue.

The clip runs six seconds of quiet auditorium tone before the join, then the extension brings the applause up as the presenter walks on. Naming the sound as an **event with a cause** is what makes it land, rather than describing a bed as simply louder or quieter.

> [!NOTE]
> Speech is the exception. An extension **cannot add new dialogue to a clip you uploaded** where someone is already talking. Build talking-head sequences by generating the first clip with its line in the prompt, as covered in the [prompting guide](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/prompting), then extend from your own generation.

### [Chaining to 30 seconds](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#chaining-to-30-seconds)

Each extension **takes its predecessor as the next source**, and the clip grows a run at a time. The 8-second source plus two 8-second extensions gives a 24-second piece, and the model accepts a source up to 30 seconds, which is the practical ceiling for the chain.

[Watch video](https://runware.ai/docs/assets/output-extend-2.WMHkSu14.mp4)

*Two extensions on: one continuous 24-second flight*

> **Prompt**: The scene continues without a cut. The drone carries on past the turbines and banks gently to the right, opening out to reveal the full array stretching along the horizon in the low sun. Keep the same calm sea, the same sunrise light, the same altitude, and the same smooth drone motion. The audio continues with steady wind over the water and the distant whoosh of the blades, no music, no dialogue.

The light and the flight path survive two joins because every step named them. **Identity drifts by accumulation**, so the pin clause matters more on the third run than on the first. Repeat the same wording each time rather than assuming the model still remembers it.

The other thing that accumulates is **upload weight**. Each step sends the whole previous clip back as the source, and the source is capped at 32 MB, so a long chain at a high tier can hit the file limit before it hits the 30-second limit. Chain at 720p and re-run the final prompt at the delivery tier if the last step is the one that ships.

### [Tips](https://runware.ai/docs/models/google-gemini-omni-flash-1-1/guides/extending-video#tips)

1. **`duration` is the switch.** With `inputs.video`, sending a duration extends and omitting it edits. There is no separate parameter and no error either way.
    
2. **Open with "the scene continues without a cut".** It is the clearest signal for a seamless join, and its absence is why extensions often arrive as a new shot.
    
3. **Close with a pin clause and repeat it every run.** Name the character, the wardrobe, the location, and the light on each step. Anything unnamed is free to drift, and drift compounds across a chain.
    
4. **Say "cuts to a new shot" when you want an edit point.** A source clip plus two cutting extensions is a three-shot sequence from one generation.
    
5. **Describe audio only when it should change.** Silence about sound inherits the source bed. A change needs an event with a shape, such as a hum fading out on a click.
    
6. **Don't try to add dialogue to uploaded footage.** Generate the speaking clip yourself with the line in the prompt, then extend from that.
    
7. **Use `resolution`, never `width`/`height`.** Dimension parameters are rejected whenever a source video is attached.
    
8. **Chain at a modest tier.** Every step re-uploads the growing clip against a 32 MB cap. Keep the working chain small and commit to the delivery tier once.