ListenHubDocs
API ReferenceImage Generation

Nano Banana

Nano Banana Pro and Flash limits, the four extreme aspect ratios, and the free relax lane.

Nano Banana is Google's image family on ListenHub: gemini-3-pro-image (Nano Banana Pro) for detail and gemini-3.1-flash-image (Nano Banana Flash) for speed. Both run on the shared image endpoints. For the endpoints, request schema, async flow, and error codes, see the Image Generation overview. This page covers only what is specific to Nano Banana.

Models

ModelDisplay nameBest for
gemini-3-pro-imageNano Banana ProThe most detailed output in the catalogue
gemini-3.1-flash-imageNano Banana FlashFaster, cheaper generation, and the only Nano Banana tier that takes the extreme ratios

Both take provider: "google". The preview IDs gemini-3-pro-image-preview and gemini-3.1-flash-image-preview are still accepted and normalized to the GA IDs above.

Limits

Limitgemini-3-pro-imagegemini-3.1-flash-image
Image sizes1K, 2K, 4K1K, 2K, 4K
Aspect ratiosThe 10 standard ratiosAll 14, including the extreme four
Default aspect ratio1:1 (schema default)1:1 (schema default)
Reference imagesUp to 14Up to 14
qualityIgnoredIgnored

1:4, 4:1, 1:8, and 8:1 are Flash-only within this family — sending one to gemini-3-pro-image returns 400 with code: 29003. Every ratio rejection on Nano Banana carries 29003, not the 26019 that GPT-Image and Wan 2.7 use.

Neither model declares a family-level reference-image cap, so the schema-wide maximum of 14 items is the effective limit — the highest in the catalogue.

The extreme ratios

Four ratios cover shapes the standard set cannot express — banners, vertical strips, and panoramas:

RatioShapeTypical use
1:4Narrow portraitSidebar art, vertical strips
4:1Wide landscapePage banners, headers
1:8Extreme portraitTall scrolling panels
8:1PanoramicWide panoramas, footer strips

Within Nano Banana they are Flash-only. Outside it, seedream-5-0-pro accepts them too — it is validated on size rather than on ratio.

Free quota

Both models have their own free-quota resource, spendable at 1K and 2K only — a 4K request is always billed in credits. How the quota is earned and read back is on the overview.

ModelFree-quota resource
gemini-3-pro-imagegemini-3-pro-image-relax-1k-2k
gemini-3.1-flash-imagegemini-3.1-flash-image

The relax lane

gemini-3-pro-image is the only model in the catalogue whose free quota runs on a separate execution lane. How it runs depends on your account type:

  • Accounts that have ever paid (active subscription, recharge, or credit-pack purchase) keep full priority, normal capacity, and normal fallback while spending free quota — the quota changes billing, not the lane you run on.
  • Pure-free accounts (never paid anything) run on a lowest-priority free lane with a fixed throughput cap. At peak times a request may be queued or rejected with a retryable busy/timeout response. When that happens, no credits are spent and the free quota is not consumed — retry later.

A pure-free relax failure returns machine-readable metadata so you can detect it without parsing localized text:

  • failReason is free_relax_busy or free_relax_timeout.
  • retryable is true.
  • freeUsageRolledBack is true once the free quota has been refunded.
  • userMessage carries friendly, localizable copy on the synchronous error body; the async task object exposes the same copy as failUserMessage. The two surfaces use different field names — read both if you handle both paths.

For synchronous requests this appears in the error body; for async requests it appears on the failed task detail (and in the task list). Treat both reasons as "retry later, nothing was charged".

Pricing

Both models are priced at a fixed credit cost per image size (pricing.mode is fixed), and neither ever sets requiresSubscription. 4K costs more than 2K, which costs more than 1K. Call POST /v1/images/generation/estimate-credits with the model and size for the exact figure rather than hardcoding it.

Example

curl -X POST "https://api.marswave.ai/openapi/v1/images/generation/async" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "google",
    "model": "gemini-3.1-flash-image",
    "prompt": "A panoramic mountain range at dawn, layered mist, muted palette",
    "imageConfig": { "imageSize": "2K", "aspectRatio": "8:1" }
  }'

See the Image Generation overview for the full parameter list and the reference-image request shapes.

On this page