メインコンテンツへ移動

API ガイド

Nano Banana 2 API

YingTu が現在使用している API 設定を示します。実際の Key はコードに含まれません。

LaoZhang トークンページを開く

クイックスタート

  1. 1

    LaoZhang API Key を作成または選択します。

  2. 2

    現在のモデル ID と Python 例をコピーします。

  3. 3

    小さなリクエストを一度実行し、応答を確認します。

リクエスト情報

生成エンドポイント
POST /v1beta/models/gemini-3.1-flash-image:generateContent
編集エンドポイント
POST /v1beta/models/gemini-3.1-flash-image:generateContent
Base URL
https://api2.laozhang.ai
認証
Bearer API Key
リクエスト種別
Gemini native
参照画像
対応
参照画像数
YingTu で最大 5 枚(提供元の上限ではありません)
確認状況
未確認 — 確認できる日付の記録がありません。
API ドキュメントを開く

Python の例

プレースホルダー Key と自分のプロンプトを置き換えます。

テキストから画像の例

cURL
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.

参照画像編集の例

gemini-3.1-flash-image · edit
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})")
本番利用前に LaoZhang アカウントで最新価格、残高、権限を確認してください。

リクエストパラメータ

現在の YingTu クライアントとコード例に一致する項目です。

model
必須。このページの正確なモデル ID を使用します。
prompt
必須。画像指示を送り、API Key は含めません。
出力設定
generationConfig.imageConfig.aspectRatioimageSize。自動比率は送信しません。
参照画像
任意。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 で確認します。

API FAQ

API Key はどこに保存しますか?

コード例の環境変数を使い、コード、ログ、プロンプトに完全な Key を残しません。

タイムアウトは失敗ですか?

必ずしもそうではありません。500 秒後も結果や請求が不明な場合があるため、ログを確認します。

参照画像数は提供元の上限ですか?

いいえ。モデルレジストリにある現在の YingTu ブラウザ制限です。

価格と権限はどこで確認しますか?

最新の価格、残高、権限、請求は LaoZhang アカウントで確認します。

価格と請求

ページには参考価格を表示します。最新価格、残高、権限、請求は LaoZhang アカウントで確認します。

モデル情報
モデル ID
gemini-3.1-flash-image
参考価格
$0.055/ 回
出力サイズ
512 / 1K / 2K / 4K
API 形式
Gemini native

スタジオでこのモデルを試す

以下は画像スタジオで現在利用できる設定です。

YingTuLaoZhang