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

Nano Banana Pro (Gemini 3 Pro Image)

Generuj i edytuj obrazy w Nano Banana Pro przez jeden asynchroniczny punkt końcowy z treścią generateContent od Google: wbudowane myślenie, wyjście 4K, 14 referencji.

View Markdown

Nano Banana Pro to model Gemini 3 Pro Image od Google, stworzony do profesjonalnych materiałów i złożonych instrukcji. Zanim zacznie rysować, myśli, dlatego odpowiedzi raportują tokeny rozumowania. 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-pro-imageStandardStała cena za każdy dostarczony obraz
gemini-3-pro-image-officialOfficialStawki za tokeny wejściowe, wyjście tekstowe/myślenia i wyjście obrazowe

Oba ID przyjmują te same parametry. 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-pro-image",
    "contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
    }
  }'

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—Jedno z dwóch powyższych 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://..."}; obraz referencyjny. Łą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, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9.
generationConfig.imageConfig.imageSizeenumNie1K1K, 2K, 4K. Wielka litera K.
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 32 768.
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.responseFormat.imageobjectNie—mimeType: IMAGE_JPEG; delivery: INLINE; aspectRatio i imageSize jako wartości wyliczeniowe Google, np. ASPECT_RATIO_SIXTEEN_BY_NINE i IMAGE_SIZE_TWO_K, z tymi samymi proporcjami i rozmiarami co w imageConfig. Niedostępne dla gemini-3-pro-image-official.

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; thinkingLevel nie jest udokumentowany dla tego modelu. inlineData nie jest akceptowane; przekazuj multimedia jako adresy URL fileData. responseFormat.image.delivery przyjmuje tylko INLINE: gotowe obrazy są zawsze zwracane jako hostowane adresy URL.

Rozmiar wyjściowy

imageSizeWyjście 1:1Tokeny obrazu
1K1024×10241120
2K2048×20481120
4K4096×40962000

Pozostałe proporcje obrazu zachowują tę samą liczbę tokenów; na przykład 16:9 przy 1K daje 1376×768.

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-pro-image",
    "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.

Obrazy referencyjne muszą być publicznymi adresami URL HTTP(S) do plików PNG, JPEG, WebP, HEIC lub HEIF, każdy mniejszy niż 50 MB i łącznie do 100 MB. 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-pro-image nalicza jedną stałą cenę za każdy dostarczony obraz, niezależnie od rozmiaru i promptu. gemini-3-pro-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 rozmiar obrazu; zobacz tabelę powyżej.

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-pro-image",
  "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-pro-image",
  "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": 1366,
      "total_tokens": 1393,
      "output_tokens_details": {"image_tokens": 1120, "text_tokens": 95, "reasoning_tokens": 151}
    }
  }
}
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.
  • 2K kosztuje tyle samo tokenów obrazu co 1K; 4K używaj do materiałów w rozmiarze do druku.
  • Zapisz zwrócone obrazy we własnym magazynie, jeśli potrzebujesz trwałej kopii.

Powiązane