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.
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 modelo | Canal | Facturación |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Tarifas 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| Cabecera | Valor |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/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
| Nombre | Tipo | Obligatorio | Predeterminado | Notas |
|---|---|---|---|---|
model | string | Sí | — | El ID de modelo anterior. |
contents | Content[] | Sí | — | De 1 a 32 turnos. Cada uno tiene parts y un role opcional (user o model); el último turno es user. |
contents[].parts[].text | string | — | — | Una parte de texto. Se requiere al menos una parte de texto. |
contents[].parts[].fileData | object | No | — | {"mimeType": "...", "fileUri": "https://..."}; una referencia de imagen, vídeo o PDF. Hasta 14 en total. |
systemInstruction | object | No | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | No | — | Pares {"category", "threshold"}; consulta más abajo. |
generationConfig.responseModalities | enum[] | No | texto e imagen | ["IMAGE"] solo para imágenes, o ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | No | Relación de la imagen de entrada; si no, 1:1 | 1: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.imageSize | enum | No | 1K | Solo 1K. |
generationConfig.candidateCount | integer | No | 1 | Solo 1. Una solicitud devuelve una imagen. |
generationConfig.temperature | number | No | Valor predeterminado del modelo | 0–2. |
generationConfig.topP | number | No | Valor predeterminado del modelo | 0–1. |
generationConfig.topK | integer | No | Valor predeterminado del modelo | 1 o más. |
generationConfig.seed | integer | No | — | Entero de 32 bits. |
generationConfig.maxOutputTokens | integer | No | Valor predeterminado del modelo | 1–4.096. |
generationConfig.stopSequences | string[] | No | — | Hasta 5. |
generationConfig.mediaResolution | enum | No | Valor predeterminado del modelo | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Define cuántos tokens usan los medios de entrada. |
generationConfig.thinkingConfig.includeThoughts | boolean | No | false | Devuelve los resúmenes de razonamiento del modelo como output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | No | MINIMAL | MINIMAL 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
imageSize | Salida 1:1 | Tokens de imagen |
|---|---|---|
1K | 1024×1024 | 1.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ón | Parámetros |
|---|---|
| Texto a imagen | una parte de texto |
| Editar o componer | parte de texto + una o más partes fileData |
| Edición en varios turnos | turnos 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}
}
}
}| Campo | Significado |
|---|---|
id | Conserva este identificador para consultas posteriores. |
status | processing, completed o failed. |
created_at, finished_at | Marcas de tiempo Unix en segundos. |
output.data[].url | URL de la imagen generada. |
output.text | Texto que el modelo devolvió junto con la imagen, cuando responseModalities incluye TEXT. No incluye los razonamientos. |
output.thoughts | Los 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_format | Formato de imagen real. |
output.parts | Las 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.usage | Uso de tokens. output_tokens cuenta la salida de texto, razonamiento e imagen; output_tokens_details.image_tokens es la parte de imagen. |
error | Error 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.
