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.
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 modelu | Kanał | Rozliczanie |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Stawki 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łówek | Wartość |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/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
| Nazwa | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
model | string | Tak | — | Powyższe ID modelu. |
contents | Content[] | Tak | — | Od 1 do 32 tur. Każda ma parts i opcjonalną role (user lub model); ostatnia tura to user. |
contents[].parts[].text | string | — | — | Część tekstowa. Wymagana jest co najmniej jedna część tekstowa. |
contents[].parts[].fileData | object | Nie | — | {"mimeType": "...", "fileUri": "https://..."}; referencja do obrazu, wideo lub pliku PDF. Łącznie do 14. |
systemInstruction | object | Nie | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Nie | — | Pary {"category", "threshold"}; zobacz poniżej. |
generationConfig.responseModalities | enum[] | Nie | tekst i obraz | ["IMAGE"] tylko dla obrazów albo ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Nie | Proporcje obrazu wejściowego, w przeciwnym razie 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 | Nie | 1K | Tylko 1K. |
generationConfig.candidateCount | integer | Nie | 1 | Tylko 1. Jedno żądanie zwraca jeden obraz. |
generationConfig.temperature | number | Nie | Domyślna wartość modelu | Od 0 do 2. |
generationConfig.topP | number | Nie | Domyślna wartość modelu | Od 0 do 1. |
generationConfig.topK | integer | Nie | Domyślna wartość modelu | 1 lub więcej. |
generationConfig.seed | integer | Nie | — | Liczba całkowita 32-bitowa. |
generationConfig.maxOutputTokens | integer | Nie | Domyślna wartość modelu | Od 1 do 4096. |
generationConfig.stopSequences | string[] | Nie | — | Do 5. |
generationConfig.mediaResolution | enum | Nie | Domyślna wartość modelu | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Określa, ile tokenów zużywają multimedia wejściowe. |
generationConfig.thinkingConfig.includeThoughts | boolean | Nie | false | Zwraca podsumowania myśli modelu jako output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | Nie | MINIMAL | MINIMAL 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
imageSize | Wyjście 1:1 | Tokeny obrazu |
|---|---|---|
1K | 1024×1024 | 1120 |
Pozostałe proporcje obrazu zachowują tę samą liczbę tokenów.
Tryby
Nie ma osobnego parametru trybu ani punktu końcowego do edycji.
| Operacja | Parametry |
|---|---|
| Tekst na obraz | część tekstowa |
| Edycja lub kompozycja | część tekstowa + co najmniej jedna część fileData |
| Edycja wieloturowa | wcześ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}
}
}
}| Pole | Znaczenie |
|---|---|
id | Zachowaj ten identyfikator na potrzeby kolejnych zapytań. |
status | processing, completed lub failed. |
created_at, finished_at | Znaczniki czasu Unix w sekundach. |
output.data[].url | Adres URL wygenerowanego obrazu. |
output.text | Tekst zwrócony przez model razem z obrazem, gdy responseModalities zawiera TEXT. Myśli nie są uwzględniane. |
output.thoughts | Podsumowania myśli modelu, gdy includeThoughts ma wartość true. Obrazy pośrednie, które model rysuje podczas myślenia, nie są dostarczane. |
output.output_format | Rzeczywisty format obrazu. |
output.parts | Koń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.usage | Zużycie tokenów. output_tokens obejmuje wyjście tekstowe, myślenie i wyjście obrazowe; output_tokens_details.image_tokens to część obrazowa. |
error | Ustrukturyzowany 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.
