live
MODEL IDgoogle:nano-banana@2.1

Nano Banana 2.1

Google
by

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.

Nano Banana 2.1

Text and layouts

How to get exact copy and structured layouts from Nano Banana 2.1: quoting strings, setting a type hierarchy, building infographics, and translating a design.

Introduction

Copy is where generated design work usually fails. Most image models paint lettering as texture, so a clean poster comes back with a headline that is one letter off and the file is unusable. Layout fails the same way: panels drift apart, and a caption lands under the wrong icon.

Nano Banana 2.1 works out the layout and the strings before it renders, which makes it usable for design work where a typo is a failed deliverable. The poster below carries eight separate strings, from the title down to the footer line.

This guide covers quoting copy, building a type hierarchy, dense copy, multi-panel graphics, app screens, and translating a finished design into another language.

Quoting exact copy

Wrap every string you want rendered in quotation marks. The quotes mark copy you are setting, and everything outside them is a description the model is free to word itself. The two yard signs below come from one scene. The first prompt quotes its three lines, and the second only describes what the sign announces.

Both signs are legible. Only the first one says what the client approved. The unquoted prompt left the wording to the model, which picked its own hours, 1PM to 4PM, and named the agency Forest Hill Realty. Quote each string with the capitalization and punctuation it should print with.

Building a hierarchy

A design with several strings needs a role for each one: which is the headline, which is secondary, where each one sits, how heavy it is. Give every string its own clause with a position, a size relative to the others, and a weight. The label prompt below sets four strings that way:

A studio packshot of a squat frosted glass jar with a matte white lid on a pale sand backdrop, the wordmark "LUMEN & OAT" in small widely spaced black capitals at the top of the label, the product name "Daily Barrier Cream" in a large black serif across the middle, the claim "FRAGRANCE FREE" in small capitals inside a thin outlined pill below it, the size "50 ml / 1.7 fl oz" in tiny gray type along the bottom edge of the label, soft even studio light with a gentle shadow to the right, sharp print detail
ProductWordmarkProduct nameClaimSizePhotography

Relative sizes do more than point sizes. "Large" and "tiny" give the model an order to keep, while a number of points means nothing at an unknown print scale. Name a typeface by its class, such as serif or condensed sans, for the same reason.

Dense copy

Longer copy holds when the prompt writes it out line by line. Put each line in its own quoted string, in reading order, grouped under the heading it belongs to. The menu below has three sections and nine priced items:

The prompt states the row format once, "dish name on the left and the price aligned on the right", and then every item follows it. This request also sets settings.thinkingLevel to high, which gives the model more reasoning time for a layout with this many strings. The prompting guide covers the three levels.

When one string in a dense layout comes back wrong, fix it with an edit instead of rerolling the whole design. Pass the image back as a reference and quote the wrong string and its replacement.

Multi-panel layouts

An infographic is a layout problem before it is a text problem. State the grid first: how many panels, in what direction they read, what every panel contains. Then list the copy panel by panel.

The repeated sentence shape is deliberate. Every panel is described with the same four parts in the same order, so the model builds four matching panels. A panel described differently from its neighbors comes back looking different from them.

App screens

UI mockups follow the same rules with one addition: name the regions of the screen, such as the header and the tab bar, and place each string inside one.

The prompt walks the screen from top to bottom, one region per sentence, which is the order a designer would read a wireframe in. That makes it a fit for store screenshots and pitch decks drawn up before a build exists.

Translating a design

A finished design can be localized without rebuilding it. Pass the image in inputs.referenceImages and ask for the copy in another language, with the layout held:

Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it.
Try in Playground
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: 'Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it.',
  resolution: '2K',
  inputs: {
    referenceImages: [
      'https://im.runware.ai/image/os/a14d18/ws/2/ii/2f8b6c1d-94a7-4e53-b0d8-6a3e7f51c92b.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": "Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it.",
            "resolution": "2K",
            "inputs": {
                "referenceImages": [
                    "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f8b6c1d-94a7-4e53-b0d8-6a3e7f51c92b.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": "7c1e4a9b-3f60-4d85-a2b7-e9d05c8f1a36",
      "model": "google:nano-banana@2.1",
      "positivePrompt": "Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it.",
      "resolution": "2K",
      "inputs": {
        "referenceImages": [
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f8b6c1d-94a7-4e53-b0d8-6a3e7f51c92b.jpg"
        ]
      }
    }
  ]'
runware run google:nano-banana@2.1 \
  positivePrompt="Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it." \
  resolution=2K \
  inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/2f8b6c1d-94a7-4e53-b0d8-6a3e7f51c92b.jpg
{
  "taskType": "imageInference",
  "taskUUID": "7c1e4a9b-3f60-4d85-a2b7-e9d05c8f1a36",
  "model": "google:nano-banana@2.1",
  "positivePrompt": "Translate every piece of text in this infographic into Spanish. Keep the layout, the icons, the colors, the numbers, and the typography unchanged, and resize text only where a longer translation needs it.",
  "resolution": "2K",
  "inputs": {
    "referenceImages": [
      "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f8b6c1d-94a7-4e53-b0d8-6a3e7f51c92b.jpg"
    ]
  }
}
Response
[
  {
    "taskType": "imageInference",
    "taskUUID": "7c1e4a9b-3f60-4d85-a2b7-e9d05c8f1a36",
    "imageUUID": "d85a0e37-6b14-4c9f-8e72-1f4a9c3b6d05",
    "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/d85a0e37-6b14-4c9f-8e72-1f4a9c3b6d05.jpg"
  }
]

resolution replaces width and height here. It sets the tier, and the frame follows the reference, so the translated file fits the slot of the original. The model writes the translation itself. For copy that has to match an approved translation, quote each translated string in the prompt, the same way as in a new design.

Tips

  1. Quote every string. Text inside quotation marks is set as written. Text outside them is a description the model words itself.

  2. Give each string a position, a relative size, and a weight. One clause per string, with words like "large" and "tiny" to fix the order.

  3. Write dense copy line by line. State the row format once, then list every line as its own quoted string in reading order.

  4. Describe repeated panels with the same sentence shape. Matching descriptions produce matching panels.

  5. Raise the thinking level for dense layouts. Menus and infographics are the case for settings.thinkingLevel at high.

  6. Localize with an edit. Pass the finished design as a reference with resolution, and the layout survives the translation.