Remove the cyclist and the entire bicycle from every frame. Reconstruct the stone paving and any occluded background naturally. Preserve the blue-and-white tiled fountain, flowing water, pigeons, whitewashed buildings, sunlight, original locked camera and timing. Do not replace the cyclist with another person or object. Keep fountain water and pigeon ambience, remove any bicycle sound, add no music or speech. No text, logos or advertising.
Gemini Omni 1.1 Flash Video Edit API
google/gemini-omni-1.1-flash/video-editGemini Omni 1.1 Flash (Video Edit) edits 3–10 second source videos through natural-language instructions, with reference-image guidance, native audio, and 360p to 4K output. Specify what to change and what to retain to develop new versions of existing footage through character, object, visual style, or sound edits.
Required. Upload exactly one MP4, MOV, or WebM clip, 3–10 seconds, up to 100 MiB.
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 the inputs and instructions, 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 inputs and settings for this endpoint using the request example, then save the returned task_id to query generation progress and results.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "google/gemini-omni-1.1-flash/video-edit",
"input": {
"prompt": "Replace only the woman's burgundy jacket with the mustard-yellow raincoat shown in the reference image. Match its mustard fabric, brown toggle fastenings, lower patch pockets and folded hood; the hood stays down. Make the coat fit her naturally throughout the moving shot. Preserve her exact face, dark curly hair, hands, dark trousers, walking action and timing. Preserve the coastal path, cliffs, ocean, overcast light and original camera movement. Keep the existing wind, surf and footsteps without adding speech or music. No new people, text, logos or advertising.",
"reference_video_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-1.1-flash/video-edit/v2/01/input-source.mp4"
],
"resolution": "720p",
"aspect_ratio": "16:9",
"reference_image_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-1.1-flash/video-edit/v2/01/input-reference.webp"
]
}
}
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-1.1-flash/video-edit",
"input": {
"prompt": "Replace only the woman's burgundy jacket with the mustard-yellow raincoat shown in the reference image. Match its mustard fabric, brown toggle fastenings, lower patch pockets and folded hood; the hood stays down. Make the coat fit her naturally throughout the moving shot. Preserve her exact face, dark curly hair, hands, dark trousers, walking action and timing. Preserve the coastal path, cliffs, ocean, overcast light and original camera movement. Keep the existing wind, surf and footsteps without adding speech or music. No new people, text, logos or advertising.",
"reference_video_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-1.1-flash/video-edit/v2/01/input-source.mp4"
],
"resolution": "720p",
"aspect_ratio": "16:9",
"reference_image_urls": [
"https://cdn.vidgo.ai/apis/models/google/gemini-omni-1.1-flash/video-edit/v2/01/input-reference.webp"
]
}
}
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. Prepare the inputs for this task and configure the output.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | 1–20,000 characters after trimming. |
| reference_video_urls | string[] | Yes | — | Exactly one public video URL. Source duration must be 3–10 seconds. |
| reference_image_urls | string[] | No | — | Omit this field or provide an empty array; accepts up to 5 public image URLs for appearance or style guidance. |
| resolution | string | No | 720p | 360p, 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 | Generation progress from 0 to 100, when available. |
| 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 inputs, parameter values, and available credits, then make the indicated adjustments before submitting again.
- 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 + 1 source video | Combine a source clip with an edit instruction, with up to 5 optional images to guide the target appearance. |
| Source video | MP4 / MOV / WebM | Exactly one clip, 3–10 seconds, up to 100 MiB. |
| Output | Video with native audio | The endpoint returns an asynchronous task ID. |
| Resolution | 360p / 720p / 1080p / 4k | Default is 720p. |
| Aspect ratio | 16:9 / 9:16 | Default is 16:9. |
| Billing basis | Per generation | 360p, 720p, and 1080p cost 120 credits. 4k costs 180 credits. |
Gemini Omni 1.1 Flash Video Edit
Gemini Omni 1.1 Flash Video Edit applies natural-language edits to a 3–10 second source video, with up to 5 optional reference images to guide the target appearance. Describe changes to people, objects, visual details, or sound and identify the content to retain to create a new version of existing footage.
Why Choose This?
Natural-language editingDescribe the target and desired change, such as a clothing adjustment or musical addition, to turn creative revisions into clear editing instructions.
Character and object editsDescribe additions, removals, or replacements involving a specific person or object to develop new versions of an existing scene.
Reference-guided appearanceAdd up to 5 reference images to show target clothing, objects, or visual style and give the edit a concrete visual direction.
Defined retained contentDistinguish the edit target from content to retain, organizing revisions around the source scene, camera work, and action.
Music and sound revisionsDescribe musical mood, sound effects, and audio changes to give existing footage a new atmosphere in a video with native audio.
Output choices for deliveryChoose 360p, 720p, 1080p, or 4K with landscape or portrait framing to configure the edited result for further editing and presentation.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | String. Natural-language edit instruction; 1–20,000 characters after trimming. |
| reference_video_urls | Required | Array containing one public video URL as the footage to edit. Use a 3–10 second MP4, MOV, or WebM clip, up to 100 MiB. |
| reference_image_urls | Optional | Omit this field or provide an empty array; accepts up to 5 public image URLs for appearance or style guidance. |
| resolution | Optional | String. Sets output resolution; the Playground preselects 720p. Default 720p360p1080p4k |
| aspect_ratio | Optional | String. Controls output framing; the Playground preselects 16:9. Default 16:99:16 |
How to Use
Upload a source videoAdd one 3–10 second MP4, MOV, or WebM clip, up to 100 MiB, as the footage to edit.
Describe changes and retained contentIdentify the edit target and desired change, then describe the people, setting, or camera work you want to retain.
Add optional reference imagesTo show target clothing, objects, or styling, add up to 5 JPEG, PNG, or WebP images, up to 30 MiB each.
Choose a resolutionChoose 360p, 720p, 1080p, or 4K, with 720p selected by default, to match the output specifications for editing or presentation.
Choose an aspect ratioChoose 16:9 landscape or 9:16 portrait, with 16:9 selected by default, and frame the subject for the intended layout.
Review the cost and runReview the cost shown on the Run button, complete the required uploads and prompt, then click Run.
Preview and download the videoWhen the task finishes, preview the video and sound in the output panel, then select Download video to save the result.
Pricing
Billed per generation based on output resolution, with native audio included in the result. 1 credit = $0.005.
| Usage | Rate | Details |
|---|---|---|
| 360p / 720p / 1080p | 120 credits / generation | Default 720p costs 120 credits ($0.60). |
| 4k | 180 credits / generation | 4k costs 180 credits ($0.90). |
Best Use Cases
Scene element revisionsIdentify a person or object in existing footage and describe the change to create a revised story shot or product presentation.
Product appearance versionsCombine source footage with product reference images to describe a target appearance for a new visual direction.
Music and sound revisionsDescribe musical style, emotional progression, and effect timing to create a new soundtrack direction for an opening sequence or brand presentation.
Brand asset adaptationsProvide new clothing, scene styling, or object references to adapt an existing short clip for different brand themes.
Pro Tips
- Identify the edit target by position, color, or clothing, such as “the person in the blue sweater on the left,” to point to a specific subject.
- Describe changes and retained content separately, such as “Make the coat red. Keep the street setting and original camera movement.”
- Use reference images to show target clothing, objects, or visual style and explain which edit each image guides.
- Specify the mood, rhythm, and entry point of music, such as strings gradually swelling as a character turns.
- Organize each submission around one clear editing goal, then review the result before refining the relevant action, appearance, or sound direction.
Usage notes
- Gemini Omni 1.1 Flash Video Edit uses one 3–10 second source video and an edit instruction through prompt and reference_video_urls. Add up to 5 optional reference images to guide the target appearance and choose the output resolution and aspect ratio.
- Describe speech, music, or ambient sound in the prompt; native audio is included in the result.
- Use publicly accessible HTTP(S) URLs for API media inputs so the service can retrieve the files.
- Save the task_id returned by an API submission to query progress and retrieve the result.
Related Models
Gemini Omni 1.1 Flash Video Edit API frequently asked questions
What is the Gemini Omni 1.1 Flash Video Edit API?
Gemini Omni 1.1 Flash Video Edit is a Google model for instruction-based video editing. It applies localized visual and acoustic modifications to 3–10 second source clips using natural language, supporting up to 5 reference images for precise aesthetic guidance and outputting native audio. Built on Gemini's conversational multimodal architecture, it uses the source characters, camera trajectories, and temporal rhythm as context while editing the target elements. You can call it programmatically or try it from the playground above.
What video elements can Gemini Omni 1.1 Flash Video Edit modify?
You can modify character apparel textures and colors, add or remove specific scene objects, alter backgrounds and weather conditions, or apply global artistic style transfers. Natural-language instructions direct the edits without requiring manual rotoscoping or frame-by-frame masking.
Can Gemini Omni 1.1 Flash Video Edit replace background music independently?
Yes. The model can revise the audio track in tandem with visual edits or independently. For instance, prompting to retain ambient room tone while swapping background music for a suspenseful orchestral score produces a newly scored soundtrack aligned with on-screen action.
Does Gemini Omni 1.1 Flash Video Edit support uploading reference images?
Yes. You can attach up to 5 reference images to illustrate the target style or item appearance. For example, instructing the model to replace a backpack with the leather bag shown in Reference Image 1 anchors the modification to concrete visual details.
Does Gemini Omni 1.1 Flash Video Edit preserve original camera movements?
Yes. When performing localized modifications, the model uses the source camera path, panning speed, and timing as context when editing the specified content, supporting continuity with the original shot.
What are the source video duration limits for Gemini Omni 1.1 Flash Video Edit?
Input source videos should be between 3 and 10 seconds in duration and formatted as MP4, MOV, or WebM. Keeping clips within this window provides the optimal balance of temporal consistency analysis and processing responsiveness.
How can I prevent unwanted changes in Gemini Omni 1.1 Flash Video Edit?
Use a dual-instruction prompt structure that specifies both modifications and retentions. For example, write "Change the man's coat to a dark grey trench coat. Keep original face, hair, camera movement, and background pedestrians unchanged." Explicit boundary instructions minimize collateral modifications.
