Claude Opus 5.5 jest już dostępny w SeedRouter
SeedRouter Docs

Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)

Generuj i edytuj obrazy 1K w Nano Banana 2 Lite, modelu obrazów Google o najniższym opóźnieniu, przez jeden asynchroniczny punkt końcowy z treścią żądania generateContent.

View Markdown

Nano Banana 2 Lite to model Gemini 3.1 Flash Lite Image od Google, członek rodziny o niskim opóźnieniu i niskim koszcie. Generuje w rozdzielczości 1K. Wyślij treść żądania generateContent Google z polem model, zachowaj zwrócony identyfikator zadania i sprawdzaj to zadanie, aby odebrać gotowy obraz. Obrazy referencyjne umieszczasz w contents jako adresy URL fileData.

ID modeli

ID modeluKanałRozliczanie
gemini-3.1-flash-lite-image-officialOfficialStawki za tokeny wejściowe, wyjście tekstowe/myślenia i wyjście obrazowe

Nano Banana 2 Lite jest dostępny wyłącznie z rozliczaniem za tokeny. Aktualne ceny znajdziesz na stronie modelu.

Krótki przykład

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"}
    }
  }'

Punkt końcowy

POST https://api.seedrouter.ai/v1/images/generations
NagłówekWartość
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Treść to żądanie generateContent Google z jednym dodatkiem: polem model, ponieważ ten punkt końcowy nie zawiera modelu w ścieżce. Odpowiedź zawiera identyfikator zadania, a nie gotowy obraz. Klucze API trzymaj w kodzie po stronie serwera. Bezpośrednie wywołanie /v1beta/models/...:generateContent nie jest obsługiwane; używaj tego punktu końcowego.

Parametry

NazwaTypWymaganyDomyślnieUwagi
modelstringTak—Powyższe ID modelu.
contentsContent[]Tak—Od 1 do 32 tur. Każda ma parts i opcjonalną role (user lub model); ostatnia tura to user.
contents[].parts[].textstring——Część tekstowa. Wymagana jest co najmniej jedna część tekstowa.
contents[].parts[].fileDataobjectNie—{"mimeType": "...", "fileUri": "https://..."}; referencja do obrazu, wideo lub pliku PDF. Łącznie do 14.
systemInstructionobjectNie—{"parts": [{"text": "..."}]}.
safetySettingsobject[]Nie—Pary {"category", "threshold"}; zobacz poniżej.
generationConfig.responseModalitiesenum[]Nietekst i obraz["IMAGE"] tylko dla obrazów albo ["TEXT", "IMAGE"].
generationConfig.imageConfig.aspectRatioenumNieProporcje obrazu wejściowego, w przeciwnym razie 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.imageSizeenumNie1KTylko 1K.
generationConfig.candidateCountintegerNie1Tylko 1. Jedno żądanie zwraca jeden obraz.
generationConfig.temperaturenumberNieDomyślna wartość modeluOd 0 do 2.
generationConfig.topPnumberNieDomyślna wartość modeluOd 0 do 1.
generationConfig.topKintegerNieDomyślna wartość modelu1 lub więcej.
generationConfig.seedintegerNie—Liczba całkowita 32-bitowa.
generationConfig.maxOutputTokensintegerNieDomyślna wartość modeluOd 1 do 4096.
generationConfig.stopSequencesstring[]Nie—Do 5.
generationConfig.mediaResolutionenumNieDomyślna wartość modeluMEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Określa, ile tokenów zużywają multimedia wejściowe.
generationConfig.thinkingConfig.includeThoughtsbooleanNiefalseZwraca podsumowania myśli modelu jako output.thoughts.
generationConfig.thinkingConfig.thinkingLevelenumNieMINIMALMINIMAL lub HIGH.

Kategorie bezpieczeństwa: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Progi: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.

Nieznane pola są odrzucane. Jeszcze niedostępne: grounding z wyszukiwarką Google (tools) i zawartość z pamięci podręcznej. inlineData nie jest akceptowane; przekazuj multimedia jako adresy URL fileData.

Rozmiar wyjściowy

imageSizeWyjście 1:1Tokeny obrazu
1K1024×10241120

Pozostałe proporcje obrazu zachowują tę samą liczbę tokenów.

Tryby

Nie ma osobnego parametru trybu ani punktu końcowego do edycji.

OperacjaParametry
Tekst na obrazczęść tekstowa
Edycja lub kompozycjaczęść tekstowa + co najmniej jedna część fileData
Edycja wieloturowawcześniejsze tury user i model, a następnie nowa tura user (zobacz uwagę poniżej)

Aby kontynuować rozmowę, odtwórz turę model z output.parts poprzedniego zadania, zachowując kolejność: część tekstowa staje się {"text": ..., "thoughtSignature": ...}, a część z obrazem staje się {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Zachowaj każdy thoughtSignature dokładnie w takiej postaci, w jakiej został zwrócony: to adres URL podpisu, który przechowujemy dla ciebie (podpis obrazu 4K zajmuje kilka megabajtów), a przed dotarciem żądania do modelu przywracamy go. Akceptowane są tylko podpisy z wyników twoich własnych zadań.

Edycja z obrazem referencyjnym

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"}}
      ]
    }]
  }'

Zastąp przykładowy adres URL własnym, dostępnym obrazem.

Dane wejściowe multimediów

To API przyjmuje wyłącznie referencje w postaci adresów URL. Base64 inlineData, adresy data: i przesyłanie multipart nie są akceptowane. Playground przesyła wybrane pliki do magazynu, zanim wyśle ich adresy URL.

Referencje muszą być publicznymi adresami URL HTTP(S), każdy mniejszy niż 50 MB i łącznie do 100 MB: obrazy (image/png, image/jpeg, image/webp, image/heic, image/heif), wideo (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) lub dokumenty PDF (application/pdf). mimeType musi odpowiadać plikowi. Adresy URL są pobierane podczas przetwarzania; niedostępny obraz powoduje niepowodzenie zadania, a nieudane zadanie nie jest rozliczane.

Czynniki wpływające na koszt

Aktualne stawki sprawdzisz w sekcji cen modelu. gemini-3.1-flash-lite-image-official rozlicza według zużycia: tokeny wejściowe (tekst i obrazy referencyjne), tokeny wyjścia tekstowego i myślenia oraz tokeny wyjścia obrazowego, każde według własnej stawki. Głównym czynnikiem jest wyjście obrazowe; każdy obraz ma rozdzielczość 1K.

Ostateczne opłaty zobaczysz w historii zużycia na swoim koncie. Nieudane zadania nie są rozliczane.

Schemat odpowiedzi

Wysłanie zwraca referencję do zadania:

{
  "id": "task_...",
  "model": "gemini-3.1-flash-lite-image-official",
  "status": "processing",
  "created_at": 1790310979
}

Odpytywanie zadania

curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Odpytuj co kilka sekund, aż status będzie completed lub failed. Przekroczenie limitu czasu sieci podczas odpytywania nie oznacza, że generowanie się nie powiodło: zachowaj identyfikator zadania i wznów sprawdzanie. Nie twórz kolejnego zadania, aby sprawdzić postęp.

Pełny przykład odpytywania

Uruchom to po powyższym przykładzie wysłania w Pythonie.

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}.")

Zakończone zadanie

{
  "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}
    }
  }
}
PoleZnaczenie
idZachowaj ten identyfikator na potrzeby kolejnych zapytań.
statusprocessing, completed lub failed.
created_at, finished_atZnaczniki czasu Unix w sekundach.
output.data[].urlAdres URL wygenerowanego obrazu.
output.textTekst zwrócony przez model razem z obrazem, gdy responseModalities zawiera TEXT. Myśli nie są uwzględniane.
output.thoughtsPodsumowania myśli modelu, gdy includeThoughts ma wartość true. Obrazy pośrednie, które model rysuje podczas myślenia, nie są dostarczane.
output.output_formatRzeczywisty format obrazu.
output.partsKońcowe części odpowiedzi w kolejności, do edycji wieloturowej: {"text", "thoughtSignature"} lub {"image": <index into data>, "thoughtSignature"}. thoughtSignature to adres URL; odeślij go bez zmian.
output.usageZużycie tokenów. output_tokens obejmuje wyjście tekstowe, myślenie i wyjście obrazowe; output_tokens_details.image_tokens to część obrazowa.
errorUstrukturyzowany błąd nieudanego zadania.

Streaming (streamGenerateContent) nie jest obsługiwany; wyniki są dostarczane przez zadanie.

Błędy

Żądania odrzucone przed utworzeniem zadania zwracają błąd HTTP wraz z obiektem error. Zadanie, które zawiodło po przyjęciu, przy odpytaniu zwraca HTTP 200 z status: "failed" i obiektem error. Obraz zablokowany przez filtry bezpieczeństwa modelu kończy się błędem content_policy_violation; odpowiedź bez obrazu kończy się błędem no_output.

Kody, statusy HTTP i wskazówki dotyczące ponawiania znajdziesz we wspólnym katalogu błędów.

{
  "id": "task_...",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

Jeśli limit czasu został przekroczony przy samym wysyłaniu, przed ponownym wysłaniem sprawdź historię zadań: pierwsze żądanie mogło już zostać przyjęte.

Wskazówki

  • Opisz obiekt, otoczenie, oświetlenie i styl pełnymi zdaniami.
  • Przy edycji wskaż, co ma się zmienić, a co musi pozostać bez zmian.
  • Wybierz Nano Banana 2 lub Nano Banana Pro, gdy potrzebujesz wyjścia 2K lub 4K.
  • Zapisz zwrócone obrazy we własnym magazynie, jeśli potrzebujesz trwałej kopii.

Powiązane