Vous appelez Gemini Omni 1.1 Flash avec l'ID de modèle gemini-omni-1.1-flash via l'API Interactions de Google, et non le point de terminaison generateContent que vous utilisez pour les modèles de texte. C'est la première chose qui déroute les utilisateurs. Si vous copiez un extrait de texte Gemini et échangez le nom du modèle, vous obtenez une erreur 404.
Ce guide vous emmène d'un terminal vide à une requête de génération vidéo testée. Vous obtiendrez une clé, effectuerez votre premier appel en curl et Python, apprendrez les paramètres qui existent (et la liste surprenante de ceux qui n'existent pas), gérerez les réponses volumineuses et sauvegarderez le tout comme un test reproductible.
Le modèle est passé en disponibilité générale le 27 août 2026. Pour savoir ce qui a été livré avec, consultez les nouveautés de Gemini Omni 1.1 Flash.
Ce dont vous avez besoin avant de commencer
- Un compte Google, pour vous connecter à AI Studio.
- Une clé API Gemini de Google AI Studio.
- La facturation activée. Omni n'a pas de niveau gratuit, contrairement à la voie gratuite pour les modèles de texte. Votre première requête est payante.
- Un moyen d'envoyer des requêtes HTTP : curl, le SDK Python ou un client API.
Stockez la clé en tant que variable d'environnement plutôt que de la coller dans le code source :
export GEMINI_API_KEY="your_key_here"
Les SDK officiels lisent cette variable automatiquement, ce qui permet de garder le secret hors de votre dépôt.
Votre premier appel de génération vidéo
Le point de terminaison est une requête POST vers /v1beta/interactions. Voici comment l'utiliser 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."
}'
Deux champs : le modèle et l'entrée. C'est la requête minimale complète. La réponse contient la vidéo générée en base64 dans output_video.data.
En Python, installez le SDK avec pip install google-genai, puis :
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 suit la même structure avec @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 génération prend du temps. La latence varie en fonction de la durée, de la résolution et de la charge actuelle de l'API, alors définissez un délai d'attente client généreux avant de conclure que quelque chose ne fonctionne pas.
Contrôle de la résolution et du rapport d'aspect
Tout ce qui concerne le format de sortie se trouve dans 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",
},
)
Les valeurs acceptées :
| Champ | Valeurs | Défaut |
|---|---|---|
type |
video |
video |
aspect_ratio |
16:9, 9:16 |
16:9 |
resolution |
360p, 720p, 1080p, 4k |
720p |
delivery |
base64 inline, uri |
inline |
Brouillon en 360p. Il génère jusqu'à 60 % plus vite que le 720p et coûte un tiers du prix, de sorte que vos quinze tentatives de prompt jetables coûtent ce que cinq coûtaient auparavant. Refaites le rendu de celui que vous conservez à une résolution plus élevée. Les résolutions 1080p et 4k sont des agrandissements des images générées, et non des rendus natifs. La répartition des prix indique ce que chaque niveau coûte réellement par seconde.
Les paramètres qui n'existent pas
Cette liste est plus importante que la précédente, car vous risqueriez de perdre un après-midi :
- Pas d'instructions système
- Pas de
temperature - Pas de
top_p - Pas de séquences d'arrêt
- Pas de champ de prompt négatif
Si vous devez exclure quelque chose d'une prise de vue, écrivez l'exclusion directement dans le prompt. L'exemple des documents fait exactement cela : « n'utilisez le dessin que comme guide pour le mouvement, ne montrez pas le dessin dans la vidéo finale. »
Entrées d'image, images clés et références
Passez une liste au lieu d'une chaîne de caractères lorsque vous souhaitez inclure des médias. Image vers vidéo :
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"},
],
)
Deux images deviennent une première image et une dernière image, et le modèle génère le mouvement entre elles :
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."},
],
)
Les références vidéo fonctionnent de la même manière via l'API Files, limitées à trois clips de trois secondes chacun. L'audio de ces clips est ignoré ; le modèle les interprète pour le mouvement et l'apparence.
Édition multi-tours
C'est ce qui distingue Omni d'un simple point de terminaison texte-vers-vidéo. Générez une fois, puis modifiez de manière conversationnelle en passant l'ID d'interaction précédent :
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.",
)
Pas de re-téléchargement, pas de re-description de la scène. Le même mécanisme est utilisé pour l'extension de scène, qui est couverte dans le guide d'extension de 40 secondes.
Gestion des vidéos de plus de 4 Mo
Tout ce qui est plus grand que 4 Mo est renvoyé sous forme d'URI au lieu de base64 inline, et le fichier doit finir d'être traité avant de pouvoir être téléchargé. C'est l'erreur que la plupart des gens rencontrent en 1080p : leur gestionnaire lit output_video.data, ne trouve rien et signale un échec silencieux.
Demandez explicitement la livraison par URI et sondez :
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)
Écrivez votre gestionnaire de réponse pour accepter les deux formats dès le début. La résolution modifie celui que vous obtenez.
Tester la requête dans Apidog
Une fois que l'appel fonctionne, le problème change. Vous avez maintenant un point de terminaison coûteux, lent et non déterministe dans votre chemin critique, et vous devez savoir quand son comportement change. Les commandes curl ad hoc dans l'historique du shell ne vous le diront pas.
Configurez-le une fois dans Apidog :
- Créez un projet et un environnement. Placez
GEMINI_API_KEYetMODEL_IDdans des variables d'environnement afin que la clé n'atterrisse jamais dans la requête enregistrée. - Ajoutez la requête. Effectuez un POST vers
https://generativelanguage.googleapis.com/v1beta/interactions, corps JSON avecmodeletinput. Référencez les variables avec{{MODEL_ID}}. - Augmentez le délai d'attente. La génération vidéo est beaucoup plus longue qu'une complétion de texte, et le délai d'attente client par défaut la coupera.
- Ajoutez des assertions. Vérifiez le code de statut, vérifiez que
output_videoexiste, et vérifiez la forme de réponse que vous attendez à votre résolution. C'est l'assertion qui détecte le basculement entre inline et URI. - Dupliquez pour chaque type de tâche. Une requête enregistrée pour chaque type : texte-vers-vidéo, image-vers-vidéo et extension. Lorsque Google publiera Omni 1.2, vous exécuterez trois requêtes et saurez en quelques minutes ce qui a changé.
Apidog ne génère pas de vidéo et n'est pas un framework d'IA. C'est là que vous construisez la requête, l'envoyez et maintenez la réponse à une norme que vous définissez. Téléchargez Apidog si vous voulez avoir ce harnais en place avant d'augmenter vos dépenses.
Erreurs courantes et correctifs
- Erreur 404 sur le point de terminaison. Vous appelez
/v1beta/models/gemini-omni-1.1-flash:generateContent. Omni utilise/v1beta/interactionsavec le modèle dans le corps de la requête. output_video.datavide. La réponse a été renvoyée sous forme d'URI car la vidéo a dépassé 4 Mo. Lisezoutput_video.uriet téléchargez via l'API Files.- Modèle introuvable. Vérifiez la présence de
gemini-omni-flash-previewdans votre configuration. Ce point de terminaison sera retiré le 30 septembre 2026. - L'édition d'une vidéo téléchargée échoue. L'édition de vidéos téléchargées n'est pas disponible dans l'EEE, en Suisse et au Royaume-Uni. Les vidéos générées par le modèle y fonctionnent toujours.
- Requête d'extension rejetée. Les vidéos d'entrée sont plafonnées à 10 secondes, l'extension n'ajoute qu'à la fin, et vous ne pouvez pas ajouter de dialogue lors de l'extension d'un téléchargement.
FAQ
- Quel point de terminaison Gemini Omni utilise-t-il ?
POST https://generativelanguage.googleapis.com/v1beta/interactions, avecgemini-omni-1.1-flashdans le corps de la requête. - Existe-t-il un niveau gratuit pour l'API Gemini Omni ? Non. Chaque génération est facturée. Les modèles de texte sont ceux qui disposent d'un accès gratuit via AI Studio.
- Puis-je définir la température ou un prompt négatif ? Non. Les instructions système, la température,
top_p, les séquences d'arrêt et les prompts négatifs ne sont pas pris en charge. Incluez les exclusions dans le texte du prompt. - Comment générer une vidéo verticale ? Définissez
aspect_ratioà9:16dansresponse_format. - Les vidéos générées sont-elles filigranées ? Oui. Toutes les sorties comportent SynthID, invisible pour les spectateurs et détectable par programme.
- Comment cela se compare-t-il à l'API Veo ? Point de terminaison différent, tarification différente, forces différentes. Omni 1.1 Flash vs Veo 3.1 couvre le compromis, et le guide de l'API Veo 3.1 contient les spécificités de cette intégration.
L'intégration complète se compose de deux champs obligatoires et d'un gestionnaire de réponse qui gère les deux formats de livraison. Faites d'abord fonctionner un appel en 360p, enregistrez-le avec des assertions, puis augmentez la résolution une fois que vous faites confiance au système. Lisez la documentation officielle d'Omni pour la liste des paramètres au fur et à mesure de son évolution.
