Nano Banana Pro API: Python ile üretim, düzenleme ve fiyat
Bir POST, bir sorgu, bir indirme: çalışan bir Nano Banana Pro betiği.

Bu sayfada
- Kısa cevap
- Model kimliği ve gerekenler
- Python betiği
- Var olan bir görseli düzenlemek
- 1K, 2K ve 4K: her biri ne veriyor
- Karşılaşacağınız hatalar
- Sık sorulan sorular
- Nano Banana Pro API'sinin model kimliği nedir?
- Bir Nano Banana Pro görseli ne kadar?
- Nano Banana Pro Çince metin çizebiliyor mu?
- 1K, 2K yoksa 4K mı istemeliyim?
- Düzenleme neden 400 invalid_request döndürdü?
- Denetlenen kaynaklar
- Güncelleme kaydı
Nano Banana Pro, Google'ın gemini-3-pro-image modelidir ve OmniaKey'de tek bir POST /v1/media/tasks ile çağırılır. 3:4 oranındaki üç testimiz 896x1200, 1792x2400 ve 3584x4800 olarak döndü, posterdeki her kelime doğru yazılmıştı.
Kısa cevap
- Model:
gemini-3-pro-image, Google'ın GA model kimliğidir. Vertex model kartında çıkış tarihi 28 Mayıs 2026 olarak yazıyor. - Çağrı:
POST https://api.omniakey.com/v1/media/tasksisteğini birIdempotency-Keyile gönderin, durum succeeded olana kadarGET /v1/media/tasks/{id}sorgulayın veassets[0].urladresini indirin. - Parametreler:
parameters.aspect_ratioveparameters.image_size; boyut değerleri 1K, 2K ve 4K, K harfi büyük. - İstek sınırı: gövdenin tamamı için 1 MiB, satır içi Base64 görsel verisi dahil.
- Google fiyatı: 1K/2K görsel başına $0.134, 4K görsel başına $0.24; Google'ın Gemini API fiyat sayfasından.
- Bizim token sayılarımız: üç görev 1,133, 1,225 ve 2,480 çıkış token'ı bildirdi. Milyon görsel token'ı başına $120 ile bu $0.136, $0.147 ve $0.298 eder.
- Düzenleme:
operation: "edit"kullanın ve kaynak görseliinput.imageiçine{data, mime_type}olarak koyun.
OmniaKey'deki Nano Banana Pro model sayfası, eski anlık görüntü kimliği olan gemini-3-pro-image-preview modelini de aynı fiyatla kabul eder.
Model kimliği ve gerekenler
Kodunuza yazacağınız kimlik gemini-3-pro-image. Google'ın Vertex model kartı modeli GA aşamasında ve 28 Mayıs 2026 çıkış tarihiyle listeliyor. 1K, 2K ve 4K çıkışı destekliyor.
-preview kimliği aynı modeli gösterir. OmniaKey'in görsel model tablosu gemini-3-pro-image-preview için "Same model, -preview snapshot id" diyor ve çağrı başına ücret aynı kalıyor.
İki şey gerekiyor:
- Betiğin okuyabilmesi için ortam değişkenine konmuş bir OmniaKey API anahtarı:
export OMNIAKEY_API_KEY="your-key". - Python 3. Aşağıdaki betik yalnızca standart kütüphaneyi kullanıyor: urllib, json, time, uuid, base64 ve pathlib. Kurulacak bir SDK yok.
Python betiği
Üç adım: görevi oluştur, sorgula, görseli indir. nano_banana.py olarak kaydedin ve python3 nano_banana.py ile çalıştırın.
import base64
import json
import os
import time
import urllib.request
import uuid
from pathlib import Path
API = "https://api.omniakey.com/v1/media/tasks"
HEADERS = {
"Authorization": f"Bearer {os.environ['OMNIAKEY_API_KEY']}",
"Content-Type": "application/json",
}
def call(url, payload=None, headers=None, method=None):
body = json.dumps(payload).encode() if payload is not None else None
req = urllib.request.Request(url, data=body, headers=headers or HEADERS, method=method)
with urllib.request.urlopen(req, timeout=60) as resp:
return resp.status, json.loads(resp.read())
def create_task(prompt, aspect_ratio="3:4", image_size="2K", image_path=None):
body = {
"model": "gemini-3-pro-image",
"type": "image",
"operation": "generate" if image_path is None else "edit",
"input": {"prompt": prompt},
"parameters": {"aspect_ratio": aspect_ratio, "image_size": image_size},
}
if image_path:
encoded = base64.b64encode(Path(image_path).read_bytes()).decode("utf-8")
body["input"]["image"] = {"data": encoded, "mime_type": "image/png"}
headers = {**HEADERS, "Idempotency-Key": str(uuid.uuid4())}
status, task = call(API, body, headers, "POST")
print("created", task["id"], "HTTP", status)
return task
def wait(task_id, interval=3, timeout=300):
deadline = time.time() + timeout
while time.time() < deadline:
_, task = call(f"{API}/{task_id}")
print(task["status"], task["progress"]["percent"])
if task["status"] in ("succeeded", "failed", "canceled"):
return task
time.sleep(interval)
# A timeout is not a failure: keep the task id and poll it again.
raise TimeoutError(f"task {task_id} is still running")
def download(task, out_path):
asset = task["assets"][0]
with urllib.request.urlopen(asset["url"], timeout=120) as resp:
Path(out_path).write_bytes(resp.read())
print("saved", out_path, asset["mime_type"], asset["byte_size"], "bytes")
if __name__ == "__main__":
task = create_task(
"A vintage travel poster for the Night Train from Zürich to Milano, "
"departing 21:40 from platform 7. A steam train crosses a stone arch "
"bridge below snowy mountains under a deep blue night sky, with a cream "
"border. Spell every word exactly as written.",
aspect_ratio="3:4",
image_size="2K",
)
task = wait(task["id"])
if task["status"] != "succeeded":
raise SystemExit(f"{task['status']}: {task.get('error')}")
download(task, "night-train.jpg")
image_size yalnızca 1K, 2K veya 4K alır. Google'ın görsel rehberi açık: "You must use an uppercase 'K' … Lowercase parameters (e.g., 1k) will be rejected." 2k değil 2K gönderin.
Idempotency-Key zorunlu. Her istekte yeni bir UUID üretmek en basit kural; bir anahtarı yalnızca tam olarak aynı gövdeyi yeniden gönderdiğinizde tekrar kullanın. OmniaKey iki kez ücret almak yerine asıl görevi HTTP 200 ile döndürür, aynı anahtar farklı bir gövdeyle gelirse 409 yanıtı verir.
Oluşturma çağrısı 202 ve bir id döndürür. OmniaKey'in medya görevleri dokümanı tüm akışı anlatıyor; bitmiş görev şu alanları taşıyor:
{
"id": "task_AbMRVqzSnVh0VwBj0S7NuMUxy5sZtfHP",
"status": "succeeded",
"progress": {"percent": 100, "stage": "completed"},
"usage": {"total_tokens": 1133},
"assets": [
{
"kind": "image",
"mime_type": "…",
"url": "https://…signed-url…"
}
]
}
assets[0].url adresini okuyup hemen indirin: imzalı bağlantı yaklaşık bir saat geçerli, görev kaydı 24 saat kalıyor. Biçimi mime_type alanı söyler; Gemini modelleri genellikle JPEG döndürür.
Aynı betiği 1:1 ve 2K yapıp istemi Çince bir tabelaya çevirdiğimizde şu çıktı:

Var olan bir görseli düzenlemek
operation: "edit" yazın ve kaynak görseli input.image içine {data, mime_type} olarak verin. Yukarıdaki betik bir image_path verdiğinizde bu yolu kendisi izler:
task = create_task(
"Hang this poster in a thin black frame on a warm white wall, with a brass "
"picture light above it, a low wooden cabinet below and a trailing plant on "
"the right. Keep the poster exactly as it is.",
aspect_ratio="1:1",
image_size="2K",
image_path="night-train-2k.png",
)
Gönderilen gövde şöyle görünüyor:
{
"model": "gemini-3-pro-image",
"type": "image",
"operation": "edit",
"input": {
"prompt": "Hang this poster in a thin black frame on a warm white wall…",
"image": {"data": "…base64…", "mime_type": "image/png"}
},
"parameters": {"aspect_ratio": "1:1", "image_size": "2K"}
}
Örnek kaynak PNG olduğu için betik image/png yazıyor; JPEG için bu etiketi değiştirin. Birden çok referans için input.images kullanın ve her öğeye aynı {data, mime_type} biçimini verin. Google'ın rehberi sınırı 14 referans görsel olarak koyuyor; gemini-3-pro-image için dağılım 6 nesne, 5 karakter ve 3 stil referansı.
Gövdeyi 1 MiB altında tutun. Base64 dosyayı yaklaşık üçte bir büyütür, bu yüzden kaynağı kodlamadan önce küçültün ya da sıkıştırın. Bizim düzenlememiz 2K posteri kullandı ve her kelimeyi, yerleşimi korudu:

1K, 2K ve 4K: her biri ne veriyor
Aynı 3:4 poster istemini üç boyutta da çalıştırdık. Pikseller Google'ın 3:4 tablosuyla tam tuttu: 1K'da 896x1200, 2K'da 1792x2400, 4K'da 3584x4800. Poster metni her boyutta doğruydu.



Boyutla değişen şey ayrıntı, yazım değil:
- 1K: trenin önü sıkışık: lambalar, tekerlekler ve biyel kolları birbirine yakın duruyor.
- 2K: sağ yamaçta köy ve iki kulesi beliriyor, bacadan soluk bir duman ipi çıkıyor, köprüde yedi kemer görünüyor.
- 4K: üç vagon ve tender ayrı ayrı, taş işçiliğinde farklı kalınlıkta derzler var. Lokomotifin altındaki mekanik hâlâ basitleştirilmiş.
Hız boyutla arttı: 28.4 sn, 48.2 sn ve 66.9 sn. Her boyutu bir kez çalıştırdık, bu saniyeleri tek bir koşu olarak okuyun.
Google görsel çıkışını milyon token başına $120 ile fiyatlıyor ve tablosunda 1K ile 2K için 1,120, 4K için 2,000 token veriyor. Google'ın kendi tahmini böyle çıkıyor:
1,120 × $120 ÷ 1,000,000 = $0.134 per 1K image
1,120 × $120 ÷ 1,000,000 = $0.134 per 2K image
2,000 × $120 ÷ 1,000,000 = $0.24 per 4K image
Bizim görevlerimiz Google'ın örneklerinden daha çok token bildirdi. Aynı aritmetik bizim sayılarla:
1,133 × $120 ÷ 1,000,000 = $0.136 per 1K image
1,225 × $120 ÷ 1,000,000 = $0.147 per 2K image
2,480 × $120 ÷ 1,000,000 = $0.298 per 4K image
| Boyut | Piksel, 3:4 | Bizim süre | Bizim token | Google tahmini |
|---|---|---|---|---|
| 1K | 896x1200 | 28.4 sn | 1,133 | $0.134 |
| 2K | 1792x2400 | 48.2 sn | 1,225 | $0.134 |
| 4K | 3584x4800 | 66.9 sn | 2,480 | $0.24 |
OmniaKey bir görsel çağrısını token'a göre değil sabit ücretle faturalar, yani tutar bu sayılarla değişmez; çağrı başına güncel ücret model sayfasında ve başarısız görev iade edilir. Google'ın aynı üç görsel için token ücretiyle tahmini $0.134, $0.134 ve $0.24.
Karşılaşacağınız hatalar
Buradaki başarısızlıklar çoğunlukla bir alan adına ya da dosya boyutuna iner, modele değil. OmniaKey'in medya dokümanının bu uç nokta için listeledikleri şunlar:
| HTTP | Kod veya durum | Ne demek | Ne yapmalı |
|---|---|---|---|
| 400 | invalid_request | Bozuk gövde, desteklenmeyen işlem veya hatalı parametre | JSON'u ve aşağıdaki alan adlarını kontrol edin |
| 503 | no_available_channel | Şu anda bu modeli sunan kanal yok | Modeli değiştirin; tekrar denemek çözmez |
| — | failed | Görev sonuçsuz bitti | error.code ve error.message alanlarını okuyun |
Başarısız görev bir HTTP hatası değildir: oluşturma çağrısı başarılı oldu, bu yüzden görevi sorgulayıp error nesnesini okuyun. Başarısız ve iptal edilen görevler otomatik iade edilir.
Tam çözünürlüklü kaynağı Base64 olarak göndermek gövdeyi 1 MiB üstüne itebilir. Önce küçültün ve yalnızca dosya boyutuna değil kodlanmış uzunluğa bakın.
Google'ın rehberi küçük 1k değerini reddediyor. 1K, 2K veya 4K yazın.
OmniaKey'in görsel dokümanı Gemini modellerinde size ve üst düzey mime_type alanlarını da reddediyor, çünkü bunlar Gemini parametresi değil. Onların yerine parameters.aspect_ratio ve parameters.image_size kullanın, çıkış biçimini yanıttaki mime_type alanından okuyun.
Sık sorulan sorular
Nano Banana Pro API'sinin model kimliği nedir?
gemini-3-pro-image. Google'ın Vertex model kartı GA ve 28 Mayıs 2026 çıkış tarihiyle listeliyor, OmniaKey de aynı kimliği kabul ediyor. Eski gemini-3-pro-image-preview kimliği OmniaKey'de hâlâ çalışıyor ve aynı modeli gösteriyor.
Bir Nano Banana Pro görseli ne kadar?
Google 1K veya 2K görsel için $0.134, 4K için $0.24 tahmin ediyor; milyon görsel token'ı başına $120 üzerinden. Görevlerimiz 1,133, 1,225 ve 2,480 token bildirdi, bu ücretle $0.136, $0.147 ve $0.298 eder. OmniaKey'in model sayfası kendi çağrı başına ücretini yazıyor.
Nano Banana Pro Çince metin çizebiliyor mu?
Evet. 2K tabelamız üç doğru Çince satırla döndü: 同福客栈, 住宿 餐饮 茶水 ve 010-6789 4321; 11 rakam ve tire dahil.
1K, 2K yoksa 4K mı istemeliyim?
Bizimki gibi bir poster için 2K kullanışlı orta nokta. Üç boyut da posterimizi doğru yazdı, yani 4K daha ince ayrıntı alıyor — ayrı vagonlar, tuğla derzleri — daha iyi metin değil. 896x1200 yeterli olan taslaklar için 1K kullanın.
Düzenleme neden 400 invalid_request döndürdü?
Yaygın nedenler 1 MiB üstü gövde, kaynağın yanlış alanda olması ya da Gemini modeline size veya üst düzey mime_type gitmesi. Görseli input.image içine {data, mime_type} olarak koyun, kodlanmış gövdeyi 1 MiB altında tutun ve aspect_ratio ile image_size kullanın.
Denetlenen kaynaklar
- Google Cloud: Gemini 3 Pro Image model kartı — 3 Kasım 2026'da denetlendi.
- Google: Gemini API görsel üretim rehberi — 3 Kasım 2026'da denetlendi.
- Google: Gemini API fiyatları — 3 Kasım 2026'da denetlendi.
- Google: Nano Banana Pro duyurusu — 3 Kasım 2026'da denetlendi.
Güncelleme kaydı
- 2026-11-03: ilk sürüm; o gün OmniaKey üzerinden beş test çağrısı yapıldı.
Bu makaledeki modeller
İlgili makaleler
Nano Banana 2.1 incelemesi: API erişimi, fiyat ve geçiş
Nano Banana 2.1 ile Nano Banana 2’yi karşılaştırın ve desteklenen Nano Banana görsel görevlerini OmniaKey’de doğrudan oluşturun.
Nano Banana ürün fotoğrafı: 8 prompt denemesi
Sekiz prompt, 22 düzenleme, iki model: hangi çekimlerde etiket korundu, ayakkabı nerede aynalandı ve hangi işe hangi model uyuyor.
Seedream 5.0 Pro vs Nano Banana Pro: aynı promptla test ve fiyat
Beş ortak prompt, iki model, ölçülen süreler ve 2K görsel başına fiyat.
