Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)
Gere e edite imagens 1K com o Nano Banana 2 Lite, o modelo de imagem de menor latência do Google, por um único endpoint assíncrono com o corpo generateContent.
O Nano Banana 2 Lite é o modelo Gemini 3.1 Flash Lite Image do Google, o membro da família de baixa latência e baixo custo. Ele gera em 1K. Envie o corpo de requisição generateContent do Google com um campo model, guarde o identificador de tarefa retornado e consulte essa tarefa para obter a imagem pronta. As imagens de referência vão em contents como URLs fileData.
IDs de modelo
| ID de modelo | Canal | Cobrança |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Tarifas por token para entrada, saída de texto/raciocínio e saída de imagem |
O Nano Banana 2 Lite é oferecido apenas com cobrança por tokens. Veja os preços atuais na página do modelo.
Exemplo 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| Cabeçalho | Valor |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
O corpo é a requisição generateContent do Google com um acréscimo: model, porque este endpoint não traz o modelo no caminho. A resposta contém um identificador de tarefa, não a imagem pronta. Mantenha as chaves de API em código do servidor. Chamar /v1beta/models/...:generateContent diretamente não é suportado; use este endpoint.
Parâmetros
| Nome | Tipo | Obrigatório | Padrão | Observações |
|---|---|---|---|---|
model | string | Sim | — | O ID de modelo acima. |
contents | Content[] | Sim | — | De 1 a 32 turnos. Cada um tem parts e um role opcional (user ou model); o último turno é user. |
contents[].parts[].text | string | — | — | Uma parte de texto. É obrigatória pelo menos uma parte de texto. |
contents[].parts[].fileData | object | Não | — | {"mimeType": "...", "fileUri": "https://..."}; uma referência de imagem, vídeo ou PDF. Até 14 no total. |
systemInstruction | object | Não | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Não | — | Pares {"category", "threshold"}; veja abaixo. |
generationConfig.responseModalities | enum[] | Não | texto e imagem | ["IMAGE"] para só imagens, ou ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Não | Proporção da imagem de entrada, senão 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 | Não | 1K | Apenas 1K. |
generationConfig.candidateCount | integer | Não | 1 | Só 1. Uma requisição retorna uma imagem. |
generationConfig.temperature | number | Não | Padrão do modelo | De 0 a 2. |
generationConfig.topP | number | Não | Padrão do modelo | De 0 a 1. |
generationConfig.topK | integer | Não | Padrão do modelo | 1 ou mais. |
generationConfig.seed | integer | Não | — | Inteiro de 32 bits. |
generationConfig.maxOutputTokens | integer | Não | Padrão do modelo | De 1 a 4.096. |
generationConfig.stopSequences | string[] | Não | — | Até 5. |
generationConfig.mediaResolution | enum | Não | Padrão do modelo | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Define quantos tokens a mídia de entrada usa. |
generationConfig.thinkingConfig.includeThoughts | boolean | Não | false | Retorna os resumos de raciocínio do modelo como output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | Não | MINIMAL | MINIMAL ou HIGH. |
Categorias de segurança: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Limiares: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
Campos desconhecidos são recusados. Ainda não disponíveis: grounding com a Pesquisa Google (tools) e conteúdo em cache. inlineData não é aceito; envie a mídia como URLs fileData.
Tamanho de saída
imageSize | Saída 1:1 | Tokens de imagem |
|---|---|---|
1K | 1024×1024 | 1.120 |
As outras proporções mantêm a mesma contagem de tokens.
Modos
Não há parâmetro de modo separado nem endpoint de edição.
| Operação | Parâmetros |
|---|---|
| Texto para imagem | uma parte de texto |
| Editar ou compor | parte de texto + uma ou mais partes fileData |
| Edição em vários turnos | turnos anteriores de user e model, depois um novo turno user (veja a nota abaixo) |
Para continuar uma conversa, reconstrua o turno model a partir das output.parts da tarefa anterior, na mesma ordem: uma parte de texto vira {"text": ..., "thoughtSignature": ...} e uma parte de imagem vira {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Mantenha cada thoughtSignature exatamente como foi retornada: ela é a URL da assinatura que armazenamos para você (a assinatura de uma imagem 4K tem vários megabytes), e nós a restauramos antes que a requisição chegue ao modelo. Só são aceitas assinaturas dos resultados das suas próprias tarefas.
Editar com uma imagem de referência
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"}}
]
}]
}'Substitua a URL de exemplo por uma imagem sua acessível.
Entradas de mídia
Esta API aceita apenas referências por URL. inlineData em base64, URLs data: e envios multipart não são aceitos. O Playground envia os arquivos selecionados para o armazenamento antes de submeter as URLs deles.
As referências precisam ser URLs HTTP(S) públicas, com menos de 50 MB cada e 100 MB no total: imagens (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) ou documentos PDF (application/pdf). mimeType precisa corresponder ao arquivo. As URLs são baixadas durante o processamento; uma imagem inacessível faz a tarefa falhar, e tarefas que falham não são cobradas.
Fatores de custo
Consulte a seção de preços do modelo para as tarifas atuais. O gemini-3.1-flash-lite-image-official cobra pelo uso: tokens de entrada (texto e imagens de referência), tokens de saída de texto e raciocínio e tokens de saída de imagem, cada um com sua própria tarifa. A saída de imagem é o fator principal; toda imagem é 1K.
Consulte as cobranças finais no histórico de uso da sua conta. Tarefas que falham não são cobradas.
Esquema de saída
O envio retorna uma referência de tarefa:
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "processing",
"created_at": 1790310979
}Consultar a tarefa
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Consulte a cada poucos segundos até que status seja completed ou failed. Um tempo limite de rede durante a consulta não significa que a geração falhou: guarde o identificador da tarefa e retome a verificação. Não crie outra tarefa para acompanhar o progresso.
Exemplo completo de consulta
Execute isto após o exemplo de envio em Python acima.
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}.")Tarefa concluída
{
"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 | Guarde este identificador para consultas posteriores. |
status | processing, completed ou failed. |
created_at, finished_at | Marcas de tempo Unix em segundos. |
output.data[].url | A URL da imagem gerada. |
output.text | Texto que o modelo retornou junto com a imagem, quando responseModalities inclui TEXT. Não inclui o raciocínio. |
output.thoughts | Os resumos de raciocínio do modelo, quando includeThoughts é true. Imagens intermediárias que o modelo desenha enquanto raciocina não são entregues. |
output.output_format | Formato real da imagem. |
output.parts | As partes finais da resposta, em ordem, para a edição em vários turnos: {"text", "thoughtSignature"} ou {"image": <index into data>, "thoughtSignature"}. thoughtSignature é uma URL; envie-a de volta sem alterações. |
output.usage | Uso de tokens. output_tokens conta a saída de texto, raciocínio e imagem; output_tokens_details.image_tokens é a parte da imagem. |
error | Erro estruturado em uma tarefa que falhou. |
Streaming (streamGenerateContent) não é suportado; os resultados são entregues pela tarefa.
Erros
Requisições recusadas antes de a tarefa ser criada retornam um erro HTTP com um objeto error. Uma tarefa que falha após ser aceita retorna HTTP 200 na consulta, com status: "failed" e um objeto error. Uma imagem retida pelos filtros de segurança do modelo falha com content_policy_violation; uma resposta sem imagem falha com no_output.
Veja o catálogo de erros compartilhado para códigos, status HTTP e orientações de nova tentativa.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Se o próprio envio atingir o tempo limite, verifique seu histórico de tarefas antes de enviar de novo: a primeira requisição pode ter sido aceita.
Dicas
- Descreva o tema, o cenário, a iluminação e o estilo em frases completas.
- Em uma edição, diga o que deve mudar e o que precisa ficar igual.
- Escolha o Nano Banana 2 ou o Nano Banana Pro quando precisar de saída 2K ou 4K.
- Salve as imagens retornadas no seu próprio armazenamento quando precisar de uma cópia duradoura.
