モデルガイド

Nano Banana Pro API:1枚あたりの料金と動作するコード

Nano Banana Proは、GoogleのGemini 3 Pro Imageモデルで、画像内の読みやすい文字と、多数の入力画像を1枚にまとめられることで知られています。ここでは、受け付ける入力、1枚あたりの料金、呼び出し方を紹介します。

Nano Banana Proの得意分野

Googleは、2025年11月に、Gemini 3 Pro ImageモデルであるNano Banana Proをリリースしました。画像に文字を入れたい場合や、複数の素材を組み合わせたい場合に使います:

  • 画像内の文字。ポスター、パッケージ、メニュー、インフォグラフィック、インターフェースのモックアップなど、見出しが読みやすいことが求められるもの。
  • 1枚の画像に多数の入力。最大14枚の入力画像:商品、ロゴ、モデル、場所、スタイルの参照を、1回のリクエストにまとめて送れます。
  • 精密な編集。背景、1つのオブジェクトの色、時間帯を変更しても、画像のそれ以外の部分はそのまま保たれます。
  • 大きな出力。1K、2K、4Kで、10種類のアスペクト比に対応します。

どの画像モデルも、文字が完璧ではありません。短い見出しが最も安定しており、長い文章や小さな文字は難しくなります。公開する前に、すべての画像を校正してください。

入力と制限

オプションNano Banana Pro
モデルIDnano-banana-pro
タスクテキストから画像、画像編集
解像度1K、2K、4K
アスペクト比1:1、16:9、9:16、4:3、3:4、3:2、2:3、5:4、4:5、21:9
入力画像編集する1枚を image_url として、または最大14枚を次の形式で image_urls
ルート1ルート

リクエスト形式は動画モデルと同じですが、duration と audio はありません。モデルが対応していない値は、課金される前に 422 で拒否されます。

Nano Banana Proの料金(2026年10月)

Nano Banana Proは、生成した画像1枚あたりで課金されます。2026年10月時点のカタログの料金は次のとおりです:

Nano Banana Proの1枚あたりの料金
解像度1枚あたり100枚1,000枚
1K$0.04$4.00$40.00
2K$0.04$4.00$40.00
4K$0.08$8.00$80.00

ジョブを送信すると、その料金は前払い残高から確保され、画像が納品された場合にのみ課金されます。ジョブが失敗した場合は、確保が解除されます。正確な課金額は cost_usd として返されます。クレジットパックは$10からで、料金ページをご覧ください。これは、2KのGoogle自身のGemini APIより70%安くなっています。すべての販売元の価格は、Nano Banana Proの料金比較にあります。

そのほかのNano Bananaモデル

Googleの軽量なNano Bananaモデルも、同じキーでRevanaで利用できます。Nano Banana 2は、2026年2月にリリースされたGemini 3.1 Flash Imageで、初代のNano Bananaは、Gemini 2.5 Flash Imageです。

Nano Bananaモデルの比較
モデル解像度アスペクト比最安 / 枚ルート
Nano Banana Pro1K、2K、4K10$0.041ルート
Nano Banana 20.5K、1K、2K、4K14$0.032ルート
Nano Banana 2.11K、2K、4K14$0.033ルート
Nano Banana 2 Lite1K10$0.022ルート
Nano Banana掲載なし掲載なし$0.031ルート

Nano Banana Proで画像を生成する

"model": "nano-banana-pro" とプロンプトを付けて POST /v1/generations を送信します。画像ジョブは通常、数秒で完了しますが、流れは動画と同じです。送信し、id を含む 202 を受け取り、ポーリングします。この2Kのポスターは$0.04です。

cURL
export REVANA_API_KEY="sr_live_..."

# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "input": {
      "prompt": "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
      "resolution": "2K",
      "aspect_ratio": "4:5"
    },
    "max_cost_usd": 0.1
  }'

# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
  -H "Authorization: Bearer $REVANA_API_KEY"
Python
import os
import time

import requests

API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

resp = requests.post(f"{API}/generations", headers=HEADERS, json={
    "model": "nano-banana-pro",
    "input": {
        "prompt": "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
        "resolution": "2K",
        "aspect_ratio": "4:5",
    },
    "max_cost_usd": 0.1,
})
resp.raise_for_status()
job = resp.json()

while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()

if job["status"] == "succeeded":
    print(job["output"]["urls"], job["cost_usd"])
else:
    print("Failed:", job["error"])
Node.js
// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
  Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "nano-banana-pro",
    input: {
      prompt: "A minimalist concert poster for a jazz night. Large headline at the top in a bold condensed sans-serif: \"BLUE HOUR SESSIONS\". Below it, smaller: \"Friday 8 PM, Harbour Hall\". A saxophone drawn in thin gold lines on a deep navy background.",
      resolution: "2K",
      aspect_ratio: "4:5",
    },
    max_cost_usd: 0.1,
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();

while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 5000));
  job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}

if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);

完了した生成結果には、画像のリンクが output.urls に入っています。出力リンクには有効期限があるため、すぐにダウンロードしてください。

レスポンス
{
  "id": "gen_01JC3PZK8R",
  "model": "nano-banana-pro",
  "status": "succeeded",
  "output": {
    "urls": [
      "https://cdn.revana.si/g/gen_01JC3PZK8R/0.png"
    ]
  },
  "cost_usd": 0.04,
  "attempts": 1,
  "error": null,
  "created_at": "2026-10-19T14:02:11Z",
  "completed_at": "2026-10-19T14:02:29Z"
}

1枚の画像を編集する

変更したい画像を image_url として渡し、編集内容を説明します。変えてはいけない部分も明記してください。

リクエストボディ
{
  "model": "nano-banana-pro",
  "input": {
    "prompt": "Change the season to winter: snow on the ground and the rooftops, a pale grey sky. Keep the house, the car and the composition exactly as they are.",
    "image_url": "https://example.com/house.jpg",
    "resolution": "2K",
    "aspect_ratio": "16:9"
  },
  "max_cost_usd": 0.1
}

複数の画像を組み合わせる

最大14枚の画像を image_urls として送信し、位置で各画像を指定して参照します。この4Kの商品写真は$0.08です。

リクエストボディ
{
  "model": "nano-banana-pro",
  "input": {
    "prompt": "Place the perfume bottle from the first image on the marble shelf from the second image, styled like the third image: soft window light, muted greens. Keep the label text on the bottle exactly as it is.",
    "image_urls": [
      "https://example.com/bottle.jpg",
      "https://example.com/shelf.jpg",
      "https://example.com/style.jpg"
    ],
    "resolution": "4K",
    "aspect_ratio": "1:1"
  },
  "max_cost_usd": 0.1
}

Nano Banana Proのプロンプトのコツ

  • 文字は一字一句引用する。すべての文字を引用符で囲み、入れる場所を指定します。「上部に見出し」「右下に小さな文字」のように書きます。
  • 書体を描写する。「太い縦長のサンセリフ」「手描きの筆記体」「タイプライター」などと書くと、文字の見た目を誘導できます。
  • ページのレイアウトを指定する。ポスターやインフォグラフィックでは、スタイルの前に、上から下への構成を説明します。
  • 入力画像に番号を付ける。「3枚目の画像のロゴ」なら曖昧さがありませんが、複数の画像を送るときに「ロゴ」とだけ書くと曖昧です。
  • 残すものを伝える。編集では、変更する内容と同じくらい明確に、変えてはいけないもの(顔、ラベル、構図)を指定します。
  • 段階的に編集する。1回のリクエストで1つの変更にするほうが、5つ同時より制御しやすく、失敗した段階のやり直しも安く済みます。

ルーティングとフォールバック

Nano Banana Proは現在、Revanaに1つのルートがあります。モデルに複数のルートがある場合、ルーターはまず最も安いルートを試し、失敗した場合はジョブを次に移します。料金は常に掲載価格のままです。ルートが1つの場合は、フォールバック先がないため、失敗するとジョブは failed で終了し、課金はありません。

アプリ側で failed のジョブを処理してください。たとえば、後で再試行するか、2つのルートがあるNano Banana 2のような2つ目のモデルを用意します。

すべての画像モデルはモデルページで、フィールドのリファレンスはドキュメントでご覧いただけます。APIキーを取得して、サンプルを実行してください。

よくある質問

Nano Banana Pro APIの料金はいくらですか?

2026年10月時点で、Nano Banana Proは、1枚あたり1Kが$0.04、2Kが$0.04、4Kが$0.08です。2Kで100枚のバッチは$4.00です。

Nano Banana Proとは何ですか?

2025年11月にリリースされた画像生成・編集モデル、Gemini 3 Pro Imageの、Googleでの名称です。画像内の読みやすい文字と、多数の入力画像を組み合わせられることで知られています。

Nano Banana Proには、入力画像を何枚送れますか?

image_urls として最大14枚です。編集する画像が1枚の場合は、image_url を使います。

Nano Banana Proは、どのアスペクト比に対応していますか?

カタログには、1:1、16:9、9:16、4:3、3:4、3:2、2:3、5:4、4:5、21:9が掲載されています。

Nano Banana ProとNano Banana 2の違いは何ですか?

Nano Banana 2は、Gemini 3.1 Flash Imageです。Revanaでは、非常に横長・縦長のものを含む14種類のアスペクト比が掲載されており、1枚あたり$0.03からです。Nano Banana Proは10種類で、$0.04からです。

画像の生成が失敗した場合、課金されますか?

いいえ。料金は送信時に確保され、ジョブが失敗した場合は解放されます。課金されるのは、納品された画像のみです。

Nano Banana Proで生成する

Nano Banana Pro、GPT Image 2、すべての動画モデルを、1つのキーで利用できます。前払いクレジットは$10から、納品された画像にのみ課金されます。