Você chama o Gemini Omni 1.1 Flash com o ID do modelo gemini-omni-1.1-flash através da API de Interações do Google, e não o endpoint generateContent que você usa para modelos de texto. Essa é a primeira coisa que confunde as pessoas. Se você copiar um trecho de texto do Gemini e trocar o nome do modelo, receberá um 404.
Este guia o levará de um terminal vazio a uma solicitação de geração de vídeo testada. Você obterá uma chave, fará sua primeira chamada em curl e Python, aprenderá os parâmetros existentes (e a surpreendente lista dos que não existem), lidará com respostas grandes e salvará tudo como um teste repetível.
O modelo foi lançado em GA (disponibilidade geral) em 27 de agosto de 2026. Para saber o que foi lançado com ele, veja o que há de novo no Gemini Omni 1.1 Flash.
O que você precisa antes de começar
- Uma conta Google, para fazer login no AI Studio.
- Uma chave de API Gemini do Google AI Studio.
- Faturamento ativado. O Omni não possui uma camada gratuita, ao contrário da faixa gratuita nos modelos de texto. Sua primeira solicitação custa dinheiro.
- Uma maneira de enviar solicitações HTTP: curl, o SDK Python ou um cliente de API.
Armazene a chave como uma variável de ambiente em vez de colá-la no código-fonte:
export GEMINI_API_KEY="your_key_here"
Os SDKs oficiais leem essa variável por conta própria, o que mantém o segredo fora do seu repositório.
Sua primeira chamada de geração de vídeo
O endpoint é um POST para /v1beta/interactions. Aqui está ele em 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."
}'
Dois campos: o modelo e a entrada. Essa é toda a solicitação mínima. A resposta carrega o vídeo gerado como base64 em output_video.data.
Em Python, instale o SDK com pip install google-genai, então:
import base64
from google import genai
client = genai.Client() # reads GEMINI_API_KEY from the environment
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 segue o mesmo formato com @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'));
}
A geração leva tempo. A latência escala com a duração, resolução e carga atual da API, então defina um tempo limite do cliente generoso antes de decidir que algo está com problemas.
Controlando resolução e proporção de tela
Tudo sobre o formato de saída vai em 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",
},
)
Os valores aceitos:
| Campo | Valores | Padrão |
|---|---|---|
type |
video |
video |
aspect_ratio |
16:9, 9:16 |
16:9 |
resolution |
360p, 720p, 1080p, 4k |
720p |
delivery |
base64 inline, uri |
inline |
Faça rascunhos em 360p. Ele gera até 60% mais rápido que 720p e custa um terço, então suas quinze tentativas de prompt descartáveis custam o que cinco costumavam custar. Re-renderize o que você vai manter em uma resolução mais alta. 1080p e 4k são upscales dos frames gerados, não renderizações nativas. A discriminação de preços mostra o custo real de cada nível por segundo.
Os parâmetros que não existem
Esta lista importa mais do que a anterior, porque você desperdiçará uma tarde caso contrário:
- Sem instruções do sistema
- Sem
temperature - Sem
top_p - Sem sequências de parada
- Sem campo de prompt negativo
Se você precisar excluir algo de uma cena, escreva a exclusão no próprio prompt. O exemplo da documentação faz exatamente isso: “usando o desenho apenas como guia para movimento, não mostre o desenho no vídeo final.”
Entradas de imagem, keyframes e referências
Passe uma lista em vez de uma string quando quiser incluir mídia. Imagem para vídeo:
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"},
],
)
Duas imagens se tornam um primeiro e um último quadro, e o modelo gera o movimento entre eles:
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."},
],
)
As referências de vídeo funcionam da mesma forma através da API Files, limitadas a três clipes de três segundos cada. O áudio nesses clipes é ignorado; o modelo os lê para movimento e aparência.
Edição multi-turno
Isso é o que separa o Omni de um endpoint simples de texto para vídeo. Gere uma vez e depois edite de forma conversacional passando o ID da interação anterior:
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.",
)
Sem reenvio, sem redescrever a cena. O mesmo mecanismo impulsiona a extensão de cena, que é abordada no guia de extensão de 40 segundos.
Lidando com vídeos acima de 4MB
Qualquer coisa maior que 4MB retorna como um URI em vez de base64 inline, e o arquivo precisa terminar o processamento antes de poder ser baixado. Este é o bug que a maioria das pessoas encontra em 1080p: seu manipulador lê output_video.data, não encontra nada e relata uma falha silenciosa.
Peça a entrega por URI explicitamente e faça polling:
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)
Escreva seu manipulador de resposta para aceitar ambos os formatos desde o início. A resolução altera qual deles você recebe.
Teste a solicitação no Apidog
Uma vez que a chamada funciona, o problema muda. Você agora tem um endpoint caro, lento e não determinístico em seu caminho crítico, e precisa saber quando ele muda de comportamento. Comandos curl ad-hoc no histórico do shell não informam isso.
Configure-o uma vez no Apidog:
- Crie um projeto e um ambiente. Coloque
GEMINI_API_KEYeMODEL_IDem variáveis de ambiente para que a chave nunca vá parar na solicitação salva. - Adicione a solicitação. POST para
https://generativelanguage.googleapis.com/v1beta/interactions, corpo JSON commodeleinput. Referencie as variáveis com{{MODEL_ID}}. - Aumente o tempo limite. A geração de vídeo leva muito mais tempo do que a conclusão de texto, e o tempo limite padrão do cliente a interromperá.
- Adicione asserções. Verifique o código de status, verifique se
output_videoexiste e verifique o formato da resposta que você espera para sua resolução. Esta é a asserção que detecta a troca entre inline e URI. - Duplique para cada tipo de tarefa. Uma solicitação salva para cada um: texto para vídeo, imagem para vídeo e extensão. Quando o Google lançar o Omni 1.2, você executa três solicitações e saberá em minutos o que mudou.
O Apidog não gera vídeo e não é um framework de IA. É onde você constrói a solicitação, a envia e mantém a resposta a um padrão que você definiu. Baixe o Apidog se você quiser essa estrutura no lugar antes de aumentar seus gastos.
Erros comuns e correções
- 404 no endpoint. Você está chamando
/v1beta/models/gemini-omni-1.1-flash:generateContent. O Omni usa/v1beta/interactionscom o modelo no corpo. output_video.datavazio. A resposta veio como um URI porque o vídeo excedeu 4MB. Leiaoutput_video.urie baixe através da API Files.- Modelo não encontrado. Verifique se há
gemini-omni-flash-previewem sua configuração. Esse endpoint será desativado em 30 de setembro de 2026. - Falha na edição de um vídeo enviado. A edição de vídeo enviado não está disponível no EEE, Suíça e Reino Unido. Vídeos gerados pelo modelo ainda funcionam lá.
- Solicitação de extensão rejeitada. Vídeos de entrada são limitados a 10 segundos, a extensão só anexa ao final, e você não pode adicionar diálogo ao estender um upload.
FAQ
- Qual endpoint o Gemini Omni usa?
POST https://generativelanguage.googleapis.com/v1beta/interactions, comgemini-omni-1.1-flashno corpo da solicitação. - Existe uma camada gratuita para a API Gemini Omni? Não. Toda geração é cobrada. Os modelos de texto são os que possuem uma faixa gratuita no AI Studio.
- Posso definir temperatura ou um prompt negativo? Não. Instruções do sistema, temperatura,
top_p, sequências de parada e prompts negativos não são suportados. Coloque as exclusões no texto do prompt. - Como gero vídeo vertical? Defina
aspect_ratiopara9:16emresponse_format. - Os vídeos gerados são marcados d'água? Sim. Toda saída carrega SynthID, invisível para os espectadores e detectável programaticamente.
- Como isso se compara à API Veo? Endpoint diferente, precificação diferente, pontos fortes diferentes. Omni 1.1 Flash vs Veo 3.1 aborda a troca, e o guia da API Veo 3.1 tem as especificidades dessa integração.
Toda a integração consiste em dois campos obrigatórios mais um manipulador de resposta que lida com ambos os formatos de entrega. Faça uma chamada em 360p funcionar primeiro, salve-a com asserções e, em seguida, aumente a resolução quando confiar na infraestrutura. Leia a documentação oficial do Omni para a lista de parâmetros à medida que ela evolui.
