Gemini Omni 1.2
gemini-omni-1.2-flash
Google's video generation model supports text-to-video, image-to-video, and reference-image-to-video, with up to 10 reference images that can be uploaded; you can also use a first frame or first and last frames to specify where the visuals start and end, making it suitable for product showcase videos and social media ad creatives
Try gemini-omni-1.2-flash
Input
Showcases
View all showcasesOutput
videoPricing
gemini-omni-1.2-flash per second
| Specifications | Unit Price |
|---|---|
| 360P | $0.0229 |
| 720P | $0.0343 |
| 1080P | $0.0343 |
| 4K | $0.080 |
Positioning Overview
This is a video generation model for developers that produces short video clips from text descriptions, reference images, or first/last frame images, with a single clip lasting 3 to 15 seconds, and up to 10 seconds when using first/last frame mode. A public image can be used as reference content or style, or a first frame can be used to specify the opening shot; reference image input and frame input are mutually exclusive. It is suitable for e-commerce, advertising, and creative teams that need to produce horizontal or vertical short video assets in bulk.
Key Highlights
- Two control methods: reference images and first/last frames — Up to 10 public images can serve as character, product, or style references; first and last frames can also be used to specify the start and end shots.
- Choose aspect ratio and resolution by delivery channel — Aspect ratio supports 16:9 horizontal or 9:16 vertical, and resolution can be selected among 360p, 720p, 1080p, and 4k.
- Prompts can describe scenes and camera movement — Prompts are required and up to 20000 characters, and can describe visual content, motion, and camera push-in style.
Capabilities
Text-to-video and reference-image-to-video: Generate video from a prompt alone; image_urls accepts 1 to 10 public HTTP(S) images, and a single image is also treated as a reference image to constrain characters, products, or style.
First frame and first-last frame transition: first_frame_url specifies the opening shot alone; providing both first_frame_url and last_frame_url generates a transition shot from start to end frame, in which case the duration limit is 10 seconds and reference images cannot be used at the same time.
Duration, aspect ratio, and resolution settings: duration is an integer number of seconds from 3 to 15, defaulting to 10 seconds; aspect_ratio can be 16:9 or 9:16; resolution can be 360p, 720p, 1080p, or 4k, defaulting to 720p.
Overall style and excluded content: system_prompt sets the overall visual style, and negative_prompt describes content to exclude; when a last frame is specified, neither of these is available.
Use Cases
- E-commerce teams creating product showcase clips — Generate horizontal clips from prompts and multiple product or character reference images, for use as display assets in detail pages and product cards.
- Advertising teams producing vertical ad assets — Use prompts to describe selling points and select 9:16 aspect ratio to generate videos suitable for vertical placement in feeds and short video platforms.
- Design teams turning static images into motion — Specify a public image as the first frame to generate a motion clip unfolding from that image, for animating posters or illustrations.
- Creative teams previewing shot start and end — Provide first and last frames to generate transition shots, for storyboard previews and rapid presentation of concept clips.
Limitations and Selection Advice
A single video is limited to 3 to 15 seconds, and first/last frame mode is limited to 10 seconds; longer content must be processed in segments. 1080p and 4k are upscaled outputs, and 4k may not include an audio track. Reference images are mutually exclusive with first and last frames; after specifying a last frame, system_prompt and negative_prompt cannot be used. All image parameters accept only public HTTP(S) URLs and do not support Base64.
What's new
View changelog →- New model Gemini Omni 1.2 Flash Now Available: Text-to-Video, First-Frame and Reference-Image Generation
Create a generation task
https://api.hiapi.ai/v1/tasks Headers
AuthorizationstringRequiredAccount API key. Required on every request. Example: Bearer YOUR_HIAPI_API_KEY. Get your API key
Content-TypestringOptionalThe request body is always parsed as JSON; when sent, only application/json (optionally with charset) is accepted — any other value returns 415. Example: application/json.
Idempotency-KeystringOptionalIdempotency key, up to 255 bytes. Retries with the same key from the same account create the task only once; replays return the original taskId.
On network timeouts or client retries, the same key creates the task only once — no double charges (scope: the API key's account). Use a business-unique identifier as the key (e.g. "order-42"); replays return the original taskId, and keys expire 24 hours after the first request. See the Unified Async API overview for the full scenario matrix.
Body
modelstringRequiredCurrent fixed value: gemini-omni-1.2-flash
routestringOptionalCurrent fixed value: default
inputobjectRequired
Business parameters for gemini-omni-1.2-flash and route default — see the parameter table below.
promptstringRequiredminLength 1maxLength 20000pattern \SPrompt used to describe the scene, motion, camera, and expected audio; supports up to 20,000 characters, and a non-blank prompt must be provided in any mode.
durationintegerOptionalDefault: 10min 3max 15Output video duration, an integer number of seconds between 3 and 15; when using first/last frame interpolation, the maximum is limited to 10 seconds. Default is 10 seconds.
image_urlsarrayOptionalminItems 1maxItems 10Array of reference images, where each element is an image URL; 1 to 10 images can be used as character, product, or style references. Passing a single image through this parameter still counts as reference-image mode; if you want a single image to serve as the starting frame, use first_frame_url instead. Only HTTP(S) image addresses that are directly accessible on the public internet are supported; Base64 is not supported. Cannot be used together with a first frame or last frame.
Array [ string ]
resolutionstringOptionalDefault: "720p"Output resolution; 1080p and 4k are upscaled outputs, and 4k output may not include an audio track. Default is 720p.
360p720p1080p4kaspect_ratiostringOptionalDefault: "16:9"Output aspect ratio, which determines landscape or portrait composition. Default is 16:9.
16:99:16system_promptstringOptionalSystem prompt used to set the overall style or visual direction; cannot be used together with a last frame.
last_frame_urlstringOptionalminLength 1pattern ^https?://URL of the last-frame image, which must be provided together with first_frame_url; in this case, the maximum duration is 10 seconds. Only HTTP(S) image addresses that are directly accessible on the public internet are supported; Base64 is not supported. Cannot be used together with reference images, system_prompt, or negative_prompt.
first_frame_urlstringOptionalminLength 1pattern ^https?://URL of the video's first-frame image, which can be used alone to specify the starting frame; must be an HTTP(S) image URL directly accessible on the public internet, Base64 is not supported, and it cannot be used together with image_urls. Required when last_frame_url is provided.
negative_promptstringOptionalNegative prompt used to describe content that should be excluded; cannot be used together with a last frame.
callbackobjectOptional
Terminal-state notification config. When omitted, no callback is delivered — poll the task yourself. See the callback note below.
Provide callback.url when creating a task and HiAPI POSTs to your service once the task reaches a terminal state — no polling needed. The callback payload mirrors the task detail structure; signature verification, delivery retries and idempotency are documented on the Unified Async API overview page.
urlstringRequiredRequired when callback is present. A POST is sent to this URL once the task reaches a terminal state; must be a valid http(s) URL.
whenstringOptionalDefault: "final"Only final is supported today — notified on both success and fail.
finalstoragestringOptionalDefault: "temp"Artifact storage tier: temp (default, retained about 7 days) or persistent (long-term, billed by size). Insufficient balance or exceeding the storage cap silently downgrades to temp; the effective tier is shown in the task detail response.
temppersistentRequest examples
# Submit an async task; returns a taskId immediately (no waiting for generation)
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.2-flash",
"input": {
"prompt": "…",
"duration": 10,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}' const res = await fetch("https://api.hiapi.ai/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HIAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gemini-omni-1.2-flash",
input: {
"prompt": "…",
"duration": 10,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}),
});
const task = await res.json();
// { code: 200, message: "success", data: { taskId } } import os, requests
res = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "gemini-omni-1.2-flash",
"input": {
"prompt": "…",
"duration": 10,
"resolution": "720p",
"aspect_ratio": "16:9"
}
},
)
print(res.json()) # { code, message, data: { taskId } } 200 OK
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR"
}
} 400 Bad Request
{
"code": 400,
"message": "invalid request",
"data": null,
"error_code": "INVALID_REQUEST"
} Get task detail
https://api.hiapi.ai/v1/tasks/:id Response fields
taskIdstringRequiredTask ID, always prefixed with tk-hiapi-.
modelstringRequiredResolved full model name. Tasks submitted with the route parameter return base@route (e.g. gpt-image-2/text-to-image@ext); otherwise identical to the name passed at creation.
routestringOptionalPresent only when the task was submitted with an explicit route parameter; echoes the submitted value.
statusstringRequiredTask status.
queued Queued, not started yet.
handling Being processed.
archiving Processing finished, artifacts being prepared.
success Terminal: completed, artifacts available (output returned).
fail Terminal: failed (error returned).
After submission, check status: success and fail are terminal, everything else is non-terminal. Poll every 1–3 seconds until terminal. On success, download artifacts from output[].url and transfer them before expireAt; pass storage: "persistent" at creation time when long-term retention is needed.
creatednumberRequiredTask creation time (Unix seconds).
completednumberRequiredUnix seconds when the task reached a terminal state; fixed to 0 while not terminal.
outputarrayOptional
Present only when status == success. Artifact list — always an array; a single task may return multiple types at once (e.g. video + first_frame).
Array [ object ]
Array items
urlstringRequiredArtifact URL, directly downloadable.
typestringRequiredCurrent possible values: video, image, audio, first_frame, last_frame, thumbnail; more may be added later.
expireAtnumberRequiredUnix seconds until which the artifact remains accessible; download or transfer before it expires.
errorobjectOptional
Present only when status == fail.
codestringRequiredBusiness error code.
messagestringRequiredError description.
Response examples
Success
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR",
"model": "happyhorse-1-0",
"status": "success",
"created": 1777282033,
"completed": 1777282099,
"output": [
{
"url": "https://cdn.hiapi.ai/tasks/.../video.mp4",
"type": "video",
"expireAt": 1777886899
}
]
}
} Processing (non-terminal)
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "archiving",
"created": 1777282033,
"completed": 0
}
} Failed
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "fail",
"created": 1777282033,
"completed": 1777282099,
"error": {
"code": "TASK_FAILED",
"message": "task failed"
}
}
} Articles
View all articles →-
Guide
Gemini Omni 1.2 Flash Integration Guide: Input Modes, Parameters, and Spec-Based Billing
The minimal integration path for the public model gemini-omni-1.2-flash: input modes, parameter constraints, copyable requests, and resolution-based billing
-
Tutorial
gemini-omni-1.2-flash in practice: 3 video generation business scenarios and a go-live checklist
Three application scenarios: text-based creative, first-frame animation, and reference-image-constrained visuals
-
Comparison
Gemini Omni 1.2 Flash Model Selection Checklist: Input Modes, Specs, and Budget
Verify input modes, specs, budget, and effect boundaries, and complete model selection validation with your own samples
Related Models
View all models →Same Type
-
Veo 3.1 Fast Google $0.170 /second -
Runway Gen 4.5 Runway $0.172 /second -
Kandinsky 6.0 Pro $1.93 /video -
FLUX 3 Max Black Forest Labs $0.121 /second -
PixVerse V6 PixVerse $0.036 /second -
Gemini Omni 1.1 Flash Google $0.450 /video -
MiniMax H3 MiniMax $0.072 /second -
HeyGen Avatar IV HeyGen $0.150 /second -
Vidu Q3 Vidu $0.149 /second -
Veo 3.1 Google $0.290 /second -
Vidu Q4 Preview Vidu $0.051 /second -
Wan 2.6 Flash Alibaba $0.043 /second
Same Provider
-
Lyria 3.5 Google $0.090 /song -
Lyria 3 Pro Google $0.140 /song -
Veo 3.1 Google $0.290 /second -
Nano Banana 2 Google $0.018 /image -
Imagen 4 Google $0.030 /image -
Gemini Omni 1.1 Flash Google $0.450 /video -
Veo 3.1 Lite Google $0.060 /second -
Google Virtual Try-On Google $0.107 /image -
Nano Banana Google $0.011 /image -
Veo 3.1 Fast Google $0.170 /second -
Nano Banana Pro Google $0.029 /image -
Nano Banana 2 Lite Google $0.033 /image
