How to Write Prompts for Gemini Omni 1.2 Flash Models: 5 Examples

Gemini Omni 1.2 Flash prompts that work: a six-part structure and 5 tested examples across text, image, reference, edit and extend, with real costs.

I wrote the same app explainer for Gemini Omni 1.2 Flash twice. The first prompt was one friendly sentence. The second was eleven lines of structure. Both cost the same 60 cents, at the same seed, resolution and length. The first came back with an invented dashboard, garbled dollar figures and three cartoon people I never asked for. The second came back with every word spelled right, every beat in the order I wrote it, and nothing on screen I had not named.

That gap is the whole reason to learn how this model wants to be prompted. Gemini Omni 1.2 Flash is Google's fast video family, and it is unusually literal: it follows a beat list, renders quoted text, and holds a layout still when you tell it to. Leave a gap and it fills the gap with its own ideas.

This guide gives you the prompt structure I use, then five tested examples, one for each endpoint that takes a prompt: text to video, image to video, reference to video, video edit and extend. Every clip below is a real output with its exact prompt, settings and billed cost.

The Gemini Omni 1.2 Flash family in one table

The family is six endpoints on Segmind. Five take a prompt; the sixth, the upscaler, takes only a video and a target size.

EndpointWhat you give itLengthPrompt job
Text to VideoA prompt3 to 15 sDescribe everything
Image to VideoA first frame, optional last frame3 to 15 s (10 s with both frames)Describe only what moves
Reference to Video1 to 10 reference images3 to 10 sBind each reference, describe a new scene
Video EditA source clip up to 15 sFollows the sourceSay what changes and what must not
ExtendA source clip up to 27 sAdds 3 to 10 s, 30 s totalDescribe only the next beat
UpscaleA finished clip up to 15 sSame as sourceNo prompt

Every generation endpoint outputs 360p, 720p, 1080p or 4K in 16:9 or 9:16, at 24 fps, with native audio made in the same pass. Segmind's published rate for the video itself is about $0.025 per second at 360p, $0.074 at 720p, $0.11 at 1080p and $0.22 at 4K, with input tokens billed on top.

The prompt structure that works

After a run of tests, every prompt that came back clean had the same six parts, in this order:

  1. Medium and camera. Name a stylised medium (flat 2D motion graphics, claymation, 3D product render) and the camera: "locked-off camera" or "single continuous shot". This sets the look before anything else.
  2. Subject and set. What is in the frame and where. Keep it to one sentence.
  3. Beats in order. Either "first..., then..., finally..." or timecodes such as [0-2s]. One action per beat.
  4. Quoted on-screen text. Every word in single quotes, exactly as it should appear.
  5. What stays still. List the things that must not move. This is the line most people skip, and it is the one that keeps layouts clean.
  6. Sound, one per beat. A whoosh here, a chime there, and "no dialogue" or a quoted line if someone speaks.

Then close with the line Segmind's own model-page examples use: Every word spelled exactly as given, no other text. It is a fence. Without it, the model adds copy of its own.

Two cautions from the model's own documentation, which match what I saw. First, the family is strongest on stylised, no-people work; photoreal people and lip-sync are weaker and can trip safety filters. Second, a dense prompt can lose about one instruction in four, so always check the frames before you pay to upscale.

Example 1: Text to Video, an app explainer (and the A/B that proves the structure)

The brief: an 8-second explainer for a budgeting app called PocketPal, with three features and a call to action. This is the use case a SaaS marketing team ships every week.

Here is the lazy version first.

The vague prompt, 8s 720p 16:9for Gemini Omni 1.2 Flash Text to Video
An animated explainer video for a budgeting app called PocketPal that shows how it helps you track spending, save money and split bills with friends.
Try it

And the structured version, same seed, same settings.

The structured prompt, 8s 720p 16:9for Gemini Omni 1.2 Flash Text to Video
Flat 2D vector motion-graphics explainer for a budgeting app, locked-off camera, soft lilac background, rounded white sans-serif type.
[0-2s] A white phone outline slides up into the center of the frame and the title 'POCKETPAL' types on above it.
[2-6s] Three rounded cards pop out from the phone one after another, left to right, each with a simple icon and a label: first a coin icon labelled 'TRACK', then a piggy bank labelled 'SAVE', then a pizza slice labelled 'SPLIT'.
[6-8s] A coral pill-shaped button bounces in at the bottom reading 'FREE TO TRY'.
The background and the title stay still once they land; only the phone, the cards and the button animate. No people, no photorealism.
Sound: a soft keyboard tick for each letter of the title, a bubbly pop as each card appears, a bright two-note chime when the button lands. No dialogue, no music.
Every word spelled exactly as given, no other text.
Try it
  • Vague prompt
  • Structured prompt
Sound
Same model, seed, length and resolution. Left: one sentence ($0.597). Right: the structured prompt ($0.600).

The vague clip is not bad video. It is a polished phone mockup with a donut chart, a piggy bank and a bill-splitting screen. The problem is that I approved none of it. The spending tracker reads a garbled seven-figure balance, one card says "Character Are", the app shows a "Your Trades" list in a budgeting product, and it ends on a tagline I did not write, "Smart Budgeting". Four cartoon people appear for the split-bills beat. Every one of those is a thing a brand team would have to reject.

The structured clip did exactly what the prompt said. The title types on letter by letter in the first two seconds. The three cards pop out in order at roughly 2.5, 3.5 and 4.5 seconds, each label spelled correctly. The coral button lands at about 6.5 seconds. The lilac background never moves. The timecodes were honoured almost to the second, which means you can storyboard to a voiceover and expect the beats to land where you put them.

APIGenerate the structured explainerAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-text-to-video",
    prompt="Flat 2D vector motion-graphics explainer for a budgeting app, locked-off camera, soft lilac background, rounded white sans-serif type.\n[0-2s] A white phone outline slides up into the center of the frame and the title 'POCKETPAL' types on above it.\n[2-6s] Three rounded cards pop out from the phone one after another, left to right, each with a simple icon and a label: first a coin icon labelled 'TRACK', then a piggy bank labelled 'SAVE', then a pizza slice labelled 'SPLIT'.\n[6-8s] A coral pill-shaped button bounces in at the bottom reading 'FREE TO TRY'.\nThe background and the title stay still once they land; only the phone, the cards and the button animate. No people, no photorealism.\nSound: a soft keyboard tick for each letter of the title, a bubbly pop as each card appears, a bright two-note chime when the button lands. No dialogue, no music.\nEvery word spelled exactly as given, no other text.",
    duration=8,
    resolution="720p",
    aspect_ratio="16:9",
    seed=4242,
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-text-to-video" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "Flat 2D vector motion-graphics explainer for a budgeting app, locked-off camera, soft lilac background, rounded white sans-serif type.\n[0-2s] A white phone outline slides up into the center of the frame and the title '\''POCKETPAL'\'' types on above it.\n[2-6s] Three rounded cards pop out from the phone one after another, left to right, each with a simple icon and a label: first a coin icon labelled '\''TRACK'\'', then a piggy bank labelled '\''SAVE'\'', then a pizza slice labelled '\''SPLIT'\''.\n[6-8s] A coral pill-shaped button bounces in at the bottom reading '\''FREE TO TRY'\''.\nThe background and the title stay still once they land; only the phone, the cards and the button animate. No people, no photorealism.\nSound: a soft keyboard tick for each letter of the title, a bubbly pop as each card appears, a bright two-note chime when the button lands. No dialogue, no music.\nEvery word spelled exactly as given, no other text.",
  "duration": 8,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "seed": 4242
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

The lesson: structure costs nothing extra. Both prompts billed within half a cent of each other. The only thing the vague one saves is thirty seconds of writing, and it spends them back in rejected takes.

Example 2: Image to Video, a product still with callouts

The brief: turn one e-commerce packshot into a 6-second vertical clip for Reels or Shorts, with three feature callouts. This is the cheapest way for a D2C brand to get motion out of photography it already owns.

The rule for image to video is different from text to video: the first frame already holds the look, so describe only what moves. Re-describing the kettle's colour or the stone block invites the model to redraw them.

  • first_frame_image
The first frame, generated with Nano Banana 2 at 9:16
Kettle callouts, 6s 720p 9:16for Gemini Omni 1.2 Flash Image to Video
Locked-off camera; the kettle and the stone block do not move. First a thin curl of steam rises from the tip of the spout. Then three small white rounded callout labels fade in one at a time in the empty space above the kettle, each with a thin line pointing to its part: first 'GOOSENECK SPOUT' pointing to the spout, then 'ASH WOOD HANDLE' pointing to the handle, then '1 LITRE' pointing to the body. Finally the window light warms slightly. Only the steam, the labels and the light change. Sound: a quiet kettle simmer underneath, a soft click as each label appears. No dialogue, no music. Every word spelled exactly as given, no other text.
Try it
6s, 720x1280, $0.450

Steam rises from the spout first, then the three labels arrive in the order I wrote them, each spelled correctly, and the kettle never shifts on its block. Two things did not land, and they are worth knowing. The "1 LITRE" leader line points at the lid knob rather than the body. And the final beat, "the window light warms slightly", simply did not happen: I measured the average colour of the first and last frames and the warmth did not move at all. That is the one-in-four drop the documentation warns about, and it went to the vaguest, least visual instruction in the prompt. If a beat matters, make it concrete and make it visible.

APIAnimate the kettle stillAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-image-to-video",
    first_frame_image="https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-kettle.jpg",
    prompt="Locked-off camera; the kettle and the stone block do not move. First a thin curl of steam rises from the tip of the spout. Then three small white rounded callout labels fade in one at a time in the empty space above the kettle, each with a thin line pointing to its part: first 'GOOSENECK SPOUT' pointing to the spout, then 'ASH WOOD HANDLE' pointing to the handle, then '1 LITRE' pointing to the body. Finally the window light warms slightly. Only the steam, the labels and the light change. Sound: a quiet kettle simmer underneath, a soft click as each label appears. No dialogue, no music. Every word spelled exactly as given, no other text.",
    duration=6,
    resolution="720p",
    aspect_ratio="9:16",
    seed=4243,
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-image-to-video" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "first_frame_image": "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-kettle.jpg",
  "prompt": "Locked-off camera; the kettle and the stone block do not move. First a thin curl of steam rises from the tip of the spout. Then three small white rounded callout labels fade in one at a time in the empty space above the kettle, each with a thin line pointing to its part: first '\''GOOSENECK SPOUT'\'' pointing to the spout, then '\''ASH WOOD HANDLE'\'' pointing to the handle, then '\''1 LITRE'\'' pointing to the body. Finally the window light warms slightly. Only the steam, the labels and the light change. Sound: a quiet kettle simmer underneath, a soft click as each label appears. No dialogue, no music. Every word spelled exactly as given, no other text.",
  "duration": 6,
  "resolution": "720p",
  "aspect_ratio": "9:16",
  "seed": 4243
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

Example 3: Reference to Video, a brand mascot that speaks

The brief: put a bakery's claymation mascot and its logo into a new scene, and have the mascot say one line. This is the character-consistency job that agencies and kids' content studios run constantly.

Reference to video is not image to video. The references are not a first frame; they are things to carry into a scene you describe from scratch. So the prompt has to do two jobs: bind each image by its tag, and say what to keep. The tags are <IMAGE_REF_0>, <IMAGE_REF_1> and so on, in the order you pass the images.

  • IMAGE_REF_0, the mascot
  • IMAGE_REF_1, the emblem
The two references, both generated with Nano Banana 2
Fox baker at the counter, 8s 720p 16:9for Gemini Omni 1.2 Flash Reference to Video
Stop-motion claymation scene, single continuous shot, locked-off camera. A small clay bakery counter in warm morning light, wooden shelves of clay bread loaves behind it. The fox baker from <IMAGE_REF_0> stands behind the counter; keep his orange clay fur, cream chest, yellow raincoat and white baker hat exactly. The round teal emblem from <IMAGE_REF_1> hangs on the wall behind him as a sign, unchanged, with its words 'FOXTAIL BAKERY'. First the fox lifts a round clay loaf onto the counter. Then he looks at the camera and says, cheerfully: "Fresh out of the oven!" Finally he gives a small wave. The shelves, the counter and the sign stay still; only the fox and the loaf move. Sound: a soft thump as the loaf lands, his line spoken clearly in a warm, friendly voice, a little bell tinkle at the wave. No music. Every word spelled exactly as given, no other text.
Try it
8s, 1280x720, $0.597

All three beats landed in order: the loaf goes onto the counter, the fox faces the camera and speaks, then he waves. I ran the audio through a speech-to-text model and it came back with exactly "Fresh out of the oven!", so a line in double quotes is spoken verbatim. The fox stayed on model: orange clay, cream chest, yellow raincoat with its orange buttons. The emblem hangs on the wall as asked, though the fox's head covers part of it for most of the clip, because I never said where he should stand relative to the sign. One small drift: the dark band on his baker hat in the reference is gone in the video. If a detail is part of the brand, name it in the "keep" list; I named the hat but not its band.

APIGenerate the fox baker sceneAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-reference-to-video",
    reference_images=[
        "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-fox.jpg",
        "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-emblem.jpg",
    ],
    prompt="Stop-motion claymation scene, single continuous shot, locked-off camera. A small clay bakery counter in warm morning light, wooden shelves of clay bread loaves behind it. The fox baker from <IMAGE_REF_0> stands behind the counter; keep his orange clay fur, cream chest, yellow raincoat and white baker hat exactly. The round teal emblem from <IMAGE_REF_1> hangs on the wall behind him as a sign, unchanged, with its words 'FOXTAIL BAKERY'. First the fox lifts a round clay loaf onto the counter. Then he looks at the camera and says, cheerfully: \"Fresh out of the oven!\" Finally he gives a small wave. The shelves, the counter and the sign stay still; only the fox and the loaf move. Sound: a soft thump as the loaf lands, his line spoken clearly in a warm, friendly voice, a little bell tinkle at the wave. No music. Every word spelled exactly as given, no other text.",
    duration=8,
    resolution="720p",
    aspect_ratio="16:9",
    seed=4244,
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-reference-to-video" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "reference_images": [
    "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-fox.jpg",
    "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-emblem.jpg"
  ],
  "prompt": "Stop-motion claymation scene, single continuous shot, locked-off camera. A small clay bakery counter in warm morning light, wooden shelves of clay bread loaves behind it. The fox baker from <IMAGE_REF_0> stands behind the counter; keep his orange clay fur, cream chest, yellow raincoat and white baker hat exactly. The round teal emblem from <IMAGE_REF_1> hangs on the wall behind him as a sign, unchanged, with its words '\''FOXTAIL BAKERY'\''. First the fox lifts a round clay loaf onto the counter. Then he looks at the camera and says, cheerfully: \"Fresh out of the oven!\" Finally he gives a small wave. The shelves, the counter and the sign stay still; only the fox and the loaf move. Sound: a soft thump as the loaf lands, his line spoken clearly in a warm, friendly voice, a little bell tinkle at the wave. No music. Every word spelled exactly as given, no other text.",
  "duration": 8,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "seed": 4244
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

Example 4: Video Edit, localising the explainer into Spanish

The brief: take the English PocketPal explainer from Example 1 and ship a Spanish version without re-animating anything. Localisation is the edit that pays for itself fastest, because the alternative is a motion designer reopening the project file.

An edit prompt is a diff. Say what changes, word for word, then list everything that must not.

Localise the explainer, 720pfor Gemini Omni 1.2 Flash Video Edit
Translate every on-screen word into Spanish and change nothing else. Replace 'TRACK' with 'CONTROLA', 'SAVE' with 'AHORRA', 'SPLIT' with 'DIVIDE', and 'FREE TO TRY' with 'PRUEBA GRATIS'. Keep the title 'POCKETPAL' exactly as it is. Keep the same lilac background, icons, colours, layout, timing and locked-off camera; nothing repositioned. Keep the same sound design: keyboard ticks, a pop per card, a chime on the button. Every word spelled exactly as given, no other text.
Try it
English sourceSpanish edit
Sound
Source (left) and the Spanish edit (right), both 8s 720p. The edit billed $0.670.

All four replacements are spelled correctly, "POCKETPAL" stayed in English, and the timing matches the source beat for beat. I compared frames from the source and the edit at four points in the clip and the layouts correlate at 0.94 to 0.997, which is about as close as a regenerated clip gets. The one change I did not ask for: the plain gold coin on the first card picked up a dollar sign. That is the model "helping". Had I written "keep every icon exactly as it is" instead of just "icons" in a list, I suspect it would have held.

APILocalise the explainerAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-video-edit",
    video="https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex1_structured.mp4",
    prompt="Translate every on-screen word into Spanish and change nothing else. Replace 'TRACK' with 'CONTROLA', 'SAVE' with 'AHORRA', 'SPLIT' with 'DIVIDE', and 'FREE TO TRY' with 'PRUEBA GRATIS'. Keep the title 'POCKETPAL' exactly as it is. Keep the same lilac background, icons, colours, layout, timing and locked-off camera; nothing repositioned. Keep the same sound design: keyboard ticks, a pop per card, a chime on the button. Every word spelled exactly as given, no other text.",
    resolution="720p",
    seed=4245,
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-video-edit" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "video": "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex1_structured.mp4",
  "prompt": "Translate every on-screen word into Spanish and change nothing else. Replace '\''TRACK'\'' with '\''CONTROLA'\'', '\''SAVE'\'' with '\''AHORRA'\'', '\''SPLIT'\'' with '\''DIVIDE'\'', and '\''FREE TO TRY'\'' with '\''PRUEBA GRATIS'\''. Keep the title '\''POCKETPAL'\'' exactly as it is. Keep the same lilac background, icons, colours, layout, timing and locked-off camera; nothing repositioned. Keep the same sound design: keyboard ticks, a pop per card, a chime on the button. Every word spelled exactly as given, no other text.",
  "resolution": "720p",
  "seed": 4245
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

Example 5: Extend, giving the fox one more beat

The brief: the bakery clip from Example 3 ends on a wave, and the client wants it to end on the opening hours instead. Extend adds 3 to 10 seconds to a source clip and returns the original plus the new seconds as one file.

An extend prompt describes only what happens next. Restate the medium and the camera so the continuation matches, then write the new beats. Leave resolution empty: that keeps the source's frames untouched and only generates the added seconds.

Add the opening-hours board, +5sfor Gemini Omni 1.2 Flash Extend
Continue the same stop-motion claymation shot, same locked-off camera and the same warm morning light. First the fox baker reaches under the counter and sets a small clay chalkboard on top of it, reading 'OPEN 7 AM'. Then he taps the board twice with one paw and smiles at the camera. The shelves, the sign and the loaf stay where they are. Sound: a wooden clack as the board lands, two light taps. No dialogue, no music. Every word spelled exactly as given, no other text.
Try it
8s source plus 5 added seconds, 13s total, $0.445

The first 8 seconds are the source, untouched: frames from the extended file match the original with a correlation of 1.000. Then the fox ducks, comes up with a chalkboard reading "OPEN 7 AM", and sets it on the counter beside the loaf. The join is invisible because the camera, light and set carry straight across. Five extra seconds cost $0.445, which is cheaper than re-rendering a 13-second clip from scratch at the same resolution.

APIExtend the bakery clipAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-extend",
    video="https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex3_ref.mp4",
    prompt="Continue the same stop-motion claymation shot, same locked-off camera and the same warm morning light. First the fox baker reaches under the counter and sets a small clay chalkboard on top of it, reading 'OPEN 7 AM'. Then he taps the board twice with one paw and smiles at the camera. The shelves, the sign and the loaf stay where they are. Sound: a wooden clack as the board lands, two light taps. No dialogue, no music. Every word spelled exactly as given, no other text.",
    duration=5,
    seed=4246,
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-extend" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "video": "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex3_ref.mp4",
  "prompt": "Continue the same stop-motion claymation shot, same locked-off camera and the same warm morning light. First the fox baker reaches under the counter and sets a small clay chalkboard on top of it, reading '\''OPEN 7 AM'\''. Then he taps the board twice with one paw and smiles at the camera. The shelves, the sign and the loaf stay where they are. Sound: a wooden clack as the board lands, two light taps. No dialogue, no music. Every word spelled exactly as given, no other text.",
  "duration": 5,
  "seed": 4246
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

Iterate on the prompt at 360p, then upscale the take you like

Prompt work is iterative, and 360p is where to iterate: my 8-second 360p draft of Example 1 billed $0.207, about a third of the 720p clip. But there is a trap in the model's own advice, which says to draft at 360p and then regenerate the winner at a higher resolution.

I ran the exact structured prompt from Example 1 at 360p with the same seed. Every beat and every word came through, but it is a different take: the cards sit higher, the spacing changed, and frame correlation against the 720p clip is only 0.2 to 0.6. Re-rendering with the same seed does not get you back the draft you approved.

What does is the upscaler. I sent the 360p draft to Gemini Omni 1.2 Flash Upscale at 1080p, and the result matches the draft at 0.99 or better on every frame I checked.

360p draft1080p upscale
Sound
The 360p draft ($0.207) and the same take upscaled to 1080p ($0.588)
APIUpscale the approved draftAPI reference
# pip install "segmind>=1.1.0"
# export SEGMIND_API_KEY="YOUR_API_KEY"
import segmind

result = segmind.run(
    "gemini-omni-1.2-flash-upscale",
    video="https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex6_draft360.mp4",
    resolution="1080p",
)
print(result.get("output"))
# 1. Submit the request; the reply carries its request_id
REQUEST_ID=$(curl -s -X POST "https://api.segmind.com/v2/gemini-omni-1.2-flash-upscale" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "video": "https://segmind-resources.s3.amazonaws.com/blog/gemini-omni-prompts-ex6_draft360.mp4",
  "resolution": "1080p"
}' | jq -r .request_id)

# 2. Check its status until it is COMPLETED
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID/status" \
  -H "x-api-key: YOUR_API_KEY"

# 3. Fetch the result
curl -s "https://api.segmind.com/v2/requests/$REQUEST_ID" \
  -H "x-api-key: YOUR_API_KEY"

So the loop is: write the prompt, draft at 360p, fix the prompt until the beats and the text are right, then upscale the draft you approved. Draft plus upscale came to $0.795 for 8 seconds of 1080p. A 360p source reaches 720p or 1080p; for 4K, upscale twice.

What all eight clips cost

ClipEndpointSettingsBilledWall time
Vague explainerText to Video8s, 720p$0.59746 s
Structured explainerText to Video8s, 720p$0.60033 s
Kettle calloutsImage to Video6s, 720p, 9:16$0.45038 s
Fox bakerReference to Video8s, 720p, 2 refs$0.59738 s
Spanish editVideo Edit8s source, 720p$0.67051 s
Opening-hours beatExtend+5s on 8s source$0.44570 s
360p draftText to Video8s, 360p$0.20724 s
UpscaleUpscale8s, 360p to 1080p$0.58846 s

All eight together billed $4.15. Wall time is measured from my server and includes downloading the file.

Five prompt mistakes I would not make again

  • Describing a first frame you already supplied. In image to video, the image is the look. Spend your words on motion.
  • Unquoted on-screen text. If a word is not in single quotes, the model treats it as an idea, not a spelling.
  • Skipping the "what stays still" line. It is what separated the clean structured explainer from the busy vague one.
  • Soft, invisible beats. "The light warms slightly" was the clearest dropped instruction in these tests. Concrete, visible actions land; moods drift.
  • Re-rendering a draft at higher resolution. Same seed, different take. Upscale the draft instead.

FAQ

How do I write prompts for Gemini Omni 1.2 Flash?

Name a stylised medium and camera, describe the subject, list beats in order with "first, then, finally" or timecodes, quote every on-screen word, say what stays still, add one sound per beat, and end with "Every word spelled exactly as given, no other text."

Does Gemini Omni 1.2 Flash follow timecodes like [0-2s]?

Yes. In my text-to-video test the title, three cards and button each landed within about half a second of the timecode I gave.

How do I reference images in Gemini Omni 1.2 Flash Reference to Video?

Pass 1 to 10 images in reference_images and refer to them in the prompt as <IMAGE_REF_0>, <IMAGE_REF_1> and so on, in order. Say what to keep from each.

Can Gemini Omni 1.2 Flash make a character speak?

Yes. Put the line in double quotes after "says". My mascot spoke "Fresh out of the oven!" word for word.

Can I use Gemini Omni 1.2 Flash to translate on-screen text in a video?

Yes, with Video Edit. Give each old and new word in quotes, keep the layout and timing explicitly, and it swaps the text while the animation stays put.

What is the cheapest way to iterate on Gemini Omni 1.2 Flash prompts?

Draft at 360p, about $0.025 per second, then upscale the approved draft. Do not re-render at a higher resolution: the same seed gives a different take.

Wrapping up

Gemini Omni 1.2 Flash rewards prompts that read like a shot list rather than a pitch. Medium, subject, ordered beats, quoted words, what stays still, one sound per beat, and the closing fence. Across these five endpoints that structure got me correct spelling every time, beats on their timecodes, a mascot that stayed on model and a localisation that left the animation untouched, for $4.15 of clips.

Copy any prompt above with Try it to load it with its settings, or start from the endpoint that matches your input:

ModelGemini Omni 1.2 Flash Text to VideoText-to-video with native audio and legible on-screen text.ModelGemini Omni 1.2 Flash Reference to VideoTurn reference images or videos into consistent AI video with audio.
  • #ai-video
  • #prompting
  • #gemini-omni
  • #video-editing
HG

Himanshu Goel

@himanshu

Himanshu Goel is a marketer and AI builder who works on marketing and content at Segmind. In 2022 he created Kyra, India’s first AI influencer, He himself creates content about AI and Startups and has over 250,000 followers.

View profile

Posts

More from Himanshu Goel

Make your own with Segmind

Run every model and Pixelflow in this post, and build your own workflows.

Start creating