Gemini Omni: API de generación de video
Genere videos cortos con Gemini Omni en una sola solicitud síncrona: modelo, parámetros, respuesta, errores y facturación.
Gemini Omni genera un video corto en una sola solicitud síncrona: el clip terminado vuelve como MP4 en base64 en el cuerpo de la respuesta, sin ID de tarea ni sondeo.
| Elemento | Valor |
|---|---|
| Base URL | https://api.hop-base.com/v1beta |
| Generar video | POST /v1beta/interactions |
| Alias equivalentes | POST /v1/interactions, POST /interactions |
| Tareas y sondeo | No hay; la respuesta es síncrona |
| Grupo de la clave | "Gemini oficial directo" |
Modelos disponibles
| ID del modelo | Resolución | Duración | Precio oficial |
|---|---|---|---|
gemini-omni-flash-preview | 720p | 3-10 segundos | $1,50 / $9/ 1M tokens |
gemini-omni-flash-preview es el único modelo de Gemini que produce video y, a diferencia de los demás modelos de video de HopBase, es síncrono. Devuelve un MP4 de 720p y 3-10 segundos, facturado por token y no por segundo. Consulte la ficha del modelo para ver todas las especificaciones.
El video de Omni lo sirve el grupo Gemini oficial directo: el mismo grupo y la misma clave que el chat de Gemini y la generación de imágenes de Gemini. No hay que comprar un paquete de video aparte. Confirme la disponibilidad con GET /v1/models y consulte sus tarifas efectivas en el catálogo de modelos con la sesión iniciada.
Parámetros de la solicitud
| Parámetro | Obligatorio | Tipo y límites | Predeterminado | Descripción |
|---|---|---|---|---|
model | Obligatorio | solo gemini-omni-flash-preview | — | Cualquier otro modelo se rechaza con 400 |
input | Obligatorio | cadena, o el arreglo nativo de pasos; medios como base64 en data + mime_type o uri remoto; video de entrada ≤ 10 s | — | Texto, imagen y video. El límite de 10 s lo comprueba el modelo, no la pasarela |
stream | Opcional | booleano | false | true no da un flujo incremental; el resultado llega de una vez |
| Otros campos nativos | Opcional | p. ej. system_instruction, generation_config | — | Se transmiten sin cambios |
No existen parámetros duration, resolution ni fps. Indique la duración que quiere en el propio prompt.
Respuesta
La solicitud queda abierta hasta que el clip está terminado, así que no hay estados intermedios como «en cola» o «en proceso». Si todo va bien recibe HTTP 200, y el clip está en steps[].content[], en el paso cuyo type es model_output.
| Campo | Descripción |
|---|---|
status | completed al terminar |
steps[].type | El paso con el clip es model_output |
steps[].content[].type | El bloque de video es video |
steps[].content[].mime_type | video/mp4 |
steps[].content[].data | MP4 codificado en base64 |
usage.total_input_tokens / usage.total_output_tokens | Tokens de entrada y de salida |
usage.output_tokens_by_modality | Tokens de salida desglosados por modalidad, como referencia |
Éxito
{
"status": "completed",
"model": "gemini-omni-flash-preview",
"steps": [{
"type": "model_output",
"content": [{ "type": "video", "mime_type": "video/mp4", "data": "<base64-mp4>" }]
}],
"usage": {
"total_input_tokens": 20,
"total_output_tokens": 17819,
"output_tokens_by_modality": [{ "modality": "video", "tokens": 17376 }]
}
}Las cifras de usage.output_tokens_by_modality ya están incluidas en total_output_tokens, así que no las sume de nuevo.
| Propiedad | Valor |
|---|---|
| Duración | 3-10 segundos |
| Resolución | 720p |
| Cuadros por segundo | 24 FPS |
| Contenedor | MP4, devuelto en base64 |
| Ventana de contexto | 1.048.576 tokens |
El clip llega dentro del propio cuerpo JSON: no hay enlace de descarga, así que nada caduca. Como resultado, las respuestas son grandes; dimensione los búferes de su cliente en consecuencia.
Fallo
Un fallo puede tomar tres formas:
- Un error de validación de la pasarela devuelve 400 con la forma
{"error": {"message": …}}; vea «Errores comunes» más abajo. - Los errores del propio modelo llegan en su cuerpo de error nativo.
- Un 200 sin bloque
type: "video"(el modelo respondió solo con texto o se negó). Se factura igualmente por tokens, así que compruebe ese bloque antes de dar la llamada por buena.
Ejemplo mínimo
curl https://api.hop-base.com/v1beta/interactions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
--max-time 600 \
-d '{
"model": "gemini-omni-flash-preview",
"input": "Video de 3 segundos: pelota roja rodando lento sobre fondo blanco"
}'Notas
Enviar gemini-omni-flash-preview a /v1/chat/completions funciona, pero solo vuelve la parte de texto de la respuesta: el bloque de video se descarta. Use el endpoint de Interactions cuando quiera el clip.
La generación de video es lenta y este endpoint no tiene modo asíncrono: Prefer: respond-async funciona para la generación de imágenes de Gemini, pero no aquí.
- El endpoint nativo de Interactions no tiene un vigilante de tiempo del lado de la pasarela, así que configure un tiempo de espera de cliente generoso; cinco minutos es un mínimo razonable.
- Llamar a
gemini-omni-flash-previewa través de/v1/chat/completionsen su lugar tiene un límite de unos 100 segundos por llamada, sin importar el tiempo de espera de su cliente; use el endpoint de Interactions directamente para cualquier solicitud que pueda tardar más. - HopBase no reintenta deliberadamente un 504 en esta ruta. Repetir una solicitud cuyo resultado se desconoce arriesgaría generar y pagar el clip dos veces.
- El ID del modelo lleva
preview. Sus capacidades y disponibilidad pueden cambiar sin aviso.
El gateway no valida un límite común de cantidad o bytes por archivo para Omni. Un límite no verificado no significa ilimitado. No copie las 16 imágenes de GPT Image ni las reglas Seedance.
uri es una dirección remota y data contiene base64; no use asset://, ID de Seedance ni rutas locales. La aceptación estructural no garantiza que el medio o la moderación pasen.
Errores comunes y soluciones
La pasarela rechaza estos casos con 400:
Interactions API only supports model gemini-omni-flash-preview
request body is missing input
missing model
request body must be JSON| Error o síntoma | Solución |
|---|---|
Interactions API only supports model gemini-omni-flash-preview | Ponga model en gemini-omni-flash-preview |
request body is missing input | Añada input |
missing model | Añada model |
request body must be JSON | Envíe el cuerpo en JSON |
| 402 | Su saldo es cero o negativo; recargue y vuelva a llamar |
| 200 sin bloque de video | El modelo respondió solo con texto o se negó, y se factura igualmente; compruebe steps[].content[] antes de darlo por bueno |
Solo texto vía /v1/chat/completions | Use POST /v1beta/interactions |
| 504 | HopBase no lo reintenta; repetirlo podría generar y cobrar el clip dos veces |
Facturación
Se factura por token, no por segundo. Un 200 sin bloque de video se factura igualmente por tokens; una solicitud que falla o agota el tiempo de espera no se factura.
No se reserva saldo por adelantado; un 402 solo aparece cuando su saldo es cero o negativo. Los precios de lista oficiales están en la página de precios, su tarifa es la que aparece en el catálogo de modelos con la sesión iniciada, y el cargo real de cada solicitud está en su registro de uso.
Próximos pasos
- Generación de video: envíe y consulte tareas de video de todos los modelos
- Chat de Gemini: chat de texto y multimodal de Gemini
- Concurrencia, tiempos de espera y facturación: límites de concurrencia, tiempos de espera y reglas de facturación