DEV Community

Cover image for Nano Banana 2.1 API 使い方
Akira
Akira

Posted on Originally published at apidog.com

Nano Banana 2.1 API 使い方

Googleは2026年10月6日にNano Banana 2.1をリリースしました。これはGemini APIを通じてgemini-nano-banana-2.1として呼び出し可能です。Nano Banana 2(Gemini 3.1 Flash Image)のアップデート版であり、視覚品質、マスクスタイル編集、ターン間のキャラクター一貫性が改善されています。また、両モデルが対応するすべての解像度で、Nano Banana 2の半分のコストで画像を生成できます。

今すぐApidogを試す

この記事では、空のターミナルから画像を保存するまでの手順を解説します。さらに、アスペクト比、2K・4K出力、画像編集、マルチターン変更、参照画像、検索グラウンディング、コストも扱います。以下のリクエストはすべてApidogに保存・再実行できるため、Nano Banana 2.1を現在利用しているモデルと比較できます。

まず背景を確認したい場合は、変更点とGoogleがまだ公開していない情報をまとめたNano Banana 2.1とはを参照してください。

必要なもの

項目 値
ベースURL https://generativelanguage.googleapis.com/v1beta
認証ヘッダー x-goog-api-key: $GEMINI_API_KEY
モデルID gemini-nano-banana-2.1
エンドポイント POST /v1beta/interactions
解像度 1K(デフォルト)、2K、4K
入力 テキスト、画像(最大14枚の参照)、動画
Python SDK pip install google-genai
JavaScript SDK npm install @google/genai

以降の例では、Googleの画像生成ドキュメントで2.1向けに使われているInteractions APIを使用します。

ステップ1:Gemini APIキーを取得する

  1. Google AI Studioを開き、サインインします。
  2. APIキーを取得から、Google Cloudプロジェクト用のキーを作成します。
  3. プロジェクトで請求を有効化します。Googleの料金ページでは、Nano Banana 2.1の無料枠は「利用不可」と記載されているため、API呼び出しには有料プロジェクトが必要です。
  4. APIキーを環境変数へ設定します。
export GEMINI_API_KEY="your-key-here"
Enter fullscreen mode Exit fullscreen mode

Googleは2.1をAI Studio Playgroundにリンクしており、プロンプトの試験には便利です。ただし、無料アカウントでの生成可能回数は公開されていません。Nano Banana 2.1を無料で使う方法では利用方法を、Gemini APIキーの取得ではキー設定を詳しく解説しています。

ステップ2:最初の画像を生成する

curl

まずはREST APIでリクエストを送信します。

curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-nano-banana-2.1",
    "input": [
      {
        "type": "text",
        "text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

レスポンスはJSONです。画像は画像コンテンツブロック内にbase64データとして返るため、保存するにはSDKまたはスクリプトでデコードします。

Python

from google import genai
import base64

client = genai.Client()  # GEMINI_API_KEY を読み込む

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
)

with open("generated_image.png", "wb") as f:
    f.write(base64.b64decode(interaction.output_image.data))
Enter fullscreen mode Exit fullscreen mode

interaction.output_imageは最後に生成された画像ブロックを返します。dataフィールドはbase64形式なので、ファイルへ書き込む前にデコードしてください。

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({});

const interaction = await ai.interactions.create({
  model: "gemini-nano-banana-2.1",
  input: "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
});

const image = interaction.output_image;

if (image) {
  fs.writeFileSync("nano-banana.png", Buffer.from(image.data, "base64"));
}
Enter fullscreen mode Exit fullscreen mode

Gemini 3の画像モデルは、描画前に構図を計画します。この処理中に最大2つの一時的な「思考画像」が生成される場合があります。これらには料金が発生せず、APIで思考を無効化することはできません。

ステップ3:アスペクト比、解像度、画像のみの出力を設定する

出力形式はresponse_formatで制御します。"type": "image"を指定すると画像だけが返り、会話テキストが含まれないため、レスポンスが小さくなり解析も簡単です。

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="A product shot of a matte black coffee grinder on a marble counter",
    response_format={
        "type": "image",
        "mime_type": "image/png",
        "aspect_ratio": "16:9",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

設定時のポイントは次のとおりです。

  • image_sizeには1K、2K、4Kを指定できます。Kは大文字で指定してください。2kのような小文字は拒否されます。
  • Nano Banana 2.1には512pxティアはありません。512pxはNano Banana 2向けの設定です。
  • 対応アスペクト比は、1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9、1:4、4:1、1:8、8:1です。
  • 2Kの16:9は2752x1536px、4Kの16:9は5504x3072pxです。
  • テキストと画像の両方が必要な場合は、リストで指定します。
response_format=[
    {"type": "text"},
    {"type": "image"},
]
Enter fullscreen mode Exit fullscreen mode

ステップ4:既存の画像を編集する

既存画像を編集する場合は、テキスト指示とbase64エンコード済み画像をinputに渡します。

with open("living_room.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode("utf-8")

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input=[
        {
            "type": "text",
            "text": (
                "Using the provided image of a living room, change only the blue sofa "
                "to be a vintage, brown leather chesterfield sofa. Keep the rest of "
                "the room, including the pillows on the sofa and the lighting, unchanged."
            ),
        },
        {
            "type": "image",
            "data": image_b64,
            "mime_type": "image/png",
        },
    ],
)
Enter fullscreen mode Exit fullscreen mode

マスクファイルなしでマスクスタイルのインペインティングを行う

個別のマスクファイルをアップロードする必要はありません。変更対象を文章で明示します。Googleのテンプレートは次の形式です。

提供された画像を使用し、[特定の要素]のみを[新しい要素/説明]に変更してください。元のスタイル、照明、構図を維持し、画像内のその他すべてをまったく同じに保ってください。

実装時は次を意識してください。

  1. 変更する要素を1つに絞る。
  2. 置き換える内容を具体的に書く。
  3. 維持すべき要素を明示する。

「ソファをもっと素敵にする」のような曖昧な指示では、モデルが部屋全体を描き直す可能性があります。

ステップ5:マルチターン編集で反復する

マルチターン編集では、前回のインタラクションIDをprevious_interaction_idとして渡します。次のリクエストには、変更したい箇所だけを記述します。

interaction_2 = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="Update this infographic to be in Spanish. Do not change any other elements of the image.",
    previous_interaction_id=interaction.id,
    response_format={
        "type": "image",
        "mime_type": "image/png",
        "aspect_ratio": "16:9",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

REST APIでは、同じフィールドをリクエストボディに追加します。

{
  "previous_interaction_id": "<PREVIOUS_INTERACTION_ID>"
}
Enter fullscreen mode Exit fullscreen mode

複数回の編集でキャラクターや製品の見た目を維持したい場合は、この方式を使います。Nano Banana 2.1のマルチターンにおけるキャラクター一貫性の改善が活きるポイントです。

ステップ6:最大14枚の参照画像を組み合わせる

input配列へ複数のimageブロックを追加します。Nano Banana 2.1では、高忠実度オブジェクト画像を最大10枚、キャラクター画像を最大4枚、合計14枚まで指定できます。

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input=[
        {
            "type": "text",
            "text": "An office group photo of these people, they are making funny faces.",
        },
        {"type": "image", "data": person_1_b64, "mime_type": "image/png"},
        {"type": "image", "data": person_2_b64, "mime_type": "image/png"},
        {"type": "image", "data": person_3_b64, "mime_type": "image/png"},
    ],
    response_format={
        "type": "image",
        "aspect_ratio": "5:4",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

参照画像は入力トークンとして課金されます。2.1の入力コストはNano Banana 2の3倍であるため、参照画像を多用するワークフローでは、切り替え前に実測でコストを比較してください。

ステップ7:Google検索で画像をグラウンディングする

天気図や最近のイベントなど、最新の事実に依存する画像では検索ツールを追加します。

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="A detailed painting of a Timareta butterfly resting on a flower",
    tools=[
        {
            "type": "google_search",
            "search_types": ["web_search", "image_search"],
        }
    ],
)
Enter fullscreen mode Exit fullscreen mode

{"type": "google_search"}だけを指定した場合はウェブ検索を利用できます。image_searchを追加すると、モデルはウェブ上の画像を視覚的コンテキストとして利用できます。この機能はNano Banana 2.1とNano Banana 2のみがサポートしています。

注意点は次のとおりです。

  • グラウンディングでは、検索結果に含まれる実在人物の画像は利用できません。
  • グラウンディング結果をユーザーへ表示する場合、Googleはgoogle_search_resultステップで返るsearch_suggestionsの表示を義務付けています。

ステップ8:Apidogでテストする

スクリプトは生成処理に適していますが、プロンプト、APIキー、モデル設定を素早く検証するには、保存済みリクエストが便利です。Apidogでは次の手順でテストできます。

  1. 環境を作成し、APIキー用のGEMINI_API_KEY変数を追加します。
  2. 次のリクエストを作成します。
   POST https://generativelanguage.googleapis.com/v1beta/interactions
Enter fullscreen mode Exit fullscreen mode
  1. ヘッダーを追加します。
   x-goog-api-key: {{GEMINI_API_KEY}}
Enter fullscreen mode Exit fullscreen mode
  1. model、input、response_formatを含むJSONボディを貼り付け、Sendをクリックします。
  2. レスポンス後スクリプトに、ステータスと画像ブロックを検証するアサーションを追加します。
pm.test("status is 200", () => {
  pm.response.to.have.status(200);
});

pm.test("response contains an image block", () => {
  const steps = pm.response.json().steps || [];

  const hasImage = steps.some(
    (s) =>
      s.type === "model_output" &&
      (s.content || []).some((c) => c.type === "image" && c.data)
  );

  pm.expect(hasImage).to.be.true;
});
Enter fullscreen mode Exit fullscreen mode
  1. リクエストを複製し、modelをgemini-3.1-flash-imageへ変更します。
  2. 同じプロンプトで両方のリクエストを実行します。

これでNano Banana 2.1とNano Banana 2を並行比較できます。実行ごとのステータス、応答時間、レスポンスサイズを確認してください。より広い機能比較はNano Banana 2.1 vs Nano Banana 2 vs Proを参照してください。

コスト

以下は、2026年10月7日時点のGoogle料金ページに基づく有料ティアの料金です。

モデル 入力 / 1M 1K画像 2K画像 4K画像 バッチ 1K
Nano Banana 2.1 $1.50 $0.0336 $0.0504 $0.0756 $0.0168
Nano Banana 2 $0.50 $0.067 $0.101 $0.151 $0.034
Nano Banana Pro $2.00 $0.134 $0.134 $0.24 $0.067

Nano Banana 2.1の画像出力は100万トークンあたり30ドルです。

  • 1K画像: 1,120トークン
  • 2K画像: 1,680トークン
  • 4K画像: 2,520トークン

テキストと思考の出力は100万トークンあたり7.50ドルです。検索グラウンディングには、Gemini 3.xモデル全体で共有される月5,000件の無料リクエストが含まれ、それ以降は1,000件ごとに14ドルかかります。

コスト計算例

短いテキストプロンプト(各100入力トークン程度)から2Kの製品画像を1,000枚生成する場合:

  • 出力: 1,000 x $0.0504 = $50.40
  • 入力: 100,000トークン x $1.50 / 1M = $0.15
  • 合計: 約$50.55。これに思考テキストトークンが加算されます。

Nano Banana 2で同じ処理を行う場合は約101ドルです。Batch APIを使うと、2.1の2K画像価格は0.0252ドルまで下がるため、出力コストは25.20ドルになります。

バッチジョブはより高いレート制限を利用できる一方、処理完了まで最大24時間かかります。Nano Banana 2の料金詳細は、Nano Banana 2 API料金内訳を参照してください。

よくあるエラー

以下はGemini APIで一般的に発生するエラーであり、Nano Banana 2.1固有のものではありません。

エラー 考えられる原因 修正
400 INVALID_ARGUMENT image_sizeが小文字、未対応の比率、不正なinput 2kではなく2Kを使う。対応比率と入力形式を確認する。
403 PERMISSION_DENIED APIキーが不正、またはプロジェクトで請求未設定 APIキーを確認し、請求を有効化する。
404 NOT_FOUND モデルIDの入力ミス gemini-nano-banana-2.1を正確に指定する。
429 RESOURCE_EXHAUSTED レート制限に到達 バックオフして再試行するか、バッチを使用する。
500 / 503 一時的なサーバー障害 指数関数的バックオフで再試行する。
200だが画像なし プロンプトがブロックされた、またはテキストのみで応答された "type": "image"を設定し、プロンプトを見直す。

指数関数的バックオフは、たとえば次のように実装できます。

import time

for attempt in range(5):
    try:
        interaction = client.interactions.create(
            model="gemini-nano-banana-2.1",
            input="Generate a product image",
        )
        break
    except Exception:
        if attempt == 4:
            raise
        time.sleep(2 ** attempt)
Enter fullscreen mode Exit fullscreen mode

よくある質問

  • Nano Banana 2.1 APIに無料枠はありますか?

    いいえ。GoogleはAPIの無料枠を「利用不可」と記載しています。AI Studio Playgroundは2.1にリンクされていますが、無料利用の上限は公開されていません。

  • 2.1はNano Banana 2のドロップイン代替ですか?

    多くの場合は可能です。モデルIDをgemini-nano-banana-2.1に置き換えてください。ただし、512pxティアは利用できず、入力トークンも高価になるため、参照画像を多用する編集ではコストを確認してください。

  • 生成画像には透かしが入りますか?

    はい。すべての出力にはSynthID透かしが含まれます。

  • 動画から画像を生成できますか?

    はい。2.1はテキストプロンプトとともに、YouTube URLのようなvideo入力ブロックを受け入れます。

  • 古いNano Banana 2 APIガイドはまだ使えますか?

    概念は引き続き適用できます。旧モデルについてはNano Banana 2 APIガイドを参照してください。

まとめ

Nano Banana 2.1は、Nano Banana 2の画像あたり半分の価格で、同じInteractions API形式を使いながらより良い画像を約束します。

まずは課金を有効化したAPIキーを設定し、1枚の画像を生成してください。次に、ステータスと画像ブロックを検証するアサーション付きでリクエストをApidogへ保存します。最後に古いモデルIDでリクエストを複製して比較すれば、Nano Banana 2.1へ切り替える価値があるかを短時間で判断できます。

Top comments (0)