# Wan 3.0 API: Python ile metinden videoya ve görselden videoya

> Wan 3.0'ı Python'dan çağırın: 31 Ekim 2026'da çalıştırdığımız betik, parametreler, gerçek klipler, hatalar ve Alibaba'nın saniye başına fiyatı.

- Canonical HTML: https://omniakey.com/tr/blog/wan-3-0-api
- Markdown: https://omniakey.com/tr/blog/wan-3-0-api.md
- Published: 2026-10-31 (updated 2026-10-31)
- Author: Kiki, COO at OmniaKey
- Language: tr
- Category: API setup
- Reading time: 8 min
- All posts: https://omniakey.com/blog/llms.txt

---

[Wan 3.0](https://omniakey.com/tr/wan3-0-video), Alibaba Cloud Model Studio'da `wan3.0-video` ve daha hızlı `wan3.0-video-prime` adlarıyla çalışıyor. Her çağrı asenkron: bir görev oluştur, kimliğini sorgula, MP4'ü indir. Python betiğimiz metinden 5 saniyelik 720P bir klibi 2 min 42 s'de, bir sabit görselden de 3 min 20 s'de üretti; ikisinde de ses var.

1. Anahtarınızı `OMNIAKEY_API_KEY` içine koyun.
2. `https://api.omniakey.com/v1/media/tasks` adresine model, işlem, prompt, parametreler ve yeni bir `Idempotency-Key` ile POST gönderin.
3. Durum succeeded olana kadar `GET /v1/media/tasks/{id}` sorgulayın, sonra `assets[0].url` adresini hemen indirin.

## Resmî bir Wan 3.0 API var mı, hangi modeli kullanmalıyım?

Var. Resmî API Alibaba Cloud Model Studio; `wan3.0-video` ve `wan3.0-video-prime` ikisi de orada (başvuru kaynağı 15 Ekim 2026'da güncellendi). Oluşturma çağrısı `X-DashScope-Async: enable` başlığını istiyor, Alibaba'nın Python yolu ise DashScope SDK 2.0.1 veya üstü.

||Alibaba Model Studio|OmniaKey|
|-|-|-|
|İki model kimliği|Var|Var|
|Async başlık|Gerekir|Gerekmez|
|Video bağlantısı|24 saat|Yaklaşık 1 saat, yenilenir|
|Ücretlendirme|Saniye başına|Saniye başına|
|Python|DashScope SDK|Standart kütüphane|

İki kimlik de aynı gövdeyi alıyor, modu gönderdiğiniz medyadan model seçiyor. Aşağıdaki betik `wan3.0-video` ile çalışıyor, `MODEL` satırı modeli değiştiriyor. [Wan 3.0 Prime](https://omniakey.com/tr/wan3-0-video-prime) ile çalıştırmadık; OmniaKey dokümanları onu aynı yetenekler, yaklaşık yarı süre olarak anlatıyor (31 Ekim 2026'da kontrol edildi).

## İlk çağrıdan önce ne gerekiyor?

Üç şey gerekiyor, ilki anahtar:

1. Kabuğunuzda dışa aktarılmış bir OmniaKey API anahtarı:

   ```bash
   export OMNIAKEY_API_KEY="your-key"
   ```

2. Python 3. Betik yalnızca standart kütüphaneyi içe aktarıyor, python3 onu olduğu gibi çalıştırıyor.

3. Görselden videoya geçiş için bir ilk kare: yaklaşık 1024 px genişliğinde bir JPEG ya da herkese açık bir HTTPS URL'si. Betik 700.000 baytı aşan dosyayı reddediyor, çünkü Base64 üçte bir ekliyor ve gövde sınırı 1 MiB (dokümanlar, 31 Ekim 2026'da kontrol edildi).

## Hangi parametreler önemli?

İşin çoğunu yedi alan yapıyor ve her biri `parameters` içinde bir değer.

|Parametre|Ne yapar|Varsayılan|
|-|-|-|
|Süre|Klip uzunluğu, saniye|5|
|Çözünürlük|Görüntü boyutu sınıfı|1080P|
|Oran|Kare şekli|adaptive|
|Ses|Ses parçası|açık|
|Seed|Tekrarlanabilirlik ipucu|-1|
|Prompt extend|Promptunuzu yeniden yazar|açık|
|Watermark|Köşeye işaret ekler|kapalı|

Betik süreyi, çözünürlüğü ve oranı ayarlıyor. Alibaba'nın varsayılanı 1080P iken 720P istiyor; liste fiyatlarında 1080P saniye başına iki kat pahalı.

## Python kodu nasıl görünüyor?

Aşağıdaki betik 31 Ekim 2026'da değiştirilmeden çalıştı: yalnızca standart kütüphane, iki mod, değiştirilecek tek bir MODEL satırı.

```python
import base64
import json
import os
import time
import urllib.error
import urllib.request
import uuid

API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
MODEL = "wan3.0-video"

def request(method, url, body=None, extra_headers=None):
    headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
    data = None
    if body is not None:
        headers["Content-Type"] = "application/json"
        data = json.dumps(body).encode()
    headers.update(extra_headers or {})
    req = urllib.request.Request(url, data=data, headers=headers, method=method)
    with urllib.request.urlopen(req, timeout=120) as resp:
        return json.load(resp)

def poll(url, attempts=5):
    for attempt in range(attempts):
        try:
            return request("GET", url)
        except urllib.error.HTTPError as err:
            if err.code < 500 or attempt == attempts - 1:
                raise
        except urllib.error.URLError:
            if attempt == attempts - 1:
                raise
        time.sleep(5 * (attempt + 1))

def run_task(body, out_path):
    task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
    print("task", task, flush=True)
    for _ in range(180):  # 5-second polls, up to 15 minutes
        time.sleep(5)
        state = poll(f"{API}/{task}")
        if state["status"] not in ("queued", "processing"):
            break
    else:
        raise TimeoutError(f"{task} is still {state['status']}: poll it again later, do not resubmit")
    if state["status"] != "succeeded":
        raise RuntimeError(state.get("error") or state["status"])
    asset_url = state["assets"][0]["url"]  # signed link: short-lived, so download now
    req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
    with urllib.request.urlopen(req, timeout=300) as resp, open(out_path, "wb") as f:
        f.write(resp.read())
    return task

def text_to_video(prompt, out_path, duration=5, resolution="720P", ratio="16:9"):
    body = {
        "model": MODEL,
        "type": "video",
        "operation": "text_to_video",
        "input": {"prompt": prompt},
        "parameters": {"duration": duration, "resolution": resolution, "ratio": ratio},
    }
    return run_task(body, out_path)

def image_to_video(prompt, image_path, out_path, duration=5, resolution="720P"):
    with open(image_path, "rb") as f:
        raw = f.read()
    if len(raw) > 700_000:  # base64 adds a third, and the whole body must stay under 1 MiB
        raise ValueError("first frame too large: save it as a JPEG about 1024 px wide")
    frame = "data:image/jpeg;base64," + base64.b64encode(raw).decode()
    body = {
        "model": MODEL,
        "type": "video",
        "operation": "image_to_video",
        "input": {"prompt": prompt, "media": [{"type": "first_frame", "url": frame}]},
        "parameters": {"duration": duration, "resolution": resolution, "ratio": "adaptive"},
    }
    return run_task(body, out_path)

if __name__ == "__main__":
    print("done", text_to_video(
        "A blacksmith hammers a glowing horseshoe on an anvil in a dark forge. Sparks fly at each "
        "strike and light his leather apron. The camera slowly pushes in. Sound of the hammer ringing "
        "on steel and the fire crackling. No dialogue, no music, no text.",
        "forge.mp4",
    ))
    print("done", image_to_video(
        "Image 1 is the first frame. The paper boat drifts slowly to the right across the puddle. "
        "Light rain makes small ripples and the cafe lights shimmer in the water. The camera stays "
        "low and still. Sound of light rain. No dialogue, no music, no text.",
        "boat.jpg",
        "boat-drifts.mp4",
    ))
```

Her parçanın işi:

- `run_task` her iş için yeni bir `Idempotency-Key` üretiyor. Aynı anahtarı aynı gövdeyle yeniden göndermek özgün görevi döndürüyor ve ikinci kez ücret almıyor (dokümanlar, 31 Ekim 2026'da kontrol edildi).
- 5 saniyede bir, en fazla 15 dakika sorguluyor, sonra TimeoutError veriyor.
- Zaman aşımı, aynı kimliği sonra yeniden sorgulamak demek; yeniden gönderme yeni bir anahtar üretiyor, ikinci bir iş açıyor ve onu faturalıyor.
- İlk varlık URL'sini hemen indiriyor, çünkü imzalı bağlantının ömrü kısa.
- `image_to_video` 700.000 baytı aşan kareyi reddediyor: Base64 üçte bir ekliyor ve gövde sınırı 1 MiB.
- Görsel çağrısı oranı `adaptive` yapıyor, böylece klip sabit görselin şeklini izliyor.

Yazdırdığı çıktı:

```text
task task_<id>
done task_<id>
task task_<id>
done task_<id>
```

## İki çağrı ne üretti?

İki dosya da 5.04 saniyelik MP4 olarak döndü: 150 kare, 30 fps, H.264 ve 44.1 kHz AAC stereo parça.

### Metinden videoya: demirci ocağı

![Wan 3.0 demirci ocağı klibinden dört kare](https://omniakey.com/_img/blog/wan-3-0-api/wan-forge-grid.4c1b058b.1288.webp)

_Metinden videoya, 720P'de 5 s: 0.3, 2.2, 3.5 ve 4.7 saniyedeki kareler._

Klip promptu izliyor: koyu gömlekli, deri önlüklü bir demirci parlayan turuncu bir nalı dövüyor, 2.2 saniyede kıvılcımlar fışkırıyor ve kamera biraz yaklaşıyor. Kusur, prompt metin istemese de örsün üstündeki okunaksız harflerden oluşan damga. Baştan dosyaya 2 min 42 s sürdü; MP4 1280×720 ve 6.6 MB.

### Görselden videoya: kâğıt tekne

![İlk kare sabit görsel ve Wan 3.0 kâğıt tekne klibinden üç kare](https://omniakey.com/_img/blog/wan-3-0-api/wan-paper-boat-grid.e2ffd154.1288.webp)

_Görselden videoya: gönderdiğimiz sabit görsel (sol üst), sonra klip 1.6, 3.5 ve 4.7 saniyede._

İlk kare Nano Banana 2.1 ile ürettiğimiz bir sabit görseldi: yağmur birikintisinde kırmızı bir kâğıt tekne. 1024×571 boyutunda 158 KB'lık bir JPEG'e küçültülüp data URL olarak satır içinde gönderildi. Klip o alacakaranlık ışığını ve ıslak arnavut kaldırımlarını koruyor, tekneyi istendiği gibi soldan sağa kaydırıyor, 1.6 saniyede dalgalar oluşuyor ve kamerayı alçakta ve sabit tutuyor. Uyarlanabilir oran sabit görselin şeklini izlediği için 1284×716 olarak, 3 min 20 s'de ve 7.4 MB boyutunda döndü.

### Ses açık mı, "no music" işe yarıyor mu?

Ses varsayılan olarak açık. Gemini 3.8 Flash demirci parçasını konuşma ve müzik olmadan metalik tıkırtı, kâğıt tekne parçasını ise hüzünlü ve sakin bir piyano melodisi olarak tanımladı; oysa o prompt "no music" ile bitiyordu. Alibaba'nın [prompt kılavuzu](https://www.alibabacloud.com/help/en/model-studio/wan3-video-generation-prompt-guide) (16 Ekim 2026'da güncellendi) "No BGM" ya da "No background music" yazmayı öneriyor; bizim promptumuzda ikisi de yoktu.

`"audio": false` ile dosya yalnızca video parçası taşıyor: 2 saniyelik 480P fener işimizde ses parçası yoktu ve Alibaba iki durumda da aynı ücreti alıyor.

|Klip|Süre|Boyut|Ses|
|-|-|-|-|
|Ocak (metin)|2 min 42 s|1280×720|Tıkırtı, müzik yok|
|Kâğıt tekne (görsel)|3 min 20 s|1284×716|"no music"e rağmen piyano|
|Fener, ses kapalı|4 min 36 s|854×480|Ses parçası yok|

Kuyruk süresi değişiyor: ses kapalı 2 saniyelik iş 4 min 36 s sürdü, iki 5 saniyelik 720P klipten de uzun. Prompt yazımı için [Wan 3.0 prompt kılavuzu](https://omniakey.com/tr/blog/wan-3-0-prompt-guide) yapıyı ve örnek promptları veriyor.

## Video dosyasını nasıl alırsınız, bağlantılar ne kadar dayanır?

Durum succeeded, failed ya da canceled olana kadar `GET /v1/media/tasks/{id}` sorgulayın; iş sürerken queued ya da processing yazıyor. Bitmiş görev yaklaşık bir saat dayanan imzalı bir varlık URL'si döndürüyor (OmniaKey dokümanları, 31 Ekim 2026'da kontrol edildi). Hemen indirin, eski bağlantı dolduğunda yeni bir URL için görevi yeniden sorgulayın; kayıt 24 saat yaşıyor.

Dosya 30 fps H.264 video içeren bir MP4 ve Alibaba'nın kendi video URL'si 24 saat dayanıyor. Bir Wan 3.0 işini iptal etmek render'ı durdurmuyor ve iptalden sonra başarılı olan iş yine faturalanıyor; göndermeden önce süreyi ve çözünürlüğü kontrol edin.

## Hangi hatalarla karşılaşırsınız?

Bunların çoğu bir görev oluşmadan dönüyor ve her birinin çözümü istekte ya da anahtarda.

- **400 `model_price_error`** — süre 2 ile 30 saniye aralığının dışında. `"duration": 1` denememiz 0.9 s'de "media duration must be between 2 and 30 seconds" hatasıyla düştü; görev oluşmadı, ücret alınmadı.
- **400 `missing_idempotency_key`** — Idempotency-Key başlığı yok. Bir tane ekleyin, en fazla 255 karakter.
- **409 `idempotency_key_reused`** — aynı anahtar, farklı gövde. Her prompt için yeni anahtar üretin.
- **403 `model_not_allowed`** — anahtar o modeli çağıramıyor. Önce `model` değerine, sonra anahtarın ayarlarına bakın.
- **403 bakiye ya da harcama sınırı mesajıyla** — düşük bakiye veya anahtar başına sınır. Bakiye yükleyin ya da sınırı yükseltin.
- **404 `task_not_found`** — yanlış kimlik ya da 24 saatten eski görev. Oluşturma çağrısının döndürdüğü kimliği sorgulayın.
- **409 `task_state_conflict`** — iş çoktan bitmiş, örneğin iptal başarıdan sonra gelmiş. Önce durumu okuyun.
- **429** — çok fazla istek. OmniaKey sabit hız sınırı yayımlamıyor, bu yüzden üstel gecikme ve jitter ile geri çekilin.
- **503 `no_available_channel`** — o işlem için kanal yok, örneğin video to video. Metinden videoya ya da görselden videoya kullanın.
- **`TimeoutError`** — 15 dakika sonra hâlâ sürüyor. Aynı kimliği sonra sorgulayın; yeniden gönderme ikinci bir iş açar ve faturalar.

## Bir Wan 3.0 klibi ne kadar?

Alibaba videonun saniyesi başına faturalıyor ve başarısız istek faturalanmıyor (fiyat sayfası 29 Ekim 2026'da güncellendi). Tablo, 31 Ekim 2026'da [Alibaba'nın Model Studio fiyat sayfasından](https://www.alibabacloud.com/help/en/model-studio/model-pricing) kontrol edilen Singapur liste fiyatlarını saniye başına veriyor.

|Model|480P|720P|1080P|
|-|-|-|-|
|Wan 3.0|$0.05|$0.1|$0.2|
|Wan 3.0 Prime|$0.068|$0.14|$0.28|

Alibaba'da 5 saniyelik 720P klip Wan 3.0 üzerinde $0.50 (5 × $0.1), Prime üzerinde $0.70 (5 × $0.14). Üç Wan 3.0 fiyatında "Limited-time 30% off" ibaresi var ve sayfa rakamların bunu içerip içermediğini söylemiyor. Ses açık ya da kapalı, ücret aynı.

Alibaba'nın ücretsiz kotası Singapur'da `wan3.0-video` için 30 saniye video, girdi artı çıktı; Prime'da kota yok. Alibaba'nın Çin (Pekin) bölgesi standart model için daha düşük dolar ücretleri listeliyor: 480P, 720P ve 1080P'de saniye başına $0.041256, $0.082513 ve $0.165025.

OmniaKey de saniye başına faturalıyor; güncel ücretler [Wan 3.0](https://omniakey.com/tr/wan3-0-video) ve [Wan 3.0 Prime](https://omniakey.com/tr/wan3-0-video-prime) model sayfalarında.

## Sık sorulan sorular

### Bir çağrı ne kadar sürüyor?

Alibaba bir işin tipik olarak 1 ile 5 dakika sürdüğünü ve 15 saniyede bir sorgulamayı öneriyor (başvuru kaynağı, 31 Ekim 2026'da kontrol edildi). Üç işimiz 2 min 42 s, 3 min 20 s ve 4 min 36 s sürdü.

### Sesi nasıl kapatırım?

`"audio": false` değerini `parameters` içinde ayarlayın, MP4 fener işimizde olduğu gibi yalnızca video parçasıyla geliyor. Fiyat aynı kalıyor.

### wan3.0-video mu wan3.0-video-prime mı kullanmalıyım?

Alibaba'nın daha düşük liste ücreti ve Singapur'daki 30 saniyelik ücretsiz kotası için `wan3.0-video` seçin, hız daha önemliyse Prime. OmniaKey Prime'ı aynı yetenekler, yaklaşık yarı süre olarak anlatıyor.

### Video bağlantısı ne kadar dayanıyor?

OmniaKey'de yaklaşık bir saat; kayıt 24 saat yaşadığı sürece görevi yeniden sorgulamak yeni bir bağlantı veriyor. Alibaba'nın kendi video URL'si 24 saat dayanıyor.

## Kontrol edilen kaynaklar

- [Wan 3.0 video üretim API başvuru kaynağı](https://www.alibabacloud.com/help/en/model-studio/wan3-video-generation-api-reference), 31 Ekim 2026'da kontrol edildi
- [Wan 3.0 video üretim kılavuzu](https://www.alibabacloud.com/help/en/model-studio/wan3-video-generation-guide), 31 Ekim 2026'da kontrol edildi
- [Wan 3.0 video üretim prompt kılavuzu](https://www.alibabacloud.com/help/en/model-studio/wan3-video-generation-prompt-guide), 31 Ekim 2026'da kontrol edildi
- [Alibaba Cloud Model Studio model fiyatları](https://www.alibabacloud.com/help/en/model-studio/model-pricing), 31 Ekim 2026'da kontrol edildi
- [OmniaKey video API dokümanları](https://docs.omniakey.com/en/media/video), 31 Ekim 2026'da kontrol edildi
- [OmniaKey media API genel bakış](https://docs.omniakey.com/en/media/overview), 31 Ekim 2026'da kontrol edildi
- [OmniaKey API hata kodları](https://docs.omniakey.com/en/api/errors), 31 Ekim 2026'da kontrol edildi
