Nano Banana Pro vs GPT Image 2.5: a test on identical prompts
A poster, an infographic, and a product card on Nano Banana Pro and GPT Image 2.5: one prompt, one attempt each; prices, average waits where measured, and code.
Rendergrid editorsAbout the editors
In brief
In this test, both models set every requested word correctly on three identical prompts: a poster, an infographic, and a product card. Neither added other lettering. They differ in the scene around the words, and the test names no overall winner.
A Nano Banana Pro image costs $0.04 at 1K, and a GPT Image 2.5 image costs $0.025. Of the two, only Nano Banana Pro offers 2K and 4K. Three prompts with one attempt each are samples, not a rate, so run your own prompt on both models. Prices checked on .
How did we run the test?
One prompt for both models. A drink poster, a three-step infographic, and a headphones product card, each with lettering. Both models got the same prompt, word for word.
Same settings. Both ran at 1K through the Rendergrid API, at 2:3, 3:2, and 1:1.
One attempt per model. We show that one result, with no picking of the best of several, and we score nothing.
Do both models set the poster’s lettering correctly?
Yes. The prompt asks for “Summer afternoon” above the bottle, “Lemonade” beneath it, and nothing else in writing. Both models wrote both phrases exactly.
One prompt for both models
Design a portrait drink poster around a clear lemonade bottle on a pale wooden table. Include two lemon slices and a mint sprig. Warm light enters from the side; keep the cream background quiet and leave generous margins. Set “Summer afternoon” above the bottle and “Lemonade” beneath it in plain, readable type. Show the entire bottle. Include only the specified lettering, with no logos, people, or watermarks.
Nano Banana Pro
nano-banana-pro · 1K · 2:3 · $0.04
Nano Banana Pro, 1K, 2:3, one attempt. Warm light comes from the left, and the bottle’s shadow falls to the right. The bottle has no cap and holds an amber-colored drink with a lemon slice and a mint sprig inside; it stands at the horizontal center and is shown whole. The lettering is exactly as asked: “Summer afternoon”, broken over two lines, and “Lemonade”. Departures from the prompt: lemon pieces and mint lie on the table beyond the two slices and one sprig the prompt names, and some of them are cut off by the left and right edges of the frame, so the margins are less generous than asked. A dark, hard-edged shadow band down the left of the wall also makes the background less quiet than asked.
GPT Image 2.5
gpt-image-2.5 · 1K · 2:3 · $0.025
GPT Image 2.5, 1K, 2:3, one attempt. The capped bottle holds pale yellow lemonade with two lemon slices and a mint sprig inside, with drops of condensation on the glass; it stands at the horizontal center and is shown whole. Two cut lemons and one more mint sprig lie on the table, and every prop stays inside the frame. The lettering is exactly as asked: “Summer afternoon” on one line and “Lemonade”. Departures from the prompt: more lemon and mint than the two slices and one sprig the prompt names, a gold cap the prompt does not mention, and soft, leaf-shaped shadows on the wall that make the background less quiet than asked.
The scenes differ. Nano Banana Pro drew an open bottle of amber-colored drink, hard-edged shadows, and a dark band down the left of the wall, and some lemon and mint are cut off by the frame’s edges. GPT Image 2.5 drew a capped bottle of pale yellow lemonade and soft, leaf-shaped shadows on the wall, with every prop inside the frame. Both put more lemon and mint on the table than the prompt names.
How to write lettering in a prompt
In this test, both models followed the three habits of the prompt:
- Put the exact words in quotation marks: “Summer afternoon” and “Lemonade”.
- Give each phrase a place: “above the bottle” and “beneath it”.
- Bar everything else: “Include only the specified lettering”. None of the six images has stray text.
More lettering prompts are in Text in AI images: how to get readable lettering.
How do the models draw a three-step infographic?
Both labeled the pots “Pot”, “Soil”, and “Seedling” exactly and set three evenly spaced pots with arrows from left to right. Nano Banana Pro drew a flat, outlined illustration with thin arrows; the base of its first pot is ragged, a flaw the other two pots don’t share. GPT Image 2.5 drew softly shaded pots with smooth bases, and its arrows are short and heavy, where the prompt asked for thin ones. In both, the side margins are narrower than the top and bottom ones, where the prompt asked for wide outer margins.
One prompt for both models
Make a landscape infographic showing a seedling being potted. Three evenly spaced drawings on cream show an empty clay pot, a pot filled with soil, then the pot with a small green seedling. Thin arrows connect them from left to right. Label the drawings “Pot”, “Soil”, and “Seedling” in large, simple lettering. Keep wide outer margins. Include only the specified lettering, with no logos, people, or watermarks.
Nano Banana Pro
nano-banana-pro · 1K · 3:2 · $0.04
Nano Banana Pro, 1K, 3:2, one attempt. A flat, outlined drawing: three evenly spaced clay pots, thin arrows between them, and a bold label centered under each pot. The soil in the second pot is dotted with small clods, and the third pot holds a seedling with several green leaves. The lettering is exactly as asked: “Pot”, “Soil”, and “Seedling”. Defect: the base of the first pot is ragged, with small notches along its bottom edge, while the other two pots have smooth bases. Departure from the prompt: it asked for wide outer margins, but the side margins are narrower than the top and bottom ones.
GPT Image 2.5
gpt-image-2.5 · 1K · 3:2 · $0.025
GPT Image 2.5, 1K, 3:2, one attempt. A softly shaded drawing: three evenly spaced clay pots with faint shadows under them, short brown arrows between them, and a label centered under each pot in a rounded typeface. The soil in the second and third pots is dark with pale specks, and the third pot holds a seedling with bright green leaves. The lettering is exactly as asked: “Pot”, “Soil”, and “Seedling”. All three pots have smooth bases. Departures from the prompt: it asked for thin arrows, but its arrows are short and heavy, heavier than the other image’s; and it asked for wide outer margins, but the side margins are narrower than the top and bottom ones.
The prompt asks for “large, simple lettering”, and both models set the labels large. Name the size of the lettering in the prompt.
How do the models draw a product card?
Both labeled “Headband”, “Ear cushions”, and “Ear cups”, kept every label off the headphones, and showed the whole product at a three-quarter angle on light gray. Nano Banana Pro’s headphones hover above a separate oval shadow, where the prompt asked for a soft contact shadow, and its leader lines are thin horizontal rules. GPT Image 2.5’s leader lines are angled and end in small dots on their parts, and its headphones fill more of the frame, so the margins are tighter: the “Ear cushions” label starts about 5% from the left edge, where the prompt asked for generous clear margins.
One prompt for both models
Create a square product card for ivory over-ear headphones, fully visible at a three-quarter angle on light gray. Use three fine leader lines to identify visible parts: “Headband”, “Ear cushions”, “Ear cups”. Place the labels around the product without overlapping it. Add a soft contact shadow and generous clear margins; keep the typography understated. Include only the specified lettering, with no logos, people, or watermarks.
Nano Banana Pro
nano-banana-pro · 1K · 1:1 · $0.04
Nano Banana Pro, 1K, 1:1, one attempt. The whole product is in view at a three-quarter angle, centered with wide margins. The three labels are small, understated gray type: “Headband” at the upper right, “Ear cushions” at the left, and “Ear cups” at the lower right. Each has a thin horizontal leader line toward its part, and no label overlaps the headphones. The lettering is exactly as asked. Departure from the prompt: it asked for a soft contact shadow, but the headphones hover above a separate oval shadow with a visible gap between them.
GPT Image 2.5
gpt-image-2.5 · 1K · 1:1 · $0.025
GPT Image 2.5, 1K, 1:1, one attempt. The whole product is in view at a three-quarter angle, with a faint soft shadow beneath the ear cups. The three labels are in understated dark gray type: “Headband” at the upper right, “Ear cushions” at the left, and “Ear cups” at the lower right. Each has an angled leader line that ends in a small dot on its part, and no label overlaps the headphones. The lettering is exactly as asked. Departure from the prompt: it asked for generous clear margins, but the headphones fill more of the frame than in the other image, and the “Ear cushions” label starts about 5% from the left edge. Every part and label stays inside the frame.
More prompts for product cards are in product card prompts for Nano Banana Pro.
How much does an image cost on each model?
A Nano Banana Pro image costs $0.04 at 1K, $0.04 at 2K, and $0.07 at 4K. A GPT Image 2.5 image costs $0.025 at 1K, its only resolution. The amount is charged when a request is accepted, and a failed request is refunded automatically.
If resolution is left out, an image is rendered and billed at the model’s default: 2K for Nano Banana Pro, 1K for GPT Image 2.5. Send "resolution": "1K" to repeat this test.
Official prices from the makers
Google publishes a price per image for Nano Banana Pro, so it can sit next to Rendergrid’s. OpenAI’s figure for GPT Image 2.5 comes from its image-generation cost calculator, at high quality and a square size. Rendergrid has no quality field, and “high” only describes that line.
| Resolution | Official Google price | Rendergrid | Savings | For $10 |
|---|---|---|---|---|
| 1K | $0.134 | $0.04 | 70% | 250 images |
| 2K | $0.134 | $0.04 | 70% | 250 images |
| 4K | $0.24 | $0.07 | 70% | 142 images |
| Resolution | Official OpenAI price | Rendergrid | Savings | For $10 |
|---|---|---|---|---|
| 1K | $0.052681 | $0.025 | 52% | 400 images |
- 1OpenAI: high quality; square: 1K 1024x1024
All models and resolutions are on the pricing page.
How long does an image take?
There is no promised time: it depends on the model and the load. Poll for the status no more often than once every 5 seconds, and limit how long you wait.
Nano Banana Pro: Average wait time over the last 7 days: 39 s. GPT Image 2.5: Average wait time over the last 7 days: 35 s.An average describes past requests across a model’s traffic, not these six images and not your next request.
How do the two models compare in numbers?
| Parameter | Nano Banana Pro | GPT Image 2.5 | Source |
|---|---|---|---|
| Maker | OpenAI | Rendergrid model catalog | |
| ID in the API | nano-banana-pro | gpt-image-2.5 | Rendergrid model catalog |
| Resolutions | 1K, 2K, 4K | 1K | Rendergrid model catalog |
| Aspect ratios | 10, plus auto | 13, no auto | Rendergrid model catalog |
| Price at 1K | $0.04 | $0.025 | Rendergrid pricing |
| Price at 2K | $0.04 | No 2K tier | Rendergrid pricing |
| Price at 4K | $0.07 | No 4K tier | Rendergrid pricing |
| Images per $10 at 1K | 250 | 400 | Calculated from Rendergrid prices |
| Lettering in the test | Every word correct in 3 of 3 images | Every word correct in 3 of 3 images | Rendergrid test, six images |
How do you repeat the test through the API?
Both models take the same request; only the model field changes. The sample sends this test’s poster prompt to each model and then reads the status. The models available to your account are listed by GET /models.
# Requires bash, curl, and uuidgen. One idempotency key per request. IDEMPOTENCY_KEY="$(uuidgen)" || exit 1 curl --fail-with-body --max-time 30 \ -X POST https://api.rendergrid.io/ api/ public/ v1/ images/ generate \ -H "Authorization: Bearer $RENDERGRID_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: $IDEMPOTENCY_KEY" \ -d '{ "model": "nano-banana-pro", "prompt": "Design a portrait drink poster around a clear lemonade bottle on a pale wooden table. Include two lemon slices and a mint sprig. Warm light enters from the side; keep the cream background quiet and leave generous margins. Set “Summer afternoon” above the bottle and “Lemonade” beneath it in plain, readable type. Show the entire bottle. Include only the specified lettering, with no logos, people, or watermarks.", "resolution": "1K", "aspect_ratio": "2:3" }' # For GPT Image 2.5, send the same request with "model": "gpt-image-2.5" # and a new idempotency key. Then read each status with the id from its response: CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" # the ID from the response curl --fail-with-body --max-time 20 \ "https:// api.rendergrid.io/ api/ public/ v1/ creations/ $CREATION_ID" \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os import time import uuid import requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] PROMPT = "Design a portrait drink poster around a clear lemonade bottle on a pale wooden table. Include two lemon slices and a mint sprig. Warm light enters from the side; keep the cream background quiet and leave generous margins. Set “Summer afternoon” above the bottle and “Lemonade” beneath it in plain, readable type. Show the entire bottle. Include only the specified lettering, with no logos, people, or watermarks." for model in ("nano-banana-pro", "gpt-image-2.5"): response = requests.post( f"{API}/images/generate", headers={ "Authorization": f"Bearer {KEY}", # a new key for every new request "X-Idempotency-Key": str(uuid.uuid4()), }, json={ "model": model, "prompt": PROMPT, "resolution": "1K", "aspect_ratio": "2:3", }, timeout=(10, 120), ) response.raise_for_status() creation = response.json() while True: poll = requests.get( f"{API}/creations/{creation['id']}", headers={"Authorization": f"Bearer {KEY}"}, timeout=(5, 20), ) poll.raise_for_status() status = poll.json() if status["status"] in ("completed", "failed"): break time.sleep(5) # do not ask more often than once every 5 seconds if status["status"] == "completed": print(model, status["result_urls"]) else: print(model, status["error"], status["failure"])
// Node.js 22+, .mjs file import { randomUUID } from "node:crypto"; const API = "https://api.rendergrid.io/ api/ public/ v1"; const key = process.env.RENDERGRID_API_KEY; const prompt = "Design a portrait drink poster around a clear lemonade bottle on a pale wooden table. Include two lemon slices and a mint sprig. Warm light enters from the side; keep the cream background quiet and leave generous margins. Set “Summer afternoon” above the bottle and “Lemonade” beneath it in plain, readable type. Show the entire bottle. Include only the specified lettering, with no logos, people, or watermarks."; const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); for (const model of ["nano-banana-pro", "gpt-image-2.5"]) { const response = await fetch(`${API}/images/generate`, { method: "POST", headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json", // a new key for every new request "X-Idempotency-Key": randomUUID(), }, body: JSON.stringify({ model, prompt, resolution: "1K", aspect_ratio: "2:3" }), signal: AbortSignal.timeout(120_000), }); if (response.status !== 202) { throw new Error(`HTTP ${response.status}: ${await response.text()}`); } const creation = await response.json(); let status; do { // do not ask more often than once every 5 seconds await sleep(5000); const poll = await fetch(`${API}/creations/${creation.id}`, { headers: { Authorization: `Bearer ${key}` }, signal: AbortSignal.timeout(20_000), }); if (!poll.ok) throw new Error(`HTTP ${poll.status}: ${await poll.text()}`); status = await poll.json(); } while (["queued", "processing"].includes(status.status)); console.log(model, status.status, status.result_urls ?? status.error); }
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.04
}
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "completed",
"result_urls": ["https:// cdn.rendergrid.io/ images/ example/ result.jpg"]
}
Pass webhook_url and Rendergrid tells you when the task becomes completed or failed; keep polling as a fallback. A failed request is free: the amount goes straight back to your balance.
Start with the quickstart or the Nano Banana Pro quickstart. Each model’s parameters are on its page: Nano Banana Pro and GPT Image 2.5.
Which model should you pick for which task?
- Images at 2K or 4KNano Banana ProOnly it has 2K and 4K.
- A poster with every prop inside the frameGPT Image 2.5In this test its poster did; some lemon and mint in Nano Banana Pro’s were cut off.
- A diagram with thin arrowsNano Banana ProIn this test its arrows were thin; GPT Image 2.5’s were heavier.
- A product shot with a shadow under the productGPT Image 2.5In this test a soft shadow sat beneath its headphones, while Nano Banana Pro’s hovered above a separate shadow.
Where does this comparison not fit?
- Three prompts are not a benchmark. On your own prompts the images can look different, so check both models on them.
- One attempt per model. We did not measure how two attempts of one prompt differ. Another attempt is a new request with a new idempotency key, charged on its own.
- Only 1K. GPT Image 2.5 has no 2K or 4K, so the larger tiers of Nano Banana Pro are outside this test.
- Not everything was tested. Edits from reference images and long texts were not part of it.
- Prices and waits are not from the test. Prices come from Rendergrid’s price list, and an average wait, where measured, covers a model’s requests over the last 7 days.
A failed request is free
Run the test on your own prompt
Run your own prompt in the playground on the Nano Banana Pro page, or start from code with the Nano Banana Pro quickstart.
Open the playgroundQuestions and answers
Which is better, Nano Banana Pro or GPT Image 2.5?
How much does an image cost on each model?
How do I switch from one model to the other?
model field of the request to nano-banana-pro or gpt-image-2.5. The key, the address, and the shape of the response stay the same.Do I pay for a failed request?
Sources
- Google AI for Developers: API pricingGoogle’s official price for Nano Banana Pro: standard rate, without batch mode. Checked on .
- OpenAI: image generation guideOpenAI’s cost calculator for GPT Image 2.5: high quality, a square size. Checked on .
- Rendergrid pricingThe price per image for each model and resolution.
- Rendergrid modelsThe maker, resolutions, and aspect ratios of each model.
- Rendergrid documentation: tasks and statusesPolling, the statuses, and the waiting time.
- Rendergrid test, six imagesThe prompt and settings sit beside each pair of images.
- Rendergrid statisticsWhere this article shows an average wait, it covers the model’s requests over the last 7 days.






