Loading...
Loading...
Generate video from up to seven reference images with Gemini Omni 1.1 Flash. The reference images carry character and style consistency into the result.
0/7 items
Sign in to run models
No output yet
Run the model to see generated results.
import requests
result = requests.post(
'https://api.e2x.ai/v1/jobs/submit',
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
},
json={
'model': 'google/omni-1.1-flash/reference-to-video',
'input': {}
}
)import time
job_id = result.json()['jobId']
while True:
response = requests.get(
f'https://api.e2x.ai/v1/jobs/{'{job_id}'}',
headers={'Authorization': f'Bearer {'{API_KEY}'}'}
)
data = response.json()['data']
if data['status'] == 'completed':
print('Done!', data['outputs'][0]['url'])
break
elif data['status'] == 'failed':
raise Exception(f"Job failed: {'{'}data['error']['message']{'}'}")
time.sleep(2)Estimated cost per generation by duration and resolution. You only pay for what you run.
A campaign is never one clip. It is a shot list — eleven rows, the same courier bag in every row, and no budget for the afternoon the bag turns grey around row six. Reference-to-video keeps the bag the same bag. We run it as google/omni-1.1-flash/reference-to-video and bill $0.09 per second of 720p output, so the default eight-second clip is $0.72, audio included.
The field doing the work is image_urls — an array, with minItems: 1 and maxItems: 7 in our schema. That ceiling is why this page exists. Seven slots show a subject from enough angles that the model stops inventing the ones you withheld.
Different material, different door: a lone still is Omni 1.1 Flash image-to-video, both ends of a shot with a gap between them is start-end-frame-to-video, and a brief with no assets is Omni 1.1 Flash text-to-video, which carries the full price grid.
Our rate, read off the live catalog on August 28, 2026:
| Clip length | Price at 720p |
|---|---|
| 4 seconds | $0.36 |
| 6 seconds | $0.54 |
| 8 seconds (default) | $0.72 |
| 10 seconds | $0.90 |
List is $0.15 a second; a standing 40% discount brings it to $0.09. Resolution scales from there — $0.0297 at 360p, $0.18 at 4K, so a ten-second 4K render is $1.80. Then the number that decides how you build: attach one reference or seven, nothing above moves. duration and resolution are the whole formula. References are free weight.
Prices and product terms can change. Check each provider's current pricing before making a purchasing decision. Google Batch or Flex pricing is not directly equivalent to a standard on-demand API request because scheduling, availability, and processing conditions differ; it is therefore excluded from this comparison. This is a scoped comparison, not a claim that E2X is the world's cheapest option in every configuration.
The API fetches every URL in the array, so they must sit where our workers can reach them over plain HTTPS — a public bucket, an unexpired signed link, nothing behind a login.
Seven is a validated maximum, not a line in a docs page. Send an eighth and the request is rejected before a GPU is touched. That sounds like a limit; treat it as a budget. A set that earns all seven runs three-quarter view, profile, back, one brand-carrying detail, one at the distance the clip will frame, one under neutral light. Duplicate hero angles waste a slot. Angles you withhold get guessed.
That is the shift from the previous generation. Our Gemini Omni Flash reference-to-video endpoint runs the same idea at $0.075 a second with no documented ceiling at all — Google never published one, so we declined to print a number we could not stand behind. It is the cheaper endpoint, by twenty percent, and cheaper for reasons you can see: no validated seven-slot maximum, and no 360p tier to rehearse a reference set on before you spend. Google retires that model on 30 September 2026. If a pipeline still points there, the migration is a slug swap, it costs a fifth more per second, and it lands here.
Build the array once. Store the seven URLs beside your shot list and post that identical array with every job. The set is the fixed term; the prompt is the variable.
That inversion is the workflow. Because the references carry the subject, each prompt stops describing what the thing looks like and starts describing what happens to it — camera, what moves, the light, the sound. Prompts get shorter and clips get more consistent, which is not the trade-off people expect. Pin a seed when comparing two phrasings of a shot, so you can tell whether the rewrite helped or the dice did.
Budget 240 seconds per job and fan the list out concurrently. Then stay calibrated by what Google's model card admits:
Maintaining complete consistency throughout edits, generating scenes with complex motion, or rendering perfectly accurate text remains a challenge.
Seven references narrow the drift. They do not abolish it.
Two fields are required: prompt and image_urls. Keep your key server-side and post the job.
curl -X POST https://api.e2x.ai/v1/jobs/submit \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/omni-1.1-flash/reference-to-video",
"input": {
"prompt": "Image 1 is the folded bicycle, image 2 the hinge, image 3 the rider. Cobbled courtyard at sunrise. The rider unfolds it and snaps the frame shut. Locked-off wide. Birdsong, a distant tram.",
"image_urls": [
"https://example.com/bike-folded.jpg",
"https://example.com/bike-hinge.jpg",
"https://example.com/rider.jpg"
],
"duration": "8",
"aspect_ratio": "16:9"
}
}'
Back comes data.jobId. Renders take minutes, so poll slowly — or pass a webhookUrl and skip polling.
const headers = {
Authorization: `Bearer ${process.env.E2X_API_KEY}`,
"Content-Type": "application/json",
};
// One array, reused by every prompt.
const image_urls = [
"https://example.com/fox-puppet-front.jpg",
"https://example.com/fox-puppet-muzzle.jpg",
"https://example.com/fox-puppet-profile.jpg",
];
const submitted = await fetch("https://api.e2x.ai/v1/jobs/submit", {
method: "POST",
headers,
body: JSON.stringify({
model: "google/omni-1.1-flash/reference-to-video",
input: {
prompt:
"Image 1 is the fox puppet. It leans in from frame left and tilts its head. Slow dolly in. Paper rustle, soft room tone.",
image_urls,
duration: "10",
aspect_ratio: "9:16",
resolution: "1080p",
seed: 70413,
},
}),
}).then((r) => r.json());
const { jobId } = submitted.data;
while (true) {
const job = await fetch(`https://api.e2x.ai/v1/jobs/${jobId}`, { headers })
.then((r) => r.json());
if (job.data.status === "completed") { console.log(job.data.outputs[0].url); break; }
if (job.data.status === "failed") throw new Error(job.data.error?.message);
await new Promise((r) => setTimeout(r, 5000));
}
Statuses run pending → processing → completed, or settle on failed / cancelled. One trap: duration and resolution are strings. "10", never 10. Schema and price live in the machine-readable spec.
Veo 3.1 Fast reference-to-video costs $0.01 a second on this same platform. Nine times less. Eight seconds there is $0.08 against $0.72 here, and we will not bury it under a table.
So the default answer is Veo. If a shot list needs three references, eight seconds and 720p, calling anything else is spending money on nothing.
Four things flip it. You need more references than Veo accepts, which stops at three against our seven — the difference between covering a subject and sampling it. You need ten seconds, which Veo will not give you. You need 4K. Or you want the 360p tier, where twenty drafts cost less than one finished clip and the winner re-renders from the same array and seed. Outside those four, go cheap. More sits in the reference-to-video category, and the rest in the model catalog.
Your references are uploads of real things, and sometimes real people. Google blocks image uploads showing minors, or certain recognisable individuals, for users in the UK, Switzerland and the European Economic Area. Here that is a casting constraint, not a footnote. Put it in the brief, not in a failed job at 2am.
Every frame carries SynthID. Google's invisible watermark is on all output and no provider can switch it off, us included. Settle any contract banning labelled AI assets before you integrate.
Sound comes from words. Audio is generated with the picture and steered from the same prompt — no has_sound toggle, no audio reference upload.
Result URLs expire. Copy each output to your own storage in the handler that reads outputs[0].url. A campaign you re-render is one you paid for twice.
English is the only fully supported prompt language, and it is listed under the Gemini Enterprise Agent Platform, the successor Google put in place of Vertex AI in April 2026. Background sits in our release write-up.
Attaching seven images tells the model what exists. It does not say which is the hero. You do that in prose: image 1 is the kettle, image 2 is the enamel lid, image 3 is the kitchen. Numbered, first line, before any direction.
Then stop describing the subject. A prompt that re-specifies the colour and shape of something you already attached argues with your own references, and the model splits the difference. Spend the words on what the array cannot hold: camera, one move, the light, the ambience. Keep each prompt to one continuous shot — ask for a three-scene narrative and you get a smear. Our Gemini Omni prompting guide goes deeper on shot vocabulary.
Seven, and the limit is published rather than guessed at: image_urls is validated with minItems: 1 and maxItems: 7, so an eighth entry fails on submit. The predecessor had no documented ceiling. That is the biggest practical difference.
No. We bill per second of finished video, scaled by resolution; the reference count is not in that calculation. One reference or seven, an eight-second 720p clip is $0.72. Length and resolution are the only levers.
Number them in the prompt — which image holds the product, which the detail, which the environment — then describe the action. image_urls is a bare list until your prose assigns roles.
That is the intended shape. Store the array once and post it unchanged with every prompt, varying only the direction. A pinned seed keeps lighting steady enough for the clips to cut together.
Almost always, at $0.01 a second — Veo 3.1 Fast is nine times cheaper for an equivalent request. Move here when three references are not enough coverage, when the cut needs ten seconds, when the deliverable is 4K, or for the 360p draft loop.
360p, 720p, 1080p or 4K, at 16:9 or 9:16, in 4, 6, 8 or 10 seconds, always at 24 fps. The top two resolutions are upscaled rather than natively rendered, so judge sharpness on your own footage.
Google deprecates gemini-omni-flash-preview on that date, and every provider running those weights stops the same day. Point your jobs here: same request shape, documented reference ceiling. The older reference-to-video page stays up as a migration reference.