Claude Opus 5.5 ya está disponible en SeedRouter
SeedRouter Docs

Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)

Genera y edita imágenes 1K con Nano Banana 2 Lite, el modelo de imagen de menor latencia de Google, a través de un único endpoint asíncrono con el cuerpo generateContent.

View Markdown

Nano Banana 2 Lite es el modelo Gemini 3.1 Flash Lite Image de Google, el miembro de la familia de baja latencia y bajo coste. Renderiza en 1K. Envía el cuerpo de solicitud generateContent de Google con un campo model, conserva el identificador de tarea devuelto y consulta esa tarea para obtener la imagen terminada. Las imágenes de referencia van en contents como URL fileData.

ID de modelo

ID de modeloCanalFacturación
gemini-3.1-flash-lite-image-officialOfficialTarifas por token para la entrada, la salida de texto/razonamiento y la salida de imagen

Nano Banana 2 Lite se ofrece solo con facturación por tokens. Consulta la página del modelo para ver los precios actuales.

Ejemplo rápido

curl https://api.seedrouter.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-lite-image-official",
    "contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
    }
  }'

Endpoint

POST https://api.seedrouter.ai/v1/images/generations
CabeceraValor
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

El cuerpo es la solicitud generateContent de Google con un único añadido: model, porque este endpoint no lleva el modelo en su ruta. La respuesta contiene un identificador de tarea, no la imagen terminada. Guarda las claves de API en código del lado del servidor. No se admite llamar directamente a /v1beta/models/...:generateContent; usa este endpoint.

Parámetros

NombreTipoObligatorioPredeterminadoNotas
modelstringSí—El ID de modelo anterior.
contentsContent[]Sí—De 1 a 32 turnos. Cada uno tiene parts y un role opcional (user o model); el último turno es user.
contents[].parts[].textstring——Una parte de texto. Se requiere al menos una parte de texto.
contents[].parts[].fileDataobjectNo—{"mimeType": "...", "fileUri": "https://..."}; una referencia de imagen, vídeo o PDF. Hasta 14 en total.
systemInstructionobjectNo—{"parts": [{"text": "..."}]}.
safetySettingsobject[]No—Pares {"category", "threshold"}; consulta más abajo.
generationConfig.responseModalitiesenum[]Notexto e imagen["IMAGE"] solo para imágenes, o ["TEXT", "IMAGE"].
generationConfig.imageConfig.aspectRatioenumNoRelación de la imagen de entrada; si no, 1:11:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9.
generationConfig.imageConfig.imageSizeenumNo1KSolo 1K.
generationConfig.candidateCountintegerNo1Solo 1. Una solicitud devuelve una imagen.
generationConfig.temperaturenumberNoValor predeterminado del modelo0–2.
generationConfig.topPnumberNoValor predeterminado del modelo0–1.
generationConfig.topKintegerNoValor predeterminado del modelo1 o más.
generationConfig.seedintegerNo—Entero de 32 bits.
generationConfig.maxOutputTokensintegerNoValor predeterminado del modelo1–4.096.
generationConfig.stopSequencesstring[]No—Hasta 5.
generationConfig.mediaResolutionenumNoValor predeterminado del modeloMEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Define cuántos tokens usan los medios de entrada.
generationConfig.thinkingConfig.includeThoughtsbooleanNofalseDevuelve los resúmenes de razonamiento del modelo como output.thoughts.
generationConfig.thinkingConfig.thinkingLevelenumNoMINIMALMINIMAL o HIGH.

Categorías de seguridad: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Umbrales: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.

Los campos desconocidos se rechazan. Aún no disponible: grounding con la Búsqueda de Google (tools) y contenido en caché. No se acepta inlineData; pasa los medios como URL fileData.

Tamaño de salida

imageSizeSalida 1:1Tokens de imagen
1K1024×10241.120

Las demás relaciones de aspecto mantienen el mismo número de tokens.

Modos

No hay un parámetro de modo ni un endpoint de edición aparte.

OperaciónParámetros
Texto a imagenuna parte de texto
Editar o componerparte de texto + una o más partes fileData
Edición en varios turnosturnos anteriores user y model, y después un nuevo turno user (consulta la nota de abajo)

Para continuar una conversación, reconstruye el turno model a partir de las output.parts de la tarea anterior, en orden: una parte de texto se convierte en {"text": ..., "thoughtSignature": ...} y una parte de imagen en {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Conserva cada thoughtSignature exactamente como se devolvió: es la URL de la firma que guardamos por ti (la firma de una imagen 4K ocupa varios megabytes), y la restauramos antes de que la solicitud llegue al modelo. Solo se aceptan firmas de los resultados de tus propias tareas.

Editar con una imagen de referencia

curl https://api.seedrouter.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-lite-image-official",
    "contents": [{
      "role": "user",
      "parts": [
        {"text": "Turn this photo into a watercolor painting. Keep the composition."},
        {"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
      ]
    }]
  }'

Sustituye la URL de ejemplo por una imagen propia accesible.

Entradas multimedia

Esta API solo acepta referencias por URL. No se aceptan inlineData en base64, URL data: ni subidas multipart. El Playground sube los archivos seleccionados al almacenamiento antes de enviar sus URL.

Las referencias deben ser URL HTTP(S) públicas de menos de 50 MB cada una y 100 MB en total: imágenes (image/png, image/jpeg, image/webp, image/heic, image/heif), vídeos (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) o documentos PDF (application/pdf). mimeType debe coincidir con el archivo. Las URL se descargan durante el procesamiento; una imagen inaccesible hace que la tarea falle, y una tarea fallida no se cobra.

Factores de coste

Consulta la sección de precios del modelo para ver las tarifas actuales. gemini-3.1-flash-lite-image-official cobra según el consumo: tokens de entrada (texto e imágenes de referencia), tokens de salida de texto y razonamiento, y tokens de salida de imagen, cada uno con su propia tarifa. La salida de imagen es el factor principal; cada imagen es de 1K.

Consulta los cargos definitivos en el historial de uso de tu cuenta. Las tareas fallidas no se cobran.

Esquema de salida

El envío devuelve una referencia de tarea:

{
  "id": "task_...",
  "model": "gemini-3.1-flash-lite-image-official",
  "status": "processing",
  "created_at": 1790310979
}

Sondear la tarea

curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Sondea cada pocos segundos hasta que status sea completed o failed. Que se agote el tiempo de red durante el sondeo no significa que la generación haya fallado: conserva el identificador de tarea y reanuda la comprobación. No crees otra tarea para consultar el progreso.

Ejemplo completo de sondeo

Ejecuta esto después del ejemplo de envío en Python anterior.

import time

deadline = time.monotonic() + 600
while time.monotonic() < deadline:
    result = requests.get(
        f"https://api.seedrouter.ai/v1/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
        timeout=30,
    )
    result.raise_for_status()
    task = result.json()
    if task["status"] == "completed":
        for image in task["output"]["data"]:
            print(image["url"])
        break
    if task["status"] == "failed":
        raise RuntimeError(task["error"]["message"])
    time.sleep(3)
else:
    raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")

Tarea completada

{
  "id": "task_...",
  "model": "gemini-3.1-flash-lite-image-official",
  "status": "completed",
  "created_at": 1790310979,
  "finished_at": 1790311001,
  "output": {
    "created": 1790310999,
    "data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
    "output_format": "jpeg",
    "usage": {
      "input_tokens": 27,
      "output_tokens": 1518,
      "total_tokens": 1545,
      "output_tokens_details": {"image_tokens": 1120, "text_tokens": 398, "reasoning_tokens": 0}
    }
  }
}
CampoSignificado
idConserva este identificador para consultas posteriores.
statusprocessing, completed o failed.
created_at, finished_atMarcas de tiempo Unix en segundos.
output.data[].urlURL de la imagen generada.
output.textTexto que el modelo devolvió junto con la imagen, cuando responseModalities incluye TEXT. No incluye los razonamientos.
output.thoughtsLos resúmenes de razonamiento del modelo, cuando includeThoughts es true. Las imágenes intermedias que el modelo dibuja mientras razona no se entregan.
output.output_formatFormato de imagen real.
output.partsLas partes finales de la respuesta, en orden, para la edición en varios turnos: {"text", "thoughtSignature"} o {"image": <index into data>, "thoughtSignature"}. thoughtSignature es una URL; devuélvela sin cambios.
output.usageUso de tokens. output_tokens cuenta la salida de texto, razonamiento e imagen; output_tokens_details.image_tokens es la parte de imagen.
errorError estructurado en una tarea fallida.

No se admite streaming (streamGenerateContent); los resultados se entregan a través de la tarea.

Errores

Las solicitudes rechazadas antes de crear una tarea devuelven un error HTTP con un objeto error. Una tarea que falla tras ser aceptada devuelve HTTP 200 al consultarla, con status: "failed" y un objeto error. Una imagen retenida por los filtros de seguridad del modelo falla con content_policy_violation; una respuesta sin imagen falla con no_output.

Consulta el catálogo de errores común para ver códigos, estados HTTP y pautas de reintento.

{
  "id": "task_...",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

Si el propio envío agota el tiempo de espera, revisa tu historial de tareas antes de volver a enviarlo: puede que la primera solicitud ya se haya aceptado.

Consejos

  • Describe el sujeto, el escenario, la iluminación y el estilo con frases completas.
  • En una edición, indica qué debe cambiar y qué debe permanecer igual.
  • Elige Nano Banana 2 o Nano Banana Pro si necesitas una salida 2K o 4K.
  • Guarda las imágenes devueltas en tu propio almacenamiento si necesitas una copia duradera.

Relacionado