Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)
Genera e modifica immagini 1K con Nano Banana 2 Lite, il modello di immagini a latenza più bassa di Google, tramite un unico endpoint asincrono con il corpo generateContent.
Nano Banana 2 Lite è il modello Gemini 3.1 Flash Lite Image di Google, il membro della famiglia a bassa latenza e basso costo. Genera a 1K. Invia il corpo di richiesta generateContent di Google con un campo model, conserva l'identificativo dell'attività restituito e interroga quell'attività per ottenere l'immagine finita. Le immagini di riferimento vanno in contents come URL fileData.
ID modello
| ID modello | Canale | Fatturazione |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Tariffe per token distinte per input, output di testo/ragionamento e output di immagine |
Nano Banana 2 Lite è offerto solo con fatturazione a token. Consulta la pagina del modello per i prezzi attuali.
Esempio rapido
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| Header | Valore |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Il corpo è la richiesta generateContent di Google con una sola aggiunta: model, perché questo endpoint non indica il modello nel percorso. La risposta contiene un identificativo di attività, non l'immagine finita. Tieni le chiavi API nel codice lato server. Chiamare direttamente /v1beta/models/...:generateContent non è supportato; usa questo endpoint.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
model | string | Sì | — | L'ID modello indicato sopra. |
contents | Content[] | Sì | — | Da 1 a 32 turni. Ognuno ha parts e un role facoltativo (user o model); l'ultimo turno è user. |
contents[].parts[].text | string | — | — | Una parte di testo. È obbligatoria almeno una parte di testo. |
contents[].parts[].fileData | object | No | — | {"mimeType": "...", "fileUri": "https://..."}; un riferimento a immagine, video o PDF. Fino a 14 in totale. |
systemInstruction | object | No | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | No | — | Coppie {"category", "threshold"}; vedi sotto. |
generationConfig.responseModalities | enum[] | No | testo e immagine | ["IMAGE"] per sole immagini, oppure ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | No | Proporzioni dell'immagine di input, altrimenti 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 richiesta restituisce un'immagine. |
generationConfig.temperature | number | No | Predefinito del modello | 0–2. |
generationConfig.topP | number | No | Predefinito del modello | 0–1. |
generationConfig.topK | integer | No | Predefinito del modello | 1 o più. |
generationConfig.seed | integer | No | — | Intero a 32 bit. |
generationConfig.maxOutputTokens | integer | No | Predefinito del modello | 1–4.096. |
generationConfig.stopSequences | string[] | No | — | Fino a 5. |
generationConfig.mediaResolution | enum | No | Predefinito del modello | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Determina quanti token usano i media in input. |
generationConfig.thinkingConfig.includeThoughts | boolean | No | false | Restituisce i riepiloghi del ragionamento del modello come output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | No | MINIMAL | MINIMAL o HIGH. |
Categorie di sicurezza: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Soglie: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
I campi sconosciuti vengono rifiutati. Non ancora disponibili: grounding con Google Search (tools) e contenuti in cache. inlineData non è accettato; passa i media come URL fileData.
Dimensioni di output
imageSize | Output 1:1 | Token immagine |
|---|---|---|
1K | 1024×1024 | 1.120 |
Le altre proporzioni mantengono lo stesso numero di token.
Modalità
Non esiste un parametro di modalità separato né un endpoint di modifica.
| Operazione | Parametri |
|---|---|
| Da testo a immagine | una parte di testo |
| Modifica o composizione | parte di testo + una o più parti fileData |
| Modifica multi-turno | turni user e model precedenti, poi un nuovo turno user (vedi la nota qui sotto) |
Per continuare una conversazione, ricostruisci il turno model a partire dalle output.parts dell'attività precedente, nello stesso ordine: una parte di testo diventa {"text": ..., "thoughtSignature": ...} e una parte immagine diventa {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Conserva ogni thoughtSignature esattamente come è stata restituita: è l'URL della firma che abbiamo salvato per te (la firma di un'immagine 4K occupa diversi megabyte), e la ripristiniamo prima che la richiesta raggiunga il modello. Sono accettate solo le firme provenienti dai risultati delle tue attività.
Modificare con un'immagine di riferimento
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"}}
]
}]
}'Sostituisci l'URL di esempio con una tua immagine accessibile.
Input multimediali
Questa API accetta solo riferimenti tramite URL. Non sono accettati inlineData in base64, URL data: e caricamenti multipart. Il Playground carica i file selezionati nello storage prima di inviarne gli URL.
I riferimenti devono essere URL HTTP(S) pubblici, di meno di 50 MB ciascuno e 100 MB in totale: immagini (image/png, image/jpeg, image/webp, image/heic, image/heif), video (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) o documenti PDF (application/pdf). mimeType deve corrispondere al file. Gli URL vengono scaricati durante l'elaborazione; un'immagine non raggiungibile fa fallire l'attività, e un'attività fallita non viene addebitata.
Fattori di costo
Consulta la sezione prezzi del modello per le tariffe correnti. gemini-3.1-flash-lite-image-official addebita in base al consumo: token di input (testo e immagini di riferimento), token di output di testo e ragionamento e token di output di immagine, ciascuno con la propria tariffa. L'output di immagine è il fattore principale; ogni immagine è a 1K.
Gli addebiti definitivi sono nello storico di utilizzo del tuo account. Le attività fallite non vengono addebitate.
Schema di output
L'invio restituisce un riferimento all'attività:
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "processing",
"created_at": 1790310979
}Interrogare l'attività
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Interroga ogni pochi secondi finché status non diventa completed o failed. Un timeout di rete durante il polling non significa che la generazione sia fallita: conserva l'identificativo dell'attività e riprendi il controllo. Non creare un'altra attività per verificare l'avanzamento.
Esempio di polling completo
Esegui questo dopo l'esempio di invio in Python qui sopra.
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}.")Attività completata
{
"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 | Significato |
|---|---|
id | Conserva questo identificativo per le interrogazioni successive. |
status | processing, completed o failed. |
created_at, finished_at | Timestamp Unix in secondi. |
output.data[].url | URL dell'immagine generata. |
output.text | Testo restituito dal modello insieme all'immagine, quando responseModalities include TEXT. Il ragionamento non è incluso. |
output.thoughts | I riepiloghi del ragionamento del modello, quando includeThoughts è true. Le immagini intermedie che il modello disegna mentre ragiona non vengono consegnate. |
output.output_format | Formato immagine effettivo. |
output.parts | Le parti finali della risposta, in ordine, per la modifica multi-turno: {"text", "thoughtSignature"} oppure {"image": <index into data>, "thoughtSignature"}. thoughtSignature è un URL; rimandalo senza modifiche. |
output.usage | Utilizzo di token. output_tokens conta l'output di testo, ragionamento e immagine; output_tokens_details.image_tokens è la parte relativa all'immagine. |
error | Errore strutturato per un'attività fallita. |
Lo streaming (streamGenerateContent) non è supportato; i risultati vengono consegnati tramite l'attività.
Errori
Le richieste rifiutate prima della creazione di un'attività restituiscono un errore HTTP con un oggetto error. Un'attività che fallisce dopo l'accettazione restituisce HTTP 200 all'interrogazione, con status: "failed" e un oggetto error. Un'immagine bloccata dai filtri di sicurezza del modello fallisce con content_policy_violation; una risposta senza immagine fallisce con no_output.
Vedi il catalogo errori comune per codici, stati HTTP e indicazioni sui tentativi.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Se è l'invio stesso ad andare in timeout, controlla lo storico delle attività prima di inviare di nuovo: la prima richiesta potrebbe essere già stata accettata.
Suggerimenti
- Descrivi soggetto, ambientazione, illuminazione e stile con frasi complete.
- Per una modifica, indica cosa deve cambiare e cosa deve restare invariato.
- Scegli Nano Banana 2 o Nano Banana Pro se ti serve un output 2K o 4K.
- Salva le immagini restituite nel tuo storage se ti serve una copia duratura.
