Cómo usar la API Gemini Omni 1.1 Flash

Llama a gemini-omni-1.1-flash a través de la API de Interacciones de Google: obtén una clave, realiza tu primera solicitud cURL y Python, maneja la entrega de URI de 4MB y guarda la llamada como una prueba en Apidog.

INEZA Felin-Michel

INEZA Felin-Michel

3 September 2026

Cómo usar la API Gemini Omni 1.1 Flash

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

Llamas a Gemini Omni 1.1 Flash con el ID de modelo gemini-omni-1.1-flash a través de la API de Interacciones de Google, no el endpoint generateContent que usas para los modelos de texto. Eso es lo primero que confunde a la gente. Si copias un fragmento de texto de Gemini y cambias el nombre del modelo, obtendrás un 404.

Esta guía te lleva desde una terminal vacía hasta una solicitud probada de generación de video. Obtendrás una clave, harás tu primera llamada en curl y Python, aprenderás los parámetros existentes (y la sorprendente lista de los que no existen), manejarás respuestas grandes y guardarás todo como una prueba repetible.

El modelo pasó a disponibilidad general (GA) el 27 de agosto de 2026. Para ver lo que se lanzó con él, consulta novedades en Gemini Omni 1.1 Flash.

Lo que necesitas antes de empezar

Guarda la clave como una variable de entorno en lugar de pegarla en el código fuente:

export GEMINI_API_KEY="your_key_here"

Los SDK oficiales leen esa variable por sí mismos, lo que mantiene el secreto fuera de tu repositorio.

Tu primera llamada de generación de video

El endpoint es un POST a /v1beta/interactions. Aquí está en 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."
  }'

Dos campos: el modelo y la entrada. Esa es toda la solicitud mínima. La respuesta lleva el video generado como base64 en output_video.data.

En Python, instala el SDK con pip install google-genai, luego:

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 sigue la misma estructura con @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'));
}

La generación lleva tiempo. La latencia escala con la duración, la resolución y la carga actual de la API, así que establece un tiempo de espera del cliente generoso antes de decidir que algo está roto.

Controlando la resolución y la relación de aspecto

Todo lo relacionado con el formato de salida va en 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",
    },
)

Los valores aceptados:

Campo Valores Por defecto
type video video
aspect_ratio 16:9, 9:16 16:9
resolution 360p, 720p, 1080p, 4k 720p
delivery base64 en línea, uri en línea

Haz borradores en 360p. Genera hasta un 60% más rápido que 720p y cuesta un tercio, así que tus quince intentos de prompt descartables cuestan lo que solían costar cinco. Vuelve a renderizar el que conserves a una resolución más alta. 1080p y 4k son escalados de los fotogramas generados, no renderizados nativos. El desglose de precios muestra lo que cada nivel cuesta por segundo.

Los parámetros que no existen

Esta lista importa más que la anterior, porque de lo contrario perderás una tarde:

Si necesitas excluir algo de una toma, escribe la exclusión en el propio prompt. El propio ejemplo de la documentación hace exactamente eso: “usando el dibujo solo como guía para el movimiento, no muestres el dibujo en el video final”

Entradas de imagen, fotogramas clave y referencias

Pasa una lista en lugar de una cadena cuando quieras incluir medios. Imagen a 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"},
    ],
)

Dos imágenes se convierten en un primer fotograma y un último fotograma, y el modelo genera el movimiento entre ellas:

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."},
    ],
)

Las referencias de video funcionan de la misma manera a través de la API de Archivos, con un límite de tres clips de tres segundos cada uno. El audio de esos clips se ignora; el modelo los lee para el movimiento y la apariencia.

Edición de múltiples turnos

Esto es lo que separa a Omni de un simple endpoint de texto a video. Genera una vez, luego edita conversacionalmente pasando el ID de interacción 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.",
)

Sin volver a subir, sin volver a describir la escena. El mismo mecanismo impulsa la extensión de escenas, que se cubre en la guía de extensión de 40 segundos.

Manejo de videos de más de 4 MB

Cualquier cosa de más de 4 MB se devuelve como una URI en lugar de base64 en línea, y el archivo necesita terminar de procesarse antes de que puedas descargarlo. Este es el error que la mayoría de la gente encuentra en 1080p: su manejador lee output_video.data, no encuentra nada y reporta un fallo silencioso.

Pide la entrega de URI explícitamente y haz un sondeo:

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)

Escribe tu manejador de respuestas para que acepte ambas formas desde el principio. La resolución cambia cuál obtienes.

Prueba la solicitud en Apidog

Una vez que la llamada funciona, el problema cambia. Ahora tienes un endpoint costoso, lento y no determinista en tu ruta crítica, y necesitas saber cuándo cambia su comportamiento. Los comandos curl ad-hoc en el historial de la shell no te lo dirán.

Configúralo una vez en Apidog:

  1. Crea un proyecto y un entorno. Pon GEMINI_API_KEY y MODEL_ID en variables de entorno para que la clave nunca llegue a la solicitud guardada.
  2. Añade la solicitud. POST a https://generativelanguage.googleapis.com/v1beta/interactions, cuerpo JSON con model e input. Haz referencia a las variables con {{MODEL_ID}}.
  3. Aumenta el tiempo de espera. La generación de video toma mucho más tiempo que una finalización de texto, y el tiempo de espera predeterminado del cliente la cortará.
  4. Añade aserciones. Verifica el código de estado, verifica que output_video exista y verifica la forma de respuesta que esperas en tu resolución. Esta es la aserción que detecta el cambio entre en línea y URI.
  5. Duplica para cada tipo de tarea. Una solicitud guardada para texto a video, otra para imagen a video y otra para extensión. Cuando Google lance Omni 1.2, ejecutarás tres solicitudes y sabrás en minutos qué cambió.

Apidog no genera video y no es un framework de IA. Es donde construyes la solicitud, la envías y mantienes la respuesta a un estándar que tú estableces. Descarga Apidog si quieres tener esa estructura implementada antes de aumentar el gasto.

Errores comunes y soluciones

Preguntas Frecuentes

Toda la integración consta de dos campos obligatorios más un manejador de respuestas que se adapta a ambas formas de entrega. Haz que una llamada de 360p funcione primero, guárdala con aserciones y luego aumenta la resolución una vez que confíes en la infraestructura. Lee la documentación oficial de Omni para la lista de parámetros a medida que evoluciona.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs