Loading...
Loading...
Generate smooth video transitions between two key frames with Gemini Omni 1.1 Flash. Provide a start frame, an end frame and a text prompt to guide the in-between 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/start-end-frame-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 is Google's gemini-omni-1.1-flash, GA since 27 August 2026 and a Gemini-family model rather than a Veo. We run its two-frame capability as google/omni-1.1-flash/start-end-frame-to-video and bill per second of output — $0.09 at 720p, a standing 40% off the $0.15 list rate. The default eight-second clip is $0.72.
Three fields go in: a start frame, an end frame, a prompt. Your first image becomes frame one, your second the last, everything between is invented. That is not a clip request but a bridge request, and a bridge is worth what its two banks are worth.
New here, too — the earlier Omni Flash generation shipped without it, the plainest evidence for the case in our 1.1 release write-up. A continuity release, not a quality one.
Our rates, checked August 28, 2026:
| Duration | 360p | 720p | 1080p | 4K |
|---|---|---|---|---|
| 4 s | $0.1188 | $0.36 | $0.54 | $0.72 |
| 6 s | $0.1782 | $0.54 | $0.81 | $1.08 |
| 8 s (default) | $0.2376 | $0.72 | $1.08 | $1.44 |
| 10 s | $0.297 | $0.90 | $1.35 | $1.80 |
1080p and 4K are upscaled, not native.
Tweening is the wrong mental model. A tweening tool blends pixel A toward pixel B. This model reads both images, decides what event plausibly carried the scene between them, and renders that — audio included, generated natively from the same prompt. No has_sound field, no mute switch.
At 24 fps a four-second bridge is ninety-six frames, two of which you supplied. The other ninety-four are an argument about physics, made whether or not it holds. Framing is 16:9 or 9:16; budget four minutes a job.
Three questions settle the pair. Same subject? Not similar — same. Same light? Key direction, colour temperature, contrast. Could a camera have made that move? If you cannot say it in a sentence an operator would follow, neither can the model.
When the answer is no, nothing errors — the model papers over the gap, in four shapes:
A clip you cannot use costs what a usable one costs.
At $0.0297 per second a four-second 360p test is $0.1188; the eight-second 720p final is $0.72, five times more. And 360p, too small to judge a face, is fine for judging the middle. A cut is a cut at any resolution. A morph is a morph. Google also claims the tier runs up to 60% faster — launch-blog wording, not an API-reference number.
That makes storyboard work affordable to iterate. Two key frames per beat, the shot list run at four seconds and 360p, played back as an animatic — twelve beats for about $1.73. Failures are almost always a frame-pair problem, fixed by redrawing one board rather than rewriting the prompt five times. Render only the survivors. Veo 3.1 Fast start-end-frame-to-video has no draft tier at all.
duration accepts 4, 6, 8 or 10, as a string. Every second costs the same, so it reads like a budget knob. It is a directing one.
The same two frames at four seconds and at ten are two different shots. Four forces the transit — the camera commits, little room to invent. Ten has to be filled, and the model will find its own filler: a drift, a held beat, a second gesture. That invented business is the least predictable output here.
Match length to distance: two product angles thirty degrees apart, stretched to ten seconds, buys a crawl and dead air. Ten is Omni's ceiling and a real edge — Veo stops at eight.
Mint a key, hold it server-side, submit the job. prompt, start_frame_url and end_frame_url are required, and we fetch both images, so each URL must answer an unauthenticated request.
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/start-end-frame-to-video",
"input": {
"prompt": "The camera arcs right around the espresso machine as steam builds. Grinder hum, cafe chatter.",
"start_frame_url": "https://example.com/07a-left.jpg",
"end_frame_url": "https://example.com/07b-right.jpg",
"duration": "6",
"resolution": "360p"
}
}'
Poll the job id, or pass a webhookUrl:
const headers = {
Authorization: `Bearer ${process.env.E2X_API_KEY}`,
"Content-Type": "application/json",
};
const { data } = await fetch("https://api.e2x.ai/v1/jobs/submit", {
method: "POST",
headers,
body: JSON.stringify({
model: "google/omni-1.1-flash/start-end-frame-to-video",
input: {
prompt: "A slow crane down from the rooftop railing to the courtyard table. One continuous move.",
start_frame_url: "https://example.com/12a-roof.jpg",
end_frame_url: "https://example.com/12b-courtyard.jpg",
duration: "10",
resolution: "720p",
},
}),
}).then((r) => r.json());
let url = null;
while (!url) {
const job = await fetch(`https://api.e2x.ai/v1/jobs/${data.jobId}`, { headers })
.then((r) => r.json());
if (job.data.status === "completed") url = job.data.outputs[0].url;
else if (["failed", "cancelled"].includes(job.data.status))
throw new Error(job.data.error?.message ?? job.data.status);
else await new Promise((r) => setTimeout(r, 5000));
}
Status runs pending, processing, completed, or lands on failed/cancelled. Two schema traps: duration and resolution are strings, and the fields are start_frame_url and end_frame_url, not the singular image_url used elsewhere. Live values sit in the machine-readable spec.
Veo 3.1 Fast runs the same job for a ninth of the money:
| Endpoint | 8 s at 720p | Reach for it when |
|---|---|---|
| Veo 3.1 Fast start-end-frame-to-video | $0.08 | The frames connect and eight seconds is enough |
| Omni 1.1 Flash start-end-frame-to-video | $0.72 | You need ten seconds, 4K, or a draft pass |
| Omni 1.1 Flash image-to-video | $0.72 | Only one end of the shot is fixed |
| Omni 1.1 Flash reference-to-video | $0.72 | A subject must stay itself across many shots |
| Omni 1.1 Flash text-to-video | $0.72 | There is no source frame at all |
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.
Start on Veo. Come back when its eight-second wall is in the way, the deliverable is 4K, or a draft pass saves more than it costs. The rest sits under image-to-video and text-to-video, and the whole model catalog is one page.
Describe the transit, not the scenery — the model already sees both ends. Name the move that connects them ("arc right", "crane down", "rack focus to the far window"), then say how it should sound — the audio is written off that same line. Do not request events neither frame implies. More camera vocabulary is in our Omni prompting guide; English is the only evaluated prompt language.
Three things before this goes near a client. Every frame carries SynthID, Google's invisible provenance marker, and no provider can strip it. Google's model card is blunt that "maintaining complete consistency throughout edits, generating scenes with complex motion, or rendering perfectly accurate text remains a challenge" — complex motion is what a wide frame gap asks for. In the EEA, Switzerland and the UK you may not upload images containing minors or certain recognisable people — a limit on your inputs. Result URLs are temporary: re-host them in the completion handler.
We charge $0.09 for each second of 720p output, so an eight-second clip is $0.72 and the ten-second maximum $0.90 — 40% off a $0.15 list rate. Resolution multiplies it, making a four-second 360p draft $0.1188 and a ten-second 4K render $1.80. Checked August 28, 2026.
Same subject, same lighting setup, and a camera move that could physically get from one to the other in the time requested. Two stills from one shoot, minutes apart, almost always work. Frames shot under different conditions force the model to resolve the difference on screen.
Nothing errors. You get a clip that hides the gap four possible ways: an invented cut, a morph through impossible geometry, a lighting pop, or figures ghosting in from nothing. All bill the same as a good render, which is why the $0.1188 draft pays for itself.
Veo 3.1 Fast first, in most cases — it does start-and-end frames at $0.01 per second against our $0.09, so eight seconds costs $0.08, not $0.72. Omni earns the gap in three places: the ten-second duration, 4K output, and the 360p test tier.
Three to ten seconds per call. The duration enum carries 4, 6, 8, 10, all strings. Ten is the hard ceiling, and anything longer is stitched from several jobs.
Yes. Both are fetched server-side, so each must answer an unauthenticated request until the job finishes. Short-lived signed URLs, private buckets, localhost addresses and data URIs fail.
Yes — every frame is marked with SynthID, Google's imperceptible provenance signal, invisible to viewers and verifiable through their tooling. No provider can disable it. Settle that with your client if a contract forbids labelled AI assets.