Loading...
Loading...
Animate a still image into video with Gemini Omni 1.1 Flash. The source image becomes the first frame and drives the generated motion.
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/image-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.
Gemini Omni 1.1 Flash reached general availability at Google on 27 August 2026. It belongs to the Gemini family, not Veo, and we expose its image-to-video capability as google/omni-1.1-flash/image-to-video. We bill per second of finished video — $0.09 a second at 720p, against a $0.15 list rate, because a standing 40% discount covers all four capabilities. The default eight-second clip is $0.72. Required: prompt and image_url.
Understand what the still is before your first call. It is a contract. It sets frame one, and with it the framing, the lens, the palette, the subject and every flaw already in the picture. Your prompt gets the next few seconds, nothing before them.
Almost every dull result here traces to one mistake: a prompt describing the photograph rather than the change. Name what moves. Name where the camera goes.
| Clip length | Price at 720p |
|---|---|
| 4 s | $0.36 |
| 6 s | $0.54 |
| 8 s (default) | $0.72 |
| 10 s | $0.90 |
Resolution scales that rate: 360p is 0.33× ($0.0297 a second), 1080p 1.5× ($0.135), 4K 2× ($0.18). A four-second 360p pass costs $0.1188 — the cheapest way to learn whether your still moves at all.
Two frames with the middle left to the model? Omni 1.1 Flash start-end-frame-to-video. One subject shot from several angles, steady across a shot list? Omni 1.1 Flash reference-to-video. No source material at all? Omni 1.1 Flash text-to-video carries the full pricing argument.
Treat the job as a continuation, not an interpretation. The model accepts your still as frame one, then invents twenty-four plausible frames a second after it, all anchored to what you handed over. That anchoring is the value: a signed-off key visual stays on brand because nobody re-rolled it.
It is also the constraint. A cluttered frame hands the model more objects to keep coherent while everything shifts, and coherence is this generation's weak point. Google's model card says so: "Maintaining complete consistency throughout edits, generating scenes with complex motion, or rendering perfectly accurate text remains a challenge." Signage smears. Crowds churn faces. One subject on a clean background survives ten seconds better than clutter survives four.
Match the crop yourself. Output comes in 16:9 or 9:16 — no square, no 4:5, no ultrawide. Push a 4:5 portrait into a 16:9 job and something gives: the model fills the sides with material nobody photographed, or the composition drifts to fit. You pay $0.09 a second either way. Crop first, while the decision is free.
Do not upscale your way into 4K. Source resolution caps what the output can honestly hold. A 640-pixel-wide thumbnail rendered at 1080p is a bigger file of the same detail, at 1.5× the rate.
Leave the motion somewhere to go. Headroom above a subject, road ahead of a car. Crop tight and nothing can move without being shoved out of frame — a common reason a clip reads as a wobbling photograph.
Mint a key in the dashboard and keep it server-side. Our pipeline fetches image_url itself, so it has to be reachable over the public internet — an HTTPS address on your CDN or object store, never a local path, localhost, or a URL behind a login. Signed URLs are fine with a generous window: jobs run about four minutes, and a sixty-second link dies first.
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/image-to-video",
"input": {
"prompt": "Steam starts curling from the kettle spout and drifts right. Camera pushes in slowly on the handle. Kitchen hum, a kettle beginning to tick. Nothing else in frame moves.",
"image_url": "https://cdn.example.com/stills/copper-kettle-16x9.jpg",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": "8"
}
}'
You get a job ID back. Either poll it or hand us a webhookUrl and skip the loop:
const headers = {
Authorization: `Bearer ${process.env.E2X_API_KEY}`,
"Content-Type": "application/json",
};
const start = await fetch("https://api.e2x.ai/v1/jobs/submit", {
method: "POST",
headers,
body: JSON.stringify({
model: "google/omni-1.1-flash/image-to-video",
input: {
prompt:
"She turns toward camera and the scarf lifts in the wind. Locked off. Gulls, distant surf.",
image_url: "https://cdn.example.com/stills/portrait-9x16.png",
aspect_ratio: "9:16",
resolution: "360p",
duration: "10",
},
}),
}).then((r) => r.json());
const { jobId } = start.data;
for (let tick = 0; tick < 360; tick++) {
const job = await fetch(`https://api.e2x.ai/v1/jobs/${jobId}`, { headers })
.then((r) => r.json());
if (job.data.status === "completed") {
await archive(job.data.outputs[0].url); // copy it somewhere permanent
break;
}
if (["failed", "cancelled"].includes(job.data.status)) {
throw new Error(job.data.error?.message ?? job.data.status);
}
await new Promise((r) => setTimeout(r, 5000));
}
A job reports pending, then processing, then completed, failed or cancelled. Two schema details bite people: duration and resolution are strings, so send "10" rather than 10; and no audio toggle exists, because sound is generated with the picture and steered from your prompt. Field definitions stay current in the machine-readable spec.
Write only what changes. Subject, light and composition arrived with the file; repeating them spends attention the model could spend on motion. State no movement and you get a near-still frame with drift, at full rate.
One movement, named. Steam rises. A door swings inward. Hair lifts. Pick the action that matters and let the rest hold still — saying so out loud helps more than it sounds like it should.
One camera instruction. "Slow push-in", "locked off", "handheld drift left". Plain grammar beats a paragraph of cinematography, and an unstated camera becomes the model's decision.
The sound underneath. Room tone, traffic, one specific effect. Silence is not the default; an unspecified mix gets invented for you. Prompts run to 50,000 characters, so length is never the limit — precision is. Our Gemini Omni prompting guide goes deeper on phrasing.
Hear this from us rather than from a bill. Veo 3.1 Fast image-to-video runs on this same platform at $0.01 a second — nine times below the endpoint on this page.
| Endpoint | 8-second clip | Reach for it when |
|---|---|---|
| Veo 3.1 Fast image-to-video | $0.08 | One still, one clip, nothing downstream depends on it |
| Omni 1.1 Flash image-to-video | $0.72 | You need ten seconds, a 360p draft pass, or this shot to sit beside others |
| Veo 3.1 Fast text-to-video | $0.08 | The still is not doing $0.64 of work |
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.
Take that seriously. One photograph, animated once, belongs at Veo. The premium here earns out in three cases: your cut needs ten seconds and Veo stops at eight; you want to draft at $0.0297 a second; or this clip has to belong to a set. Other ways to animate a still sit in the image-to-video category, alongside our model catalog.
Output is 24 fps, three to ten seconds per generation, with a SynthID watermark in every frame that nobody in the chain can switch off. Result URLs are temporary — archive the file inside your completion handler. A link you cannot fetch tomorrow is a render you buy twice.
One rule applies specifically because you upload a photograph: across the EEA, Switzerland and the UK, Google blocks source stills showing minors, and some recognisable individuals too. English is also the only prompt language Google has evaluated. Our release notes for Gemini Omni 1.1 Flash cover what else changed from the predecessor we still run, deprecated upstream on 30 September 2026.
Nine cents buys one second at 720p. The default clip runs eight seconds, so $0.72; ten seconds, the ceiling, comes to $0.90. That rate is 40% off a $0.15 list price, read from our live catalog on August 28, 2026. Resolution moves the multiplier — 0.33× at 360p, 1.5× at 1080p, 2× at 4K.
Veo, for most single stills — $0.01 a second against $0.09, or $0.08 versus $0.72 over eight seconds. Come back when you need ten seconds, when a 360p draft pass saves money overall, or when the clip has to match others made from the same subject.
16:9 and 9:16 only. Crop your source to the target ratio before submitting; otherwise the model reconciles the mismatch on its own and you may lose part of the composition you approved.
Anywhere our pipeline can reach over public HTTPS — a CDN, an S3 or GCS bucket, your own web server. Local paths, localhost and anything behind authentication fail. Signed URLs work when their expiry comfortably outlasts the four minutes a job takes.
Usually because the prompt re-describes the image instead of directing it. The still already fixed the subject and the framing; with no motion and no camera move stated, the model has nothing to act on. Rewrite it as one movement plus one camera instruction.
Yes, produced natively alongside the picture and synchronised to it. There is no has_sound field and no silent mode, so describe the ambience in the prompt. Audio cannot be edited afterwards — a change means another generation.
Yes. Google blocks source stills showing minors, plus certain recognisable individuals, for users across the EEA, Switzerland and the UK — its policy, enforced at every provider. Outputs also carry an invisible SynthID watermark, so plan for labelled AI assets.