Claude Opus 5.5 ist auf SeedRouter verfügbar
LogoSeedRouter

Modelle nach Namen suchen, z. B. „nano banana“

Modelle nach Namen suchen, z. B. „nano banana“

Image

Nano Banana 2.1 (Gemini Nano Banana 2.1)

View Markdown

Bilder mit Nano Banana 2.1 erzeugen und bearbeiten – asynchroner Endpunkt mit Googles generateContent-Body: 1K bis 4K, Thinking-Stufen, 14 Referenzbilder.

Nano Banana 2.1 ist Googles Bildmodell gemini-nano-banana-2.1, das Update von Nano Banana 2. 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-IDAbrechnung
gemini-nano-banana-2.1Ein fester Preis pro geliefertem Bild, bei jeder Größe

Den aktuellen Preis 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-nano-banana-2.1",
    "contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
    }
  }'

Endpunkt

POST https://api.seedrouter.ai/v1/images/generations
HeaderWert
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/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

NameTypPflichtStandardwertHinweise
modelstringJa—gemini-nano-banana-2.1.
contentsContent[]Ja—1–32 Turns. Jeder hat parts und optional eine role (user oder model); der letzte Turn ist user.
contents[].parts[].textstring——Ein Text-Part. Mindestens ein Text-Part ist erforderlich.
contents[].parts[].fileDataobjectNein—{"mimeType": "...", "fileUri": "https://..."}; eine Bild-, Video- oder PDF-Referenz. Insgesamt bis zu 14.
systemInstructionobjectNein—{"parts": [{"text": "..."}]}.
safetySettingsobject[]Nein—Paare aus {"category", "threshold"}; siehe unten.
toolsobject[]Nein—[{"googleSearch": {}}] für die Websuche oder {"googleSearch": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}} mit einem oder beiden Typen. Stützt das Bild auf aktuelle Suchergebnisse; der Preis pro Bild bleibt gleich.
generationConfig.responseModalitiesenum[]NeinText und Bild["IMAGE"] nur für Bilder oder ["TEXT", "IMAGE"].
generationConfig.imageConfig.aspectRatioenumNeinSeitenverhältnis des Eingabebilds, sonst 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.imageSizeenumNein1K1K, 2K, 4K. Großes K. 512 ist für dieses Modell nicht verfügbar.
generationConfig.candidateCountintegerNein1Nur 1. Eine Anfrage liefert ein Bild.
generationConfig.temperaturenumberNeinModellstandard0–2.
generationConfig.topPnumberNeinModellstandard0–1.
generationConfig.topKintegerNeinModellstandard1 oder mehr.
generationConfig.seedintegerNein—32-Bit-Ganzzahl.
generationConfig.maxOutputTokensintegerNeinModellstandard1–32.768.
generationConfig.stopSequencesstring[]Nein—Bis zu 5.
generationConfig.mediaResolutionenumNeinModellstandardMEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Legt fest, wie viele Token Eingabemedien verbrauchen.
generationConfig.thinkingConfig.thinkingLevelenumNeinMEDIUMMINIMAL, MEDIUM, HIGH. Wie viel das Modell vor dem Zeichnen nachdenkt; höhere Stufen dauern länger.
generationConfig.thinkingConfig.includeThoughtsbooleanNeinfalseGibt die Gedankenzusammenfassungen des Modells als output.thoughts zurück.

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: Cached Content und responseFormat; Seitenverhältnis und Größe legst du mit imageConfig fest. inlineData wird nicht akzeptiert; übergib Medien als fileData-URLs.

Ausgabegröße

imageSizeAusgabe bei 1:1Bild-Token
1K1024×10241.120
2K2048×20481.680
4K4096×40962.520

Andere Seitenverhältnisse behalten dieselbe Tokenzahl; 16:9 bei 1K ergibt zum Beispiel 1376×768 und 21:9 bei 4K 6336×2688.

Modi

Es gibt keinen separaten Modus-Parameter und keinen eigenen Bearbeitungs-Endpunkt.

VorgangParameter
Text zu Bildein Text-Part
Bearbeiten oder kombinierenText-Part + ein oder mehrere fileData-Parts
Bearbeitung über mehrere Turnsfrü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-nano-banana-2.1",
    "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

Den aktuellen Preis findest du im Preisabschnitt des Modells. gemini-nano-banana-2.1 berechnet einen festen Preis pro geliefertem Bild, unabhängig von Größe, Thinking-Stufe oder Prompt.

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-nano-banana-2.1",
  "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-nano-banana-2.1",
  "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": 22,
      "output_tokens": 2297,
      "total_tokens": 2319
    }
  }
}
FeldBedeutung
idBehalte diese ID für spätere Abfragen.
statusprocessing, completed oder failed.
created_at, finished_atUnix-Zeitstempel in Sekunden.
output.data[].urlDie URL des erzeugten Bildes.
output.textText, den das Modell zusätzlich zum Bild zurückgibt, wenn responseModalities den Wert TEXT enthält. Gedanken sind nicht enthalten.
output.thoughtsDie Gedankenzusammenfassungen des Modells, wenn includeThoughts auf true steht. Zwischenbilder, die das Modell beim Nachdenken zeichnet, werden nicht geliefert.
output.grounding_metadataMit Google Search: webSearchQueries, imageSearchQueries, searchEntryPoint.renderedContent (das Search-Suggestions-HTML, das du anzeigen musst) und groundingChunks (Quellen), so wie Google sie liefert.
output.output_formatTatsächliches Bildformat.
output.partsDie 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.usageToken-Verbrauch. output_tokens zählt Text-, Thinking- und Bildausgabe.
errorStrukturierter 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.
  • Der Preis ist bei jeder Größe gleich, also fordere die Größe an, die du brauchst: 1K für Entwürfe, 2K oder 4K für finale Assets.
  • Setze den genauen Text, der im Bild erscheinen soll, in Anführungszeichen und halte ihn kurz.
  • Nutze die Thinking-Stufe MINIMAL für schnellere Entwürfe und HIGH für dichte Layouts wie Infografiken.
  • Speichere zurückgegebene Bilder in deinem eigenen Speicher, wenn du eine dauerhafte Kopie brauchst.

Weiterführend