Saltar al contenido principal

Guía completa de Nano Banana 2 Lite y Gemini Omni Flash: canalizaciones multimedia en Python

Aprende a aprovechar los últimos modelos multimodales de Google para crear canalizaciones de generación de imágenes y vídeo en Python con alto rendimiento y bajo coste.
· 11 min leer

Explora con IA

Google lanzó recientemente Nano Banana 2 Lite y Gemini Omni Flash, dos modelos diseñados para redefinir la velocidad y las capacidades multimodales en el desarrollo de IA.

Estos modelos combinan una generación de imágenes con latencia ultrabaja y una edición de vídeo conversacional muy versátil.

En este artículo, exploro las capacidades clave de estos modelos y construyo una canalización completa de edición de vídeo con IA que permite seleccionar y generar imágenes con Nano Banana 2 Lite y luego combinarlas en un vídeo.

Aquí tienes un vídeo de demostración de la app que vamos a crear:

¿Qué es Nano Banana 2 Lite?

Nano Banana 2 Lite (gemini-3.1-flash-lite-image) es el modelo de generación de imágenes más rápido y económico de Google hasta la fecha. 

Creado específicamente para canalizaciones de desarrollo de alta velocidad y aplicaciones de alto volumen, está optimizado para escenarios donde la baja latencia y los presupuestos ajustados son críticos.

Para plataformas que usan el modelo heredado de Google (gemini-2.5-flash-image), Nano Banana 2 Lite actúa como sustituto directo, con mejoras inmediatas en velocidad, coste y fidelidad visual.

Métricas clave de rendimiento

  • Latencia ultrabaja: genera imágenes a partir de texto en unos 4 segundos, ideal para prototipado interactivo y apps en tiempo real.
  • Eficiencia de coste: precio de 0,034 $ por imagen a resolución 1K, reduce notablemente la barrera para la generación a gran escala.
  • Calidad constante: pese a priorizar la velocidad, mantiene buena adherencia al prompt, consistencia de personajes y generación fiable de texto dentro de la imagen.

¿Qué es Gemini Omni Flash?

Gemini Omni Flash (gemini-omni-flash-preview) es el modelo de Google optimizado en costes para generación de vídeo y edición de vídeo conversacional.

A diferencia de los generadores de vídeo que dependen solo de prompts de texto estáticos, Omni Flash incorpora el razonamiento multimodal de Gemini directamente en el proceso de creación.

Admite de forma nativa combinaciones de texto, imagen y vídeo, lo que permite controlar la generación de vídeo con una precisión inédita.

Capacidades clave y precios de Omni Flash

  • Precio competitivo: 0,10 $ por segundo de vídeo generado, igualando la tarifa de Veo 3.1 Fast.
  • Edición de vídeo conversacional: en lugar de regenerar desde cero por cambios menores, puedes dar instrucciones en lenguaje natural para refinar secuencias existentes.
  • Referencias multimodales: combina prompts de texto con imágenes o clips de referencia para asegurar consistencia visual y control granular de la escena.
  • Aterrizaje en el mundo real: aprovechando el conocimiento base de Gemini, construye animaciones realistas basadas en lógica y física.
  • Sincronización de texto y acciones: el texto en pantalla y las superposiciones gráficas pueden vincularse directamente a acciones del vídeo con prompts sencillos.

Gráfico que muestra la puntuación Elo entre Gemini Omni Flash y otros modelos de generación de vídeo con IA de última generación.

Cómo generar y configurar una clave de la API de Gemini

Antes de usar la API de Gemini, necesitamos crear y configurar una clave de API para que nuestro código se comunique con ella.

La forma más sencilla de hacerlo es:

  • Visita la página de claves de API de Google AI Studio e inicia sesión.
  • Haz clic en el botón «Create API key» en la esquina superior derecha.
  • Copia la clave en un archivo llamado .env en la misma carpeta donde estará el código de Python, con el siguiente formato:
GEMINI_API_KEY=replace_with_api_key

Nota: usar la API tiene costes. Para utilizarla, asegúrate de tener un método de pago configurado en la página de facturación de Google AI Studio.

Cómo generar imágenes con Nano Banana 2 Lite en Python

Requisitos previos para generar imágenes con IA en Python

Antes de programar nuestro generador de imágenes con IA en Python, asegúrate de tener listo lo siguiente:

  • Python 3.9+ instalado en tu sistema.
  • Clave de la API de Google Gemini: una clave válida para autenticar las peticiones. Consulta los pasos anteriores para crearla y configurarla.
  • Librerías de Python necesarias: usaremos el SDK oficial google-genai para la integración con la API y Pillow para manejar la imagen de salida.

Puedes instalar los paquetes necesarios con pip:

pip install google-genai pillow python-dotenv

Paso 1: importar módulos y cargar variables de entorno

Crea un archivo nuevo (p. ej., generate_image.py) y añade los siguientes imports y la carga del entorno:

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()

Paso 2: inicializar el cliente de Google GenAI

Para interactuar con el modelo Nano Banana 2 Lite, primero debemos inicializar el cliente de Google GenAI. 

Como el SDK comprueba automáticamente la variable de entorno GEMINI_API_KEY (que cargamos del archivo .env en el paso anterior), podemos inicializar el cliente sin pasar la clave explícitamente en el código.

# Initialize the Gemini API client
client = Client()

Paso 3: escribir la función de generación de imágenes con IA

Ahora, la lógica central de nuestro script en Python. Escribiremos una función generate_image() que recibe el cliente inicializado y un prompt de texto.

Nano Banana 2 Lite se invoca especificando model="gemini-3.1-flash-lite-image". Configuramos la petición para solicitar modalidad de imagen y fijamos la relación de aspecto deseada.

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

Cómo entender la petición de generación de imágenes en Python:

  • response_modalities: fuerza a Google Gemini a devolver una imagen en lugar de texto.
  • inline_data: la API devuelve la imagen generada como bytes en bruto. Usamos io.BytesIO para envolverlos y que Pillow (Image.open) los lea como archivo estándar.
  • image_config: fijamos aspect_ratio a "1:1" (cuadrado), pero se puede ajustar según el caso de uso.

Relaciones de aspecto admitidas:

Tabla que muestra las relaciones de aspecto compatibles con Nano Banana 2 Lite

Paso 4: ejecutar el script de generación de imágenes en Python

Vamos a juntarlo todo y pedir a Nano Banana 2 Lite que genere una imagen. 

Le daremos un prompt creativo, mostraremos el resultado con show() y cerraremos el cliente para liberar recursos.

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()

Esta es la imagen generada por Nano Banana 2 Flash:

image14.png

Tal y como prometió Google en su anuncio, el modelo tardó solo unos segundos en generar la imagen. A simple vista, se siente mucho más rápido que cualquier otro modelo que he probado.

El script completo está en el generate_image.py del repositorio de este tutorial.

Ampliar el script para editar imágenes

Vamos a escribir una función edit_image() que edite una imagen. Lo único que debemos cambiar es pasar la imagen junto con el prompt en el parámetro contents como una lista [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

Pruebas con Nano Banana 2 Flash

Evaluamos el rendimiento del modelo en situaciones reales con una serie de pruebas de estrés dirigidas. 

Estas pruebas se centran en su capacidad para manejar tareas visuales complejas: renderizado legible de texto, mantenimiento de diseños espaciales estrictos y consistencia a lo largo de varias iteraciones, para ver si realmente cumple su promesa de alta fidelidad a gran velocidad.

Prueba de renderizado de texto legible dentro de la imagen

image9.png

Prueba de control espacial estricto y adherencia a dos sujetos

Prueba de prototipado rápido de UI y precisión de maquetación

image2.png

Prueba de contrastes de materiales complejos e iluminación

image7.png

Prueba de consistencia de personaje en varias iteraciones

image5 (1).png

Francamente, me han sorprendido los resultados para un modelo tan rápido. En el último ejemplo, incluso consiguió mantener en parte la consistencia del texto del periódico. 

En mi experiencia, la consistencia es una de las cualidades más importantes que debe clavar un modelo de generación de imágenes para ser realmente útil.

Cómo generar vídeos con Gemini Omni Flash en Python

En esta sección veremos cómo crear un script en Python para generar vídeos, empezando por un simple texto-a-vídeo y ampliándolo para incorporar imágenes de referencia.

A diferencia de la generación de imágenes, los vídeos con Gemini Omni Flash se generan mediante la Interactions API del SDK (client.interactions.create). Este endpoint está diseñado para manejar interacciones ricas, multimodales y de varias vueltas.

Como las importaciones, variables de entorno e inicialización del cliente son idénticas a la sección anterior, podemos centrarnos directamente en las funciones de generación de vídeo.

Paso 1: texto a vídeo (prompt simple a vídeo)

Para generar un vídeo solo a partir de texto, pasamos un único bloque de texto a la Interactions API. Podemos escribir una función sencilla en Python para esto:

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

Podemos invocar esta función y guardar los bytes del vídeo devuelto en un archivo así:

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.")

El prompt que usamos fue:

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

Esa ubicación concreta es el Coliseo romano. Usé coordenadas para poner a prueba el conocimiento del mundo del modelo. Este es el vídeo generado:

En cambio, esto es lo que generó el modelo cuando cambié el año 1000 por 1980:

Bastante interesante, en mi opinión. Consulta el archivo text_to_video.py para ver el script completo.

Paso 2: implementar capacidades de imagen a vídeo

Para animar una imagen estática o usarla como referencia para guiar la generación, debemos pasar tanto la imagen como un prompt de texto al modelo.

Como la Interactions API espera imágenes codificadas en base64, primero definimos una función auxiliar para convertir objetos PIL Image a cadenas 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()

Ahora podemos crear una función más general, generate_video(), que gestione tanto imágenes opcionales como el prompt de texto.

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

Por último, así es como usamos estas funciones para generar un vídeo que anime este escarabajo que generé con 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)

Este fue el vídeo generado:

El script completo está disponible aquí.

Paso 3: implementar edición con vídeo a vídeo

Editar un vídeo de forma conversacional con la API de Gemini Omni Flash es muy sencillo gracias a su sistema de interacciones. Al generar un vídeo, obtenemos un identificador de interacción accesible como interaction.id. 

Para editar un vídeo, proporcionamos un prompt y el identificador de la interacción previa. Si es la primera edición, usamos el identificador de la interacción que generó el vídeo; para las siguientes, el de la edición anterior.

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

Crear un estudio de vídeo con IA interactivo: arquitectura y sinergia multimodelo

En las secciones anteriores aprendimos a generar imágenes con Nano Banana 2 Lite y vídeos con Gemini Omni Flash. Ahora vamos a combinar ambas capacidades en una aplicación web interactiva: un estudio de vídeo con IA.

Arquitectura del AI Video Studio

Crear vídeos de calidad con IA suele implicar mucho ensayo y error. El AI Video Studio lo resuelve con una canalización en dos etapas y multimodelo que aprovecha los puntos fuertes de dos modelos distintos:

  • Obtención de recursos: con Nano Banana 2 Lite, los usuarios pueden generar rápidamente recursos e imágenes de referencia y combinarlas con imágenes propias.
  • Generación de vídeo: usamos Gemini Omni Flash para crear el vídeo a partir de esos recursos.
  • Edición de vídeo: tras generar el vídeo, podemos editarlo de forma conversacional.

image11.png

Etapa 1: prototipado rápido con Nano Banana 2 Lite

En la primera etapa, la aplicación nos permite obtener imágenes de referencia (keyframes). Podemos subir una imagen local o generarla al vuelo. 

Aquí es donde Nano Banana 2 Lite brilla. 

Con una latencia inferior a 4 segundos y costando solo una fracción de céntimo por imagen, funciona como un sandbox ultrarrápido. Podemos prototipar decenas de estilos, composiciones y sujetos hasta dar con el keyframe perfecto.

image6.png

Etapa 2: generación multimodal con Gemini Omni Flash

Una vez tenemos la imagen de referencia perfecta, pasamos a la producción de vídeo. 

La imagen de referencia y nuestro prompt de animación (por ejemplo, describiendo el movimiento de cámara, cambios de luz o acciones) se codifican en base64 y se envían a Gemini Omni Flash con la Interactions API del SDK. 

Gemini Omni Flash procesa estas entradas y devuelve un clip de alta fidelidad en formato panorámico (16:9) o vertical (9:16).

Este es el vídeo que obtuvimos:

Implementación de la app de generación de vídeo con Streamlit

Para construir la interfaz usamos Streamlit, un framework open source de Python que facilita mucho crear apps web compartibles para machine learning y data science. 

Si eres nuevo en Streamlit o quieres un repaso de cómo funciona, te recomendamos este tutorial de Streamlit en Python. 

No nos centraremos en el código de la UI, sino en la arquitectura de la canalización de generación de vídeo y en explorar las posibilidades creativas de combinar estos dos potentes modelos.

El script gemini_api.py contiene las funciones que implementamos arriba para generar imágenes y vídeos. La interfaz está hecha con Streamlit en el script app.py.

Si quieres ejecutarla en local y experimentar, haz lo siguiente:

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

Aquí tienes un flujo completo que combina una imagen existente de una marca de té imaginaria con una imagen generada de una plantación de té para crear un plano comercial de la lata. 

Luego editamos el vídeo usando un prompt.

El metraje se aceleró durante la generación porque estos procesos pueden tardar unos minutos.

Conclusión

Las afirmaciones de Google sobre la velocidad de su nuevo Nano Banana 2 Lite se cumplen. 

El modelo es increíblemente rápido y se acerca a algo capaz de generar imágenes en tiempo real. Aunque las imágenes que produce son buenas, no son revolucionarias. Su innovación principal es, sin duda, la velocidad, más que una calidad de imagen rompedora.

Combinados, los modelos Gemini Omni Flash y Nano Banana 2 Lite crean una canalización muy potente. Omni destaca especialmente al mantener la fidelidad con el material de referencia.

Para saber más sobre Nano Banana 2, echa un vistazo a este artículo: Nano Banana 2: guía completa con Python.

Para profundizar en la serie Gemini Omni, te recomiendo leer Gemini Omni: un modelo para texto, imagen, audio y vídeo.

FAQs

¿En qué se diferencian Nano Banana 2 Lite y Gemini Omni Flash?

Nano Banana 2 Lite está optimizado para generar imágenes de forma rápida y económica (ideal para prototipado ágil), mientras que Gemini Omni Flash está pensado para generación de vídeo multimodal y edición de vídeo conversacional.

¿Puedo editar un vídeo sin regenerarlo desde cero?

Sí. Gemini Omni Flash permite edición conversacional de vídeo. Proporcionando un prompt junto con el ID de la interacción anterior, puedes refinar secuencias existentes con lenguaje natural.

¿Es Nano Banana 2 Lite adecuado para aplicaciones en tiempo real?

Con una latencia ultrabaja de unos 4 segundos por imagen, está pensado para aplicaciones interactivas donde la velocidad y el presupuesto son clave.

¿Cuáles son los costes principales de estos modelos?

Ambos modelos priorizan la eficiencia de coste. Nano Banana 2 Lite cuesta 0,034 $ por imagen a resolución 1K, y Gemini Omni Flash tiene un precio de 0,10 $ por segundo de vídeo generado, lo que los hace viables para canalizaciones de alto volumen.

François Aubry

Autor

François Aubry

Ingeniero full-stack y fundador de CheapGPT. Enseñar siempre ha sido mi pasión. Desde mis primeros días como estudiante, busqué con entusiasmo oportunidades para dar clases particulares y ayudar a otros estudiantes. Esta pasión me llevó a realizar un doctorado, en el que también trabajé como ayudante de profesor para apoyar mis esfuerzos académicos. Durante esos años, encontré una inmensa satisfacción en el entorno tradicional del aula, fomentando las conexiones y facilitando el aprendizaje. Sin embargo, con la llegada de las plataformas de aprendizaje en línea, reconocí el potencial transformador de la educación digital. De hecho, participé activamente en el desarrollo de una plataforma de este tipo en nuestra universidad. Estoy profundamente comprometida con la integración de los principios de la enseñanza tradicional con metodologías digitales innovadoras. Mi pasión es crear cursos que no sólo sean atractivos e informativos, sino también accesibles para los alumnos en esta era digital.

Temas

Relacionado

Tutorial

Ajuste fino de GPT-3 mediante la API OpenAI y Python