Bạn gọi Gemini Omni 1.1 Flash với ID mô hình gemini-omni-1.1-flash thông qua Google’s Interactions API, chứ không phải endpoint generateContent mà bạn sử dụng cho các mô hình văn bản. Đây là điều đầu tiên khiến nhiều người gặp khó khăn. Nếu bạn sao chép một đoạn mã Gemini cho văn bản và đổi tên mô hình, bạn sẽ nhận được lỗi 404.
Hướng dẫn này sẽ đưa bạn từ một terminal trống đến một yêu cầu tạo video đã được kiểm thử. Bạn sẽ nhận được một khóa, thực hiện cuộc gọi đầu tiên bằng curl và Python, tìm hiểu các tham số tồn tại (và danh sách đáng ngạc nhiên những tham số không tồn tại), xử lý các phản hồi lớn và lưu toàn bộ quy trình này dưới dạng một bài kiểm tra có thể lặp lại.
Mô hình này được phát hành rộng rãi (GA) vào ngày 27 tháng 8 năm 2026. Để biết những gì được phát hành cùng với nó, hãy xem điểm mới trong Gemini Omni 1.1 Flash.
Những gì bạn cần trước khi bắt đầu
- Một tài khoản Google, để đăng nhập vào AI Studio.
- Khóa API Gemini từ Google AI Studio.
- Đã bật thanh toán. Omni không có gói miễn phí, không giống như lộ trình miễn phí trên các mô hình văn bản. Yêu cầu đầu tiên của bạn sẽ tốn phí.
- Một cách để gửi yêu cầu HTTP: curl, SDK Python hoặc một API client.
Lưu khóa dưới dạng biến môi trường thay vì dán trực tiếp vào mã nguồn:
export GEMINI_API_KEY="your_key_here"
Các SDK chính thức sẽ tự động đọc biến đó, giúp giữ bí mật khỏi kho lưu trữ của bạn.
Cuộc gọi tạo video đầu tiên của bạn
Endpoint là một yêu cầu POST đến /v1beta/interactions. Dưới đây là ví dụ bằng curl:
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$GEMINI_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."
}'
Hai trường: mô hình và đầu vào. Đó là toàn bộ yêu cầu tối thiểu. Phản hồi chứa video được tạo dưới dạng base64 trong output_video.data.
Trong Python, cài đặt SDK bằng pip install google-genai, sau đó:
import base64
from google import genai
client = genai.Client() # đọc GEMINI_API_KEY từ biến môi trường
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 cũng có cấu trúc tương tự với @google/genai:
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'));
}
Việc tạo video mất thời gian. Độ trễ tỷ lệ thuận với thời lượng, độ phân giải và tải API hiện tại, vì vậy hãy đặt thời gian chờ (timeout) phía client đủ lớn trước khi bạn cho rằng có lỗi xảy ra.
Kiểm soát độ phân giải và tỷ lệ khung hình
Mọi thứ liên quan đến định dạng đầu ra đều nằm trong response_format:
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A drone shot of a mountain landscape at sunrise.",
response_format={
"type": "video",
"aspect_ratio": "16:9",
"resolution": "1080p",
},
)
Các giá trị được chấp nhận:
| Trường | Giá trị | Mặc định |
|---|---|---|
type |
video |
video |
aspect_ratio |
16:9, 9:16 |
16:9 |
resolution |
360p, 720p, 1080p, 4k |
720p |
delivery |
base64 nội tuyến, uri |
nội tuyến |
Tạo bản nháp ở 360p. Nó tạo nhanh hơn tới 60% so với 720p và chi phí chỉ bằng một phần ba, vì vậy mười lăm lần thử prompt bỏ đi của bạn có giá bằng năm lần trước đây. Kết xuất lại cái bạn muốn giữ ở độ phân giải cao hơn. 1080p và 4k là các bản nâng cấp từ các khung hình đã tạo, không phải là kết xuất gốc. Bảng phân tích giá cho thấy chi phí thực tế mỗi giây của từng cấp độ.
Các tham số không tồn tại
Danh sách này quan trọng hơn danh sách trên, bởi vì nếu không bạn sẽ lãng phí cả buổi chiều:
- Không có hướng dẫn hệ thống
- Không có
temperature - Không có
top_p - Không có chuỗi dừng
- Không có trường prompt phủ định
Nếu bạn cần loại trừ thứ gì đó khỏi một cảnh quay, hãy viết điều đó vào chính prompt. Ví dụ trong tài liệu cũng làm điều tương tự: “chỉ sử dụng bản vẽ làm hướng dẫn cho chuyển động, không hiển thị bản vẽ trong video cuối cùng.”
Đầu vào hình ảnh, khung hình chính và tham chiếu
Truyền một danh sách thay vì một chuỗi khi bạn muốn bao gồm phương tiện. Hình ảnh thành video:
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"},
],
)
Hai hình ảnh trở thành khung hình đầu tiên và khung hình cuối cùng, và mô hình tạo ra chuyển động giữa chúng:
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."},
],
)
Các tham chiếu video hoạt động theo cùng một cách thông qua Files API, giới hạn ở ba clip, mỗi clip ba giây. Âm thanh trên các clip đó bị bỏ qua; mô hình đọc chúng để nhận biết chuyển động và hình dáng.
Chỉnh sửa đa lượt
Đây là điều tách Omni ra khỏi một endpoint chuyển văn bản thành video thông thường. Tạo một lần, sau đó chỉnh sửa theo kiểu hội thoại bằng cách truyền ID tương tác trước đó:
res1 = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A woman playing violin outdoors.",
)
res2 = client.interactions.create(
model="gemini-omni-1.1-flash",
previous_interaction_id=res1.id,
input="Make the violin invisible.",
)
Không cần tải lại, không cần mô tả lại cảnh. Cơ chế tương tự cũng được sử dụng để mở rộng cảnh, được đề cập trong hướng dẫn mở rộng cảnh 40 giây.
Xử lý video dung lượng trên 4MB
Bất kỳ video nào lớn hơn 4MB sẽ được trả về dưới dạng URI thay vì base64 nội tuyến, và tệp cần hoàn tất quá trình xử lý trước khi bạn có thể tải xuống. Đây là lỗi mà hầu hết mọi người gặp phải ở độ phân giải 1080p: trình xử lý của họ đọc output_video.data, không tìm thấy gì và báo cáo một lỗi không rõ nguyên nhân.
Yêu cầu phân phối URI một cách rõ ràng và thăm dò:
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A beautiful sunset.",
response_format={"type": "video", "delivery": "uri"},
)
video_output = interaction.output_video
file_name = video_output.uri.split("/")[-1]
while True:
f_info = client.files.get(name=f"files/{file_name}")
if f_info.state.name == "ACTIVE":
break
if f_info.state.name == "FAILED":
raise RuntimeError("Generation failed.")
time.sleep(5)
video_bytes = client.files.download(file=video_output.uri)
with open("output.mp4", "wb") as f:
f.write(video_bytes)
Viết trình xử lý phản hồi của bạn để chấp nhận cả hai định dạng ngay từ đầu. Độ phân giải sẽ thay đổi định dạng bạn nhận được.
Kiểm thử yêu cầu trong Apidog
Khi cuộc gọi hoạt động, vấn đề sẽ thay đổi. Giờ đây, bạn có một endpoint đắt đỏ, chậm, không xác định nằm trong đường dẫn quan trọng của mình, và bạn cần biết khi nào nó thay đổi hành vi. Các lệnh curl ngẫu hứng trong lịch sử shell sẽ không cho bạn biết điều đó.
Thiết lập một lần trong Apidog:
- Tạo một dự án và môi trường. Đặt
GEMINI_API_KEYvàMODEL_IDvào các biến môi trường để khóa không bao giờ xuất hiện trong yêu cầu đã lưu. - Thêm yêu cầu. Gửi POST đến
https://generativelanguage.googleapis.com/v1beta/interactions, thân JSON vớimodelvàinput. Tham chiếu các biến bằng{{MODEL_ID}}. - Tăng thời gian chờ (timeout). Việc tạo video mất nhiều thời gian hơn so với hoàn thành văn bản, và thời gian chờ mặc định của client sẽ cắt bỏ nó.
- Thêm các xác nhận (assertions). Kiểm tra mã trạng thái, kiểm tra xem
output_videocó tồn tại không và kiểm tra định dạng phản hồi bạn mong đợi ở độ phân giải của mình. Đây là xác nhận giúp phát hiện sự chuyển đổi giữa nội tuyến và URI. - Nhân bản cho từng loại tác vụ. Một yêu cầu đã lưu cho mỗi tác vụ chuyển văn bản thành video, hình ảnh thành video và mở rộng. Khi Google phát hành Omni 1.2, bạn chạy ba yêu cầu và biết trong vài phút những gì đã thay đổi.
Apidog không tạo video và nó không phải là một framework AI. Đó là nơi bạn xây dựng yêu cầu, gửi nó và giữ phản hồi theo một tiêu chuẩn bạn đặt ra. Tải xuống Apidog nếu bạn muốn có công cụ này trước khi tăng chi phí.
Các lỗi và cách khắc phục thường gặp
- Lỗi 404 trên endpoint. Bạn đang gọi
/v1beta/models/gemini-omni-1.1-flash:generateContent. Omni sử dụng/v1beta/interactionsvới mô hình trong phần thân. - `output_video.data` trống. Phản hồi trả về dưới dạng URI vì video vượt quá 4MB. Đọc
output_video.urivà tải xuống thông qua Files API. - Không tìm thấy mô hình. Kiểm tra
gemini-omni-flash-previewtrong cấu hình của bạn. Endpoint đó sẽ ngừng hoạt động vào ngày 30 tháng 9 năm 2026. - Chỉnh sửa video đã tải lên bị lỗi. Chỉnh sửa video đã tải lên không khả dụng ở EEA, Thụy Sĩ và Vương quốc Anh. Video do mô hình tạo vẫn hoạt động ở đó.
- Yêu cầu mở rộng bị từ chối. Video đầu vào giới hạn 10 giây, mở rộng chỉ thêm vào cuối và bạn không thể thêm lời thoại khi mở rộng một video đã tải lên.
Câu hỏi thường gặp
- Gemini Omni sử dụng endpoint nào?
POST https://generativelanguage.googleapis.com/v1beta/interactions, vớigemini-omni-1.1-flashtrong phần thân yêu cầu. - Có gói miễn phí cho API Gemini Omni không? Không. Mỗi lần tạo đều bị tính phí. Các mô hình văn bản mới có lộ trình miễn phí trong AI Studio.
- Tôi có thể đặt temperature hay prompt phủ định không? Không. Các hướng dẫn hệ thống, temperature,
top_p, chuỗi dừng và prompt phủ định đều không được hỗ trợ. Hãy đặt các yếu tố loại trừ vào văn bản prompt. - Làm thế nào để tạo video dọc? Đặt
aspect_ratiothành9:16trongresponse_format. - Các video được tạo có bị đóng dấu bản quyền không? Có. Tất cả đầu ra đều mang SynthID, không nhìn thấy được đối với người xem và có thể phát hiện bằng chương trình.
- Điều này so sánh với API Veo như thế nào? Các endpoint khác nhau, giá cả khác nhau, thế mạnh khác nhau. Omni 1.1 Flash so với Veo 3.1 đề cập đến sự đánh đổi, và hướng dẫn API Veo 3.1 có các chi tiết cụ thể về việc tích hợp đó.
Toàn bộ quá trình tích hợp bao gồm hai trường bắt buộc cùng với một trình xử lý phản hồi có thể xử lý cả hai dạng phân phối. Hãy thử gọi API ở 360p trước, lưu lại với các xác nhận, sau đó tăng độ phân giải khi bạn tin tưởng vào hệ thống. Đọc tài liệu Omni chính thức để biết danh sách tham số khi chúng phát triển.
