Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)
1K-Bilder mit Nano Banana 2 Lite erzeugen und bearbeiten, Googles Bildmodell mit der geringsten Latenz – über einen asynchronen Endpunkt mit dem generateContent-Body.
Nano Banana 2 Lite ist Googles Modell Gemini 3.1 Flash Lite Image, das Mitglied der Familie mit niedriger Latenz und niedrigen Kosten. Es rendert in 1K. Sende Googles generateContent-Request-Body mit einem zusätzlichen model-Feld, behalte die zurückgegebene Aufgaben-ID und frag diese Aufgabe nach dem fertigen Bild ab. Referenzbilder gehören als fileData-URLs in contents.
Modell-IDs
| Modell-ID | Kanal | Abrechnung |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Token-Preise für Eingabe, Text-/Thinking-Ausgabe und Bildausgabe |
Nano Banana 2 Lite gibt es nur mit Token-Abrechnung. Aktuelle Preise findest du auf der Modellseite.
Kurzbeispiel
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"}
}
}'Endpunkt
POST https://api.seedrouter.ai/v1/images/generations| Header | Wert |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Der Body ist Googles generateContent-Request mit einer Ergänzung: model, weil dieser Endpunkt kein Modell im Pfad trägt. Die Antwort enthält eine Aufgaben-ID, nicht das fertige Bild. Bewahre API-Keys im serverseitigen Code auf. Ein direkter Aufruf von /v1beta/models/...:generateContent wird nicht unterstützt; nutze diesen Endpunkt.
Parameter
| Name | Typ | Pflicht | Standardwert | Hinweise |
|---|---|---|---|---|
model | string | Ja | — | Die Modell-ID oben. |
contents | Content[] | Ja | — | 1–32 Turns. Jeder hat parts und optional eine role (user oder model); der letzte Turn ist user. |
contents[].parts[].text | string | — | — | Ein Text-Part. Mindestens ein Text-Part ist erforderlich. |
contents[].parts[].fileData | object | Nein | — | {"mimeType": "...", "fileUri": "https://..."}; eine Bild-, Video- oder PDF-Referenz. Insgesamt bis zu 14. |
systemInstruction | object | Nein | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Nein | — | Paare aus {"category", "threshold"}; siehe unten. |
generationConfig.responseModalities | enum[] | Nein | Text und Bild | ["IMAGE"] nur für Bilder oder ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Nein | Seitenverhältnis des Eingabebilds, sonst 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 | Nein | 1K | Nur 1K. |
generationConfig.candidateCount | integer | Nein | 1 | Nur 1. Eine Anfrage liefert ein Bild. |
generationConfig.temperature | number | Nein | Modellstandard | 0–2. |
generationConfig.topP | number | Nein | Modellstandard | 0–1. |
generationConfig.topK | integer | Nein | Modellstandard | 1 oder mehr. |
generationConfig.seed | integer | Nein | — | 32-Bit-Ganzzahl. |
generationConfig.maxOutputTokens | integer | Nein | Modellstandard | 1–4.096. |
generationConfig.stopSequences | string[] | Nein | — | Bis zu 5. |
generationConfig.mediaResolution | enum | Nein | Modellstandard | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Legt fest, wie viele Token Eingabemedien verbrauchen. |
generationConfig.thinkingConfig.includeThoughts | boolean | Nein | false | Gibt die Gedankenzusammenfassungen des Modells als output.thoughts zurück. |
generationConfig.thinkingConfig.thinkingLevel | enum | Nein | MINIMAL | MINIMAL oder HIGH. |
Sicherheitskategorien: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Schwellenwerte: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
Unbekannte Felder werden abgelehnt. Noch nicht verfügbar: Google Search Grounding (tools) und Cached Content. inlineData wird nicht akzeptiert; übergib Medien als fileData-URLs.
Ausgabegröße
imageSize | Ausgabe bei 1:1 | Bild-Token |
|---|---|---|
1K | 1024×1024 | 1.120 |
Andere Seitenverhältnisse behalten dieselbe Tokenzahl.
Modi
Es gibt keinen separaten Modus-Parameter und keinen eigenen Bearbeitungs-Endpunkt.
| Vorgang | Parameter |
|---|---|
| Text zu Bild | ein Text-Part |
| Bearbeiten oder kombinieren | Text-Part + ein oder mehrere fileData-Parts |
| Bearbeitung über mehrere Turns | frühere user- und model-Turns, dann ein neuer user-Turn (siehe Hinweis unten) |
Um eine Unterhaltung fortzusetzen, baue den model-Turn aus den output.parts der vorherigen Aufgabe in derselben Reihenfolge nach: Ein Text-Part wird zu {"text": ..., "thoughtSignature": ...}, ein Bild-Part zu {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Übernimm jede thoughtSignature genau so, wie sie zurückgegeben wurde: Sie ist die URL der Signatur, die wir für dich gespeichert haben (die Signatur eines 4K-Bildes ist mehrere Megabyte groß), und wir stellen sie wieder her, bevor die Anfrage das Modell erreicht. Akzeptiert werden nur Signaturen aus deinen eigenen Aufgabenergebnissen.
Mit einem Referenzbild bearbeiten
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"}}
]
}]
}'Ersetze die Beispiel-URL durch ein eigenes, erreichbares Bild.
Medieneingaben
Diese API akzeptiert nur URL-Referenzen. Base64-inlineData, data:-URLs und Multipart-Uploads werden nicht akzeptiert. Der Playground lädt ausgewählte Dateien in einen Speicher hoch, bevor er ihre URLs übermittelt.
Referenzen müssen öffentliche HTTP(S)-URLs sein, jede kleiner als 50 MB und insgesamt höchstens 100 MB: Bilder (image/png, image/jpeg, image/webp, image/heic, image/heif), Videos (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) oder PDF-Dokumente (application/pdf). mimeType muss zur Datei passen. URLs werden während der Verarbeitung abgerufen; ein nicht erreichbares Bild lässt die Aufgabe fehlschlagen, und eine fehlgeschlagene Aufgabe wird nicht berechnet.
Kostenfaktoren
Aktuelle Preise findest du im Preisabschnitt des Modells. gemini-3.1-flash-lite-image-official rechnet nach Verbrauch ab: Eingabe-Token (Text und Referenzbilder), Text- und Thinking-Ausgabe-Token sowie Bildausgabe-Token, jeweils zu einem eigenen Preis. Die Bildausgabe ist der wichtigste Faktor; jedes Bild hat 1K.
Die endgültigen Beträge siehst du im Nutzungsverlauf deines Kontos. Fehlgeschlagene Aufgaben werden nicht berechnet.
Ausgabeschema
Die Übermittlung liefert eine Aufgabenreferenz:
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "processing",
"created_at": 1790310979
}Aufgabe abfragen
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Frag alle paar Sekunden ab, bis status den Wert completed oder failed hat. Ein Netzwerk-Timeout beim Abfragen bedeutet nicht, dass die Generierung fehlgeschlagen ist: Behalte die Aufgaben-ID und setze die Abfrage fort. Erstelle keine weitere Aufgabe, um den Fortschritt zu prüfen.
Vollständiges Abfragebeispiel
Führe dies nach dem Python-Übermittlungsbeispiel oben aus.
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}.")Abgeschlossene Aufgabe
{
"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}
}
}
}| Feld | Bedeutung |
|---|---|
id | Behalte diese ID für spätere Abfragen. |
status | processing, completed oder failed. |
created_at, finished_at | Unix-Zeitstempel in Sekunden. |
output.data[].url | Die URL des erzeugten Bildes. |
output.text | Text, den das Modell zusätzlich zum Bild zurückgibt, wenn responseModalities den Wert TEXT enthält. Gedanken sind nicht enthalten. |
output.thoughts | Die Gedankenzusammenfassungen des Modells, wenn includeThoughts auf true steht. Zwischenbilder, die das Modell beim Nachdenken zeichnet, werden nicht geliefert. |
output.output_format | Tatsächliches Bildformat. |
output.parts | Die finalen Antwort-Parts in Reihenfolge, für die Bearbeitung über mehrere Turns: {"text", "thoughtSignature"} oder {"image": <index into data>, "thoughtSignature"}. thoughtSignature ist eine URL; sende sie unverändert zurück. |
output.usage | Token-Verbrauch. output_tokens zählt Text-, Thinking- und Bildausgabe; output_tokens_details.image_tokens ist der Bildanteil. |
error | Strukturierter Fehler bei einer fehlgeschlagenen Aufgabe. |
Streaming (streamGenerateContent) wird nicht unterstützt; Ergebnisse werden über die Aufgabe geliefert.
Fehler
Anfragen, die abgelehnt werden, bevor eine Aufgabe entsteht, liefern einen HTTP-Fehler mit einem error-Objekt. Eine Aufgabe, die nach der Annahme fehlschlägt, liefert bei der Abfrage HTTP 200 mit status: "failed" und einem error-Objekt. Ein Bild, das die Sicherheitsfilter des Modells zurückhalten, schlägt mit content_policy_violation fehl; eine Antwort ohne Bild schlägt mit no_output fehl.
Codes, HTTP-Status und Hinweise zu Wiederholungen findest du im gemeinsamen Fehlerkatalog.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Läuft schon die Übermittlung in einen Timeout, prüfe deinen Aufgabenverlauf, bevor du erneut sendest: Die erste Anfrage wurde möglicherweise bereits angenommen.
Tipps
- Beschreibe Motiv, Umgebung, Licht und Stil in ganzen Sätzen.
- Sag bei einer Bearbeitung, was sich ändern soll und was gleich bleiben muss.
- Wähle Nano Banana 2 oder Nano Banana Pro, wenn du 2K- oder 4K-Ausgabe brauchst.
- Speichere zurückgegebene Bilder in deinem eigenen Speicher, wenn du eine dauerhafte Kopie brauchst.
