メインコンテンツへスキップ
Nano Banana Pro(gemini-3-pro-image)は、テキストの指示で細部を変えたり、写真のスタイルを変えたり、複数の画像から新しい1枚を作ったりできます。このページではLaoZhang APIの2つのリクエスト形式を扱い、編集はどのサイズでも1回の固定料金です。 テキストだけから画像を作る場合は、Nano Banana Proの画像生成のページを参照してください。

始める前に

1

APIキーを作成する

トークン管理でトークン作成のダイアログ(创建令牌)を開き、課金方式(计费模式)を従量優先(按量优先、推奨)または回数課金(按次计费)にして、作成(创建)をクリックします。Nano Banana Proには回数課金の料金しかないため、従量課金(按量计费)のキーでは呼び出せません。リクエストが課金される条件は、Nano Bananaの概要の「課金」で説明しています。LaoZhang APIコンソールのトークン作成ダイアログ。課金方式で回数課金(按次计费)を選んでいる
2

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

3

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

cURLの例には jq が必要です。次のシェル関数は、Geminiネイティブのレスポンスにある最後の画像を、mimeType に合った拡張子で保存します。途中経過の画像が一緒に返った場合も、最後の画像が最終結果です。
レスポンスに画像がないときは、代わりに、エラー、promptFeedback、finishReason の各フィールドが出力されます。

ローカルの画像を編集する

リクエストは POST https://api.laozhang.ai/v1beta/models/gemini-3-pro-image:generateContent に送ります。parts には、最初に指示、そのあとに画像を入れます。ローカルのファイルは、それぞれ mimeType をファイルに合わせた inlineData パートとして送ります。
次のスクリプトを nano_banana_pro_edit.py として保存します。指示と1〜14枚のローカルの画像を送り、レスポンスのすべての画像を保存します。
猫の写真に帽子を加え、2Kで出力します。
どちらの例も aspectRatio を省略しているため、結果は、入力画像のサイズに合わせるというGoogleの既定どおりになります。形を変えたいときは aspectRatio(または --ratio)を加えてください。比率とサイズごとのピクセル数は、Nano Banana Proの「出力サイズ」にあります。 4Kの編集は1Kより時間がかかるため、クライアントのタイムアウトには余裕を持たせてください。例では300秒を許容しています。

参照画像を合成する

指示の後ろに、プロンプトで参照する順に最大14枚のファイルを並べ、それぞれの画像の役割をプロンプトで示します。
Googleは14枚の参照画像を用途別に分けています。1回のリクエストでNano Banana Proが受け付ける上限は次のとおりです。
  • オブジェクト画像6枚:商品や小道具など、結果に忠実に再現したいもの
  • 人物画像5枚:シリーズを通して人物を一貫させるためのもの
  • スタイル画像3枚:配色や筆づかいなど、見た目を決めるもの
リクエストには画像の役割を指定するフィールドがないため、それぞれの画像をどう使うかは指示の中で説明してください。

公開URLの画像を編集する

Geminiネイティブのルートでは、Base64の代わりに fileData パートでURLから画像を渡すこともできます。
fileUri は自分の画像の公開HTTPSアドレスに置き換え、mimeType もそれに合わせます。画像はリクエストの処理中にそのアドレスから取得されるため、ログイン、Cookie、ボット対策なしで読み込める必要があります。取得できない場合は、ファイルをダウンロードして inlineData として送ってください。
  • リクエストが20 MBを超えそうなときはURLを使います。 リクエスト本文全体は20 MB以内に収めてください。inlineData で送る画像は合計約15 MB以下にとどめ、それより大きいものは fileData で渡すか、先に縮小します。
  • サイトの robots.txt が画像のパスへのクローラーをブロックしていないことが必要です。署名付きURLは、待ち時間やリトライに備えて少なくとも30分間有効にしてください。
  • fileData と inlineData のパートは、参照する順に同じ parts 配列に混在させられます。詳しい条件は、Nano Bananaの概要の「大きな画像と画像URL」を参照してください。

OpenAI互換ルートを使う

すでにOpenAI SDKを使っているアプリでは、chat completionsで編集を送れます。指示と画像を1つのユーザーメッセージに image_url パートとして入れます。ローカルのファイルはデータURLとして、公開された画像はHTTPSのURLのまま渡します。 このルートには比率とサイズの設定がありません。2K、4K、固定の比率が必要な場合は、Geminiネイティブのルートを使ってください。画像は、message.content の中のBase64のデータURLとして返ります。次のスクリプトを nano_banana_pro_chat_edit.py として保存します。
ある画像の雰囲気を、別の画像に適用します。

レスポンスを処理する

  • Geminiネイティブ:各画像は candidates[].content.parts[] の中の inlineData パートで、mimeType とBase64の data を持ちます。
    • thought: true が付いたパートは読み飛ばします。Proは描画の前に思考するため、複雑な編集では結果と一緒に途中経過の画像が返ることがあります。最後の画像が最終結果です。
    • ファイルは mimeType に合った拡張子で保存します。
  • chat completions:画像は、choices[0].message.content のテキストの中に data:image/png;base64,... のようなデータURLとして入っています。接頭辞から形式を読み取って取り除き、長さが4の倍数でなければ = のパディングを補ってからデコードします。
  • 画像がない:ネイティブのレスポンスでは各候補の finishReason と、あれば promptFeedback を、chatのレスポンスでは返答のテキストを確認します。よくある原因は、安全チェックによるブロックか、モデルが指示にテキストだけで答えたことです。

編集のプロンプトのコツ

  • 顔、商品のラベル、レイアウトなど、変えてはいけない部分を書きます。マスクのパラメーターはないため、変えたい範囲は言葉で説明します。
  • 「2枚目の画像のジャケット」のように、各画像を順番と役割で指します。
  • 顔やロゴをそのまま残したいときは、それを詳しく描写し、変えてはいけないと明記します。
  • 画像内の文字は、正確な文言をかぎかっこで囲み、書体のスタイルを指定します。
  • 複雑な編集は段階に分け、保存した結果を次のリクエストの入力にします。

エラーと課金

Proが受け付ける値を送ってください。
  • リクエストがHTTP 200で画像を返さないことがあります。たとえば、安全チェックで出力がブロックされた場合です。
    • 編集は生成と同じく課金されるため、この呼び出しも課金されます。
    • finishReason(あれば promptFeedback も)を確認し、指示や参照画像を変えてから再送してください。
    • 詳しくは、Nano Bananaの概要の「空のレスポンスで課金されないようにする」を参照してください。
  • HTTP 401は、キーか Authorization: Bearer ヘッダーが間違っていることを示します。Geminiネイティブのルートは、x-goog-api-key のキーも受け付けます。
  • 429と5xxのレスポンスは、バックオフを入れて再試行します。タイムアウトしたリクエストは、再送する前に呼び出しログを確認してください。
  • fileData のURLを取得できない場合は、ログインなしで読み込めるか、robots.txt が許可しているかを確認するか、画像を inlineData として送ってください。
  • HTTP 413は、リクエスト本文が大きすぎることを示します。大きな画像はURLで渡すか、リクエスト全体が20 MB以内に収まるよう縮小してください。
  • Base64にするとファイルは約3分の1大きくなるため、非常に大きな写真はエンコードの前に縮小してください。

よくある質問

/v1/images/editsで編集できる?

できません。Nano Banana Proの編集は、Geminiネイティブの generateContent エンドポイントか、OpenAI互換の /v1/chat/completions を使います。Images APIの編集エンドポイントは使えません。

画像の一部だけを編集できる?

できます。マスクのフィールドはないため、範囲は言葉で指定します。Googleはこれをセマンティックマスキングと呼んでいます。変える要素を名指しし、それ以外はすべてそのままにするよう、たとえば次のように書きます。
青いソファだけを茶色の革のソファに変えてください。部屋のほかの部分、レイアウト、照明はそのままにしてください。
ほかのコツは、前述の「編集のプロンプトのコツ」を参照してください。

aspectRatioを省略すると結果はどんな形?

Googleの既定では出力が入力画像のサイズに合わせられるため、aspectRatio を省略すると元の形が保たれます。前述の「ローカルの画像を編集する」の例は、この動作です。形を変えたいときだけ aspectRatio を指定し、1K、2K、4Kの選択には imageSize を使ってください。

関連ページと参考資料