Accéder au contenu principal

Guide complet de Nano Banana 2 Lite et Gemini Omni Flash : pipelines média en Python

Apprenez à exploiter les derniers modèles multimodaux de Google pour créer des pipelines d’images et de vidéos en Python, performants et économiques.
· 11 min lire

Explorez l'IA

Google a récemment présenté Nano Banana 2 Lite et Gemini Omni Flash, deux modèles conçus pour redéfinir la vitesse et les capacités multimodales dans le développement en IA.

Ces modèles associent une génération d’images à très faible latence à un montage vidéo conversationnel polyvalent.

Dans cet article, j’explore les capacités clés de ces modèles et je construis un pipeline complet d’édition vidéo IA permettant de sélectionner et générer des images avec Nano Banana 2 Lite, puis de les assembler en vidéo.

Voici une vidéo de démonstration de l’application que nous allons créer :

Qu’est-ce que Nano Banana 2 Lite ?

Nano Banana 2 Lite (gemini-3.1-flash-lite-image) est, à ce jour, le modèle de génération d’images le plus rapide et le plus économique de Google. 

Conçu spécifiquement pour des pipelines développeurs à haut débit et des applications à fort trafic, il est optimisé pour les scénarios où la faible latence et des budgets opérationnels serrés sont des contraintes majeures.

Pour les plateformes utilisant encore l’ancien modèle de Google (gemini-2.5-flash-image), Nano Banana 2 Lite peut le remplacer directement, avec des gains immédiats en vitesse, coût et fidélité visuelle.

Indicateurs de performance clés

  • Latence ultra-faible : fournit des images à partir de texte en environ 4 secondes, idéal pour le prototypage interactif et les applications temps quasi réel.
  • Efficacité coût : proposé à 0,034 $ par image en résolution 1K, il abaisse nettement le coût des générations en volume.
  • Qualité préservée : malgré l’accent mis sur la vitesse, le modèle respecte bien les prompts, gère la cohérence des personnages et génère un texte lisible dans l’image.

Qu’est-ce que Gemini Omni Flash ?

Gemini Omni Flash (gemini-omni-flash-preview) est le modèle économique de Google pour la génération de vidéos et le montage vidéo conversationnel.

Contrairement aux générateurs vidéo autonomes s’appuyant strictement sur des prompts textuels statiques, Omni Flash intègre le raisonnement multimodal de Gemini au cœur de la création vidéo. 

Il accepte nativement des combinaisons de textes, d’images et de vidéos, pour un contrôle programmatique de la génération vidéo avec une précision inédite.

Capacités essentielles et tarification d’Omni Flash

  • Tarification compétitive : 0,10 $ par seconde de vidéo générée, au même tarif que Veo 3.1 Fast.
  • Montage vidéo conversationnel : au lieu de régénérer une vidéo pour de légères retouches, les applications peuvent utiliser des instructions en langue naturelle pour affiner une séquence existante.
  • Référencement multimodal : les prompts textuels peuvent être combinés à des images ou clips de référence pour garantir la cohérence visuelle et un contrôle fin des éléments de scène.
  • Ancrage dans le réel : en s’appuyant sur les connaissances fondamentales de Gemini, le modèle génère des animations réalistes fondées sur la logique et la physique.
  • Synchronisation texte et actions : le texte à l’écran et les incrustations graphiques peuvent être liés directement aux actions vidéo via un simple prompt.

Graphique montrant le score Elo entre Gemini Omni Flash et d’autres modèles de génération vidéo IA de pointe.

Comment générer et configurer une clé d’API Gemini

Avant d’utiliser l’API Gemini, nous devons créer et configurer une clé d’API afin que notre code puisse communiquer avec l’API.

La méthode la plus simple est la suivante :

  • Rendez-vous sur la page des clés d’API de Google AI Studio et connectez-vous.
  • Cliquez sur le bouton « Create API key » en haut à droite.
  • Copiez la clé d’API dans un fichier nommé .env dans le même dossier que votre code Python, au format suivant :
GEMINI_API_KEY=replace_with_api_key

Remarque : l’utilisation de l’API génère des coûts. Pour l’utiliser, assurez-vous d’avoir configuré un moyen de paiement sur la page de facturation de Google AI Studio.

Comment générer des images avec Nano Banana 2 Lite en Python

Prérequis pour la génération d’images IA en Python

Avant d’écrire notre générateur d’images IA en Python, assurez-vous de disposer des outils suivants :

  • Python 3.9+ est installé sur votre système.
  • Clé d’API Google Gemini : une clé d’API Google Gemini valide pour authentifier les requêtes. Suivez les étapes ci-dessus pour la créer et la configurer.
  • Bibliothèques Python requises : nous utiliserons le SDK officiel google-genai pour l’intégration API et Pillow pour la gestion de la sortie image.

Installez les paquets nécessaires avec pip :

pip install google-genai pillow python-dotenv

Étape 1 : importer les modules et charger les variables d’environnement

Créez un nouveau fichier (par ex. : generate_image.py) et ajoutez les imports suivants ainsi que le chargement de l’environnement :

import io
from dotenv import load_dotenv
from google.genai import types
from PIL import Image
from google.genai import Client

# Load environment variables from the .env file
load_dotenv()

Étape 2 : initialiser le client Google GenAI

Pour interagir avec le modèle Nano Banana 2 Lite, nous devons d’abord initialiser le client Google GenAI. 

Le SDK vérifie automatiquement la variable d’environnement GEMINI_API_KEY (chargée depuis le fichier .env à l’étape précédente), nous pouvons donc initialiser le client sans passer explicitement la clé dans le code.

# Initialize the Gemini API client
client = Client()

Étape 3 : écrire la fonction de génération d’images IA

Voici maintenant le cœur de notre script Python. Nous allons écrire une fonction dédiée, generate_image(), qui prend en entrée le client initialisé et un prompt texte.

Nano Banana 2 Lite est appelé en spécifiant model="gemini-3.1-flash-lite-image". Nous configurons la requête API pour attendre une modalité image et définissons le ratio d’aspect souhaité pour la génération IA.

def generate_image(client, prompt: str, ratio: str = "1:1") -> Image.Image | None:
    """
    Generates an AI image using the Nano Banana 2 Lite model via the Gemini API.
    """
    print(f"Generating AI image for prompt: '{prompt}'...")
    
    # 1. Call the Nano Banana 2 Lite model
    response = client.models.generate_content(
        model="gemini-3.1-flash-lite-image",
        contents=prompt,
        config=types.GenerateContentConfig(
            response_modalities=[types.Modality.IMAGE],
            image_config=types.ImageConfig(aspect_ratio=ratio),
        ),
    )
    
    # 2. Extract and convert the generated image data
    if response and response.candidates:
        for part in response.candidates[0].content.parts:
            if part.inline_data:
                # Load the bytes into a PIL Image and convert to RGB
                image = Image.open(io.BytesIO(part.inline_data.data)).convert("RGB")
                return image
                
    return None

Comprendre la requête Python de génération d’image :

  • response_modalities : force le modèle Google Gemini à retourner une image plutôt que du texte.
  • inline_data : l’API Gemini renvoie l’image générée sous forme d’octets bruts. Nous utilisons io.BytesIO pour les encapsuler afin que Pillow (Image.open) puisse les lire comme un fichier image standard.
  • image_config : nous définissons aspect_ratio à « 1:1 » (carré), mais vous pouvez l’adapter selon votre cas d’usage.

Ratios d’aspect pris en charge :

Tableau des ratios d’aspect pris en charge par Nano Banana 2 Lite

Étape 4 : exécuter le script de génération d’images Python

Assemblons le tout et demandons à Nano Banana 2 Lite de générer une image ! 

Nous allons le solliciter avec un prompt créatif, appeler la fonction show() sur l’image obtenue pour l’afficher, puis fermer le client pour libérer les ressources.

if __name__ == "__main__":
    # Define our creative prompt for the AI model
    my_prompt = "A futuristic city skyline at sunset, cyberpunk style, highly detailed"
    
    # Generate the AI image
    result_image = generate_image(client, my_prompt)
    
    # Display the resulting image
    if result_image:
        print("AI Image generated successfully!")
        result_image.show()
    else:
        print("Failed to generate AI image.")
        
    # Close the client to prevent shutdown exceptions
    client.close()

Voici l’image générée par Nano Banana 2 Flash :

image14.png

Comme Google l’annonçait, le modèle n’a pris que quelques secondes pour générer l’image. À première vue, il paraît nettement plus rapide que tous les autres modèles que j’ai testés à ce jour.

Le script complet est disponible dans le fichier generate_image.py du dépôt de ce tutoriel.

Étendre le script à l’édition d’image

Écrivons une fonction edit_image() qui modifie une image. La seule différence dans la requête est de fournir l’image avec le prompt dans le paramètre contents sous forme de liste [image, prompt].

def edit_image(client, image: Image.Image, prompt: str, aspect_ratio: str = "1:1") -> Image.Image | None:
    """
    Edits an AI image using the Gemini 3.1 Flash Lite model via the Gemini API.
    """
    response = client.models.generate_content(
        model="gemini-3.1-flash-lite-image",
        contents=[image, prompt],
        config=types.GenerateContentConfig(
            response_modalities=[types.Modality.IMAGE],
            image_config=types.ImageConfig(aspect_ratio=aspect_ratio),
        ),
    )
    if response and response.candidates:
        for part in response.candidates[0].content.parts:
            if part.inline_data:
                return Image.open(io.BytesIO(part.inline_data.data)).convert("RGB")
    return None

Tests de Nano Banana 2 Flash

Nous avons évalué les performances réelles du modèle via une série de tests ciblés. 

Ces évaluations mesurent la capacité du modèle à gérer des tâches visuelles complexes : rendu de texte lisible, respect d’un agencement spatial strict, et cohérence sur plusieurs itérations, afin de vérifier s’il tient sa promesse d’une génération fidèle à grande vitesse.

Test du rendu de texte lisible dans l’image

image9.png

Test du contrôle spatial strict et respect de deux sujets

Test de prototypage rapide d’IU et précision de mise en page

image2.png

Test des contrastes de matériaux complexes et de l’éclairage

image7.png

Test de cohérence de personnage sur plusieurs tours

image5 (1).png

Honnêtement, je suis plutôt impressionné par les résultats pour un modèle aussi rapide. Dans le dernier exemple, le modèle a même réussi à conserver en partie la cohérence du texte du journal. 

D’après mon expérience, la cohérence est l’un des aspects les plus importants pour rendre un modèle de génération d’images vraiment utile.

Comment générer des vidéos avec Gemini Omni Flash en Python

Dans cette section, nous allons détailler la création d’un script Python pour générer des vidéos, en partant d’un simple prompt texte-vers-vidéo, puis en y intégrant des images de référence.

Contrairement à la génération d’images standard, la génération de vidéos avec Gemini Omni Flash se fait via l’API Interactions du SDK (client.interactions.create). Cet endpoint est conçu pour gérer des interactions riches, multi-tours et multimodales.

Comme les imports, la configuration des variables d’environnement et l’initialisation du client Google GenAI sont identiques à la section précédente, nous pouvons nous concentrer directement sur l’écriture des fonctions de génération vidéo.

Étape 1 : texte-vers-vidéo (prompt simple)

Pour générer une vidéo à partir d’un simple prompt texte, nous passons un bloc de texte unique à l’API Interactions. Voici une fonction Python simple pour cela :

def text_to_video(client, prompt: str, aspect_ratio: str = "16:9", duration: str = "5s"):
    """
    Generates a video from a text prompt using Gemini Omni Flash.
    """
    interaction = client.interactions.create(
        model="gemini-omni-flash-preview",
        input=[{"type": "text", "text": prompt}],
        response_format={
            "type": "video",
            "aspect_ratio": aspect_ratio,
            "duration": duration,
        },
    )
    return interaction

Nous pouvons appeler cette fonction et enregistrer les octets de la vidéo renvoyés dans un fichier comme suit :

if __name__ == "__main__":
    import base64

    # Define a creative video prompt
    text_prompt = """
    Generate a first person view of what daily life would look like in the year
    1000 at this location: 41.89030621184054, 12.492266126772481
    """

    # Call the video generator
    interaction = text_to_video(
        client=client,
        prompt=text_prompt,
        aspect_ratio="16:9",
        duration="5s"
    )

    # Extract and save the generated video file
    if interaction and hasattr(interaction, "output_video") and interaction.output_video:
        # Decode the base64-encoded video data returned by the API
        video_bytes = base64.b64decode(interaction.output_video.data)
        
        # Save the bytes locally as an MP4 file
        with open("videos/video.mp4", "wb") as f:
            f.write(video_bytes)
    else:
        print("Failed to generate video.")

Le prompt utilisé était :

Generate a first-person view of what daily life would look like in the year 1000 at this location: 41.89030621184054, 12.492266126772481

Cet emplacement correspond au Colisée de Rome. J’ai utilisé des coordonnées pour tester les connaissances du modèle sur le monde. Voici la vidéo générée :

En comparaison, voici ce que le modèle a généré lorsque j’ai remplacé l’an 1000 par 1980 :

Plutôt intéressant à mon avis. Consultez le fichier text_to_video.py pour voir le script complet.

Étape 2 : mettre en œuvre l’image-vers-vidéo

Pour animer une image statique ou simplement l’utiliser comme référence pour guider la génération vidéo, nous devons fournir à la fois l’image et un prompt texte au modèle.

Comme l’API Interactions attend des images encodées en base64, nous définissons d’abord une fonction utilitaire pour convertir des objets PIL Image en chaînes base64 :

import io
from PIL import Image
import base64

def _image_to_base64(img: Image.Image) -> str:
    """
    Converts a PIL Image object to a base64-encoded string.
    """
    buffered = io.BytesIO()
    img.save(buffered, format="PNG")
    return base64.b64encode(buffered.getvalue()).decode()

Nous pouvons maintenant écrire une fonction plus générique, generate_video(), qui gère à la fois les images en option et le prompt texte.

from google.genai import types

def generate_video(client, valid_images: list[Image.Image], animation_prompt: str, aspect_ratio: str):
    """
    Generates a commercial-quality AI video using Google's Gemini Omni Flash model.
    Supports image-to-video and text-to-video multimodal inputs using the Gemini API.
    """
    omni_inputs = []
    
    # 1. Base64 encode and append any input images
    for img in valid_images:
        img_b64 = _image_to_base64(img)
        omni_inputs.append({
            "type": "image",
            "data": img_b64,
            "mime_type": "image/png",
        })

    # 2. Append the text animation prompt
    omni_inputs.append({"type": "text", "text": animation_prompt})

    # 3. Request video generation from the interactions endpoint
    interaction = client.interactions.create(
        model="gemini-omni-flash-preview",
        input=omni_inputs,
        response_format={
            "type": "video",
            "aspect_ratio": aspect_ratio,
        },
    )
    return interaction

Enfin, voici comment utiliser ces fonctions pour générer une vidéo qui anime ce scarabée généré avec Gemini :

image4 (1).png

if __name__ == "__main__":
    # Load our reference image
    reference_image = Image.open("images/beetle.png").convert("RGB")

    # Describe how we want the image to be animated
    animation_prompt = """
    A detailed, close-up photograph of an iridescent biomechanical stag beetle, 
    shimmering with metallic green, blue, and violet hues, as it traverses a 
    rugged amethyst crystal formation in a subterranean grotto. 
    The cavern walls are lined with a dense matrix of glowing crystals emitting 
    deep purple, blue, and green light. The air is misty, with bioluminescent 
    flora clinging to the rock. As the camera maintains focus, the beetle 
    subtly activates a soft internal orange glow from its mandibles, begins 
    vibrating its wings, and slowly crawls upward across the crystalline 
    surface, reflecting the surrounding light.
    """

    # Call the generator with the reference image
    interaction = generate_video(
        client=client,
        valid_images=[reference_image],
        animation_prompt=animation_prompt,
        aspect_ratio="16:9"
    )

    # Extract and save the animated video
    if interaction and hasattr(interaction, "output_video") and interaction.output_video:
        video_bytes = base64.b64decode(interaction.output_video.data)
        with open("videos/video.mp4", "wb") as f:
            f.write(video_bytes)

Voici la vidéo générée :

Le script complet est disponible ici.

Étape 3 : mettre en œuvre l’édition vidéo avec vidéo-vers-vidéo

L’édition conversationnelle avec l’API Gemini Omni Flash est grandement facilitée par le mécanisme d’interactions. Quand nous générons une vidéo, nous obtenons un identifiant d’interaction accessible via interaction.id. 

Pour éditer une vidéo, nous fournissons un prompt et l’identifiant de l’interaction précédente. S’il s’agit de la première édition, on utilise l’identifiant de l’interaction de génération ; pour les suivantes, l’identifiant de l’édition précédente.

client.interactions.create(
        model="gemini-omni-flash-preview",
        input=edit_prompt,
        previous_interaction_id=previous_interaction_id,
)

Créer un studio vidéo IA interactif : architecture et synergie multi-modèles

Dans les sections précédentes, nous avons vu comment générer des images avec Nano Banana 2 Lite et des vidéos avec Gemini Omni Flash. Voyons maintenant comment réunir ces capacités dans une application web interactive et cohérente : un studio vidéo IA.

L’architecture du studio vidéo IA

Produire des vidéos IA de qualité suppose généralement beaucoup d’essais. Le studio vidéo IA répond à cela via un pipeline en deux étapes et multi-modèles, tirant parti des forces de deux modèles distincts :

  • Création des ressources : avec Nano Banana 2 Lite, les utilisateurs génèrent rapidement des ressources et images de référence à combiner avec leurs images existantes.
  • Génération vidéo : nous utilisons Gemini Omni Flash pour produire la vidéo à partir de ces assets.
  • Montage vidéo : une fois la vidéo générée, nous pouvons l’éditer de manière conversationnelle.

image11.png

Étape 1 : prototypage rapide avec Nano Banana 2 Lite

Dans la première étape, l’application permet de sélectionner des images de référence (images clés). Nous pouvons soit téléverser une image locale, soit en générer une à la volée. 

C’est là que Nano Banana 2 Lite excelle. 

Avec une latence inférieure à 4 secondes et un coût infime par image, il sert de bac à sable ultra-rapide. Nous pouvons prototyper en un rien de temps des dizaines de styles, compositions et sujets jusqu’à obtenir l’image clé idéale.

image6.png

Étape 2 : génération multimodale avec Gemini Omni Flash

Une fois l’image de référence parfaite obtenue, nous passons à la production vidéo. 

L’image de référence et notre prompt d’animation (par ex. : mouvement de caméra, changements de lumière ou action) sont encodés en base64 et envoyés à Gemini Omni Flash via l’API Interactions du SDK. 

Gemini Omni Flash traite ces entrées et renvoie un clip vidéo haute fidélité au format paysage (16:9) ou vertical (9:16).

Voici la vidéo obtenue :

Implémentation de l’application de génération vidéo avec Streamlit

Pour l’interface, nous utilisons Streamlit, un framework Python open source très apprécié qui facilite la création d’applications web partageables pour le machine learning et la data science. 

Si vous débutez avec Streamlit ou souhaitez une piqûre de rappel, nous vous recommandons ce tutoriel Python Streamlit. 

Nous ne nous attarderons pas sur le code de l’UI Streamlit, mais sur l’architecture du pipeline de génération vidéo et les possibilités créatives offertes par la combinaison de ces deux modèles puissants.

Le script gemini_api.py contient les fonctions vues plus haut pour générer images et vidéos. L’interface utilisateur est développée avec Streamlit dans le script app.py.

Pour l’exécuter en local et expérimenter, procédez ainsi :

git clone [email protected]:fran-aubry/nano-banana-2-flash-tutorial.git
pip install -r requirement.txt
streamlit run app.py

Voici un exemple de flux complet combinant une image existante d’une marque de thé imaginaire avec une image de plantation de thé générée, afin de créer un plan publicitaire pour cette boîte de thé. 

Nous éditons ensuite la vidéo à l’aide d’un prompt.

La vidéo a été accélérée au montage car la génération peut prendre quelques minutes.

Conclusion

Les promesses de vitesse avancées par Google pour son nouveau modèle Nano Banana 2 Lite sont tenues. 

Le modèle est incroyablement rapide et se rapproche d’une génération d’images quasi temps réel. Si les images produites sont de bonne qualité, elles ne sont pas révolutionnaires. L’innovation majeure du modèle réside clairement dans sa vitesse impressionnante plutôt que dans une avance spectaculaire en qualité d’image.

En duo, les modèles Gemini Omni Flash et Nano Banana 2 Lite forment un pipeline très puissant. Omni se distingue notamment par sa capacité à conserver la fidélité au matériel de référence.

Pour en savoir plus sur Nano Banana 2, consultez cet article : Nano Banana 2 : guide complet avec Python.

Pour approfondir la série Gemini Omni, je recommande Gemini Omni : un seul modèle pour le texte, l’image, l’audio et la vidéo.

FAQs

Quelle est la différence d’usage entre Nano Banana 2 Lite et Gemini Omni Flash ?

Nano Banana 2 Lite est optimisé pour une génération d’images rapide et économique (idéale pour le prototypage), tandis que Gemini Omni Flash est conçu pour la génération de vidéos multimodales et le montage vidéo conversationnel.

Puis-je éditer une vidéo sans la régénérer complètement ?

Oui. Gemini Omni Flash permet le montage vidéo conversationnel. En fournissant un prompt avec l’ID de l’interaction précédente, vous pouvez affiner des séquences existantes en langage naturel.

Nano Banana 2 Lite convient-il aux applications presque temps réel ?

Avec une latence ultra-faible d’environ 4 secondes par image, il est spécialement conçu pour les applications interactives où la vitesse et le budget sont cruciaux.

Quels sont les principaux coûts à anticiper pour ces modèles ?

Les deux modèles privilégient l’efficacité économique. Nano Banana 2 Lite coûte 0,034 $ par image 1K et Gemini Omni Flash 0,10 $ par seconde de vidéo, ce qui les rend adaptés aux pipelines à fort volume.

François Aubry

Auteur

François Aubry

Ingénieur full-stack et fondateur de CheapGPT. L'enseignement a toujours été ma passion. Dès mes premiers jours d'études, j'ai cherché avec enthousiasme des occasions de donner des cours particuliers et d'aider d'autres étudiants. Cette passion m'a amenée à poursuivre un doctorat, où j'ai également été assistante d'enseignement pour soutenir mes efforts académiques. Au cours de ces années, j'ai trouvé un immense épanouissement dans le cadre d'une classe traditionnelle, en favorisant les liens et en facilitant l'apprentissage. Cependant, avec l'avènement des plateformes d'apprentissage en ligne, j'ai reconnu le potentiel de transformation de l'éducation numérique. En fait, j'ai participé activement au développement d'une telle plateforme dans notre université. Je suis profondément engagée dans l'intégration des principes d'enseignement traditionnels avec des méthodologies numériques innovantes. Ma passion est de créer des cours qui sont non seulement attrayants et instructifs, mais aussi accessibles aux apprenants à l'ère du numérique.

Sujets

Contenus associés

Tutoriel

Données JSON Python : Un guide illustré d'exemples