Use the reference images only for this astronaut's face, short red hair, and white-and-orange flight suit. New scene: she steps into a vast alien crystal cave, giant luminous crystals refracting teal and violet light, she turns her head looking around in wonder. Camera follows behind her in one steady tracking shot. Audio: echoing footsteps and a low crystalline hum. Keep her identity consistent. No logos, no readable text, no watermark.
Gemini Omni Flash Reference to Video API
google/gemini-omni-flash/reference-to-videoGemini Omni Flash Reference to Video builds 4–10 second clips from exactly three reference images plus a text prompt, with locked character consistency, native lip-synced audio, and resolution from 720p to 4K. It carries face, wardrobe, and style cues across the new scene while adding directed motion, camera language, and synchronized sound.
Add exactly 3 reference images.
Your generated video will appear here
Add your prompt and required media, review the settings, then click Run.
Examples
REST API
Quick Start
Authenticate with the API, submit three references and a prompt, then retrieve the video using the task ID.
Connect to the Vidgo API
Create an API key, keep it only on your server, and send Authorization: Bearer VIDGO_API_KEY.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Fill in the parameters for this endpoint using the request example, then save the returned task_id to query progress and results.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "google/gemini-omni-flash/reference-to-video",
"input": {
"prompt": "Use the reference images only for this astronaut's face, short red hair, and white-and-orange flight suit. New scene: she steps into a vast alien crystal cave, giant luminous crystals refracting teal and violet light, she turns her head looking around in wonder. Camera follows behind her in one steady tracking shot. Audio: echoing footsteps and a low crystalline hum. Keep her identity consistent. No logos, no readable text, no watermark.",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-01.png",
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-02.png",
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-03.png"
]
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Wait for the result
Query with task_id, continue for not_started/running, and stop for finished/failed. On success, read data.files[].file_url.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll status with a 2-second base interval, and increase the interval for longer tasks. Continue only while status is not_started or running, and stop once finished or failed. You can also specify callback_url in the request payload to receive webhook notifications.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "running",
"created_time": "2026-09-15T10:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete runnable example
Expand for a complete script with HTTP and business-code checks, task_id validation, polling, terminal-state handling, and a timeout boundary.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "google/gemini-omni-flash/reference-to-video",
"input": {
"prompt": "Use the reference images only for this astronaut's face, short red hair, and white-and-orange flight suit. New scene: she steps into a vast alien crystal cave, giant luminous crystals refracting teal and violet light, she turns her head looking around in wonder. Camera follows behind her in one steady tracking shot. Audio: echoing footsteps and a low crystalline hum. Keep her identity consistent. No logos, no readable text, no watermark.",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-01.png",
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-02.png",
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-flash/reference-to-video/v1/01/input-03.png"
]
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneInput parameters
The table lists available input parameters, types, and defaults. Request examples also include the required top-level model field.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | 1–20,000 characters after trimming. |
| image_urls | string[] | Yes | — | Exactly 3 public HTTP(S) image URLs. |
| duration | integer | No | 6 | 4, 6, 8, or 10 seconds. |
| resolution | string | No | 720p | 720p, 1080p, or 4k. |
| aspect_ratio | string | No | 16:9 | 16:9 or 9:16. |
Response Fields
A successful submission returns a task ID. Status queries provide progress, output files, and error details when a task fails.
| Field | Type | Description |
|---|---|---|
| code | integer | Application result code; successful responses use 0 or 200. |
| message | string | Human-readable message or error detail when present. |
| data.task_id | string | Task ID used in the status endpoint path. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Task creation time in date-time format. |
| data.progress | integer | Task progress from 0 to 100, when included in the response. |
| data.files[] | array | All output files from a successful task, in response order. |
| data.files[].file_url | string | Public URL for a generated video. |
| data.files[].file_type | string | File type, such as video. |
| data.error_message | string | null | Failure detail when status is failed. |
Task Lifecycle
Continue querying while the status is not_started or running. End polling at finished or failed, then process the output files or error details respectively.
not_startedThe task was accepted and is waiting to begin.
runningGeneration is in progress. Continue polling the same task_id.
finishedGeneration succeeded. Read every video URL from data.files[].file_url.
failedGeneration stopped with an error. Read data.error_message and stop polling.
Polling and Errors
- AuthenticationFor a 401 response, check the Bearer API key in Authorization, update the credentials, and retry.
- ValidationFor a 400 response, use the response details to check required fields, parameter ranges, and available credits, then adjust and resubmit.
- Network and timeoutIf a status query encounters a network error or timeout, retain the original task_id and retry the query, then handle the result according to the returned task status.
- Polling intervalPoll status with a 2-second base interval, and gradually increase the interval for longer tasks.
- Terminal statesContinue only for not_started or running. Stop immediately on finished or failed.
- Callback optionProvide callback_url at the request top level to receive the final flat task object; polling remains available if delivery fails.
Endpoint limits
| Specification | Value | Details |
|---|---|---|
| Input mode | Prompt + 3 images | Exactly three public reference stills plus a scene and audio prompt. |
| Output | Video | Returns an asynchronous task ID; finished tasks include a video file with native audio. |
| Resolution | 720p / 1080p / 4k | Default is 720p. |
| Duration | 4 / 6 / 8 / 10 seconds | Default is 6 seconds. |
| Aspect ratio | 16:9 / 9:16 | Default is 16:9. |
| Billing basis | Per generation | 720p/1080p: 4s=120, 6s=150, 8s=200, 10s=220 credits. 4k: 4s=250, 6s=300, 8s=350, 10s=450 credits. |
Gemini Omni Flash Reference to Video
Gemini Omni Flash Reference to Video is Google DeepMind’s multimodal model for multi-image consistent video generation. Provide exactly three public image URLs—for example face, wardrobe, and product or style—and a cinematic prompt to output 4–10 second clips with lip-synced audio. Choose 720p, 1080p, or 4K with 16:9 or 9:16 framing—ideal for recurring characters, campaign talent continuity, product line consistency, and branded virtual-host series.
Why Choose This?
Three-image character lockUse exactly three references to anchor face, wardrobe, and style so recurring talent stays recognizable across shots.
Strong multi-subject consistencyName people and products in the prompt while the references supply visual ground truth for appearance continuity.
Native audio with lip syncGenerate dialogue and ambience with the picture for talking characters that match the locked look.
Cinematic staging on locked looksApply push-in, dolly, tracking, and lighting cues without rebuilding identity from text alone.
720p to 4K delivery tiersIterate at 720p or 1080p, then step to 4K when campaign finals need finer texture and lighting detail.
Flexible duration and framingPick 4–10 seconds and 16:9 or 9:16 for hooks, mid-length demos, and vertical social series.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | String. Scene, action, camera, lighting, and audio cues; 1–20,000 characters after trimming. |
| image_urls | Required | Array with exactly 3 public HTTP(S) image URLs for character, wardrobe, or style reference. |
| duration | Optional | Integer. Output length in seconds; the Playground preselects 6. Default 64810 |
| resolution | Optional | String. Output clarity tier; the Playground preselects 720p. Default 720p1080p4k |
| aspect_ratio | Optional | String. Output framing; the Playground preselects 16:9. Default 16:99:16 |
How to Use
Prepare three reference imagesGather clear public URLs for face, wardrobe, and product or style so identity cues cover appearance and branding.
Write the scene promptDescribe action, camera, lighting, and audio, and name which reference drives face, outfit, or product look.
Set output durationChoose 4, 6, 8, or 10 seconds (default 6) to match the narrative beat.
Select resolutionPick 720p for iteration, 1080p for clearer delivery, or 4K for high-detail finals.
Choose aspect ratioSelect 16:9 or 9:16 to match landscape storytelling or vertical social series.
Review the cost and runCheck the cost shown on the Run button, finish references and prompt, then click Run.
Preview and download the videoWhen the task finishes, preview picture and synced audio, then select Download video to save the result.
Pricing
Billed per generation by duration and resolution tier, with native audio included. 1 credit = $0.005.
| Usage | Rate | Details |
|---|---|---|
| 720p / 1080p | 4s=120, 6s=150, 8s=200, 10s=220 credits | Default 720p / 6s costs 150 credits ($0.75). |
| 4k | 4s=250, 6s=300, 8s=350, 10s=450 credits | 4k / 6s costs 300 credits ($1.50). |
Best Use Cases
Recurring character seriesKeep the same talent look across episodic social shorts and campaign chapters.
Product line consistencyLock packaging and hero product appearance while staging new environments and camera moves.
Brand virtual-host contentCombine face and wardrobe references with dialogue cues for ongoing host performances.
Multi-shot campaign storyboardsPrototype story beats that must share one visual identity before full production.
Pro Tips
- Assign roles to the three images in the prompt—face reference, wardrobe reference, product or style reference.
- Keep reference lighting consistent and faces unobstructed so identity signals stay strong.
- Reuse the same appearance wording across iterations when building a series of related clips.
- Specify push-in, dolly, or tracking moves separately from character action to control staging.
- Add Audio lines for dialogue language and ambience so lip sync matches the locked performer.
Usage notes
- Gemini Omni Flash Reference to Video requires prompt plus image_urls with exactly three public image URLs.
- Describe speech or ambience in the prompt; native audio with lip sync is included in the result.
- Duration, resolution, and aspect_ratio configure output length, clarity, and framing.
- After an API submission, save the returned task_id to query progress and retrieve the final media URL.
Related Models
Gemini Omni Flash Reference to Video API frequently asked questions
What is the Gemini Omni Flash Reference to Video API?
Gemini Omni Flash Reference to Video is a Google DeepMind multimodal model for generating video from multiple reference images. It creates 4–10 second clips from exactly three reference stills plus a text prompt, with locked character consistency, native lip-synced audio, and 720p to 4K output. Built on Gemini’s unified multimodal architecture, it carries face, wardrobe, and style cues into a new scene while adding directed motion and synchronized sound. You can call it programmatically or try it from the playground above.
How many reference images does Gemini Omni Flash Reference to Video require?
Submit exactly three public image URLs in image_urls. Typical setups pair face, wardrobe, and product or style references; naming each role in the prompt strengthens consistency.
How does Gemini Omni Flash Reference to Video keep character consistency?
The three stills supply visual ground truth for appearance, while the prompt restates face, outfit, and branding details. Reuse the same reference set and appearance wording when generating related clips in a series.
Does Gemini Omni Flash Reference to Video support native lip sync?
Yes. Dialogue and ambience are generated with the picture and embedded in the MP4. Add language and tone cues so the locked performer speaks in sync with mouth motion.
When should I choose Gemini Omni Flash Reference to Video over Image to Video?
Use Reference to Video when one still is not enough and you need multi-image locks for face, wardrobe, and style. Use Image to Video when a single key visual already carries the full look you want to animate.
Can Gemini Omni Flash Reference to Video output 4K?
Yes. Choose 4K for campaign finals that need sharper texture and lighting. Draft at 720p or 1080p first to validate consistency, then promote selected takes.
How are Gemini Omni Flash Reference to Video credits calculated?
Credits are charged per generation by duration and resolution. At 720p/1080p, 6 seconds costs 150 credits ($0.75); at 4K the same length costs 300 credits ($1.50). See the Pricing section for full rates.















