# Nano Banana Pro API: Python ile üretim, düzenleme ve fiyat

> Nano Banana Pro'yu Python'dan çağırın: model kimliği, boyut ve input.image alanları, 4K seçeneği, Google'ın görsel başına fiyatı ve dönen JSON.

- Canonical HTML: https://omniakey.com/tr/blog/nano-banana-pro-api
- Markdown: https://omniakey.com/tr/blog/nano-banana-pro-api.md
- Published: 2026-11-03 (updated 2026-11-03)
- Author: Kiki, COO at OmniaKey
- Language: tr
- Category: API setup
- Reading time: 9 min
- All posts: https://omniakey.com/blog/llms.txt

---

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ı](https://omniakey.com/tr/gemini-3-pro-image), 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ı](https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-pro-image) 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](https://docs.omniakey.com/tr/media/image) `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ı](https://docs.omniakey.com/tr/media/overview) 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ı](https://omniakey.com/_img/blog/nano-banana-pro-api/g2-sign.7e3e8e4d.1600.webp)

_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](https://omniakey.com/_img/blog/nano-banana-pro-api/g3-edit.98011b5c.1600.webp)

_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öğü](https://omniakey.com/_img/blog/nano-banana-pro-api/g1-1k.12bc0ed0.896.webp)

_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ş](https://omniakey.com/_img/blog/nano-banana-pro-api/g1-2k.38a932bb.1600.webp)

_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ş](https://omniakey.com/_img/blog/nano-banana-pro-api/g1-4k.6c8048ad.1600.webp)

_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
```

|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](https://omniakey.com/tr/gemini-3-pro-image) 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ı](https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-pro-image) — 3 Kasım 2026'da denetlendi.
- [Google: Gemini API görsel üretim rehberi](https://ai.google.dev/gemini-api/docs/image-generation) — 3 Kasım 2026'da denetlendi.
- [Google: Gemini API fiyatları](https://ai.google.dev/gemini-api/docs/pricing) — 3 Kasım 2026'da denetlendi.
- [Google: Nano Banana Pro duyurusu](https://blog.google/technology/ai/nano-banana-pro/) — 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ı.
