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.
| Endpoint | What you give it | Length | Prompt job |
|---|---|---|---|
| Text to Video | A prompt | 3 to 15 s | Describe everything |
| Image to Video | A first frame, optional last frame | 3 to 15 s (10 s with both frames) | Describe only what moves |
| Reference to Video | 1 to 10 reference images | 3 to 10 s | Bind each reference, describe a new scene |
| Video Edit | A source clip up to 15 s | Follows the source | Say what changes and what must not |
| Extend | A source clip up to 27 s | Adds 3 to 10 s, 30 s total | Describe only the next beat |
| Upscale | A finished clip up to 15 s | Same as source | No 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:
- 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.
- Subject and set. What is in the frame and where. Keep it to one sentence.
- Beats in order. Either "first..., then..., finally..." or timecodes such as
[0-2s]. One action per beat. - Quoted on-screen text. Every word in single quotes, exactly as it should appear.
- 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.
- 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.
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.
And the structured version, same seed, same settings.
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.
- Vague prompt
- Structured prompt
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.
# 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
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.
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.
# 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
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.
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.
# 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.
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.
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.
# 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.
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.
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.
# 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.
# 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
| Clip | Endpoint | Settings | Billed | Wall time |
|---|---|---|---|---|
| Vague explainer | Text to Video | 8s, 720p | $0.597 | 46 s |
| Structured explainer | Text to Video | 8s, 720p | $0.600 | 33 s |
| Kettle callouts | Image to Video | 6s, 720p, 9:16 | $0.450 | 38 s |
| Fox baker | Reference to Video | 8s, 720p, 2 refs | $0.597 | 38 s |
| Spanish edit | Video Edit | 8s source, 720p | $0.670 | 51 s |
| Opening-hours beat | Extend | +5s on 8s source | $0.445 | 70 s |
| 360p draft | Text to Video | 8s, 360p | $0.207 | 24 s |
| Upscale | Upscale | 8s, 360p to 1080p | $0.588 | 46 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

