Nano Banana to pierwotny Gemini 2.5 Flash Image, od którego Google zaczął całą serię. Dziś producent traktuje go jako model starszej generacji, ale nadal dobrze robi proste podmiany na zdjęciach: inne tło, inny kolor, inna pora dnia. Sens ma przede wszystkim wtedy, gdy kontynuujesz projekt zaczęty właśnie na nim i chcesz zachować ten sam wygląd.
Co z nim zrobisz
- Kolejne grafiki do serii, która od początku powstawała w tym modelu.
- Zmianę tła na zdjęciu portretowym bez ruszania osoby.
- Inny kolor kurtki czy kubka na zdjęciu produktu.
- Porównanie, jak ten sam prompt zachowuje się w starszej i nowszej wersji rodziny.
Ustawienia w praktyce
- Rozdzielczość jest jedna: 1K. Ustawienie 2K lub 4K kończy się błędem.
- Proporcje: 10 formatów od 21:9 do 9:16. Domyślnie wysyłane jest 1:1, więc przy edycji wybierz format zgodny ze zdjęciem.
- Referencje: do 14 zdjęć w
image_urls. - W jednym poleceniu edycji proś o jedną zmianę, a resztę nazwij wprost jako nietykalną ("keep the face and pose unchanged").
- Każde zapytanie zwraca jeden obraz.
Prompt na start
Change the background to a snowy mountain village at dusk with warm lights in the windows, keep the person, clothing and pose exactly the same, match the lighting on the face to the new sceneWymień opis tła na swój, a zdanie o tym, co ma zostać bez zmian, zostaw w każdej edycji.
Pytania
Ile kosztuje obraz z Nano Banana?
0,211 zł za obraz, z VAT. Za nieudaną generację płacisz 0 zł.
Czy przy nowym projekcie wybrać ten model?
Raczej nie. Do nowych prac lepiej zacząć od Nano Banana 2 albo szybszego Nano Banana 2 Lite, które przyjmują referencje w podobny sposób. Gdy potrzebujesz 4K, sięgnij po Nano Banana Pro.
Czy mogę porównać wersje bez pisania kodu?
Tak, w Kadraris Studio przełączasz model w oknie wyboru i puszczasz ten sam prompt. Cenę każdej próby widzisz na przycisku przed wysłaniem.
Nano Banana w twoim kodzie
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "1k"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "nano-banana",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "1k"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "nano-banana",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "1k"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Pola wejściowe
| Parametr | Typ | Dozwolone | Domyślnie |
|---|---|---|---|
prompt * | string | ≤ 32000 znaków | |
aspect_ratio | string | 1:1 2:3 3:2 3:4 4:3 4:5 5:4 9:16 16:9 21:9 | 1:1 |
resolution | string | 1k | 1k |
image_urls | array | maks. 14 |
Tę listę w JSON-ie dostaniesz z GET /v1/models/nano-banana.


























