---
title: Prompting — Gemini Omni Flash 1.2 | Runware Docs
url: https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting
description: "How to write text-to-video prompts for Gemini Omni Flash 1.2: scene structure, one shot or several, timing, audio direction, and on-screen text."
---
### [Introduction](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#introduction)

Gemini Omni Flash 1.2 generates **video with its own soundtrack from a text prompt**. There is no audio parameter and no negative prompt, so **the prompt carries every decision**: what happens in the scene, how the camera films it, whether the clip cuts, what you hear, and what stays out.

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

> **Prompt**: A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text.

Every example here is text-to-video. Starting from images or footage of your own has its own guides: [First and last frame](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/first-and-last-frame), [Reference images and videos](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/reference-driven-video), [Replacing elements with reference images](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/replacing-with-reference-images), [Editing video](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/editing-video), and [Extending video](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/extending-video).

### [Prompt structure](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#prompt-structure)

Six layers make a complete scene: **subject, action, setting, camera, lighting, and audio**. The hero prompt writes each one as a clause and closes with what to leave out:

**[Subject]** A trail runner in her early thirties wearing a coral tank top and black running shorts, **[Action]** running at a steady pace along a narrow gravel path, **[Setting]** on a grassy coastal clifftop high above a blue ocean, **[Camera]** one continuous tracking shot from the side at hip height with no cuts, **[Lighting]** low early-morning sun behind her with a warm rim light on her hair and shoulders, **[Audio]** the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, **[Exclusions]** no dialogue and no on-screen text.

Any layer you skip is **left to the model**. Without the camera clause, it frames the scene and moves the camera on its own. Without the audio clause, it picks its own music and sound. The layers work as comma-separated clauses, as here, or as full sentences, which the rest of this guide uses.

The full request for the hero clip:

**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: 'A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text.',
  width: 1920,
  height: 1080,
  duration: 8
})
```

**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": "A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text.",
            "width": 1920,
            "height": 1080,
            "duration": 8
        })

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": "7c1e9a24-3b5d-4f8e-9a61-2d4c8b7e5f03",
      "model": "google:gemini@omni-flash-1.2",
      "positivePrompt": "A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text.",
      "width": 1920,
      "height": 1080,
      "duration": 8
    }
  ]'
```

**CLI**:

```bash
runware run google:gemini@omni-flash-1.2 \
  positivePrompt="A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text." \
  width=1920 \
  height=1080 \
  duration=8
```

**JSON**:

```json
{
  "taskType": "videoInference",
  "taskUUID": "7c1e9a24-3b5d-4f8e-9a61-2d4c8b7e5f03",
  "model": "google:gemini@omni-flash-1.2",
  "positivePrompt": "A trail runner in her early thirties wearing a coral tank top and black running shorts, running at a steady pace along a narrow gravel path, on a grassy coastal clifftop high above a blue ocean, one continuous tracking shot from the side at hip height with no cuts, low early-morning sun behind her with a warm rim light on her hair and shoulders, the sound of her footsteps crunching on gravel, her steady breathing, waves breaking far below and an upbeat indie-pop track, no dialogue and no on-screen text.",
  "width": 1920,
  "height": 1080,
  "duration": 8
}
```

[Resolution and duration](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/resolution-and-duration) covers picking the size and the length.

### [Shots and cuts](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#shots-and-cuts)

Left without direction, the model **chooses the camera on its own**, and it may hold one take or cut between several shots. When you need one take, **ask for it in the prompt** with "single continuous shot" or "no scene cuts".

The two workout clips below come from the same prompt, except that the first one adds a sentence: "Single continuous shot with no scene cuts, the camera slowly circling her at waist height."

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

*Single continuous shot*

> **Prompt**: A woman in her late twenties in a lilac sports top and black leggings works out in a bright apartment living room, following a trainer on a tablet propped against the sofa. She does a round of jumping jacks, drops into a plank, then sits back on her heels and gives the tablet a thumbs-up. Single continuous shot with no scene cuts, the camera slowly circling her at waist height. Audio: an upbeat electronic track, her quick breathing and her sneakers on the wooden floor. No dialogue. No on-screen text.

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

*No shot direction*

> **Prompt**: A woman in her late twenties in a lilac sports top and black leggings works out in a bright apartment living room, following a trainer on a tablet propped against the sofa. She does a round of jumping jacks, drops into a plank, then sits back on her heels and gives the tablet a thumbs-up. Audio: an upbeat electronic track, her quick breathing and her sneakers on the wooden floor. No dialogue. No on-screen text.

**Ask for a single shot** when the clip goes into an edit of your own and the cuts belong to that edit. Put a camera move in the same sentence, like the slow circle here, so the model knows how that one take travels.

**Ask for the cuts** when you want a finished sequence from one request. "Cut to" marks each new shot, and [timecodes or cues](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#timing-the-action) set the order and length of each one.

### [Timing the action](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#timing-the-action)

Two formats **place an event at a set moment** in the clip: bracketed timecodes, one per line, and plain-language cues such as "after three seconds". The prompts below give the same three beats to an eight-second clip, one in each format:

**Timecodes**:

```text
A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.
[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.
[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.
[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.
Audio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.
```

**Plain language**:

```text
A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon. The clip opens on a wide aerial shot of the switchback road as she rounds a hairpin bend. After three seconds, cut to a low close-up from the roadside as she rises out of the saddle and powers past the camera. For the last two seconds, cut to a front view at the top of the pass as she sits up, raises both arms and smiles. Audio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.
```

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

*Timecodes*

> **Prompt**: A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon. [0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend. [3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera. [6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles. Audio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.

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

*Plain-language cues*

> **Prompt**: A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon. The clip opens on a wide aerial shot of the switchback road as she rounds a hairpin bend. After three seconds, cut to a low close-up from the roadside as she rises out of the saddle and powers past the camera. For the last two seconds, cut to a front view at the top of the pass as she sits up, raises both arms and smiles. Audio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.

Timecodes give every beat **an explicit start and end**, which suits a shot list like this one. Run the ranges back to back and end the last one at the `duration` you request. Plain-language cues read more naturally when **one or two moments need placing** inside a continuous shot, like the closing title card in the [on-screen text example](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#on-screen-text).

In the request, each line break is a `\n` inside the prompt string:

**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: 'A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.\n[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.\n[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.\n[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.\nAudio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.',
  width: 1280,
  height: 720,
  duration: 8
})
```

**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": "A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.\n[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.\n[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.\n[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.\nAudio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.",
            "width": 1280,
            "height": 720,
            "duration": 8
        })

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": "4a9d2c7e-8b1f-4e36-b5a0-6f3e1d9c2b78",
      "model": "google:gemini@omni-flash-1.2",
      "positivePrompt": "A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.\n[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.\n[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.\n[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.\nAudio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.",
      "width": 1280,
      "height": 720,
      "duration": 8
    }
  ]'
```

**CLI**:

```bash
runware run google:gemini@omni-flash-1.2 \
  positivePrompt="A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.
[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.
[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.
[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.
Audio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text." \
  width=1280 \
  height=720 \
  duration=8
```

**JSON**:

```json
{
  "taskType": "videoInference",
  "taskUUID": "4a9d2c7e-8b1f-4e36-b5a0-6f3e1d9c2b78",
  "model": "google:gemini@omni-flash-1.2",
  "positivePrompt": "A road cyclist in a yellow jersey and white helmet climbs a mountain pass on a clear summer afternoon.\n[0-3s] Wide aerial shot of the switchback road as she rounds a hairpin bend.\n[3-6s] Low close-up from the roadside as she rises out of the saddle and powers past the camera.\n[6-8s] Front view at the top of the pass as she sits up, raises both arms and smiles.\nAudio: wind, the whir of the chain and her hard breathing over a driving rock beat that builds to the top. No dialogue. No on-screen text.",
  "width": 1280,
  "height": 720,
  "duration": 8
}
```

### [Directing the audio](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#directing-the-audio)

Every clip **comes with sound**, and no parameter shapes it or switches it off. The prompt directs it in layers: the music and its mood, the ambience and sound effects, and any speech. Leave a layer out and **the model fills it in**.

#### [Dialogue to camera](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#dialogue-to-camera)

**Name who speaks and quote the line** after "says to the camera". Keep it to what a person can say comfortably in the clip, here two short sentences in eight seconds:

```text
The owner of a small dog-grooming salon, a woman in her forties with short gray hair and a navy apron, stands beside a grooming table where a freshly groomed white poodle sits. Single continuous shot, medium close-up at eye level, static camera. She smiles and says to the camera: "We just opened on Maple Street. Book this week and get twenty percent off your first groom." Audio: her voice clear and close, with the soft hum of a dryer and a collar jingling in the background. No music. No subtitles.
```

[Watch video](https://runware.ai/docs/assets/output-to-camera.Dqy7xKT_.mp4)

> **Prompt**: The owner of a small dog-grooming salon, a woman in her forties with short gray hair and a navy apron, stands beside a grooming table where a freshly groomed white poodle sits. Single continuous shot, medium close-up at eye level, static camera. She smiles and says to the camera: "We just opened on Maple Street. Book this week and get twenty percent off your first groom." Audio: her voice clear and close, with the soft hum of a dryer and a collar jingling in the background. No music. No subtitles.

**Place the ambience behind the voice**, as "in the background" does here, so it does not compete with the line. "No music" keeps the soundtrack to the room, and "No subtitles" keeps captions out of the frame so you can add your own in the edit.

#### [Voiceover and music](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#voiceover-and-music)

Off-screen narration is **speech with no speaker in the shot**. Introduce the voice and quote what it says, then add that the person on screen does not speak. For the music, give **the genre and the mood together**:

```text
A man in his fifties in a gray T-shirt does a guided stretching routine on a yoga mat on a sunny apartment balcony in the early evening, following the app on a phone propped against a plant pot. He reaches both arms overhead, then folds forward into a slow hamstring stretch. Single continuous shot, the camera drifting slowly closer at waist height. Audio: a calm female voiceover, the app's coach, says: "Reach up tall. Now fold forward slowly and let your breath do the work." Soft piano music with a warm, unhurried mood, and quiet city traffic far below. He does not speak. No subtitles.
```

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

> **Prompt**: A man in his fifties in a gray T-shirt does a guided stretching routine on a yoga mat on a sunny apartment balcony in the early evening, following the app on a phone propped against a plant pot. He reaches both arms overhead, then folds forward into a slow hamstring stretch. Single continuous shot, the camera drifting slowly closer at waist height. Audio: a calm female voiceover, the app's coach, says: "Reach up tall. Now fold forward slowly and let your breath do the work." Soft piano music with a warm, unhurried mood, and quiet city traffic far below. He does not speak. No subtitles.

"The app's coach" tells the model **who the voice belongs to**, and "He does not speak" keeps the words off the man's lips.

#### [Exclusions](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#exclusions)

With no negative prompt, anything you want kept out of the clip **goes into the prompt as a short sentence**. The prompts in this guide use four of them: "No music", "No dialogue", "No subtitles", and "No on-screen text". Add the ones that match what the clip must not contain, and leave out any that would **contradict a layer you asked for**, such as "No dialogue" on a clip with a voiceover.

### [On-screen text](https://runware.ai/docs/models/google-gemini-omni-flash-1-2/guides/prompting#on-screen-text)

For words that have to read in the frame, **quote them exactly** and say where each string appears, inside the scene or on a title card of its own.

```text
Product demo of an analytics dashboard on a laptop in a bright modern office. Close-up on the screen as the camera slowly pushes in. The dashboard header reads "Revenue overview". Below it, a card labeled "Monthly revenue" shows "$84,200" next to a blue line chart that draws itself upward from left to right. The rest of the dashboard is plain dark panels with no other text, labels or numbers. For the last two seconds, the screen gives way to a white title card that reads "Know your numbers" in bold black letters. Audio: soft keyboard clicks and a light, upbeat electronic track. No dialogue.
```

[Watch video](https://runware.ai/docs/assets/output-on-screen-text.LQ4hV_kN.mp4)

> **Prompt**: Product demo of an analytics dashboard on a laptop in a bright modern office. Close-up on the screen as the camera slowly pushes in. The dashboard header reads "Revenue overview". Below it, a card labeled "Monthly revenue" shows "$84,200" next to a blue line chart that draws itself upward from left to right. The rest of the dashboard is plain dark panels with no other text, labels or numbers. For the last two seconds, the screen gives way to a white title card that reads "Know your numbers" in bold black letters. Audio: soft keyboard clicks and a light, upbeat electronic track. No dialogue.

Keep each string **short and tied to a place in the shot**, so the model knows both what to write and where. Text inside the scene and a title card that replaces it are written the same way, and the plain-language cue "for the last two seconds" decides **when the title card appears**.

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

1. **Cover every layer.** Subject, action, setting, camera, lighting, and audio. Anything missing is left to the model.
    
2. **Ask for a single shot explicitly.** "Single continuous shot" or "no scene cuts" keeps the model from cutting. Add a camera move to the same sentence.
    
3. **Put each timecode on its own line.** Run the ranges back to back up to the `duration`, and send each line break as `\n` in the JSON.
    
4. **Direct each audio layer.** Give the music a genre and a mood. Put ambience behind the action and quote every spoken word.
    
5. **Say who is speaking.** A line to camera belongs to someone in the shot. A voiceover belongs to no one on screen, so say that the person in the shot stays silent.
    
6. **Write exclusions as sentences.** "No music", "No dialogue", "No subtitles", and "No on-screen text" do the work of a negative prompt.
    
7. **Quote every on-screen word.** Say where the text appears as well as what it says.
    
8. **Generate more than one take.** There is no `seed`, so each request is a new take on the same prompt. Run a few and keep the best.