> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Nano Banana APIの料金とモデル比較：5モデルの選び方

> 5つのNano Bananaモデルを料金、出力サイズ、アスペクト比で比べ、OpenAI互換形式とGeminiネイティブ形式のリクエスト例、共通のPythonヘルパーまで試せます。

LaoZhang APIでは、Googleの最新のGemini画像モデルであるNano Bananaを5モデル、1回あたりの固定料金で提供しています。Googleアカウントは不要です。

## モデルを比較する

| | Standard | Nano Banana 2 Lite | Nano Banana 2.1 | Nano Banana 2 | Nano Banana Pro |
| - | - | - | - | - | - |
| モデルID | `gemini-2.5-flash-image` | `gemini-3.1-flash-lite-image` | `gemini-nano-banana-2.1` | `gemini-3.1-flash-image` | `gemini-3-pro-image` |
| 1回あたりの料金 | \$0.02 | \$0.025 | \$0.045 | \$0.055 | \$0.09 |
| 出力サイズ | 1K | 1K | 1K、2K、4K | 512px、1K、2K、4K | 1K、2K、4K |
| アスペクト比 | 10種（Geminiネイティブのみ） | 10種 | 14種 | 14種 | 10種 |
| 参照画像 | 3枚まで推奨 | 最大14オブジェクト | 最大14枚 | 最大14枚 | 最大14枚 |
| 思考（Thinking） | — | minimalまたはhigh | minimal、medium（既定）、high | minimalまたはhigh | 常時オン |
| Google検索グラウンディング | — | なし | ウェブ検索と画像検索 | ウェブ検索と画像検索 | ウェブ検索 |
| 向いている用途 | 既存の連携のみ。Googleの停止予定日を過ぎていますが、当面は利用できます | 大量の1K画像 | 新規の用途の大半、1Kから4K | 512px出力、既存の連携 | 複雑でブランド要件の厳しい素材 |
| ガイド | 生成は本ページ下部の「Nano Banana Standard」、[編集](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md) | [Nano Banana 2 Lite](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-lite-api.md) | [Nano Banana 2.1](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-1-image.md) | [Nano Banana 2](https://docs.laozhang.ai/ja/api-capabilities/nano-banana2-image.md) | [生成](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image.md)、[編集](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image-edit.md) |

* 元のモデル `gemini-2.5-flash-image` は、ファミリー名と混同しないよう、このサイトでは**Standard**と呼びます。生成のガイドは本ページ下部の「Nano Banana Standard」、編集のガイドは[Nano Bananaの画像編集（Standard）](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md)です。新しい4モデルには、それぞれ専用のガイドがあります。
* どのモデルも、`https://api.laozhang.ai` で2つのリクエスト形式に対応しています。1つはOpenAI互換のchat completionsで、画像はレスポンスのテキスト内にBase64で入って返ります。もう1つはGeminiネイティブの `generateContent` で、アスペクト比と出力サイズも指定できます。詳しくは、後述の「プロトコルを選ぶ」を参照してください。
* 料金は2026年10月7日時点のLaoZhang APIの公開価格です。最新の一覧は[モデルと料金](https://docs.laozhang.ai/ja/models.md)を参照してください。
* 同じプロンプトで2K、16:9のリクエストを1回ずつ送ったところ、2026年10月14日の所要時間は、Nano Banana 2.1が25秒、Nano Banana 2が21秒、Nano Banana Proが69秒でした。並べた作例は、[Nano Banana 2.1のガイド](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-1-image.md)にあります。
* この一覧の後ろの表に、10種のアスペクト比と、Nano Banana 2.1と2で追加される4種を載せています。
* OpenAI互換ルートでは、アスペクト比もサイズも指定できません。テキストだけのプロンプトを送ると、Standardは1024×1024の画像を返し、Nano Banana 2.1はモデルが選んだフレームの1K画像を、それ以外のモデルは1Kの1:1画像を返します。
* 表の「—」は、GoogleがStandardの機能として記載していないことを示します。機能の情報は、Googleの[Nano Banana画像生成ガイド](https://ai.google.dev/gemini-api/docs/image-generation)に基づいています。

| 形状 | 10種のアスペクト比 | Nano Banana 2.1と2で追加 |
| - | - | - |
| 正方形 | `1:1` | — |
| 縦長 | `2:3`、`3:4`、`4:5`、`9:16` | `1:4`、`1:8` |
| 横長 | `3:2`、`4:3`、`5:4`、`16:9`、`21:9` | `4:1`、`8:1` |

新規の用途は、2026年10月にNano Banana 2を更新したNano Banana 2.1から始めるのが基本です。512px出力が必要なときだけNano Banana 2を使います。解像度よりコストと速度を優先するなら2 Lite、レイアウト、文字、ブランドの細部を正確に出したいならProを選んでください。Nano Bananaとほかの画像モデルの比較は、[画像APIの比較](https://docs.laozhang.ai/ja/api-capabilities/image-generation-guide.md)を参照してください。

5モデルに共通する点は次のとおりです。

* Googleの公式チャネルのモデルで、必要なのはLaoZhang APIのキーだけです。Googleアカウントは要りません。
* 回数課金のルートは固定料金です。出力サイズ、思考レベル、参照画像の数、生成か編集かで料金は変わらないため、2Kと4Kの画像は、Googleのトークン課金より低くなります。
* 1回のリクエストで返る画像は1枚です。複数枚が必要なときは、リクエストを複数回送ります。
* プラットフォーム側の同時実行数の上限や速度制限はありません。`429` は上流の処理能力に由来します。詳しくは[同時実行と429エラー](https://docs.laozhang.ai/ja/faq/api-concurrency.md)を参照してください。
* 上流の200以外の応答（400、429、5xx）は課金されません。HTTP 200で画像がない場合は1回分が課金されます。3つのモデルファミリーの違いは、[課金と失敗時の扱い](https://docs.laozhang.ai/ja/api-capabilities/image-billing-and-failures.md)で比べています。

各モデルのガイドにある生成例の実際の出力です。プロンプトは各モデルのガイドに載せています。

![雨上がりの街角のカフェと「BANANA CAFE」の看板。Nano Banana 2.1で生成](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/nb21-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=776b4b2c0679826afe7f53c233cadd2b)

Nano Banana 2.1、2K。プロンプト：Generate an image of a corner cafe after rain at dusk, warm light on the wet pavement, with a neon sign that reads "BANANA CAFE".

![夜市の麺の屋台。Nano Banana 2で生成](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/nb2-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=7d354f14a97893f8b3386acd4203cf74)

Nano Banana 2、2K

![「NEO TOKYO」の看板がある近未来の都市のスカイライン。Nano Banana Proで生成](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/pro-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=e4562d316f14e9d20a749e36a4b5e742)

Nano Banana Pro、4K。プロンプト：Generate an image of a futuristic city skyline at sunset, highly detailed, with the words "NEO TOKYO" in a clean sans-serif font on a billboard.

![シアン色のハイライトが入った物流ダッシュボード。Nano Banana 2 Liteで生成](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/lite-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=1a0b918a99dd6f11e7339d4c487c9cdd)

Nano Banana 2 Lite、1K

## プロトコルを選ぶ

どちらのエンドポイントも、APIキーとモデルIDは共通です。

```text theme={null}
OpenAI-compatible:  POST https://api.laozhang.ai/v1/chat/completions
Gemini-native:      POST https://api.laozhang.ai/v1beta/models/{model}:generateContent
```

| | OpenAI互換 | Geminiネイティブ |
| - | - | - |
| リクエスト本文 | `model` と `messages` | `contents` と `generationConfig` |
| 入力画像 | `image_url` パート | `inlineData` パート |
| 出力画像 | `message.content` 内のデータURL | `content.parts` 内の `inlineData` |
| 比率とサイズ | 指定不可 | `aspectRatio`、`imageSize` |
| 認証 | `Authorization: Bearer` | `Authorization: Bearer` または `x-goog-api-key` |

**OpenAI互換**は、すでにOpenAI SDKを使っているアプリに向いています。画像はBase64として `choices[0].message.content` に入って返り、多くは `![image](data:image/png;base64,iVBORw0...)` のようなMarkdownの画像形式です。形式はPNGと決めつけず、データURLから読み取ってください。入力の `image_url` には、ローカルファイルから作ったデータURLか、公開されているHTTPSのURLを指定できます。

**Geminiネイティブ**では、すべての画像オプションを指定できます。オプションは `generationConfig.imageConfig` に入れます。

* `aspectRatio`：モデルごとの一覧にある値を指定します。
* `imageSize`：Kを大文字にしたサイズを指定します。各モデルが受け付ける値は、次の表のとおりです。

| モデル | `imageSize` |
| - | - |
| Standard | 指定しない |
| Nano Banana 2 Lite | `1K` のみ |
| Nano Banana 2.1 | `1K`、`2K`、`4K` |
| Nano Banana 2 | `512`、`1K`、`2K`、`4K` |
| Nano Banana Pro | `1K`、`2K`、`4K` |

レスポンスでは、各画像が `mimeType` とBase64の `data` を持つ `inlineData` パートとして並びます。Google Gen AI SDKでこのエンドポイントを呼び出すときのベースURLは、[Geminiプロトコル](https://docs.laozhang.ai/ja/api-reference/gemini.md)を参照してください。

## 課金

LaoZhang APIのNano Bananaは回数課金のみです。出力サイズ、思考レベル、参照画像の数、生成か編集かにかかわらず、モデルごとに料金は1つです。別料金がかかるのは、Google検索グラウンディングだけで、後述のとおり検索1回ごとに課金します。

Googleはトークンで課金するため、画像が大きいほど、思考トークンが多いほど料金が上がります。次の表は、2026年10月7日時点のLaoZhang APIの公開価格と、[Googleの価格](https://ai.google.dev/gemini-api/docs/pricing)を比べたものです。

| モデル | LaoZhang API（1回あたり） | Google（出力画像1枚あたり） |
| - | -: | - |
| `gemini-3-pro-image`（Pro） | \$0.09 | 1K/2K \$0.134、4K \$0.24 |
| `gemini-nano-banana-2.1`（Nano Banana 2.1） | \$0.045 | 2K \$0.0504、4K \$0.113 |
| `gemini-3.1-flash-image`（Nano Banana 2） | \$0.055 | 1K \$0.067、2K \$0.101、4K \$0.151 |
| `gemini-3.1-flash-lite-image`（2 Lite） | \$0.025 | 1K \$0.0336 |
| `gemini-2.5-flash-image`（Standard） | \$0.02 | \$0.039 |

Googleの数値は、標準の有料料金を出力画像1枚あたりに換算したもので、2026年10月13日に確認しています。Googleは入力トークンと思考トークンも課金します。

Googleの課金では、4K出力や思考レベル `high` を使うと1回あたりの料金が上がります。LaoZhang APIでは1回あたりの料金が変わらないので、解像度が高いほど差が広がります。たとえば、Nano Banana 2の4K画像は、Googleの標準価格より約64%低くなります。

Nano Bananaには回数単価しかないため、APIキーの課金方式は**従量優先**（按量优先、推奨）または**回数課金**（按次计费）にしてください。従量優先のキーは、回数課金と従量課金の両方のモデルを呼び出せます。

**従量課金**（按量计费）のキーは従量課金のモデルしか呼び出せないので、Nano Bananaは使えません。課金方式の違いは、[課金と料金](https://docs.laozhang.ai/ja/pricing.md)を参照してください。

各リクエストのステータスと課金額は、[呼び出しログ](https://api.laozhang.ai/log)で確認できます。

* **HTTP 200で画像がない場合：1回分を課金します。** 上流からHTTP 200が返れば、生成でも編集でも、完了した1回の呼び出しとして扱います。LaoZhang APIはプロンプトや出力の内容を審査しないため、画像が返ったかどうかでは課金を分けません。後述の「空のレスポンスで課金されないようにする」を参照してください。
* **クライアントのタイムアウト：** サーバー側で画像の生成が完了し、課金される場合があります。再送する前に呼び出しログを確認し、二重に支払わないようにしてください。
* **上流の200以外の応答：** 生成に至らなかった400、429、503などの応答は課金されません。
* **Google検索グラウンディング：1回の呼び出し料金に加えて、検索1回につき\$0.014。** これはGoogleの1,000回あたり\$14と同じ単価で、Nano Banana 2.1、Nano Banana 2、Nano Banana Proに適用されます。
  * 検索を何回行うかはモデルが決めるため、同じプロンプトでも回数が変わることがあります。呼び出しログに、リクエストごとの検索回数と課金額が表示されます。
  * たとえば、Nano Banana 2.1で2回検索したリクエストは、\$0.045 + 2 × \$0.014 = \$0.073です。

### 空のレスポンスで課金されないようにする

HTTP 200で画像がない場合は、多くが次のどちらかが原因です。

* **プロンプトが画像を求めていない。** 欲しい内容を説明しているだけで、「画像を生成して」や「編集した画像を返して」と指示していないと、モデルが考えるだけで、テキストを返したり何も返さなかったりすることがあります。
* **上流の安全フィルターでブロックされた。** プロンプトや参照画像に、著作権のあるキャラクター、機微な人物、センシティブな内容が含まれると、Googleは画像もエラーコードも返しません。同じ内容を再送しても、ほとんどの場合ブロックされ、そのたびに課金されます。

Googleの安全フィルターに引っかかりやすい内容は次のとおりです。

* 性的、暴力的、残酷、憎悪を含む内容。際どい暗示的な内容も含みます
* 画像からの透かしの除去
* ディズニー、マーベル、任天堂のキャラクターなど、有名な著作物のキャラクター
* 未成年者に関する不適切な内容
* 著名人や政治家などの公人
* 注文のスクリーンショット、領収書、値札など、金額に関する情報の編集
* 実在の人物の服装の変更や顔の入れ替え

Googleのフィルターにはばらつきがあります。同じプロンプトでも、画像が返る日もあれば、ブロックされる日もあり、Googleの更新に合わせてルールも変わります。ブロックされたリクエストでは、エラーコードではなく、短い拒否のテキストが返ることがほとんどです。

バッチ処理を実行する前に、クライアントで次の対応をしてください。

1. どのプロンプトでも、画像を求めることを明示する。
2. 送信する前に、プロンプトと参照画像を自分で確認し、安全フィルターに引っかかりそうな内容を取り除く。
3. `candidates` がないレスポンスや、`inlineData` パートがないレスポンスは、「画像なし」として扱う。`candidates` がある場合は、`finishReason` と返ってきたテキストから理由を確認する。
4. 空のレスポンスを自動で再試行しない。先にプロンプトや参照画像を変更する。バックオフ付きの再試行は、429と5xxのエラーに限る。

## セットアップ

**1. APIキーを作成する**

[トークン管理](https://api.laozhang.ai/token)でトークンの作成ダイアログ（创建令牌）を開き、**課金方式**（计费模式）を**従量優先**（按量优先、推奨）または**回数課金**（按次计费）にして、**作成**（创建）をクリックします。`default` グループには、5つのNano Bananaモデルがすべて含まれています。

![LaoZhang APIコンソールのトークン作成ダイアログ。課金方式が回数課金（按次计费）になっている](https://mintcdn.com/laozhangai-edd05f2c/_loZ0Jy0ZI__xJ9z/images/token-create-per-request.png?fit=max\&auto=format\&n=_loZ0Jy0ZI__xJ9z\&q=85\&s=1fdceb804bb3ad50f83a21ec65b4d807)

**2. キーを環境変数に保存する**

```bash theme={null}
export LAOZHANG_API_KEY="sk-..."  # 自分のLaoZhang APIキーに置き換える
```

**3. 依存パッケージをインストールする**

```bash theme={null}
python -m pip install openai requests
```

cURLの例では、`jq` も必要です。たとえば、`brew install jq` や `sudo apt-get install jq` でインストールします。

## Pythonヘルパー

次のモジュールを `nano_banana.py` として保存します。2つのルートの認証、ローカルファイルの画像入力への変換、返ってきたすべての画像の保存（バイト列に合わせた拡張子：PNG、JPEG、WebP）を行います。

```python theme={null}
"""LaoZhang APIのNano Bananaモデルで使う共通ヘルパー。"""
import base64
import json
import os
import re
import sys
from pathlib import Path

import requests
from openai import OpenAI

BASE_URL = "https://api.laozhang.ai"
INPUT_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
DATA_URL = re.compile(r"data:image/[\w.+-]+;base64,([A-Za-z0-9+/=]+)")


def openai_client():
    """OpenAI互換のクライアント。SDKがキーを Authorization: Bearer で送る。"""
    # max_retries=0：タイムアウト後の自動リトライで画像が二重に生成・課金されるのを防ぐ
    return OpenAI(api_key=os.environ["LAOZHANG_API_KEY"], base_url=f"{BASE_URL}/v1", timeout=300, max_retries=0)


def generate_content(model, parts, image_config=None):
    """Geminiネイティブの generateContent リクエストを送り、JSONレスポンスを返す。"""
    generation_config = {"responseModalities": ["IMAGE"]}
    if image_config:
        generation_config["imageConfig"] = image_config
    response = requests.post(
        f"{BASE_URL}/v1beta/models/{model}:generateContent",
        headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
        json={"contents": [{"role": "user", "parts": parts}], "generationConfig": generation_config},
        timeout=300,
    )
    if response.status_code != 200:
        raise RuntimeError(f"HTTP {response.status_code}: {response.text[:500]}")
    return response.json()


def _extension(raw):
    if raw.startswith(b"\x89PNG"):
        return "png"
    if raw.startswith(b"\xff\xd8\xff"):
        return "jpg"
    if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP":
        return "webp"
    return "bin"


def _write(encoded, stem, number):
    encoded = "".join(encoded.split())
    raw = base64.b64decode(encoded + "=" * (-len(encoded) % 4))  # 不足している = を補う
    suffix = "" if number == 1 else f"-{number}"
    path = Path(f"{stem}{suffix}.{_extension(raw)}")
    path.write_bytes(raw)
    return str(path)


def save_chat_images(content, stem):
    """OpenAI互換：message.content に含まれるBase64のデータURLをすべて保存する。"""
    found = DATA_URL.findall(content or "")
    if not found:
        raise RuntimeError(f"message.content に画像がありません: {(content or '')[:300]!r}")
    return [_write(data, stem, number) for number, data in enumerate(found, start=1)]


def save_native_images(result, stem):
    """Geminiネイティブ：candidates[].content.parts[] 内の inlineData 画像をすべて保存する。"""
    blobs = []
    for candidate in result.get("candidates") or []:
        for part in (candidate.get("content") or {}).get("parts") or []:
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and not part.get("thought"):
                blobs.append(blob)
    if not blobs:
        reasons = [candidate.get("finishReason") for candidate in result.get("candidates") or []]
        raise RuntimeError(f"画像が返されませんでした: {result.get('promptFeedback') or reasons}")
    return [_write(blob["data"], stem, number) for number, blob in enumerate(blobs, start=1)]


def _encode(path):
    mime = INPUT_TYPES.get(Path(path).suffix.lower())
    if mime is None:
        raise ValueError(f"PNG、JPEG、WebPのいずれかのファイルを指定してください: {path}")
    return mime, base64.b64encode(Path(path).read_bytes()).decode("ascii")


def to_data_url(path):
    """ローカルファイルを、OpenAI互換の image_url パート用データURLに変換する。"""
    mime, data = _encode(path)
    return f"data:{mime};base64,{data}"


def to_inline_part(path):
    """ローカルファイルを、Geminiネイティブの inlineData パートに変換する。"""
    mime, data = _encode(path)
    return {"inlineData": {"mimeType": mime, "data": data}}


if __name__ == "__main__":
    # レスポンスファイルの画像を保存する：python nano_banana.py response.json output-name
    body = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
    if "error" in body:
        sys.exit(f"APIエラー: {body['error']}")
    if "choices" in body:
        saved = save_chat_images(body["choices"][0]["message"].get("content"), sys.argv[2])
    else:
        saved = save_native_images(body, sys.argv[2])
    for path in saved:
        print("保存しました", path)
```

Pythonからは、必要な関数をimportして使います。cURLでリクエストしたあとは、`python nano_banana.py response.json output-name` を実行すると、レスポンスファイルの画像を保存できます。

* 1枚目は `output-name.png`（または `.jpg`、`.webp`）として書き出されます。
* 2枚目以降は、`output-name-2`、`output-name-3` のように連番が付きます。

## Nano Banana Standard

`gemini-2.5-flash-image` は、元のNano Bananaモデルです。出力は約1Kで、OpenAI互換ルートにテキストだけのプロンプトを送ると1024×1024が返ります。Geminiネイティブのルートでは、前述の10種のアスペクト比を指定できます（たとえば16:9なら1344×768）。編集では、Googleによると、入力画像は3枚までが最も安定します。

> [!WARNING]
>
> **`gemini-2.5-flash-image` はGoogleの停止予定日を過ぎており、いつ停止してもおかしくありません。今すぐ移行してください。**
>
> * Googleの各ページで停止日が一致していません。2026年10月8日時点で、[非推奨のページ](https://ai.google.dev/gemini-api/docs/deprecations)は2027年3月15日、[料金のページ](https://ai.google.dev/gemini-api/docs/pricing)には古い2026年10月2日の警告が残っています。LaoZhang APIでは、2026年10月5日時点で、同じ料金で引き続き提供しています。
> * 移行先は、Nano Banana 2.1（`gemini-nano-banana-2.1`）かNano Banana 2（`gemini-3.1-flash-image`）です。1Kの画像を低コストで生成するなら、Nano Banana 2 Lite（`gemini-3.1-flash-lite-image`）も選べます。

### 画像を生成する

次の例は、前述の「Pythonヘルパー」を使います。

> [tab] Python
>
> ```python theme={null}
> from nano_banana import openai_client, save_chat_images
>
> response = openai_client().chat.completions.create(
>     model="gemini-2.5-flash-image",
>     messages=[{
>         "role": "user",
>         "content": "Generate an image of a red fox sitting in fresh snow at sunrise, soft golden light.",
>     }],
> )
> for path in save_chat_images(response.choices[0].message.content, "standard-fox"):
>     print("保存しました", path)
> ```

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1/chat/completions" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "model": "gemini-2.5-flash-image",
>     "stream": false,
>     "messages": [{
>       "role": "user",
>       "content": "Generate an image of a red fox sitting in fresh snow at sunrise, soft golden light."
>     }]
>   }' \
>   -o standard-response.json
>
> python nano_banana.py standard-response.json standard-fox
> ```

結果は、返ってきた形式に応じて `standard-fox.png`、`.jpg`、`.webp` のいずれかで保存されます。画像を求めることを明示してください。質問のような文面のプロンプトでは、テキストだけの回答になることがあります。

1:1以外の比率にしたいときは、Geminiネイティブのエンドポイントを呼び出し、`aspectRatio` を指定して `imageSize` は指定しません。

```python theme={null}
from nano_banana import generate_content, save_native_images

result = generate_content(
    "gemini-2.5-flash-image",
    [{"text": "Generate an image of a lighthouse on a rocky coast at dusk, wide cinematic view."}],
    image_config={"aspectRatio": "16:9"},
)
for path in save_native_images(result, "standard-lighthouse"):
    print("保存しました", path)
```

### 画像を編集する

指示と画像を1つのユーザーメッセージに入れて送ります。`to_data_url` は、ローカルファイルを、MIMEタイプが合ったデータURLに変換します。

```python theme={null}
from nano_banana import openai_client, save_chat_images, to_data_url

response = openai_client().chat.completions.create(
    model="gemini-2.5-flash-image",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Replace the background with a plain light-gray studio wall. Keep the product unchanged."},
            {"type": "image_url", "image_url": {"url": to_data_url("product.jpg")}},
        ],
    }],
)
for path in save_chat_images(response.choices[0].message.content, "standard-edit"):
    print("保存しました", path)
```

cURLでのリクエスト、最大3枚の画像の組み合わせ、編集時のアスペクト比の指定、編集指示の書き方は、[Nano Bananaの画像編集（Standard）](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md)を参照してください。

### 新しいモデルに移行する

リクエストの形式はNano Bananaのモデル間で共通なので、移行は主に `model` を変えるだけです。

* `gemini-3.1-flash-lite-image`（Nano Banana 2 Lite）：1K出力と10種のアスペクト比はそのままです。
* `gemini-nano-banana-2.1`（Nano Banana 2.1）：1Kから4Kの出力、14種のアスペクト比、最大14枚の参照画像が加わり、料金はNano Banana 2より低くなります。
* `gemini-3.1-flash-image`（Nano Banana 2）：512pxから4Kの出力、14種のアスペクト比、最大14枚の参照画像が加わります。

Pythonヘルパーを使えば、上の灯台のリクエストは、モデルIDを変えるだけでNano Banana 2でも動きます。さらに `imageSize` も指定できるようになります。

```python theme={null}
from nano_banana import generate_content, save_native_images

result = generate_content(
    "gemini-3.1-flash-image",
    [{"text": "Generate an image of a lighthouse on a rocky coast at dusk, wide cinematic view."}],
    image_config={"aspectRatio": "16:9", "imageSize": "2K"},
)
for path in save_native_images(result, "lighthouse-2k"):
    print("保存しました", path)
```

新しいモデルは同じプロンプトでも解釈が変わることがあるため、切り替えたあとは、普段のプロンプトを実行し直してください。編集リクエストの移行は、編集ガイドの[Nano Banana 2への移行](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md)に従ってください。

## 大きな画像と画像URL

**Base64でエンコードした画像を含め、リクエスト本文全体を20 MB以内に収めてください。それより大きな参照画像は、`fileData` でURLとして渡します。** Base64にするとファイルサイズが約3分の1増えるため、`inlineData` で送る画像は合計で約15 MB以下にします。

Geminiネイティブのルートでは、`fileData` パートと `inlineData` パートを同じ `parts` 配列に混在させられます。並べた順に、1枚目、2枚目、…の参照画像として数えられます。次のリクエスト本文は、人物の写真をURLで、ジャケットをBase64で送る例です。

```json theme={null}
{
  "contents": [{
    "role": "user",
    "parts": [
      {"text": "Dress the person in the first image in the jacket from the second image."},
      {"fileData": {"mimeType": "image/jpeg", "fileUri": "https://cdn.example.com/person.jpg"}},
      {"inlineData": {"mimeType": "image/png", "data": "<Base64 data of the jacket image>"}}
    ]
  }],
  "generationConfig": {"responseModalities": ["IMAGE"]}
}
```

URLで渡すとリクエスト本文は数百バイトで済むので、数十MBある高解像度の写真もこの方法で送れます。サーバーが画像をダウンロードするため、URLは次の条件を満たす必要があります。

* ログイン、Cookie、Refererが不要な、HTTPSの直リンクであること。CAPTCHA、Cloudflareのチャレンジ、User-Agentによるフィルターの背後にないこと。
* サイトの `robots.txt` が、画像のパスへのクローラーのアクセスをブロックしていないこと。
* 署名付きURLの場合は、キューの待ち時間と再試行をカバーできる期間、有効であること。30分以上を目安にしてください。
* `mimeType` が実際の形式と一致していること。JPEGは `image/jpeg`、PNGは `image/png`、WebPは `image/webp` です。

画像をダウンロードできない場合、リクエストは `Cannot fetch content from the provided URL` を伴う400を返し、課金されません。OpenAI互換のルートでも、同じ条件で `image_url.url` に公開画像のURLを指定できます。

## トラブルシューティング

* **`Cannot fetch content from the provided URL` を伴うHTTP 400。** サーバーが `fileData` の画像をダウンロードできませんでした。前述の「大きな画像と画像URL」の条件を順に確認してください。
* **HTTP 413。** リクエスト本文が大きすぎます。大きな画像は `fileData` でURLとして渡すか、リクエスト全体が20 MB以内になるよう縮小してください。
* **HTTP 200だが画像がない。** OpenAI互換の応答にテキストしかないか、ネイティブの応答に `inlineData` パートがありません。すでに課金されているので、同じリクエストをそのまま再送せず、画像を求めることを明示するか、制限される内容を取り除いてください。詳しくは、前述の「空のレスポンスで課金されないようにする」を参照してください。
  * ネイティブの応答では、`finishReason` と、含まれていれば `promptFeedback` を確認します。
  * 値の例として、`IMAGE_SAFETY`、`IMAGE_PROHIBITED_CONTENT`、`NO_IMAGE` があります。
* **HTTP 401。** APIキーと `Authorization: Bearer` ヘッダーを確認してください。アカウントのAccessTokenではなく、トークン管理で作成したモデル用のAPIキーを使います。
* **HTTP 400。** モデルID、JSON本文、`aspectRatio` と `imageSize` がそのモデルの一覧にある値かを確認してください。Kは大文字にします。`2k` のように小文字のサイズを拒否するモデルもあります。
* **HTTP 429、5xx、タイムアウト。** 指数バックオフで再試行してください。タイムアウトしたあとは、再送する前に呼び出しログでリクエストを探し、同じ画像に二重に支払わないようにします。

## よくある質問

### Nano BananaのAPIキーを取得するには？

LaoZhang APIに[登録](https://api.laozhang.ai/register)し、[トークン管理](https://api.laozhang.ai/token)でトークンを作成します。グループは `default`、課金方式は**従量優先**（推奨）または**回数課金**を選んでください。表示される `sk-` で始まる文字列が、5つのNano Bananaモデルすべてで使えるAPIキーです。Googleアカウントも、Gemini APIのキーも必要ありません。

チャージしたら、前述の「Pythonヘルパー」で最初のリクエストを送り、各リクエストの課金額を[呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md)で確認します。

### Googleアカウントなしで使えますか？

使えます。必要なのはLaoZhang APIのキーだけで、Google Cloudのプロジェクト、Gemini APIのキー、Googleアカウントのいずれも不要です。5モデルとも、Googleの公式チャネルのモデルで、Googleのネイティブ形式と同じリクエストで呼び出せ、回数課金です。

### どのNano Bananaモデルから始めるべき？

Nano Banana 2.1（`gemini-nano-banana-2.1`）から始めてください。Nano Banana 2のテキストとレイアウトを改善したモデルで、1Kから4Kの出力と最大14枚の参照画像に対応し、1回あたりの料金はより低くなっています。512px出力が必要ならNano Banana 2、大量の1K画像ならNano Banana 2 Lite、複雑なレイアウトやブランド要件の厳しい素材ならNano Banana Proを使います。

新規の用途にStandardは使わないでください。Googleが非推奨にしており、停止日が一致しておらず（非推奨のページでは2027年3月15日、料金のページでは2026年10月2日）、いつ停止してもおかしくないためです。

すでに使っている場合は、1枚の画像を編集する1Kの用途はNano Banana 2 Liteへ、複数画像の合成はNano Banana 2.1かNano Banana 2へ移行してください。リクエストは同じ形式のまま使えます。詳しくは[Nano Banana 2への移行](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md)を参照してください。

### OpenAI互換ルートで4Kは出せますか？

出せません。Chat completionsのリクエストには、アスペクト比やサイズを指定するフィールドがないためです。同じプロンプトを、`aspectRatio` と `imageSize` を付けて、Geminiネイティブのエンドポイントに送ってください。

### 出力サイズや参照画像で料金は変わりますか？

変わりません。モデルごとに1回あたりの料金は1つです。512pxでも4Kでも、思考レベルが既定でも `high` でも、参照画像が1枚でも14枚でも、生成でも編集でも同じです。別料金になるのは、Google検索グラウンディングの検索1回あたり\$0.014だけです。Googleの料金との比較は、前述の「課金」を参照してください。

### 失敗、タイムアウト、画像なしでも課金される？

画像がないHTTP 200は1回分が課金されます。プロンプトが画像を求めていなかった場合や、上流の安全フィルターでブロックされた場合も同じです。クライアントのタイムアウトも課金される場合がありますが、429や503などの200以外の上流応答は課金されません。

各リクエストのステータスと課金額は[呼び出しログ](https://api.laozhang.ai/log)にあります。ケースごとの対処は、前述の「課金」で説明しています。

### 1回のリクエストで複数枚を得られますか？

期待しないでください。Googleは、プロンプトで求めた枚数をモデルが必ず返すとは限らないとしています。複数枚が必要なら、リクエストを複数回送ってください。1回につき1回分が課金されます。

ただし、1つのレスポンスに複数の画像が入ることはあります。Gemini 3の画像モデルは、思考中に構図を試すための途中の画像を作り、それが結果と一緒に返ることがあります。最後の画像が最終結果です。Pythonヘルパーはすべての画像を順に保存するので、番号が最大のファイルが最後の画像です。

### プロンプトに向いている言語は？

Googleは、最も性能が高いプロンプト言語として、英語と、ほかの14のロケールを挙げています。中国語（zh-CN）、日本語、韓国語、スペイン語、ドイツ語、フランス語などが含まれます。それ以外の言語でも動作しますが、結果の一貫性が下がる場合があります。

### 生成画像に透かしは入りますか？

入ります。Googleによると、Nano Bananaモデルが生成するすべての画像にSynthIDの透かしが含まれます。SynthIDは画像に埋め込まれていて、人の目には見えませんが、ツールで画像がAI生成かどうかを識別できます。

### 入力できる画像形式は？

Googleは、対応する画像形式として、PNG、JPEG、WebP、HEIC、HEIFを挙げています。このサイトの例とPythonヘルパーが扱えるのはPNG、JPEG、WebPなので、HEICやHEIFの写真は先にJPEGに変換してください。形式にかかわらず、`mimeType` かデータURLのプレフィックスは、ファイルの実際の形式と一致させます。

Base64にするとファイルが約3分の1大きくなるため、非常に大きな写真は、送る前に縮小してください。リクエスト本文が20 MBを超えそうなときは、画像をURLで渡します。前述の「大きな画像と画像URL」を参照してください。

### 真っ白な背景に黒い斑点が出るのはなぜ？

Nano BananaはGoogleのAI Studioのルートで動いており、広い範囲の真っ白な部分に、黒い斑点、にじみ、グレーのもや、色かぶりが出ることがあります。混雑する時間帯に多くなります。代わりに、明るい別の色の背景を指定してください。

* ライトグレー：`light gray background, #F5F5F5`
* ベージュ：`beige background, #F5F0E5`
* ライトブルー：`light blue background, #E8F0F8`

背景の説明だけを変えても、被写体の色には影響しません。どうしても真っ白が必要なときは、自分の後処理で背景を置き換えてください。欠陥のある画像も、ほかの呼び出しと同じように課金されるため、大量に実行する前に、いくつかのサンプルで確認してください。

## 参考資料と関連ページ

* [Google: Nano Banana image generation](https://ai.google.dev/gemini-api/docs/image-generation) — モデル名、出力サイズ、アスペクト比、参照画像の上限、思考、グラウンディング、対応言語、SynthID
* [Google: image understanding](https://ai.google.dev/gemini-api/docs/image-understanding) — 対応している入力画像の形式
* [Google: Gemini API pricing](https://ai.google.dev/gemini-api/docs/pricing) — Googleの画像モデルの料金と検索グラウンディングの料金
* [Google: generateContent reference](https://ai.google.dev/api/generate-content) — `imageConfig` のフィールドと `imageSize` の値
* [Google: Gemini API deprecations](https://ai.google.dev/gemini-api/docs/deprecations) — 上流のモデルの停止日
* [Nano Bananaの画像編集（Standard）](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md)と[Nano Banana Proの画像編集](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image-edit.md) — 編集の完全なガイド
* [モデルと料金](https://docs.laozhang.ai/ja/models.md) — LaoZhang APIの最新の価格とグループ
* [呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md) — リクエストのステータスと課金額の確認
* [Geminiプロトコル](https://docs.laozhang.ai/ja/api-reference/gemini.md)と[OpenAIプロトコル](https://docs.laozhang.ai/ja/api-reference/chat-completions.md) — 各ルートのクライアント設定
* [画像APIの比較](https://docs.laozhang.ai/ja/api-capabilities/image-generation-guide.md) — Nano Bananaと、[GPT Image 2.5](https://docs.laozhang.ai/ja/api-capabilities/gpt-image-2-5.md)、[FLUX.2](https://docs.laozhang.ai/ja/api-capabilities/flux-image-generation.md)、[Seedream](https://docs.laozhang.ai/ja/api-capabilities/seedream-image.md)の比較


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.