Nano Banana API の料金と使い方(Python サンプル付き)
LaoZhang の API キー 1 つで呼び出せ、YingTu の画像スタジオと同じエンドポイントを使います。エンドポイント、パラメータ、1 枚の料金、コピーして使えるコードをまとめました。コード例に実際のキーは入りません。2026 年 10 月 9 日時点で、このページのモデル ID はすべて 1 枚ごとの課金でサブスクはなく、1 つのキーで全部使えます。
重要な情報(2026 年 10 月 10 日時点)
- 同じエンドポイントで使えるモデル ID:gemini-3.1-flash-lite-image、gemini-3.1-flash-image、gemini-nano-banana-2.1、gemini-3-pro-image。LaoZhang のキー 1 つですべて使えます。
- 1 枚あたりの料金:Nano Banana 2 Lite $0.025、Nano Banana 2 $0.055、Nano Banana 2.1 $0.045、Nano Banana Pro $0.09。サブスクなしで、1 枚ごとに課金されます。
- Base URL https://api2.laozhang.ai、Gemini 形式:POST /v1beta/models/{model}:generateContent。
- LaoZhang の新規アカウントには $0.1 のテスト用クレジット:Nano Banana 2 Lite 約 4 枚、または Nano Banana Pro 約 1 枚。
- laozhang.ai でのチャージは Stripe 経由のカード払いか USDT。
3 ステップで動かす
- 1
laozhang.ai で API キーを作成(新規アカウントは $0.1 付き)。
- 2
下のモデル ID とコードをコピーし、キーを環境変数に入れる。
- 3
まず 1 枚生成してレスポンスを確認してから、本格的に使う。
エンドポイントと認証
- Base URL
- https://api2.laozhang.ai
- 認証
- Bearer API キー
- リクエスト形式
- Gemini native
- 参照画像
- 対応
- 参照画像数
- YingTu で最大 5 枚(提供元の上限ではありません)
- 確認状況
- 未確認 — 確認できる日付の記録がありません。
コード例
プロンプトを自分のものに変えてください。参照画像を使う場合は下の編集用の例を。
テキストから画像の例
export LAOZHANG_API_KEY="replace-with-your-key"
curl --fail-with-body --max-time 500 \
-X POST 'https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent' \
-H "Authorization: Bearer ${LAOZHANG_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"contents":[{"parts":[{"text":"A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."}]}],"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"imageSize":"2K"}}}'
# The JSON response can contain base64 image data or an image URL.
# If this request times out, check request and billing logs before retrying.参照画像編集の例
import base64
import mimetypes
import os
import sys
import requests
API_KEY = os.environ.get("LAOZHANG_API_KEY")
if not API_KEY:
raise RuntimeError("Set the LAOZHANG_API_KEY environment variable before running this example.")
API_URL = "https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
REQUEST_TIMEOUT_SECONDS = 500
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def encode_image(image_path):
mime_type = mimetypes.guess_type(image_path)[0] or "image/jpeg"
with open(image_path, "rb") as image_file:
data = base64.b64encode(image_file.read()).decode("ascii")
return {"mime_type": mime_type, "data": data}
reference_1 = encode_image("image_1.jpg") # Replace with your image path
payload = {
"contents": [{
"parts": [
{"text": "A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."},
{"inline_data": reference_1}
]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"imageSize": "2K"
}
}
}
try:
response = requests.post(
API_URL,
headers=headers,
json=payload,
timeout=REQUEST_TIMEOUT_SECONDS,
)
except requests.Timeout as error:
print(
"Request timed out after 500 seconds. The result status may be unknown; "
"check call and billing logs before retrying.",
file=sys.stderr,
)
raise SystemExit(1) from error
if response.status_code != 200:
print(f"API error {response.status_code}: {response.text}", file=sys.stderr)
raise SystemExit(1)
try:
result = response.json()
except ValueError as error:
print("API returned a non-JSON response.", file=sys.stderr)
raise SystemExit(1) from error
if not isinstance(result, dict):
print("API returned an unexpected JSON shape.", file=sys.stderr)
raise SystemExit(1)
image_part = None
for candidate in result.get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
inline_data = part.get("inlineData") or part.get("inline_data")
if inline_data and inline_data.get("data"):
image_part = inline_data
break
if image_part:
break
if not image_part:
response_id = result.get("responseId", "not provided")
print(f"No image data in response. responseId={response_id}", file=sys.stderr)
raise SystemExit(1)
mime_type = image_part.get("mimeType") or image_part.get("mime_type") or "image/png"
encoded_image = image_part["data"]
if encoded_image.startswith("data:"):
header, encoded_image = encoded_image.split(",", 1)
mime_type = header[5:].split(";", 1)[0] or mime_type
extension_by_mime = {
"image/jpeg": "jpg",
"image/png": "png",
"image/webp": "webp",
"image/gif": "gif",
}
extension = extension_by_mime.get(mime_type, "bin")
output_path = f"output.{extension}"
with open(output_path, "wb") as output_file:
output_file.write(base64.b64decode(encoded_image, validate=True))
print(f"Image saved: {output_path} ({mime_type})")リクエストパラメータ
現在の YingTu クライアントとコード例に一致する項目です。
| パラメータ | 送信方法 |
|---|---|
| model | 必須。このページの正確なモデル ID を使用します。 |
| prompt | 必須。画像指示を送り、API Key は含めません。 |
| 出力設定 | generationConfig.imageConfig.aspectRatio と imageSize。自動比率は送信しません。 |
| 参照画像 | 任意。YingTu ブラウザでは最大 5 枚を contents[].parts[].inline_data として送信します。 |
レスポンスとタイムアウト
- 画像レスポンス
candidates[].content.parts[].inlineDataまたはinline_dataの base64 と MIME タイプを読み取ります。- 画像以外のレスポンス
- 画像データがなければ成功扱いにしません。ブロック理由、終了理由、response ID があれば表示します。
クライアントの 500 秒タイムアウト
500 秒後に YingTu は待機を終了します。この時点では上流結果や請求が不明な場合があります。
自動再試行なし
YingTu は自動で再試行しません。再度の有料呼び出し前にリクエストと請求ログを確認します。
一般的なエラー
- 認証
- 環境変数の Key と Bearer 認証ヘッダーを確認します。
- 権限または残高
- LaoZhang でモデル権限、残高、請求、アカウント制限を確認します。
- レート制限
- 並列数を下げ、返された上流またはアカウントのメッセージを確認します。
- 画像なし
- ブロック・終了理由、API メッセージ、response ID を確認します。
- タイムアウト
- 最終状態が不明な場合があります。再試行前に呼び出しと請求ログを確認します。
既知の制約
生成結果を使う前に、次の点を確認してください。
- ダウンロードしたファイルの実寸を確認します。
- 人物・ロゴ・包装・色・細部を使用前に確認します。
- 利用可否と待ち時間は変動する場合があります。
- 価格、残高、権限、請求は LaoZhang で確認します。
このエンドポイントで使える Nano Banana のモデル ID
エンドポイントもリクエスト形式も同じで、モデル ID だけを変えます。
| モデル | モデル ID | 料金 | サイズ |
|---|---|---|---|
| Nano Banana 2 Lite | gemini-3.1-flash-lite-image | $0.025/ 枚 | 1K |
| Nano Banana 2 | gemini-3.1-flash-image | $0.055/ 枚 | 512 / 1K / 2K / 4K |
| Nano Banana 2.1 | gemini-nano-banana-2.1 | $0.045/ 枚 | 1K / 2K / 4K |
| Nano Banana Pro | gemini-3-pro-image | $0.09/ 枚 | 1K / 2K / 4K |
API FAQ
Nano Banana API の料金は?
1 枚ごとの課金でサブスクなし:Nano Banana 2 Lite $0.025、Nano Banana 2 $0.055、Nano Banana 2.1 $0.045、Nano Banana Pro $0.09。すべての課金は LaoZhang アカウントで確認できます。
Nano Banana の API キーはどう取得しますか?
laozhang.ai でトークンを作成します(このページ上部のトークンボタン)。1 つのキーで表のすべてのモデルを使え、新規アカウントには $0.1 のテスト用クレジットがあります。
ベース URL は?
https://api2.laozhang.ai、Gemini 形式:POST /v1beta/models/{model}:generateContent。
Nano Banana API に無料枠はありますか?
テスト用の無料分があります。LaoZhang の新規アカウントには $0.1(Nano Banana 2 Lite 約 4 枚、または Nano Banana Pro 約 1 枚分)。その後は呼び出しごとに残高から 1 枚単位で課金され、月額プランや枠の購入はありません。
API Key はどこに保存しますか?
コード例の環境変数を使い、コード、ログ、プロンプトに完全な Key を残しません。
タイムアウトは失敗ですか?
必ずしもそうではありません。500 秒後も結果や請求が不明な場合があるため、ログを確認します。
参照画像数は提供元の上限ですか?
いいえ。YingTu のブラウザ側の上限で、モデル自体の上限ではありません。
価格と権限はどこで確認しますか?
最新の価格、残高、権限、請求は LaoZhang アカウントで確認します。
料金と請求
1 枚ごとの課金です。表示は LaoZhang の現在の料金で、実際の請求・残高・使えるモデルは LaoZhang アカウントで確認できます。
- モデル ID
- gemini-3.1-flash-image
- 料金
- $0.055/ 枚
- 出力サイズ
- 512 / 1K / 2K / 4K
- API 形式
- Gemini native
まずスタジオで 1 枚試す
ここにある設定はすべて YingTu の画像スタジオで使え、新規ユーザーは $0.1 分を無料で試せます。
関連ページ
YingTuLaoZhang