Cómo construir con Gemini 2.5 Flash Image (nano banana)
Si has oído hablar de la nueva Gemini 2.5 Flash Image (a menudo mencionada bajo el peculiar nombre en clave “nano banana”), probablemente te estés preguntando cómo construir realmente con ella, y rápido. Esta guía te explica la configuración, los prompts y los patrones de producción para que puedas lanzar funciones de imagen+texto de forma rápida y fiable.
Qué obtendrás: un flujo de trabajo práctico e integral para usar el modelo Gemini 2.5 Flash Image, que incluye recetas de prompts, consejos de evaluación y endurecimiento de la producción.
¿Qué es Gemini 2.5 Flash Image?
Gemini 2.5 Flash Image es un modelo multimodal ligero y rápido, optimizado para tareas de comprensión y generación de imágenes con baja latencia. En la práctica, es ideal para:
- Comprensión de imágenes: clasificar, subtitular, OCR ligero, extracción de diseño
- Preguntas y respuestas visuales: responder preguntas basadas en una imagen
- Generación o edición de imágenes ligeras: variaciones simples, anotaciones, superposiciones
- Experiencias amigables para el Edge: vistas previas rápidas, inferencia de bajo costo, UX interactiva
El término “Flash” generalmente implica velocidad y costo optimizados. El apodo “nano banana” normalmente se refiere a una etiqueta interna o una variante de punto de control utilizada en ejemplos o notas de la versión.
Prerrequisitos
- Una cuenta de Google AI Studio o Vertex AI con acceso a Gemini 2.5 Flash Image
- Clave API o credenciales de cuenta de servicio
- Runtime: Node.js, Python o plataforma sin servidor (Cloud Functions/Run)
- Para producción: registro, limitación de velocidad, control de versiones de prompts y arnés de evaluación
Inicio rápido: Comprensión de imágenes
A continuación, se muestra un ejemplo mínimo de Python para preguntas y respuestas de imágenes y subtitulado. Reemplaza los marcadores de posición con tus credenciales.
import base64
import requests
API_KEY = "{YOUR_API_KEY}"
MODEL = "gemini-2.5-flash-image" # o el nombre exacto del modelo del proveedor
ENDPOINT = "(MODEL)
# Cargar una imagen en base64
with open("./sample.jpg", "rb") as f:
image_b64 = base64.b64encode(f.read).decode("utf-8")
payload = {
"contents": [{
"role": "user",
"parts": [
{"text": "Describe esta imagen en una oración, luego enumera tres detalles clave."},
{
"inline_data": {
"mime_type": "image/jpeg",
"data": image_b64
}
}
]
}],
"generationConfig": {
"temperature": 0.4,
"maxOutputTokens": 300
}
}
resp = requests.post(f"{ENDPOINT}?key={API_KEY}", json=payload)
resp.raise_for_status
print(resp.json["candidates"][0]["content"]["parts"][0]["text"])
Receta de prompt para respuestas robustas
- Intención del sistema: “Eres un analista visual preciso. Si no estás seguro, di que no estás seguro.”
- Prompt del usuario: “Responde concisamente. Cita las señales visibles. Si hay texto en la imagen, transcribe exactamente.”
- Pide estructura: “Devuelve JSON con
caption, objects[], text_blocks[].”
{
"caption": "<resumen de una oración>",
"objects": [
{"label": "banana", "count": 2},
{"label": "bowl", "count": 1}
],
"text_blocks": [
{"text": "NANO BANANA", "bbox": [x,y,w,h]}
]
}
Inicio rápido: Generación/Edición ligera
Para superposiciones o variaciones simples, muchos proveedores exponen un endpoint de imagen a imagen. Pseudocódigo:
payload = {
"contents": [{
"role": "user",
"parts": [
{"text": "Añade una etiqueta sutil 'Sample' en la esquina superior derecha."},
{"inline_data": {"mime_type": "image/png", "data": image_b64}}
]
}],
"generationConfig": {"temperature": 0.3, "maxOutputTokens": 0},
"tools": [{"imageEdit": {"strength": 0.25}}]
}
- Mantén la
strength baja para ediciones mínimas.
- Siempre especifica la ubicación y el estilo: “arriba a la derecha, 12px, blanco semitransparente.”
- Por cumplimiento, nunca pidas recrear imágenes con marcas de agua o protegidas por derechos de autor.
Construyendo un Pipeline Fiable
1) Define tareas y criterios de aceptación
- Subtitulado de imágenes: WER en texto visible < 10%, subtítulo <= 20 palabras
- Preguntas y respuestas visuales: coincidencia exacta en hechos clave; permite el fallback "no estoy seguro"
- Extracción de diseño: precisión/recuperación en entidades como precio, fecha, SKU
2) Estructura los prompts
- Instrucción primero, luego la imagen
- Formato de salida: esquema JSON con tipos de campo
- Medidas de seguridad: “Si el texto no está visible, devuelve
null”
3) Procesa por lotes y almacena en caché
- Procesa las solicitudes de imágenes por lotes cuando sea posible
- Almacena en caché los resultados estables (por ejemplo, fotos de productos que no cambian)
- Usa ETags o hashes de contenido para eliminar duplicados
4) Evalúa sistemáticamente
- Crea un pequeño conjunto de oro: 100–500 imágenes con etiquetas de verdad fundamental
- Realiza un seguimiento de las métricas: precisión, tasa de alucinación, latencia de respuesta
- Crea un conjunto de regresión por versión de prompt
5) Controles de producción
- Establece
maxOutputTokens estrictamente para salidas deterministas
- Usa una
temperature más baja (0.1–0.4) para tareas factuales
- Limita la velocidad por usuario y organización; agrega retroceso exponencial
- Registra las entradas/salidas (hashea la imagen, no la raw por privacidad)
Casos de uso y patrones comunes
Búsqueda visual de productos
- Ingiere imágenes de catálogo, extrae
objects, dominant_color, style
- En el momento de la consulta, compara las incrustaciones o los atributos
- Patrón de prompt: “Devuelve los 5 atributos principales que ayudarían a un comprador a decidir.”
OCR Lite de documentos
- Pide al modelo que transcriba bloques de texto cortos y claros
- Agrega restricciones: “Devuelve mayúsculas y puntuación exactas; si es ilegible, establece
confidence: low.”
Copiloto UX para capturas de pantalla
- Entrada: captura de pantalla de la aplicación
- Salida: pasos como viñetas: “¿Cómo centro el texto?” → el modelo devuelve la ruta del menú
Consejos de costo y latencia
- Prefiere “Flash” para vistas previas y UX iterativa; escala a variantes Gemini más grandes para las comprobaciones finales
- Reduce la escala a un borde máximo (por ejemplo, 1024px) para reducir el ancho de banda sin perder detalles clave
- Reutiliza las incrustaciones o los resúmenes intermedios al encadenar tareas
Seguridad, privacidad y protección
- Redacta la información de identificación personal (PII) antes de registrarla; usa el hash de contenido para los ID de imagen
- Aplica listas de permitidos de tamaño/tipo: jpeg, png; rechaza svg/exe
- Agrega medidas de seguridad de prompt: “Rechaza si se te pide que identifiques a personas privadas”
Ejemplo: Microservicio de subtitulado de extremo a extremo
from fastapi import FastAPI, UploadFile, File
import base64, requests, os
app = FastAPI
API_KEY = os.getenv("API_KEY")
MODEL = "gemini-2.5-flash-image"
ENDPOINT = f"("/caption")
async def caption(file: UploadFile = File:
b = await file.read
b64 = base64.b64encode(b).decode("utf-8")
payload = {
"contents": [{
"role": "user",
"parts": [
{"text": "Devuelve JSON conciso con los campos: caption, objects[]."},
{"inline_data": {"mime_type": file.content_type, "data": b64}}
]
}],
"generationConfig": {"temperature": 0.2, "maxOutputTokens": 200}
}
r = requests.post(f"{ENDPOINT}?key={API_KEY}", json=payload, timeout=30)
r.raise_for_status
return r.json
Solución de problemas
- Salidas borrosas o texto omitido: Reduce menos la escala; solicita una entrada de mayor resolución; pide OCR explícitamente
- JSON inconsistente: Agrega un post-procesador
strict_json, o pide bloques JSON delimitados ```json
- Detalles alucinados: Baja la temperature; instruye “Si no estás seguro, responde
unsure”
- Tiempos de espera agotados: Transmite las respuestas si están disponibles; reduce el tamaño de la imagen; establece prompts más cortos
Por cierto: Acelera la creación de prototipos con Sider.AI
Si estás creando muchas variantes de prompts o necesitas pruebas A/B rápidas para Gemini 2.5 Flash Image, Sider.AI puede ayudarte a iterar más rápido. Puedes organizar las versiones de los prompts, ejecutar evaluaciones en paralelo en tu conjunto de imágenes y capturar métricas de latencia y precisión sin cablear un backend completo, lo cual es útil cuando estás ajustando los prompts para el subtitulado, el OCR o las preguntas y respuestas visuales.
Conclusiones clave
- Gemini 2.5 Flash Image es ideal para tareas multimodales rápidas y de bajo costo
- Usa prompts precisos, esquemas JSON y bajas temperatures para la fiabilidad
- Crea un conjunto de evaluación repetible y controla los cambios con pruebas de regresión
- Optimiza la latencia con la reducción de escala, el almacenamiento en caché y el procesamiento por lotes
- Considera Sider.AI para la iteración y experimentación rápida de prompts
Preguntas frecuentes
P1: ¿Qué es Gemini 2.5 Flash Image (nano banana)?
Es un modelo multimodal rápido y ligero optimizado para la comprensión de imágenes y las ediciones de imágenes simples. El apodo “nano banana” a menudo se refiere a una etiqueta interna o una variante de ejemplo.
P2: ¿Cómo uso Gemini 2.5 Flash Image para el subtitulado de imágenes?
Envía una instrucción de texto más la imagen como base64 al endpoint generateContent del modelo. Pide JSON estructurado (caption, objects, text_blocks) y mantén la temperature baja para la consistencia.
P3: ¿Puede Gemini 2.5 Flash Image manejar OCR o texto en imágenes?
Sí, para texto corto y claro. Especifica los requisitos exactos de transcripción e incluye un campo de confianza. Para OCR de alta resistencia, considera una herramienta OCR dedicada junto con el modelo.
P4: ¿Cómo minimizo la latencia y el costo con Gemini 2.5 Flash Image?
Reduce la escala de las imágenes a un borde máximo razonable, procesa las solicitudes por lotes y almacena en caché los resultados estables. Usa temperatures más bajas y limita maxOutputTokens para controlar el tamaño de la salida.
P5: ¿Cómo puede ayudar Sider.AI al construir con Gemini 2.5 Flash Image?
Sider.AI agiliza el control de versiones y la evaluación de prompts para que puedas realizar pruebas A/B de prompts en tu conjunto de datos de imágenes, realizar un seguimiento de las métricas y promover configuraciones fiables a producción más rápido.