> ## 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 2.1 APIの料金と使い方：画像の生成と編集

> gemini-nano-banana-2.1をLaoZhang APIのキーだけで呼び出せます。1Kから4Kまで1回$0.045、14種のアスペクト比、14枚の参照画像に対応し、実行できるコードも載せています。

Nano Banana 2.1は、Googleが2026年10月にNano Banana 2を更新したモデルです。文字の描画が鮮明になり、インフォグラフィックのレイアウトが正確になり、複数回の編集での一貫性も向上しました。料金はNano Banana 2より低くなっています。

## Nano Banana 2.1の対応内容

| 項目 | 内容 |
| - | - |
| モデルID | `gemini-nano-banana-2.1`（安定版）。Google Gemini Nano Banana 2.1 |
| 料金 | 1K、2K、4Kのどれでも**1回\$0.045**。生成も編集も同じ |
| アカウント | Googleアカウントは不要。LaoZhang APIのキーだけ |
| トークン | `default` グループ。課金方式は従量優先（推奨）または回数課金 |
| エンドポイント | アスペクト比と出力サイズを指定できるのはGeminiネイティブの `generateContent`。OpenAI互換の `/v1/chat/completions` は1K画像を返す |
| 同時実行とレート制限 | プラットフォーム側の同時実行数の上限や速度制限はありません。`429` は上流の処理能力に由来します。詳しくは[同時実行と429エラー](https://docs.laozhang.ai/ja/faq/api-concurrency.md) |
| 課金 | HTTP 200の応答は、画像がなくても1回分が課金されます。200以外（400、429、5xx）は課金されません。詳しくは[課金と失敗時の扱い](https://docs.laozhang.ai/ja/api-capabilities/image-billing-and-failures.md) |

公開価格は2026年10月7日時点のもので、2026年10月14日に確認しています。最新の価格は[モデルと料金](https://docs.laozhang.ai/ja/models.md)を参照してください。2026年10月7日と14日に1K、2K、4Kで試した呼び出しは、いずれも\$0.045で記録されました。

モデルはGoogleの公式チャネルのもので、回数課金のルートは固定料金のため、2Kと4Kの画像はGoogleの標準価格（2Kで\$0.0504、4Kで\$0.113）より低くなります。Googleとの比較は、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.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)

下の生成例の出力：2K、16:9。プロンプト：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".

### パラメーターと制限

| パラメーター | 値 |
| - | - |
| 出力サイズ `imageSize` | `1K`（既定）、`2K`、`4K`。Kを大文字にした文字列で指定する。`512` は使えない |
| アスペクト比 `aspectRatio` | 14種：`1:1`、`1:4`、`1:8`、`2:3`、`3:2`、`3:4`、`4:1`、`4:3`、`4:5`、`5:4`、`8:1`、`9:16`、`16:9`、`21:9`。省略するとモデルが選ぶ |
| 参照画像 | 最大14枚。内訳は、オブジェクト画像が最大10枚、人物画像が最大4枚 |
| 1回のリクエストの画像数 | 1枚。複数枚が必要なときは、リクエストを複数回送る |
| 思考（Thinking） | `minimal`、`medium`（既定）、`high`。料金はどれも同じ |
| 出力形式 `imageOutputOptions` | `image/png`（既定）または `image/jpeg`。JPEGでは `compressionQuality` も指定できる。WebPは不可。Geminiネイティブのリクエストのみ。後述のFAQ「JPEG出力は使えますか？」を参照 |
| Google検索グラウンディング | ウェブ検索と画像検索。検索1回あたり\$0.014 |

5つのNano Bananaモデルの比較は、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)を参照してください。

## Nano Banana 2.1とNano Banana 2の違い

どちらのモデルも、同じリクエストを受け付け、同じ形のレスポンスを返します。切り替えるときに変えるのは、モデルIDだけです。

| | Nano Banana 2.1 | Nano Banana 2 |
| - | - | - |
| モデルID | `gemini-nano-banana-2.1` | `gemini-3.1-flash-image` |
| LaoZhang APIの料金 | 1回\$0.045 | 1回\$0.055 |
| 出力サイズ | `1K`、`2K`、`4K` | `512`、`1K`、`2K`、`4K` |
| 思考レベル | `minimal`、`medium`（既定）、`high` | `minimal`（既定）、`high` |
| 比率、参照画像、グラウンディング | 同じ | 同じ |

> [card] 新規のプロジェクト：Nano Banana 2.1
>
> 1Kから4Kで、1回あたりの料金が低く、文字とレイアウトも向上しています。

> [card] [512pxのプレビュー：Nano Banana 2](https://docs.laozhang.ai/ja/api-capabilities/nano-banana2-image.md)
>
> Nano Banana 2.1に `512` のサイズはありません。Nano Banana 2は同じ料金で引き続き使えるため、既存の連携を移行する必要はありません。

このページの生成例を、2026年10月14日に2K、16:9で両方のモデルに送った結果です。

![雨上がりの夕暮れの街角のカフェ。黄色と赤のネオンの「BANANA CAFE」の看板とバナナのアイコン。Nano Banana 2.1で生成](https://mintcdn.com/laozhangai-edd05f2c/nO-3-m3eSAbAbdWF/images/samples/nb21-cmp-en-nb21-2k.jpg?fit=max\&auto=format\&n=nO-3-m3eSAbAbdWF\&q=85\&s=d6d3ef2794d75a7e780d83552f5f9b62)

Nano Banana 2.1、2K、16:9：25秒、\$0.045。プロンプト：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".

![雨上がりの夕暮れの街角のカフェ。1行のネオンの「BANANA CAFE」の看板と、隣の書店。Nano Banana 2で生成](https://mintcdn.com/laozhangai-edd05f2c/nO-3-m3eSAbAbdWF/images/samples/nb21-cmp-en-nb2-2k.jpg?fit=max\&auto=format\&n=nO-3-m3eSAbAbdWF\&q=85\&s=91a1d0d70fcc2dd803104227b8122798)

Nano Banana 2、2K、16:9：21秒、\$0.055。プロンプト：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".

## 呼び出す前に

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

[トークン管理](https://api.laozhang.ai/token)で、`default` グループのキーを作成し、**課金方式**（计费模式）を**従量優先**（按量优先、推奨）または**回数課金**（按次计费）にします。**従量課金**（按量计费）のキーは、Nano Banana 2.1のような回数課金のモデルを呼び出せません。

**2. キーを設定し、依存パッケージをインストールする**

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

**3. cURL用の保存関数を追加する**

cURLの例には `jq` が必要です。次のシェル関数は、Geminiネイティブのレスポンスにある、思考用ではない最後の画像を、`mimeType` に合った拡張子で保存します。

```bash theme={null}
save_image() {
  local image='[.candidates[]?.content.parts[]? | select(.inlineData and (.thought | not))][-1].inlineData'
  local ext
  case "$(jq -r "$image.mimeType" "$1")" in
    image/png) ext=png ;;
    image/jpeg) ext=jpg ;;
    image/webp) ext=webp ;;
    *) jq '{error, promptFeedback, finishReasons: [.candidates[]?.finishReason]}' "$1"; return 1 ;;
  esac
  jq -r "$image.data" "$1" | base64 --decode > "$2.$ext" && echo "保存しました: $2.$ext"
}
```

レスポンスに画像がないときは、代わりに、エラー、`promptFeedback`、`finishReason` の各フィールドが出力されます。

リクエストの所要時間は、通常15〜40秒で、4Kはそれより長くなります。2026年10月7日と14日に測定した、出力ピクセル数と単発リクエストの所要時間は次のとおりです。料金はいずれも\$0.045でした。

| `imageSize` | 1:1の出力 | 16:9の出力 | 測定した所要時間 |
| - | - | - | - |
| `1K` | 1024×1024 | 1376×768 | 19〜21秒 |
| `2K` | 2048×2048 | 2752×1536 | 25〜30秒 |
| `4K` | 4096×4096 | 5504×3072 | 33〜50秒 |

例では300秒を許容しています。クライアントとプロキシにも同じだけの余裕を持たせてください。まれにこの制限を超えるリクエストがあるため、タイムアウトしたリクエストを再送する前に、[呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md)を確認してください。

## 画像を生成する

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-nano-banana-2.1:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "contents": [{
>       "role": "user",
>       "parts": [{"text": "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\"."}]
>     }],
>     "generationConfig": {
>       "responseModalities": ["IMAGE"],
>       "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
>     }
>   }' \
>   -o nb21-response.json
>
> save_image nb21-response.json nb21-cafe
> ```

> [tab] Python
>
> 次のスクリプトを `nano_banana_21.py` として保存します。プロンプトから画像を生成するか、プロンプトの後ろに指定した画像を編集します。
>
> ```python theme={null}
> """Nano Banana 2.1（gemini-nano-banana-2.1）で画像を生成または編集する。"""
> import argparse
> import base64
> import os
> import sys
> from pathlib import Path
>
> import requests
>
> URL = "https://api.laozhang.ai/v1beta/models/gemini-nano-banana-2.1:generateContent"
> RATIOS = ["1:1", "1:4", "1:8", "2:3", "3:2", "3:4", "4:1", "4:3", "4:5", "5:4", "8:1", "9:16", "16:9", "21:9"]
> SIZES = ["1K", "2K", "4K"]
> MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
> EXTENSIONS = {"image/png": "png", "image/jpeg": "jpg", "image/webp": "webp"}
>
> parser = argparse.ArgumentParser(description="画像を生成する。画像ファイルを渡した場合はそれを編集する。")
> parser.add_argument("prompt")
> parser.add_argument("images", nargs="*", help="参照画像（PNG、JPEG、WebP、最大14枚）")
> parser.add_argument("--ratio", choices=RATIOS, help="アスペクト比。省略するとモデルが選ぶ")
> parser.add_argument("--size", default="1K", choices=SIZES)
> parser.add_argument("--thinking", choices=["minimal", "medium", "high"], help="省略すると既定のmedium")
> parser.add_argument("--out", default="nano-banana-21", help="拡張子を除いた出力ファイル名")
> args = parser.parse_args()
> if len(args.images) > 14:
>     sys.exit("参照画像は最大14枚までです。")
>
> parts = [{"text": args.prompt}]
> for path in args.images:
>     mime = MIME_TYPES.get(Path(path).suffix.lower())
>     if mime is None:
>         sys.exit(f"PNG、JPEG、WebPのいずれかのファイルを指定してください: {path}")
>     data = base64.b64encode(Path(path).read_bytes()).decode("ascii")
>     parts.append({"inlineData": {"mimeType": mime, "data": data}})
>
> config = {"responseModalities": ["IMAGE"], "imageConfig": {"imageSize": args.size}}
> if args.ratio:
>     config["imageConfig"]["aspectRatio"] = args.ratio
> if args.thinking:
>     config["thinkingConfig"] = {"thinkingLevel": args.thinking}
>
> response = requests.post(
>     URL,
>     headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
>     json={"contents": [{"role": "user", "parts": parts}], "generationConfig": config},
>     timeout=300,
> )
> if response.status_code != 200:
>     sys.exit(f"HTTP {response.status_code}: {response.text[:500]}")
>
> result = response.json()
> images = [
>     part["inlineData"]
>     for candidate in result.get("candidates") or []
>     for part in (candidate.get("content") or {}).get("parts") or []
>     if "inlineData" in part and not part.get("thought")
> ]
> if not images:
>     reasons = [candidate.get("finishReason") for candidate in result.get("candidates") or []]
>     sys.exit(f"画像が返されませんでした: {result.get('promptFeedback') or reasons}")
> for number, image in enumerate(images, start=1):
>     suffix = "" if number == 1 else f"-{number}"
>     output = Path(f"{args.out}{suffix}.{EXTENSIONS.get(image['mimeType'], 'bin')}")
>     output.write_bytes(base64.b64decode(image["data"]))
>     print("保存しました", output)
> ```
>
> 4K、16:9の画像を生成します。
>
> ```bash theme={null}
> python nano_banana_21.py "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\"." --ratio 16:9 --size 4K --out nb21-cafe
> ```

画像は、`candidates[0].content.parts[].inlineData.data` にBase64で入って返り、形式は `mimeType` でわかります。どちらの例も、デコードして、形式に合ったPNG、JPEG、WebPのファイルとして保存します。

`aspectRatio` を省略すると、モデルがプロンプトからフレームを選びます。1:1と16:9の出力ピクセル数は、前述の「呼び出す前に」の表にあります。ほかの比率は、Googleの[画像生成ガイド](https://ai.google.dev/gemini-api/docs/image-generation)を参照してください。

## 画像を編集する

最初に指示、そのあとに参照画像を `inlineData` パートとして送ります。プロンプトでは、画像を順番で指します（「1枚目の画像」「2枚目の画像」）。Nano Banana 2.1は最大14枚の参照画像に対応し、内訳はオブジェクト画像が最大10枚、人物画像が最大4枚です。

> [tab] cURL
>
> このリクエストは、2つのローカルファイルを組み合わせます。大きな画像でもシェルの引数の上限を超えないよう、リクエスト本文は `jq` で組み立てます。それぞれの `mimeType` は、ファイルの形式と一致させてください。
>
> ```bash theme={null}
> base64 < product.png | tr -d '\n' > product.b64
> base64 < scene.jpg | tr -d '\n' > scene.b64
> jq -n --rawfile product product.b64 --rawfile scene scene.b64 '{
>   contents: [{
>     role: "user",
>     parts: [
>       {text: "1枚目の画像の商品を、2枚目の画像のテーブルの上に置いてください。シーンの照明に合わせ、商品のラベルの文字は読める状態を保ってください。"},
>       {inlineData: {mimeType: "image/png", data: $product}},
>       {inlineData: {mimeType: "image/jpeg", data: $scene}}
>     ]
>   }],
>   generationConfig: {
>     responseModalities: ["IMAGE"],
>     imageConfig: {aspectRatio: "3:2", imageSize: "2K"}
>   }
> }' > nb21-edit-request.json
>
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-nano-banana-2.1:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   --data-binary @nb21-edit-request.json \
>   -o nb21-edit-response.json
>
> save_image nb21-edit-response.json nb21-product-scene
> ```

> [tab] Python
>
> 前述の「画像を生成する」の `nano_banana_21.py` を使い、プロンプトの後ろにファイルを並べます。
>
> ```bash theme={null}
> # 画像を1枚編集する
> python nano_banana_21.py "このシーンを雪の朝に変えてください。建物、看板の文字、構図はそのままにしてください。" nb21-cafe.jpg --ratio 16:9 --size 2K --out nb21-snow
>
> # 3枚の参照画像を組み合わせる：商品、シーン、雰囲気を決める3枚目の画像
> python nano_banana_21.py "1枚目の画像の商品を2枚目の画像のテーブルの上に置き、3枚目の画像のスタイルで描いてください。" product.png scene.jpg style.jpg --ratio 3:2 --size 2K --out nb21-composite
> ```

変えてはいけない部分を明示し、細かく制御したいときは、1回のリクエストでは1つの変更だけを指示します。シリーズを通して人物を一貫させたいときは、その人物の写真を人物の参照画像（最大4枚）として渡します。

### 大きな画像をURLで渡す

リクエスト本文全体は20 MB以内に収めてください。参照画像が大きい場合や、すでにCDNにある場合は、ダウンロードしてエンコードする代わりに、`fileData` パートでURLを渡します。

```bash theme={null}
curl --fail-with-body --max-time 300 \
  "https://api.laozhang.ai/v1beta/models/gemini-nano-banana-2.1:generateContent" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [
        {"text": "この写真を白黒の鉛筆スケッチに変えてください。人物と構図はそのままにしてください。"},
        {"fileData": {"mimeType": "image/jpeg", "fileUri": "https://cdn.example.com/your-photo.jpg"}}
      ]
    }],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "4:3", "imageSize": "2K"}
    }
  }' \
  -o nb21-url-edit-response.json

save_image nb21-url-edit-response.json nb21-url-edit
```

* `https://cdn.example.com/your-photo.jpg` は自分の画像のURLに置き換え、`mimeType` も画像の形式に合わせます。
* `fileData` パートと `inlineData` パートは、同じ `parts` 配列に混在させられます。並べた順に、1枚目、2枚目、…の参照画像として数えられます。
* サーバーが画像をダウンロードするため、URLはログインなしでアクセスできる必要があります。詳しい条件は、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「大きな画像と画像URL」を参照してください。

## Google検索で画像を裏付ける

現在の事実や、実在するランドマークの見た目に依存する画像には、`googleSearch` ツールを追加します。このリクエストはウェブ検索と画像検索の両方を有効にし、モデルが書いたテキストも返るよう `TEXT` を許可しています。

```bash theme={null}
curl --fail-with-body --max-time 300 \
  "https://api.laozhang.ai/v1beta/models/gemini-nano-banana-2.1:generateContent" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "現在世界一高いビルの水彩イラストを生成してください。ビルの名前を下に書き添えてください。"}]}],
    "tools": [{"googleSearch": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio": "2:3"}
    }
  }' \
  -o nb21-grounded-response.json

save_image nb21-grounded-response.json nb21-tallest-building
jq '.candidates[0].groundingMetadata | {webSearchQueries, imageSearchQueries}' nb21-grounded-response.json
```

* `searchTypes` はオブジェクトにする必要があります。指定しない場合はウェブ検索だけが使われ、`imageSearch` だけを指定すると画像検索だけが使われます。
* 検索するかどうかと、検索の種類は、モデルが決めます。実行した検索クエリは `groundingMetadata` に入ります。
* 画像検索では、現時点で、実在の人物の画像を参照として使えません。
* 裏付けのある結果をエンドユーザーに表示する場合は、Googleの[グラウンディングガイド](https://ai.google.dev/gemini-api/docs/google-search)が求める形で、検索候補を表示してください。
* 検索1回ごとに、\$0.045の呼び出し料金に\$0.014が加算されます。2回検索したリクエストは\$0.073です。検索回数は呼び出しログで確認できます。詳しくは、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「課金」を参照してください。

## OpenAI互換ルートを使う

すでにOpenAI SDKを使っているアプリでは、`base_url` を `https://api.laozhang.ai/v1` にし、`model` を `gemini-nano-banana-2.1` にします。このルートには、アスペクト比、サイズ、形式の設定がありません。モデルがプロンプトからフレームを選んだ1KのPNGが返り、多くは16:9です。比率を固定したい場合、2Kや4Kにしたい場合、JPEGにしたい場合は、Geminiネイティブのルートを使ってください。

画像は、`message.content` の中のBase64のデータURLとして返ります。次のスクリプトを `nano_banana_21_chat.py` として保存します。

```python theme={null}
"""OpenAI互換ルートで、Nano Banana 2.1を使って画像を生成または編集する。"""
import argparse
import base64
import os
import re
import sys
from pathlib import Path

from openai import OpenAI

MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
EXTENSIONS = {"png": "png", "jpeg": "jpg", "jpg": "jpg", "webp": "webp"}

parser = argparse.ArgumentParser(description="画像を生成する。画像ファイルを渡した場合はそれを編集する。")
parser.add_argument("prompt")
parser.add_argument("images", nargs="*", help="編集する画像（PNG、JPEG、WebP）")
parser.add_argument("--out", default="nano-banana-21-chat", help="拡張子を除いた出力ファイル名")
args = parser.parse_args()

content = args.prompt
if args.images:  # 編集：指示とローカルの画像をデータURLとして送る
    content = [{"type": "text", "text": args.prompt}]
    for path in args.images:
        mime = MIME_TYPES.get(Path(path).suffix.lower())
        if mime is None:
            sys.exit(f"PNG、JPEG、WebPのいずれかのファイルを指定してください: {path}")
        encoded = base64.b64encode(Path(path).read_bytes()).decode("ascii")
        content.append({"type": "image_url", "image_url": {"url": f"data:{mime};base64,{encoded}"}})

# max_retries=0：タイムアウト後の自動リトライで画像が二重に生成・課金されるのを防ぐ
client = OpenAI(api_key=os.environ["LAOZHANG_API_KEY"], base_url="https://api.laozhang.ai/v1", timeout=300, max_retries=0)
reply = client.chat.completions.create(
    model="gemini-nano-banana-2.1",
    messages=[{"role": "user", "content": content}],
)
text = reply.choices[0].message.content or ""

found = re.findall(r"data:image/(png|jpe?g|webp);base64,([A-Za-z0-9+/=]+)", text)
if not found:
    sys.exit(f"画像が返されませんでした: {text[:300]}")
for number, (kind, encoded) in enumerate(found, start=1):
    suffix = "" if number == 1 else f"-{number}"
    output = Path(f"{args.out}{suffix}.{EXTENSIONS[kind]}")
    output.write_bytes(base64.b64decode(encoded + "=" * (-len(encoded) % 4)))
    print("保存しました", output)
```

画像を生成してから、ローカルのファイルを編集します。

```bash theme={null}
python nano_banana_21_chat.py "木のテーブルに置かれたラテの画像を生成してください。ラテアートは猫で、真上から撮影した構図にしてください。" --out nb21-chat-latte
python nano_banana_21_chat.py "この写真をゴッホ風の油絵に変換してください。構図はそのままにしてください。" photo.jpg --out nb21-chat-painting
```

## エラーと課金

無効なパラメーターはHTTP 400を返し、課金されません。14種の比率にない `aspectRatio`（たとえば `7:3`）は400を返し、エラーメッセージが空になることもあります。比率は、前述の「パラメーターと制限」の表で確認してください。

リクエスト本文が大きすぎると413を返します。大きな画像は、前述の「大きな画像をURLで渡す」の方法でURLとして渡してください。

> [!WARNING]
>
> **`imageSize` に `512` を指定してもエラーにはならず、1Kの画像が返り、課金されます。** 2026年10月8日時点で、この呼び出しは\$0.045です。`1K` を指定するか、512pxが必要ならNano Banana 2を使ってください。

* 1回の料金は\$0.045です。出力サイズ、思考レベル、参照画像の数、生成か編集かで変わりません。
* Google検索グラウンディングは、検索1回あたり\$0.014が加算されます。
* リクエストがHTTP 200で画像を返さないことがあります。たとえば、プロンプトが画像を求めていない場合や、安全チェックで出力がブロックされた場合です。
  * この場合も1回分が課金されます。
  * `finishReason` を確認し、プロンプトや参照画像を変えてから再送してください。
  * 詳しくは、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「空のレスポンスで課金されないようにする」を参照してください。
* 429と5xxのレスポンスは、バックオフを入れて再試行します。タイムアウトしたリクエストは、再送する前に[呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md)を確認してください。

## よくある質問

### Nano Banana 2から移行するには？

モデルIDを `gemini-3.1-flash-image` から `gemini-nano-banana-2.1` に変えるだけです。リクエストとレスポンスは変わりません。そのうえで、次の2点を確認してください。

* `"imageSize": "512"` を指定しているリクエストは、`1K` に変えるか、Nano Banana 2のままにします。Nano Banana 2.1は、512を指定されると1Kの画像を返し、その呼び出しを課金します。
* `thinkingLevel` を指定しない場合、Nano Banana 2.1は `medium` で思考します。Nano Banana 2の既定は `minimal` です。速い動作に合わせたい場合は、`minimal` を明示してください。

### 思考レベルの変更と料金への影響は？

Geminiネイティブのルートでは、`generationConfig.thinkingConfig.thinkingLevel` に `minimal`、`medium`、`high` のいずれかを指定します。レベルが高いほど、レイアウトと文字に労力をかけるため、時間もかかります。

```json theme={null}
"thinkingConfig": {"thinkingLevel": "high"}
```

料金は、3つのレベルのどれでも1回\$0.045です。Google自身は、思考トークンを別に課金します。`"includeThoughts": true` も指定すると、レスポンスに、`"thought": true` が付いた思考のテキストと下書きの画像が加わります。`save_image` 関数とPythonスクリプトは、これらを読み飛ばします。

### 4Kは1Kより高いですか？

いいえ。1回の料金は常に\$0.045です。2026年10月7日と14日に1K、2K、4Kで試した呼び出しは、いずれもこの金額で記録されました。Googleは出力トークンで課金し、[料金のページ](https://ai.google.dev/gemini-api/docs/pricing)によると、4K画像は約\$0.113です。1Kの画像だけで足りる場合は、[Nano Banana 2 Lite](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-lite-api.md)のほうが1回あたりの料金が低くなります。

### Nano Banana 2.1とProのどちらを使う？

1回\$0.045のNano Banana 2.1から始めてください。画像が世界知識、多言語の文字、正確なブランド要素に依存する場合や、編集でスタイルの参照や最大5枚の人物の参照画像が必要な場合は、[Nano Banana Pro](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image.md)（`gemini-3-pro-image`、1回\$0.09）に移ります。どちらも同じリクエストを受け付けるので、決める前に、自分のプロンプトで両方を試してください。

2026年10月14日に同じプロンプトを2K、16:9で実行したところ、Nano Banana 2.1は25秒、Nano Banana Proは69秒でした。

![雨上がりの夕暮れの街角のカフェ。黄色と赤のネオンの「BANANA CAFE」の看板。Nano Banana 2.1で生成](https://mintcdn.com/laozhangai-edd05f2c/nO-3-m3eSAbAbdWF/images/samples/nb21-cmp-en-nb21-2k.jpg?fit=max\&auto=format\&n=nO-3-m3eSAbAbdWF\&q=85\&s=d6d3ef2794d75a7e780d83552f5f9b62)

Nano Banana 2.1、2K、16:9：25秒、\$0.045。プロンプト：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".

![雨上がりの夕暮れの、レンガ造りの街角のカフェ。「BANANA CAFE」のネオンの看板と石畳の道。Nano Banana Proで生成](https://mintcdn.com/laozhangai-edd05f2c/nO-3-m3eSAbAbdWF/images/samples/nb21-cmp-en-pro-2k.jpg?fit=max\&auto=format\&n=nO-3-m3eSAbAbdWF\&q=85\&s=3fbd606d2b3817f65334e1556ad00f2d)

Nano Banana Pro、2K、16:9：69秒、\$0.09。プロンプト：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".

### GoogleアカウントやAI Studioのキーは必要？

必要ありません。`default` グループのLaoZhang APIキーがあれば足ります。リクエストは `https://api.laozhang.ai` に送り、このページにあるGeminiネイティブ形式とOpenAI互換形式のどちらも使えます。

### 失敗や画像なしの場合も課金されますか？

上流から200以外の応答が返った場合（無効なパラメーターの400、生成前の429や5xx）は課金されません。HTTP 200は、画像の有無にかかわらず1回分が課金されます。詳しくは、前述の「エラーと課金」と[課金と失敗時の扱い](https://docs.laozhang.ai/ja/api-capabilities/image-billing-and-failures.md)を参照してください。

### JPEG出力は使えますか？

使えます。Geminiネイティブのルートで、`generationConfig.imageConfig` に `imageOutputOptions` を追加します。

```json theme={null}
"imageConfig": {
  "aspectRatio": "1:1",
  "imageSize": "1K",
  "imageOutputOptions": {"mimeType": "image/jpeg", "compressionQuality": 80}
}
```

* `mimeType` に指定できるのは `image/png`（既定）と `image/jpeg` です。`image/webp` は400を返し、課金されません。
* `compressionQuality` はJPEGにだけ適用され、0から100の値を取ります。値が小さいほどファイルが小さくなります。
* レスポンスの `inlineData.mimeType` は `image/jpeg` に変わります。同じ1Kの正方形画像は、PNGで約1.1 MB、JPEGで40〜60 KBになり、料金は同じです。
* OpenAI互換のルートでは形式を指定できず、常にPNGが返ります。

### OpenAI互換ルートが横長を返すのはなぜ？

このルートはアスペクト比を渡せないため、モデルがプロンプトからフレームを選び、多くは16:9になります。正方形や縦長にしたいときは、Geminiネイティブのルートで `aspectRatio` を指定してください。

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

* [Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md) — 5モデル、2つのプロトコル、課金の比較
* [Nano Banana 2](https://docs.laozhang.ai/ja/api-capabilities/nano-banana2-image.md) — 512px出力が必要な場合
* [Nano Banana 2 Lite](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-lite-api.md) — 低コストの1K画像
* [Nano Banana Pro](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image.md) — 複雑なレイアウトとブランド要件の厳しい素材
* [Geminiプロトコル](https://docs.laozhang.ai/ja/api-reference/gemini.md) — ネイティブのリクエスト構造とSDKの設定
* [Google: Gemini Nano Banana 2.1](https://ai.google.dev/gemini-api/docs/models/gemini-nano-banana-2.1) — 公式の機能と制限
* [Google: Nano Banana image generation](https://ai.google.dev/gemini-api/docs/image-generation) — サイズ、アスペクト比、参照画像の上限
* [呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md) — リクエストのステータスと課金額の確認


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