> ## 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 Lite APIの使い方：1K画像の生成と編集

> gemini-3.1-flash-lite-imageで1K画像を1回$0.025で生成・編集できます。GoogleアカウントなしでLaoZhang APIのキーから使え、10種のアスペクト比とサンプルコードを載せています。

Nano Banana 2 Liteは、GoogleがGeminiの画像モデルの中で最も速く最も安いと位置づけるモデルです。1K画像、手早い編集、大量の処理に向いています。

## Liteの対応内容

| 項目 | 内容 |
| - | - |
| モデルID | `gemini-3.1-flash-lite-image`（安定版） |
| 料金 | **1回\$0.025**。生成も編集も同じで、Googleの標準価格の1枚\$0.0336より低い（2026年9月24日時点の公開価格。[AIモデルのAPI料金一覧](https://docs.laozhang.ai/ja/models.md)を参照） |
| アカウント | Googleアカウントは不要。LaoZhang APIのキーだけ |
| 同時実行とレート制限 | プラットフォーム側の同時実行数の上限や速度制限はありません。`429` は上流の処理能力に由来します。詳しくは[同時リクエストと429](https://docs.laozhang.ai/ja/faq/api-concurrency.md) |
| 課金 | HTTP 200の応答は、画像がなくても1回分が課金されます。200以外は課金されません。詳しくは[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「課金」 |
| エンドポイント | Geminiネイティブの `generateContent`、またはOpenAI互換のchat completions |
| 出力サイズ | 1Kのみ |
| アスペクト比 | Geminiネイティブのルートで10種：`1:1`、`2:3`、`3:2`、`3:4`、`4:3`、`4:5`、`5:4`、`9:16`、`16:9`、`21:9` |
| 入力 | テキストと、最大14枚のオブジェクト画像 |
| 出力 | レスポンス内のBase64の画像 |
| Google検索グラウンディング | 非対応 |

OpenAI互換のルートには比率の設定がなく、テキストだけのプロンプトでは1:1の画像が返ります。

![ダークグレーの背景にシアンのアクセントを使った、モダンな物流ダッシュボード。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)

下の生成例の出力：1K、16:9。プロンプト：Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights.

Googleによると、Liteは多数の参照画像や、複数回にわたる編集には最適化されていません。

* そうした用途、2Kや4Kの出力、Google検索グラウンディングには、[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)を使ってください。
* 最も複雑なレイアウトには、[Nano Banana Pro](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image.md)を使ってください。
* 5つのモデルの比較は、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)にあります。

## 呼び出す前に

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

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

Liteには回数課金の料金しかないため、**従量課金**（按量计费）のキーでは呼び出せません。リクエストが課金される条件は、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「課金」で説明しています。

**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` の各フィールドが出力されます。

## 画像を生成する

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "contents": [{
>       "role": "user",
>       "parts": [{"text": "Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights."}]
>     }],
>     "generationConfig": {
>       "responseModalities": ["IMAGE"],
>       "imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
>     }
>   }' \
>   -o lite-response.json
>
> save_image lite-response.json lite-dashboard
> ```

> [tab] Python
>
> 次のスクリプトを `nano_banana_lite.py` として保存します。プロンプトから画像を生成するか、プロンプトの後ろに指定した画像を編集します。
>
> ```python theme={null}
> """Nano Banana 2 Lite（gemini-3.1-flash-lite-image）で1K画像を生成または編集する。"""
> import argparse
> import base64
> import os
> import sys
> from pathlib import Path
>
> import requests
>
> URL = "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent"
> RATIOS = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]
> 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="アスペクト比。省略すると1:1、または入力画像に合わせる")
> parser.add_argument("--out", default="nano-banana-lite", 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}})
>
> image_config = {"imageSize": "1K"}
> if args.ratio:
>     image_config["aspectRatio"] = args.ratio
>
> response = requests.post(
>     URL,
>     headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
>     json={
>         "contents": [{"role": "user", "parts": parts}],
>         "generationConfig": {"responseModalities": ["IMAGE"], "imageConfig": image_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)
> ```
>
> 16:9の画像を生成します。
>
> ```bash theme={null}
> python nano_banana_lite.py "Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights." --ratio 16:9 --out lite-dashboard
> ```

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

## 画像を編集する

`parts` には、最初に指示、そのあとに画像を入れます。ローカルのファイルはBase64の `inlineData` として送り、`mimeType` はファイルの形式に合わせます。

> [tab] cURL
>
> 大きな画像でもシェルの引数の上限を超えないよう、リクエスト本文は `jq` で組み立てます。
>
> ```bash theme={null}
> base64 < product.jpg | tr -d '\n' > product.b64
> jq -n --rawfile image product.b64 '{
>   contents: [{
>     role: "user",
>     parts: [
>       {text: "商品はそのままにして、背景を明るいグレーのスタジオの壁に置き換えてください。"},
>       {inlineData: {mimeType: "image/jpeg", data: $image}}
>     ]
>   }],
>   generationConfig: {
>     responseModalities: ["IMAGE"],
>     imageConfig: {aspectRatio: "4:5", imageSize: "1K"}
>   }
> }' > lite-edit-request.json
>
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   --data-binary @lite-edit-request.json \
>   -o lite-edit-response.json
>
> save_image lite-edit-response.json lite-product
> ```

> [tab] Python
>
> 前述の「画像を生成する」の `nano_banana_lite.py` を使い、プロンプトの後ろにファイルを渡します。
>
> ```bash theme={null}
> python nano_banana_lite.py "商品はそのままにして、背景を明るいグレーのスタジオの壁に置き換えてください。" product.jpg --ratio 4:5 --out lite-product
> ```

Liteでよく使う編集は、背景の差し替え、色の変更、ステッカーの追加、手早いバリエーション作りです。変えてはいけない部分は指示の中で明示してください。複数の参照画像から1枚を組み立てる場合は、Nano Banana 2.1かNano Banana 2を使ってください。

## OpenAI互換ルートを使う

すでにOpenAI SDKを使っているアプリでは、chat completionsでLiteを呼び出せます。このルートには比率とサイズの設定がないため、テキストだけのプロンプトでは1:1の1K画像が返ります。画像は、`message.content` の中のBase64のデータURLとして返ります。次のスクリプトを `nano_banana_lite_chat.py` として保存します。

```python theme={null}
"""OpenAI互換ルートで、Nano Banana 2 Liteを使って画像を生成または編集する。"""
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-lite-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-3.1-flash-lite-image",
    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_lite_chat.py "モバイル向けランディングページに使う、青を基調にしたすっきりしたSaaSのイラストを生成してください。" --out lite-chat-illustration
python nano_banana_lite_chat.py "この写真をフラットなベクターイラストに変えてください。構図はそのままにしてください。" photo.jpg --out lite-chat-vector
```

## Liteで大量に処理する

Liteは、下書き、プレビュー、多くの画像を作る対話型のアプリに向いています。プラットフォームは同時実行数を制限しておらず、ときどき返る `429` は上流の処理能力に由来します。詳しくは[同時リクエストと429](https://docs.laozhang.ai/ja/faq/api-concurrency.md)を参照してください。本番のトラフィックでは、次の点を守ってください。

1. 画像ごとにクライアントを作らず、HTTP接続を再利用します。
2. 429、5xx、ネットワークエラーは、ジッター付きの指数バックオフで再試行します。
3. 業務上のタイムアウトを設定し、タイムアウトしたリクエストを再試行する前に[呼び出しログ](https://api.laozhang.ai/log)を確認して、二重課金を避けます。
4. 画像のないHTTP 200のレスポンスは再試行しません。すでに課金されており、同じ内容を再送しても、たいていまた何も返りません。
5. 呼び出しごとに、モデル、ステータスコード、所要時間、リクエスト時刻を記録します。
6. 継続的な運用を始める前に、想定するピークの同時実行数、1日の処理量、入力画像のサイズを、サポート（[hi@laozhang.ai](mailto:hi@laozhang.ai)）に送って処理能力を確認します。

## エラーと課金

* Liteが対応するのは `1K` だけです。`512`、`2K`、`4K` は送らず、ほかのサイズにはNano Banana 2.1、Nano Banana 2、Proを使ってください。
* サイズのKは大文字で書きます。Googleは `1k` のような小文字の値を受け付けません。
* リクエストがHTTP 200で画像を返さないことがあります。たとえば、プロンプトが画像を求めていない場合や、安全チェックで出力がブロックされた場合です。1回分が課金されるため、プロンプトや画像を変えてから再送してください。詳しくは、[Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md)の「空のレスポンスで課金されないようにする」を参照してください。
* HTTP 401は、キーか `Authorization: Bearer` ヘッダーが間違っていることを示します。429と5xxのレスポンスは、バックオフを入れて再試行します。

## よくある質問

### 2K・4K出力やグラウンディングは使える？

どちらも使えません。Liteの出力は1Kだけで、グラウンディングにも対応していません。同じリクエストのまま、モデルIDを変えるだけで次のモデルに切り替えられます。

* 1Kから4K：`gemini-nano-banana-2.1`（Nano Banana 2.1、1回\$0.045）
* 512px、14種のアスペクト比、ウェブ検索と画像検索のグラウンディングも必要：`gemini-3.1-flash-image`（Nano Banana 2）
* 複雑なレイアウトで1Kから4K、ウェブ検索のグラウンディング：`gemini-3-pro-image`（Nano Banana Pro）

### 複数画像の合成や人物の一貫性に向いている？

あまり向いていません。Liteは最大14枚のオブジェクト画像を受け付けますが、Googleの参照画像の表には、Liteの人物やスタイルの参照が載っていません。また、複数の参照入力や、複数回にわたる連続編集には最適化されていないとGoogleは説明しています。

Liteが得意なのは、色の変更や背景の調整といった、1枚の画像の部分的な編集です。複数の画像を1枚にまとめたり、シリーズを通して同じ人物を一貫させたりするには、オブジェクト画像を最大10枚、人物画像を最大4枚受け付けるNano Banana 2.1かNano Banana 2を使ってください。

### gemini-3.1-flash-lite-imageは安定版のID？

はい。Googleのモデルページでは安定版として掲載されており、`-preview` の接尾辞はありません。書かれているとおりに指定してください。

### Liteを高い同時実行数で使える？

使えます。プラットフォームは同時実行数を制限していません。運用を始める前に、前述の「Liteで大量に処理する」に従ってリトライとタイムアウトを設定し、上流の処理能力を確認できるよう、想定するピークをサポートに伝えてください。

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

* [Nano Bananaの概要](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image.md) — 5モデル、2つのプロトコル、課金の比較
* [Nano Banana 2.1](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-2-1-image.md) — 1Kから4Kの出力、14種のアスペクト比、検索グラウンディングを低い料金で
* [Nano Banana 2](https://docs.laozhang.ai/ja/api-capabilities/nano-banana2-image.md) — 512pxから4Kの出力、14種のアスペクト比、検索グラウンディング
* [Nano Banana Pro](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-pro-image.md) — 複雑なレイアウトとブランド要件の厳しい素材
* [Standardの編集](https://docs.laozhang.ai/ja/api-capabilities/nano-banana-image-edit.md) — `gemini-2.5-flash-image` の編集を移行するときの、LiteとNano Banana 2の選び方
* [Google: Nano Banana image generation](https://ai.google.dev/gemini-api/docs/image-generation) — Gemini 3.1 Flash Lite Imageのサイズ、アスペクト比、参照画像の上限
* [Google: Gemini 3.1 Flash Lite Image model page](https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image) — 安定版のモデルIDと対応機能
* [呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md) — リクエストのステータスと課金額の確認


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