Nano Banana 2.1

Nano Banana 2.1 is Google's updated image generation and editing model in the Nano Banana 2 family. It improves graphic composition and subject consistency, and it follows complex prompts and edit instructions more accurately. It works from text alone or from as many as fourteen reference images plus one reference video, and it can ground a generation in live web and image search so the result reflects current facts and real visual references. It generates at 1K, 2K and 4K, with three levels of thinking that trade speed for reasoning depth, which suits layout-heavy design work, recurring characters and products, and precise multi-step edits.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesEditing images
How to edit an image with Nano Banana 2.1: one reference and a written instruction, keep lists, removals and additions, numbered changes, and chained edits.
Introduction
Pass one image in inputs.referenceImages with an instruction in positivePrompt, and Nano Banana 2.1 returns the same image with that change applied. The instruction is the whole interface: it says what changes, and the model works out where.
Drag the slider across the hotel. The building and the ridge line stay registered while every surface changes season, because the instruction, shown in the request below, listed them as fixed. A tourism board gets its winter campaign out of the summer shoot.
This guide covers the request, scoping an instruction, removing and adding objects, putting several changes in one request, and chaining edits.
The request
An edit is a generation with one reference attached:
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'google:nano-banana@2.1',
positivePrompt: 'Turn this summer scene into midwinter. Cover the meadow, the roofs, the balconies, the jetty, and the forest in deep fresh snow, freeze the lake surface with a dusting of snow on the ice, replace the geraniums with snow on the window boxes, and change the light to a low cold sun with long blue shadows. Keep the hotel\'s architecture, the jetty, the rowboat, the mountains, and the camera position exactly as they are.',
resolution: '2K',
inputs: {
referenceImages: [
'https://im.runware.ai/image/os/a14d18/ws/2/ii/8e3b5c70-2d94-4a6f-b1e8-05c7a9d3f612.jpg'
]
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "google:nano-banana@2.1",
"positivePrompt": "Turn this summer scene into midwinter. Cover the meadow, the roofs, the balconies, the jetty, and the forest in deep fresh snow, freeze the lake surface with a dusting of snow on the ice, replace the geraniums with snow on the window boxes, and change the light to a low cold sun with long blue shadows. Keep the hotel's architecture, the jetty, the rowboat, the mountains, and the camera position exactly as they are.",
"resolution": "2K",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/8e3b5c70-2d94-4a6f-b1e8-05c7a9d3f612.jpg"
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "4d9f2a61-c3b8-4e07-9a15-8b6e0d7c2f43",
"model": "google:nano-banana@2.1",
"positivePrompt": "Turn this summer scene into midwinter. Cover the meadow, the roofs, the balconies, the jetty, and the forest in deep fresh snow, freeze the lake surface with a dusting of snow on the ice, replace the geraniums with snow on the window boxes, and change the light to a low cold sun with long blue shadows. Keep the hotel's architecture, the jetty, the rowboat, the mountains, and the camera position exactly as they are.",
"resolution": "2K",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/8e3b5c70-2d94-4a6f-b1e8-05c7a9d3f612.jpg"
]
}
}
]'runware run google:nano-banana@2.1 \
positivePrompt="Turn this summer scene into midwinter. Cover the meadow, the roofs, the balconies, the jetty, and the forest in deep fresh snow, freeze the lake surface with a dusting of snow on the ice, replace the geraniums with snow on the window boxes, and change the light to a low cold sun with long blue shadows. Keep the hotel's architecture, the jetty, the rowboat, the mountains, and the camera position exactly as they are." \
resolution=2K \
inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/8e3b5c70-2d94-4a6f-b1e8-05c7a9d3f612.jpg{
"taskType": "imageInference",
"taskUUID": "4d9f2a61-c3b8-4e07-9a15-8b6e0d7c2f43",
"model": "google:nano-banana@2.1",
"positivePrompt": "Turn this summer scene into midwinter. Cover the meadow, the roofs, the balconies, the jetty, and the forest in deep fresh snow, freeze the lake surface with a dusting of snow on the ice, replace the geraniums with snow on the window boxes, and change the light to a low cold sun with long blue shadows. Keep the hotel's architecture, the jetty, the rowboat, the mountains, and the camera position exactly as they are.",
"resolution": "2K",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/8e3b5c70-2d94-4a6f-b1e8-05c7a9d3f612.jpg"
]
}
}Response
[
{
"taskType": "imageInference",
"taskUUID": "4d9f2a61-c3b8-4e07-9a15-8b6e0d7c2f43",
"imageUUID": "a27c6e19-80d5-4b3a-9f64-3e1d8b05c7a2",
"imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/a27c6e19-80d5-4b3a-9f64-3e1d8b05c7a2.jpg"
}
]With a reference in the request, resolution becomes available. It picks the tier, 1K, 2K, or 4K, and the output takes the aspect ratio of the reference. That is the setting for an edit, since the result has to fit where the original was. To reframe into a different shape, send a width and height pair instead. A request carries one or the other, never both.
Naming what changes and what holds
Write an edit as two sentences. The first names one change, with its before and its after. The second is a keep list drawn from what is in the frame:
Change the armchair's upholstery from light gray boucle to rust orange velvet. Keep the walnut frame, the legs, the shape of the cushions, the chair's position and angle, the floor, the wall, the shadow, and the lighting unchanged.The keep list is specific on purpose. "Keep everything else the same" names nothing, while "the walnut frame, the legs, the shape of the cushions" gives the model parts to check against. For a furniture store, every fabric in the range becomes a product image from one photographed chair.
Removing and adding
A removal needs the object and what takes its place. Name each thing to remove by what it is and where it sits, then say what the cleared area shows:
Remove the yellow wet-floor sign near the pool steps and the crumpled striped towel on the nearest lounger. Fill the space with the same stone tiles and the lounger's clean white cushion. Keep the pool, the other loungers and their rolled towels, the balustrade, the skyline, and the lighting unchanged.The fill sentence matters when the removed object covered something specific. Without it, the model decides what was behind the sign.
An addition needs a place and a reason to belong there: where the object sits and how the scene's light meets it.
Add a matte black desk lamp with a slim arched arm on the left side of the desk, switched on, with its head angled toward the laptop. Let it cast a warm pool of light on the desk surface and a soft glow on the wall behind it. Keep the desk, the laptop, the pen cup, the fern, the chair, the wall color, and the camera position unchanged.The instruction describes the lamp together with the light it throws: the pool on the desk and the glow on the wall. An added object that changes nothing around it reads as pasted in.
Several changes in one instruction
One request can carry several changes. Number them, give each its own sentence, and close with a single keep list:
Make four changes. 1. Change the blazer from cream to emerald green, keeping its cut. 2. Replace the blue jeans with black tailored trousers. 3. Add a pair of slim gold-rimmed sunglasses. 4. Change the backdrop from light gray to a warm terracotta. Keep her face, her hair, her stride, the white T-shirt, the white sneakers, the framing, and the lighting unchanged.Four changes in one request cost one pass over the image. Sent as four requests, the same changes would redraw the whole frame four times. Fold in every change you already know, and keep chaining for the ones that depend on seeing a result.
Chaining edits
Each edit returns an ordinary image, so one result can be the reference for the next request. Chaining fits work that is decided one step at a time, like staging an empty room for a listing:

A real estate listing photograph of an empty living room in a new apartment. Pale oak floorboards, plain white walls, a large window on the left wall with daylight coming in, a white ceiling with recessed lights switched off. Wide shot from the doorway at chest height, photoreal, no furniture, no people, no text.

Add a low three-seat sofa in oatmeal linen against the back wall, centered, facing the camera, with two rust orange cushions. Keep the floor, the walls, the window, the ceiling, the daylight, and the camera position unchanged.

Add a round walnut coffee table in front of the sofa and a large cream wool rug under both. Keep the sofa and its cushions, the floor, the walls, the window, the daylight, and the camera position unchanged.

Hang one large framed abstract print in muted earth tones on the wall above the sofa, and add a tall fiddle-leaf fig in a white pot in the corner to the right of the sofa. Keep the sofa, the cushions, the coffee table, the rug, the floor, the window, the daylight, and the camera position unchanged.

Change the time of day to early evening: deep blue dusk outside the window, the recessed ceiling lights switched on with a warm glow, and soft shadows under the furniture. Keep the sofa, the cushions, the coffee table, the rug, the print, the plant, the floor, the walls, and the camera position unchanged.
Step through the rounds, and go back to Original to compare. Every instruction restates the full keep list, including what the earlier rounds added. An edit only sees its reference image and its own prompt, so nothing carries over from the previous request.
When a chain grows past a few rounds, go back to the original and replay the approved changes as one numbered instruction.
Tips
-
Let the reference set the frame. Send
resolutionon an edit, and the result keeps the aspect ratio of the source. -
Name the before and the after. "From light gray boucle to rust orange velvet" tells the model which part of the image the change applies to.
-
Write the keep list from the frame. Name the objects that are in the image. A generic "keep everything else" gives the model nothing to hold.
-
Say what fills a removal. Describe the surface that the removed object was covering.
-
Describe an added object with its light. A lamp comes with a pool of light, and a vase comes with a contact shadow.
-
Number several changes in one instruction. One pass redraws the frame once.
-
Restate the keep list in every round of a chain. Each request starts from its reference and its own prompt.









