Nano Banana 2 is the name Google uses for Gemini 3.1 Flash Image, out since February 2026. Its strength is speed with choice: one request can return four takes on the same idea, so you pick a direction in seconds instead of rerunning the prompt over and over. A 1K picture usually arrives within 10 to 30 seconds.
What you can make
- Four concept options for a campaign visual in a single run.
- Long website banners and vertical strips at 4:1, 8:1, 1:4 or 1:8.
- One visual in several sizes: a 0.5K layout check, then the same prompt at 4K.
- A character series that keeps the same face thanks to reference photos.
Settings that matter
- Images per request: set
num_imagesup to 4 to compare interpretations side by side. - Resolution: 0.5K, 1K, 2K or 4K. The 0.5K tier is meant for layout drafts.
- Aspect ratio: 14 shapes, including the very long 8:1 and 1:8.
- References: up to 14 in total; Google suggests up to 10 object images and up to 4 character images.
- Grounding: Google offers web and image search grounding for this model, but Kadraris does not pass it through yet.
Starter prompt
Wide 8:1 web banner, left to right: small green leaf logo, bold headline "Fresh every morning", basket of bread on a wooden counter, soft daylightOn long formats, describe the layout along the long side in order, and change the headline in quotes to your own copy.
Questions
How is Nano Banana 2 priced?
from $0.07 per image, charged from your prepaid balance, with the rate depending on resolution. When a generation fails, you are not charged.
Can I get the image back in the same API call?
Yes for short jobs. Call /v1/generate?wait=60 and the finished picture comes in the response; the generate docs show the details.
When is Nano Banana Pro the better choice?
For heavy multi-reference composites and polished key art, try Nano Banana Pro. The comparison shows where each one wins.
Nano Banana 2 in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"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-2",
"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-2",
"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));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 32000 chars | |
aspect_ratio | string | 1:1 2:3 3:2 3:4 4:3 4:5 5:4 9:16 16:9 21:9 1:4 4:1 1:8 8:1 | 1:1 |
resolution | string | 0.5k 1k 2k 4k | 1k |
num_images | integer | 1-4 | 1 |
image_urls | array | max 14 |
Fetch this list as JSON with GET /v1/models/nano-banana-2.


























