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 |
|---|---|
| モデルID | nano-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月時点のカタログの料金は次のとおりです:
| 解像度 | 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 Pro | 1K、2K、4K | 10 | $0.04 | 1ルート |
| Nano Banana 2 | 0.5K、1K、2K、4K | 14 | $0.03 | 2ルート |
| Nano Banana 2.1 | 1K、2K、4K | 14 | $0.03 | 3ルート |
| Nano Banana 2 Lite | 1K | 10 | $0.02 | 2ルート |
| Nano Banana | 掲載なし | 掲載なし | $0.03 | 1ルート |
Nano Banana Proで画像を生成する
"model": "nano-banana-pro" とプロンプトを付けて POST /v1/generations を送信します。画像ジョブは通常、数秒で完了しますが、流れは動画と同じです。送信し、id を含む 202 を受け取り、ポーリングします。この2Kのポスターは$0.04です。
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"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 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からです。
画像の生成が失敗した場合、課金されますか?
いいえ。料金は送信時に確保され、ジョブが失敗した場合は解放されます。課金されるのは、納品された画像のみです。