Gemini Omni Flash (gemini-omni-1.1-flash) adalah model multimodal berperforma tinggi yang dirancang untuk pembuatan, pengeditan, dan kontrol sinematik video berkecepatan tinggi.
Gemini Omni dibangun berdasarkan kemampuan inti berikut yang membedakannya dari model video sebelumnya:
- Multimodalitas native: model ini memproses teks, gambar, audio, dan video secara bersamaan, sehingga memberikan output yang lebih kohesif, konsisten, dan dapat dikontrol.
- Pengeditan via percakapan: didukung oleh Interactions API, fitur ini memungkinkan Anda menyempurnakan dan mengedit video secara berulang melalui percakapan bahasa alami. Jelaskan perubahan yang ingin Anda lakukan, dan model akan menerapkan hasil edit sambil mempertahankan bagian video yang ingin Anda pertahankan.
- Pengetahuan tentang dunia: Gemini Omni menggabungkan pemahaman tentang fisika dengan pengetahuan Gemini tentang sejarah, sains, dan konteks budaya, sehingga menjembatani kesenjangan dari fotorealisme hingga penceritaan yang bermakna.
Pembuatan video dari teks
Buat video dari perintah teks. Model ini menghasilkan video dengan audio berdasarkan deskripsi teks Anda. Tulis perintah dengan detail seperti deskripsi adegan, gerakan kamera, pencahayaan, dan suasana hati untuk mendapatkan hasil terbaik.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A marble rolling fast on a chain reaction style track, continuous smooth shot."
)
with open("marble.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A marble rolling fast on a chain reaction style track, continuous smooth shot.',
});
if (interaction.output_video?.data) {
fs.writeFileSync('marble.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A marble rolling fast on a chain reaction style track, continuous smooth shot."
}'
Skema respons REST
Kolom kemudahan interaction.output_video hanya SDK.
Dapatkan output video dari array steps saat menggunakan REST API secara langsung.
Struktur JSON REST mentah:
{
"steps": [
{ "type": "user_input", "content": [{"type": "text", "text": "..."}] },
{ "type": "thought", "content": [{"text": "...", "type": "thought"}] },
{
"type": "model_output",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"data": "AAAAIGZ0eXBpc29t..." // Base64 encoded video data
}
]
}
],
"id": "v1_...",
"status": "completed",
"model": "gemini-omni-1.1-flash",
"object": "interaction"
}
Mengontrol rasio aspek
Setel aspect_ratio ke "9:16" untuk membuat video potret. Lanskap (16:9)
adalah default.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A futuristic city with neon lights and flying cars, cyberpunk style",
response_format={
"type": "video", # optional
"aspect_ratio": "9:16" # Supported values: "9:16", "16:9"
}
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A futuristic city with neon lights and flying cars, cyberpunk style',
response_format: {
type: 'video', // optional
aspect_ratio: '9:16' // Supported values: '9:16', '16:9'
},
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A futuristic city with neon lights and flying cars, cyberpunk style",
"response_format": {
"type": "video",
"aspect_ratio": "9:16"
}
}'
Resolusi output
Kontrol resolusi output video yang dihasilkan menggunakan parameter resolution
di response_format. Resolusi default adalah 720p.
| Nilai | Deskripsi |
|---|---|
360p |
Resolusi output 360p |
720p |
Resolusi output 720p (default) |
1080p |
Output 1080p (ditingkatkan) |
4k |
Output 4K (ditingkatkan) |
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A drone shot of a mountain landscape at sunrise.",
response_format={
"type": "video",
"resolution": "1080p",
},
)
with open("hires.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A drone shot of a mountain landscape at sunrise.',
response_format: {
type: 'video',
resolution: '1080p',
},
});
if (interaction.output_video?.data) {
fs.writeFileSync('hires.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A drone shot of a mountain landscape at sunrise.",
"response_format": {
"type": "video",
"resolution": "1080p"
}
}'
Pembuatan video dari gambar
Anda dapat memberikan gambar referensi dengan perintah teks Anda. Bergantung pada perintah Anda, model akan memutuskan cara menggunakan gambar. Fitur ini berguna untuk menghidupkan foto produk, ilustrasi, atau foto.
Contoh berikut menunjukkan cara menggunakan gambar referensi sketsa ikan yang melompat keluar dari air:
Dengan perintah berikut:
turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video
Untuk membuat video gambar yang realistis.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
],
)
with open("clownfish.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: base64Image, mime_type: 'image/jpeg' },
{ type: 'text', text: 'turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('clownfish.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$BASE64_IMAGE"'", "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
]
}'
Interpolasi frame pertama dan terakhir
Gemini Omni Flash mendukung interpolasi video, sehingga Anda dapat membuat video yang bertransisi dengan lancar antara gambar awal (frame pertama) dan gambar akhir (frame terakhir).
Berikan dua gambar dalam daftar input dan deskripsikan transisi yang diinginkan dalam perintah Anda. Model akan menganimasikan adegan dari frame pertama hingga
frame akhir.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
{"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
{"type": "text", "text": "A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky."}
],
)
with open("interpolation.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: firstFrameB64, mime_type: 'image/jpeg' },
{ type: 'image', data: lastFrameB64, mime_type: 'image/jpeg' },
{ type: 'text', text: 'A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky.' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('interpolation.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$FIRST_FRAME_B64"'", "mime_type": "image/jpeg"},
{"type": "image", "data": "'"$LAST_FRAME_B64"'", "mime_type": "image/jpeg"},
{"type": "text", "text": "A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky."}
]
}'
Referensi subjek
Anda dapat membuat video yang menyertakan subjek tertentu yang diberikan sebagai gambar referensi. Misalnya, kode berikut menunjukkan cara menyediakan 2 gambar kucing dan benang untuk membuat video kucing yang sedang bermain dengan benang.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": cat_b64, "mime_type": "image/png"},
{"type": "image", "data": yarn_b64, "mime_type": "image/png"},
{"type": "text", "text": "A cat playfully batting at a ball of yarn."}
],
)
with open("cat.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: catData, mime_type: 'image/png' },
{ type: 'image', data: yarnData, mime_type: 'image/png' },
{ type: 'text', text: 'A cat playfully batting at a ball of yarn.' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('cat.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$CAT_B64"'", "mime_type": "image/png"},
{"type": "image", "data": "'"$YARN_B64"'", "mime_type": "image/png"},
{"type": "text", "text": "A cat playfully batting at a ball of yarn."}
]
}'
Parameter tugas
Gunakan parameter task di video_config untuk menentukan perilaku yang diinginkan secara eksplisit, misalnya, jika Anda ingin model membuat video dari gambar, Anda dapat menyetel parameter ke image_to_video. Jika tidak ditetapkan, model akan menyimpulkan apa yang Anda inginkan dari perintah.
Nilai yang diizinkan adalah:
text_to_videoimage_to_videoreference_to_videoeditextend
Contoh berikut menunjukkan cara menyetelnya untuk contoh gambar ke video yang ditampilkan sebelumnya.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
],
generation_config={
"video_config": {
"task": "image_to_video",
}
},
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: base64Image, mime_type: 'image/jpeg' },
{ type: 'text', text: 'turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video' }
],
generationConfig: {
videoConfig: {
task: 'image_to_video',
}
}
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{
"type": "image",
"data": "'"$BASE64_IMAGE"'",
"mime_type": "image/jpeg"
},
{
"type": "text",
"text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"
}
],
"generation_config": {
"video_config": {
"task": "image_to_video"
}
}
}'
Pengeditan video dengan status
Buat video dan edit secara berulang menggunakan perintah lanjutan. Setiap giliran
dibuat berdasarkan hasil sebelumnya. Model ini mengingat konteks video, menerapkan perubahan Anda sambil mempertahankan elemen yang tidak Anda sebutkan. Gunakan
previous_interaction_id untuk melacak histori percakapan dan status video yang dibuat
tanpa mengupload ulang video sebelumnya.
Contoh berikut menunjukkan cara membuat video pertama, lalu mengeditnya:
Python
import base64
from google import genai
client = genai.Client()
# Turn 1: Generate initial video
res1 = client.interactions.create(model="gemini-omni-1.1-flash", input="A woman playing violin outdoors.")
# Turn 2: Edit the previous video
res2 = client.interactions.create(
model="gemini-omni-1.1-flash",
previous_interaction_id=res1.id,
input="Make the violin invisible."
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(res2.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Turn 1: Generate initial video
const res1 = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A woman playing violin outdoors.',
});
// Turn 2: Edit the previous video
const res2 = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
previous_interaction_id: res1.id,
input: 'Make the violin invisible.',
});
if (res2.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(res2.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"previous_interaction_id": "'"$PREVIOUS_ID"'",
"input": "Make the violin invisible."
}'
Contoh video awal:
Contoh video yang diedit:
Setiap giliran dalam percakapan menghasilkan video baru. Model ini memahami konteks dari giliran sebelumnya, sehingga Anda dapat melakukan perubahan inkremental seperti menyesuaikan pencahayaan, dan mengganti latar belakang, tanpa mendeskripsikan ulang seluruh adegan.
Mengedit video Anda sendiri
Upload video Anda menggunakan Files API untuk mengeditnya dengan Gemini Omni Flash.
Contoh berikut menunjukkan cara mengedit video asli berikut:
Python
import time
import base64
from google import genai
client = genai.Client()
# Upload video using the file API
video_file = client.files.upload(file="Video.mp4")
while video_file.state == "PROCESSING":
print('Waiting for video to be processed.')
time.sleep(10)
video_file = client.files.get(name=video_file.name)
if video_file.state == "FAILED":
raise ValueError(video_file.state)
print(f'Video processing complete: ' + video_file.uri)
# Edit your video
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "text", "text": "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material"}
],
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload video using the file API
let videoFile = await ai.files.upload({
file: 'Video.mp4',
});
while (videoFile.state === 'PROCESSING') {
console.log('Waiting for video to be processed.');
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
}
if (videoFile.state === 'FAILED') {
throw new Error(videoFile.state);
}
console.log('Video processing complete: ' + videoFile.uri);
// Edit your video
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'text', text: "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material" }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
#!/bin/bash
VIDEO_B64=$(encode_file "$VIDEO_FILE")
curl -sS -w "\n[HTTP %{http_code}]\n" "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-d @- <<EOF > video_editing_response.json
{
"model": "gemini-omni-1.1-flash",
"input": [
{
"type": "user_input",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"data": "$VIDEO_B64"
},
{
"type": "text",
"text": "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material"
}
]
}
],
"response_format": { "type": "video" }
}
EOF
Contoh video yang diedit:
Mengambil video dengan URI
Gunakan parameter delivery="uri" di
response_format untuk mengambil video yang dibuat dan berukuran lebih dari 4 MB.
Tindakan ini akan menampilkan URI yang dihosting oleh Google yang dapat Anda polling hingga video ACTIVE sebelum didownload.
Python
import time
from google import genai
client = genai.Client()
# 1. Request video via URI delivery
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A beautiful sunset.",
response_format={"type": "video", "delivery": "uri"}
)
# 2. Extract file name and poll for ACTIVE state
video_output = interaction.output_video
file_name = video_output.uri.split("/")[-1] # Extract ID
print("Waiting for video processing...")
while True:
f_info = client.files.get(name=f"files/{file_name}")
if f_info.state.name == "ACTIVE":
break
elif f_info.state.name == "FAILED":
raise RuntimeError("Generation failed.")
time.sleep(5)
# 3. Download the final video
client.files.download(file=video_output.uri, destination="output.mp4")
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
// 1. Request video via URI delivery
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A beautiful sunset.',
response_format: { type: 'video', delivery: 'uri' },
});
// 2. Extract file name and poll for ACTIVE state
const videoOutput = interaction.output_video;
const fileId = videoOutput.uri.match(/files\/([a-zA-Z0-9]+)/)[1];
const name = `files/${fileId}`;
console.log("Waiting for video processing...");
while (true) {
const fInfo = await ai.files.get({ name });
if (fInfo.state.name === 'ACTIVE') break;
if (fInfo.state.name === 'FAILED') throw new Error("Generation failed.");
await new Promise(r => setTimeout(r, 5000));
}
// 3. Download the final video
await ai.files.download({
file: videoOutput,
downloadPath: 'output.mp4',
});
console.log("💾 Saved video to output.mp4");
REST
#!/bin/bash
# 1. Initial request to generate the video
RESPONSE=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A beautiful sunset over a calm ocean.",
"response_format": {"type": "video", "delivery": "uri"}
}')
# Extract FILE_ID from the URI (e.g., "files/abc-123" -> "abc-123")
FILE_URI=$(echo $RESPONSE | jq -r '.output_video.uri')
FILE_ID=$(echo $FILE_URI | cut -d'/' -f2)
echo "Video requested (ID: $FILE_ID). Waiting for processing..."
# 2. Polling loop
while true; do
# Get current file status
STATUS_JSON=$(curl -s -X GET "https://generativelanguage.googleapis.com/v1beta/files/$FILE_ID?key=$API_KEY")
STATE=$(echo $STATUS_JSON | jq -r '.state')
if [ "$STATE" == "ACTIVE" ]; then
echo "Processing complete! Downloading..."
break
elif [ "$STATE" == "FAILED" ]; then
echo "Error: Generation failed."
exit 1
else
echo "Current state: $STATE... (waiting 5s)"
sleep 5
fi
done
# 3. Final download
curl -L -X GET "https://generativelanguage.googleapis.com/v1beta/files/$FILE_ID:download?alt=media&key=$API_KEY" \
--output "output.mp4"
echo "Done! Video saved to output.mp4"
Struktur JSON REST mentah (URI):
{
"steps": [
{ "type": "user_input", "content": [{"type": "text", "text": "..."}] },
{ "type": "thought", "content": [{"text": "...", "type": "thought"}] },
{
"type": "model_output",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"uri": "https://generativelanguage.googleapis.com/v1beta/files/...:download?alt=media"
}
]
}
],
"id": "v1_...",
"status": "completed",
"model": "gemini-omni-1.1-flash",
"object": "interaction"
}
Ekstensi video
Perpanjang durasi video yang ada dengan membuat kelanjutan yang lancar di bagian akhir klip. Jelaskan bagaimana Anda ingin video berlanjut dalam perintah Anda, misalnya
"Extend this video" atau "Continue the scene: the camera pans across the mountains".
Model menganalisis video input untuk membuat kelanjutan berdurasi 3–10 detik.
Anda dapat memperpanjang:
- Video yang dihasilkan oleh model (multi-turn): Memperpanjang video yang dihasilkan sebelumnya dengan mereferensikan
previous_interaction_id-nya. Video yang diupload: Menyediakan file video yang diupload (melalui Files API) bersama dengan perintah ekstensi Anda.
Python
import base64
from google import genai
client = genai.Client()
# Upload your video using the Files API
video_file = client.files.upload(file="my_video.mp4")
# Extend the video using prompt-based extension
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "text", "text": "Continue the scene."}
],
)
with open("extended.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload your video using the Files API
let videoFile = await ai.files.upload({
file: 'my_video.mp4',
});
while (videoFile.state === 'PROCESSING') {
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
}
// Extend the video using prompt-based extension
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'text', text: 'Continue the scene.' }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('extended.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" -H "Content-Type: application/json" -d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "document", "uri": "'"$VIDEO_URI"'"},
{"type": "text", "text": "Continue the scene."}
]
}'
Memperluas dengan media referensi
Anda dapat memberikan gambar referensi dalam array input bersama dengan perintah untuk
memperkenalkan karakter atau elemen baru ke dalam video yang diperpanjang:
Python
import base64
from google import genai
client = genai.Client()
# Upload base video and reference image using the Files API
video_file = client.files.upload(file="my_video.mp4")
character_img = client.files.upload(file="character.png")
# Extend the video while introducing the reference character
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "document", "uri": character_img.uri},
{"type": "text", "text": "Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave."}
],
)
with open("extended_with_character.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload base video and reference image using the Files API
let videoFile = await ai.files.upload({ file: 'my_video.mp4' });
let characterImg = await ai.files.upload({ file: 'character.png' });
while (videoFile.state === 'PROCESSING' || characterImg.state === 'PROCESSING') {
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
characterImg = await ai.files.get({ name: characterImg.name });
}
// Extend the video while introducing the reference character
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'document', uri: characterImg.uri },
{ type: 'text', text: 'Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave.' }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('extended_with_character.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" -H "Content-Type: application/json" -d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "document", "uri": "'$VIDEO_URI'"},
{"type": "document", "uri": "'$CHARACTER_IMG_URI'"},
{"type": "text", "text": "Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave."}
]
}'
Batasan dan panduan ekstensi
Perhatikan aturan dan batasan berikut saat memperpanjang video:
- Dialog lisan pada video yang diupload: Saat ini, Anda tidak dapat memperpanjang video yang diupload yang berisi seseorang sedang berbicara untuk menambahkan dialog lain (hal ini didukung jika karakter tetap diam atau jika perintah tidak menambahkan dialog).
- Ekstensi suara multi-giliran: Pembuatan dialog atau ucapan yang diucapkan didukung
saat memperluas video yang dibuat sebelumnya melalui multi-giliran (
previous_interaction_id). - Hanya di akhir klip: Ekstensi terbatas untuk ditambahkan di akhir video. Anda tidak dapat menambahkan konten di awal atau memperpanjang bagian tengah klip.
- Batas durasi: Video yang dimasukkan untuk ekstensi harus berdurasi 10 detik atau kurang saat diupload (kecuali jika menggunakan multi-turn).
- Ketersediaan regional: Saat ini, perpanjangan video yang diupload tidak tersedia untuk pengguna di Wilayah Ekonomi Eropa (EEA), Swiss, dan Inggris Raya (perpanjangan video yang dibuat oleh model didukung di semua wilayah yang tersedia).
Praktik terbaik
- Gunakan pengiriman URI untuk video berukuran besar: Untuk video yang berukuran lebih besar dari 4 MB (>720p jika tersedia), gunakan
delivery="uri"diresponse_formatuntuk menghindari batas ukuran payload. - Performa yang dioptimalkan: Tetapkan
background=false,store=false, danstream=falseuntuk pembuatan unary sinkron yang lebih cepat. Perhatikan bahwa setelanstore=falseberarti video yang dibuat tidak dapat diedit pada gilirannya menggunakanprevious_interaction_id. - Presisi perintah: Lihat bagian panduan perintah untuk mengetahui detailnya.
Batasan
- Mengupload dan mengedit gambar yang berisi anak di bawah umur tidak didukung di Wilayah Ekonomi Eropa, Swiss, dan Inggris Raya.
- Mengupload dan mengedit gambar yang berisi orang tertentu yang dapat dikenali tidak didukung.
- Pengeditan atau perpanjangan video yang diupload saat ini tidak tersedia untuk pengguna di Wilayah Ekonomi Eropa (EEA), Swiss, dan Inggris Raya (pengeditan atau perpanjangan video yang dibuat oleh model didukung).
- Video input untuk pengeditan dan perluasan harus berdurasi 10 detik atau kurang saat diupload (kecuali jika memperpanjang video yang dibuat oleh model dalam multi-turn).
- Ekstensi video hanya dapat ditambahkan di akhir video; penambahan di awal atau perpanjangan di tengah klip tidak didukung.
- Anda tidak dapat memperpanjang video yang diupload saat seseorang sedang berbicara untuk menambahkan dialog lain (karakter dapat tetap diam, atau perpanjangan multi-turn dengan
previous_interaction_iddapat digunakan). - Pengeditan suara tidak didukung.
- Mengupload referensi audio tidak didukung di versi API saat ini.
- Referensi video berfungsi paling baik dengan kemiripan; audio apa pun dalam referensi video diabaikan. Referensi video mendukung maksimal 3 klip, dengan durasi masing-masing hingga 3 detik.
- Mereferensikan atau menyimpulkan beberapa video tidak didukung. Mencoba perintah multi-video dapat menyebabkan penurunan performa model atau output yang tidak terduga.
- Throughput yang disediakan tidak didukung.
- Petunjuk sistem, temperatur,
top_p, urutan penghentian, dan perintah negatif tidak didukung (Anda dapat memasukkan perintah negatif dalam perintah biasa: misalnya, "Jangan lakukan X"). - Penggunaan video YouTube sebagai sumber media tidak didukung.
Detail teknis
- Semua video yang dihasilkan menyertakan watermark SynthID, yang tidak terlihat oleh penonton, tetapi dapat dideteksi secara terprogram untuk verifikasi asal.
- Waktu pembuatan video bervariasi berdasarkan durasi, resolusi, dan beban API saat ini. Video yang lebih panjang dan beresolusi lebih tinggi membutuhkan waktu lebih lama untuk dibuat.
- Omni menerapkan filter keamanan konten pada perintah input dan video yang dihasilkan (yang bervariasi menurut wilayah). Perintah yang melanggar kebijakan penggunaan akan diblokir.
- Bahasa Inggris (EN) didukung sepenuhnya, tetapi bahasa lain belum dievaluasi, sehingga mungkin berfungsi, tetapi hasilnya dapat bervariasi.
Panduan perintah Gemini Omni Flash
Bagian ini berisi tips dan contoh cara memberikan perintah yang efektif untuk Gemini Omni Flash.
Satu adegan
Secara default, Omni Flash akan mencoba membuat video dengan beberapa pengambilan gambar yang berbeda. Gemini akan mencoba membuat narasi yang menarik berdasarkan perintah.
Jika Anda ingin video output hanya berisi satu adegan, Anda harus memberikan perintah untuk itu:
- Dalam satu adegan tanpa jeda
- Dalam satu pengambilan gambar berkelanjutan
- Tidak ada potongan adegan
Contoh:
Continuous, unbroken handheld shot of a fluffy tabby cat sitting on a sunny windowsill, looking out into a leafy garden. The cat's tail twitches slowly, and its ears rotate slightly toward ambient noises. Sunbeams illuminate dust motes in the air. Sound design: Gentle breeze, distant bird chirps. No dialogue.
Menghapus elemen yang tidak diinginkan
Jika video yang dihasilkan berisi hal-hal yang tidak Anda inginkan, sertakan perintah negatif sederhana untuk menghindarinya:
- Tidak ada dialog
- Tidak ada hiasan
- Tidak ada efek suara tambahan
Perintah untuk pengeditan
Perintah sederhana berfungsi paling baik untuk pengeditan video. Perintah yang terlalu deskriptif dapat menyebabkan perubahan yang tidak diinginkan.
Berikut adalah contoh perintah pengeditan sederhana lainnya:
- Ubah video ini menjadi anime
- Pakaikan topi modis pada orang ini
- Ubah pencahayaan agar lebih dramatis
- Ubah teks pada papan menjadi "Omni Flash"
Saat mengedit aspek tertentu video, sertakan "Keep everything else the same" untuk mempertahankan konsistensi visual.
Berikut adalah beberapa contoh untuk menunjukkan cara menerapkan teknik ini:
- Hindari:
In the video of the man sitting on the sofa, please add a small black cat that runs from the right side of the screen, jumps onto his lap, and then he starts to stroke its head while looking down.- Sederhanakan:
Add a cat that jumps onto his lap, he begins to pet it. Keep everything else the same.
- Sederhanakan:
- Hindari:
Please remove the cell phone that the person is holding in their hand and fill in the background so it looks like they are just holding their hand empty.- Sederhanakan:
Make the phone invisible. Keep everything else the same.
- Sederhanakan:
Membuat perintah audio
Secara default, model akan mencoba membuat trek audio yang sesuai untuk video. Hal ini mungkin tidak selalu sesuai dengan yang Anda inginkan. Anda dapat menggunakan perintah untuk mendeskripsikan jenis audio yang Anda inginkan. Hal ini sangat penting terutama jika Anda ingin musik dalam video Anda:
- Sertakan musik latar belakang yang menenangkan
- Video memiliki irama techno yang bersemangat
- Audio adalah siaran radio yang berbunyi sengau di latar belakang, memutar lagu
Acara pengaturan waktu
Anda dapat meminta agar sesuatu terjadi pada waktu tertentu dalam video, tidak ada sintaksis yang tepat yang diperlukan dan Anda dapat menggunakan bahasa alami. Hal ini sangat berguna dalam membuat potongan adegan, ritme, atau urutan tembakan cepat Anda sendiri. Lihat contoh berikut:
- Setelah 3 detik, seorang wanita memasuki adegan.
- Pada detik ke-5, chorus dimulai di audio latar belakang.
- Setiap 2 detik beralih ke frame baru.
- Dalam urutan cepat, setiap setengah detik (12 frame pada 24 fps), ubah adegan ke lokasi baru.
Anda juga dapat menggunakan sintaks kode waktu:
[0-3s] A person is walking
[3-6s] They stop and turn around
[6-10s] They start running
Meta prompting
Anda dapat meminta Gemini Omni Flash untuk memperhatikan kualitas atau prinsip umum pembuatan video:
- Pertimbangkan detail mikro, ekspresi, dan pengaturan waktu untuk menciptakan adegan yang sangat kaya dan mendetail, tetapi sepenuhnya alami.
- Berikan deskripsi yang sangat mendetail tentang karakter dan lingkungan. Menerapkan prinsip desain kostum pada karakter. Jelaskan secara spesifik orang, item, dan objek dalam adegan.
- Sertakan banyak detail yang sesuai dalam elemen latar belakang untuk membuat adegan terasa realistis dan alami.
- Buat video cepat yang menampilkan
[thing]langka yang berbeda setiap 1 detik, musik yang ceria, dan sertakan teks untuk memberi label pada objek.
Teks dalam video
Anda dapat memberikan perintah untuk menyertakan teks dalam video dan Gemini Omni akan merendernya dengan cara yang benar dan mudah dibaca. Jika akan ada teks yang muncul secara alami dalam video Anda, bahkan dalam elemen latar belakang, hal ini dapat membantu menentukan apa yang harus dikatakan.
- Satu kata di layar dalam satu waktu: "tahu, kah, kamu, bahwa, Omni, bisa, membuat, teks, yang, keren?" Setiap kata muncul selama 1 detik dengan gaya animasi yang berbeda. Tidak ada dialog.
- Ada rambu jalan yang bertuliskan: "Ini adalah generasi AI oleh Omni", ada etalase toko yang bertuliskan: "Semua yang Anda butuhkan AI", ada mobil dengan pelat nomor: "OMNI1.1"
Perintah untuk memperpanjang video
Dengan Gemini Omni 1.1 Flash, Anda dapat memperpanjang durasi video dengan perintah seperti, "Extend this video" atau "The scene continues". Anda dapat memperpanjang video selama 10 detik, hingga total durasi 40 detik.
Omni membuat ekstensi yang menjaga koherensi video, gerakan, karakter, dan audio dengan menggunakan 10 detik terakhir video asli Anda sebagai konteks. Beberapa frame terakhir dalam video input Anda akan diedit agar transisinya lancar.
Saat memperluas, semua tips perintah Omni dalam panduan ini tetap berlaku:
- Deskripsikan audio dalam adegan yang diperpanjang, terutama jika Anda ingin mengubahnya:
"The music continues into the chorus" - Jelaskan apakah adegan berlanjut, atau apakah ada potongan adegan ke adegan baru (mungkin dengan karakter yang sama):
"Show the same characters in the next scene" - Sertakan gambar dan video sebagai referensi saat memperluas untuk membantu menjaga akurasi output Anda, atau untuk memperkenalkan karakter baru:
"The person shown in the reference image enters the scene","The dog in the reference video <VIDEO_REF_0> jumps onto the sofa" - Jika menggunakan stempel waktu atau sintaksis kode waktu, 0s merujuk pada awal bagian video yang diperpanjang. Jika memperpanjang video 10 detik, potongan adegan dalam perintah ini akan terjadi setelah 12 detik:
"After 2s cut to a new scene with the same characters"
Menggunakan tag dalam perintah untuk menetapkan peran gambar dan video
Anda dapat menggunakan tag untuk mengikat media yang diupload ke peran pembuatan tertentu. Dengan begitu, Anda dapat menentukan apakah setiap gambar atau video adalah frame awal, frame akhir, atau referensi.
1. Tag sederhana (direkomendasikan)
Untuk kasus sederhana di mana peran media jelas dari perintah, Anda dapat mengikat gambar dan video ke peran secara langsung:
<FIRST_FRAME>: gunakan gambar sebagai frame awal video, misalnya:<FIRST_FRAME> a woman is walking<LAST_FRAME>: menggunakan gambar sebagai frame terakhir video yang akan ditransisikan. Harus digunakan dengan<FIRST_FRAME>, misalnya:<FIRST_FRAME> <LAST_FRAME> a woman is walking<IMAGE_REF_N>: menggunakan gambar sebagai referensi, misalnya:in the style of <IMAGE_REF_0> a woman <IMAGE_REF_1> is walking(menggabungkan referensi gaya dari gambar pertama dan referensi subjek dari gambar kedua). Referensi gambar dimulai dari 0.<VIDEO_REF_N>: menggunakan video sebagai referensi karakter atau objek, misalnya:the person in <VIDEO_REF_0> is playing the violin. Referensi video juga dimulai dari 0.
Berikut adalah contoh dengan 6 gambar referensi:
[0-3s] A studio fashion sequence. Starting with woman <IMAGE_REF_0>, she is holding <IMAGE_REF_1>
[3-6s] Then we see the man <IMAGE_REF_2> holding <IMAGE_REF_3>
[6-10s] And finally another woman <IMAGE_REF_4> who is holding <IMAGE_REF_5> while walking.
2. Mendeklarasikan sumber dan referensi
Untuk kasus yang lebih kompleks dengan beberapa input media dan beberapa peran, Anda dapat menggunakan tag awalan eksplisit yang dipasangkan dengan petunjuk bahasa alami. Anda harus menyatakan sumber dan referensi ini di awal perintah Anda.
[# Sources <FIRST_FRAME>@Image1]akan menggunakan gambar pertama sebagai frame awal.[# Sources <FIRST_FRAME>@Image1 <LAST_FRAME>@Image2]akan menggunakan gambar pertama sebagai frame awal dan gambar kedua sebagai frame akhir.[# Sources <FIRST_FRAME>@Image1 <LAST_FRAME>@Image1]akan menggunakan gambar pertama sebagai frame pertama dan frame terakhir, sehingga membuat video yang berputar.[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2]akan menggunakan gambar pertama sebagai frame awal dan gambar kedua sebagai referensi.[# Sources <VIDEO_0>@Video1]akan menggunakan video sebagai video sumber utama untuk diedit atau diubah.[# Sources <PREVIOUS_VIDEO>@Video1]akan menggunakan video dari giliran sebelumnya untuk memperpanjang.[# References <IMAGE_REF_0>@Image1]akan menggunakan gambar pertama sebagai referensi.[# References <IMAGE_REF_1>@Image2]akan menggunakan gambar kedua sebagai referensi.[# References <IMAGE_REF_0>@Image1 <IMAGE_REF_1>@Image2]akan menggunakan kedua gambar sebagai referensi.[# References <VIDEO_REF_0>@Video1]akan menggunakan video pertama sebagai referensi.[# References <IMAGE_REF_0>@Image1 <VIDEO_REF_0>@Video1]akan menggunakan gambar dan video sebagai referensi.
Tambahkan petunjuk panduan di akhir perintah Anda:
- Untuk frame awal:
"Use this image as the starting frame." - Untuk video berulang melalui frame awal dan akhir:
"Use this image as the first frame and the last frame." - Untuk gambar referensi:
"Use the given image(s) as references for video generation. The images should not be used as literal initial frames." - Untuk video referensi:
"Use the given video(s) as references. Do not use them as a source for video editing."
Beberapa contoh perintah dengan pernyataan sumber dan referensi:
Frame awal dikombinasikan dengan gambar referensi:
[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2] a woman <IMAGE_REF_0> is walking. Use Image1 as the starting frame. Use Image2 as a reference for the video generation.
Video referensi karakter yang dipadukan dengan gambar referensi objek:
[# References <IMAGE_REF_0>@Image1 <VIDEO_REF_0>@Video1] The woman in <VIDEO_REF_0> is playing the violin shown in <IMAGE_REF_0>. Use Video1 as a character reference and Image1 as an object reference.
Langkah berikutnya
- Mulai menggunakan Gemini Omni Flash dengan bereksperimen di Omni Quickstart Colab.
- Pelajari cara menulis perintah yang lebih baik lagi dengan Pengantar desain perintah kami.