GPT-6 Sol ve Claude Opus 5.5 yayındaGPT-6 Sol fiyatı 5.6 Sol'un yarısı

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.

Kiki, OmniaKey COO9 dk okuma
Bu sayfada

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/tasks isteğini bir Idempotency-Key ile gönderin, durum succeeded olana kadar GET /v1/media/tasks/{id} sorgulayın ve assets[0].url adresini indirin.
  • Parametreler: parameters.aspect_ratio ve parameters.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örseli input.image iç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:

  1. Betiğin okuyabilmesi için ortam değişkenine konmuş bir OmniaKey API anahtarı: export OMNIAKEY_API_KEY="your-key".
  2. 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.

python
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:

json
{
  "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ı:

Tuğla duvarda koyu metal bir tabela, üç satır Çince yazı ve bir telefon numarası
2K, 1:1: 2048x2048, 47.2 sn. Üç Çince satır ve 010-6789 4321 doğru geldi; pas ilk 0'ın bir kısmını kapatıyor.

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:

python
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:

json
{
  "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:

Gece treni posteri duvarda siyah bir çerçeve içinde, üstünde tablo lambası, sağında bir bitki
2K, 1:1 düzenleme: 2048x2048, 49.9 sn. Posterin yazısı ve tasarımı korundu; çerçeve düzgün bir dikdörtgen.

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.

Gece treni posteri 1K: taş köprüde buharlı tren, karlı dağlar ve koyu mavi gece göğü
1K, 3:4: 896x1200, 28.4 sn. Posterin dört satırı da doğru; lokomotifin lambaları ve kolları birbirine sıkışıyor.
Aynı gece treni posteri 2K, sağ yamaca bir köy ve iki kule eklenmiş
2K, 3:4: 1792x2400, 48.2 sn. Aynı metin, sağ yamaçta bir köy ve iki kule fazladan.
Aynı gece treni posteri 4K, lokomotifin arkasına üç vagon ve tender çizilmiş
4K, 3:4: 3584x4800, 66.9 sn. Üç vagon ve tender çizildi; tuğla derzlerinin kalınlığı değişiyor.

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:

text
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:

text
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
BoyutPiksel, 3:4Bizim süreBizim tokenGoogle tahmini
1K896x120028.4 sn1,133$0.134
2K1792x240048.2 sn1,225$0.134
4K3584x480066.9 sn2,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:

HTTPKod veya durumNe demekNe yapmalı
400invalid_requestBozuk gövde, desteklenmeyen işlem veya hatalı parametreJSON'u ve aşağıdaki alan adlarını kontrol edin
503no_available_channelŞu anda bu modeli sunan kanal yokModeli değiştirin; tekrar denemek çözmez
—failedGörev sonuçsuz bittierror.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

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

Nano Banana ProGemini görselgörsel APIPythonAPI eğitimi

İlgili makaleler

Son makaleler

Popüler kılavuzlar