Introduction
Nano Banana Pro Edit runs Google's Gemini 3 Pro Image on images you already have. It accepts one to fourteen sources, plans the edit before rendering, and returns 1k, 2k or 4k in the source shape or one of ten shapes.
Choose a mode by starting material
| What you have | Mode |
|---|---|
| a written brief | Nano Banana Pro Text to image |
| an image to change | Nano Banana Pro Edit |
Key features & highlights
Careful single-change edits
Relighting, a new background or added text while the people and the rest of the frame stay as they were, as in our candlelight and cover examples. The model plans the edit before rendering, which keeps unrelated parts of the frame stable.
Text over photographs
Mastheads, issue lines and captions are set onto the picture with the spelling you quote, in the position you give them.
Up to fourteen references
Combine people, products and settings from many sources, each described by its role in the prompt, in a single edit request.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Up to 5,000 characters. Describe subject, setting, light and lens in plain sentences; words in quotes are rendered as text in the image. at least 1 characters · at most 5000 characters |
image_urls | Yes | 1 to 14 source images. Say in the prompt what each one contributes: the person, the setting, the product. at least 1 items · at most 14 items |
aspect_ratio | No | auto (default) keeps the shape of the source image; or pick one of ten shapes from 21:9 to 9:16. The shape does not change the price. |
resolution | No | 1k (default), 2k or 4k. 1k and 2k cost the same; 4k costs more and renders 4096 pixels on the long side. |
official_fallback | No | On by default. Each edit runs on the economy route first. Default: |
Pricing
Billed per image by size tier. Each edit starts on the economy route at the economy price, with no charge per source image. With Official fallback on, the default, an edit the economy route refuses or cannot complete, or one with more than 8 source images, runs on the official route at the official price, which also adds a small fixed charge for each source image; turn it off to pay only the economy price. The quote shows the starting price and the most the edit can cost. Refused requests are not charged.
| Specification | Price |
|---|---|
| $0.0668 / image (With Official fallback: up to $0.1072) |
| $0.0668 / image (With Official fallback: up to $0.1072) |
| $0.118 / image (With Official fallback: up to $0.192) |
Use cases
Turn photos into covers and posters
Add a masthead, a date and a line of copy to an approved photograph without retouching it.
Mood and light variations
Show the same scene by candlelight, at dawn or under neon for a client choosing a direction.
Localised campaign images
Replace the text on a finished poster with a translated line for each market while the photograph and its light stay untouched.
Prompt guide & pro tips
Change one thing at a time
Single-change instructions keep everything else stable; chain several edits rather than packing them into one prompt.
Protect the people
After the change, name the person, the outfit and the pose that must stay exactly the same.
Allow time for 4k edits
Edits run longer than text to image with this model: up to about three minutes in our tests at 2k on the official route, while our economy-route edits at 1k finished in under a minute.
Quote text with its position
For added type, quote each line and say where it sits: across the top, bottom left, beside the logo.
Use 2k as the default
1k and 2k cost the same with this model, so edit at 2k unless you need a smaller file.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "google/nano-banana-pro/edit",
"input": {
"aspect_ratio": "auto",
"image_urls": [
"https://example.com/reference.png"
],
"prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
"resolution": "1k"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.





