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

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

Tek betik iki klibi de üretti: kod, gerçek süreler ve Alibaba'nın saniye başına fiyatı.

Kiki, OmniaKey COO8 dk okuma
Bu sayfada

Wan 3.0, 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 StudioOmniaKey
İki model kimliğiVarVar
Async başlıkGerekirGerekmez
Video bağlantısı24 saatYaklaşık 1 saat, yenilenir
ÜcretlendirmeSaniye başınaSaniye başına
PythonDashScope SDKStandart 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 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.

ParametreNe yaparVarsayılan
SüreKlip uzunluğu, saniye5
ÇözünürlükGörüntü boyutu sınıfı1080P
OranKare şekliadaptive
SesSes parçasıaçık
SeedTekrarlanabilirlik ipucu-1
Prompt extendPromptunuzu yeniden yazaraçık
WatermarkKöşeye işaret eklerkapalı

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
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
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 (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.

KlipSüreBoyutSes
Ocak (metin)2 min 42 s1280×720Tıkırtı, müzik yok
Kâğıt tekne (görsel)3 min 20 s1284×716"no music"e rağmen piyano
Fener, ses kapalı4 min 36 s854×480Ses 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 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 kontrol edilen Singapur liste fiyatlarını saniye başına veriyor.

Model480P720P1080P
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 ve Wan 3.0 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

Bu makaledeki modeller

Wan 3.0video APIPythontext-to-videoimage-to-video

İlgili makaleler

Son makaleler