Wan 3.0 API: Text-to-Video und Image-to-Video mit Python
Ein Skript, zwei Clips: der Code, die echten Laufzeiten und Alibabas Preis pro Sekunde.
Auf dieser Seite
- Gibt es eine offizielle Wan 3.0 API, und welches Modell nehme ich?
- Was brauchst du vor dem ersten Aufruf?
- Welche Parameter zählen?
- Wie sieht der Python-Code aus?
- Was haben die beiden Aufrufe erzeugt?
- Text to Video: die Schmiede
- Image to Video: das Papierboot
- Ist der Ton an, und greift "no music"?
- Wie bekommst du die Videodatei, und wie lange gelten die Links?
- Welche Fehler wirst du sehen?
- Was kostet ein Wan-3.0-Clip?
- Häufige Fragen
- Wie lange dauert ein Aufruf?
- Wie schalte ich den Ton aus?
- wan3.0-video oder wan3.0-video-prime?
- Wie lange gilt der Videolink?
- Geprüfte Quellen
Wan 3.0 läuft in Alibaba Cloud Model Studio als wan3.0-video und als schnelleres wan3.0-video-prime. Jeder Aufruf ist asynchron: Aufgabe anlegen, ID abfragen, MP4 herunterladen. Unser Python-Skript hat einen 5-Sekunden-Clip in 720P aus Text in 2 min 42 s erzeugt und einen aus einem Standbild in 3 min 20 s, beide mit Ton.
- Den Key in
OMNIAKEY_API_KEYeintragen. - POST
https://api.omniakey.com/v1/media/tasksmit Modell, Operation, Prompt, Parametern und einem neuenIdempotency-Key. GET /v1/media/tasks/{id}abfragen, bis der Status succeeded lautet, dann sofortassets[0].urlherunterladen.
Gibt es eine offizielle Wan 3.0 API, und welches Modell nehme ich?
Ja. Alibaba Cloud Model Studio ist die offizielle API, mit wan3.0-video und wan3.0-video-prime (Referenz aktualisiert am 15. Oktober 2026). Der Create-Aufruf braucht den Header X-DashScope-Async: enable, und Alibabas Python-Weg ist das DashScope SDK 2.0.1 oder neuer.
| Alibaba Model Studio | OmniaKey | |
|---|---|---|
| Beide Modell-IDs | Ja | Ja |
| Async-Header nötig | Ja | Nein |
| Videolink gilt | 24 Stunden | Etwa 1 Stunde, erneuerbar |
| Abrechnung | Pro Sekunde | Pro Sekunde |
| Python | DashScope SDK | Standardbibliothek |
Beide IDs nehmen denselben Request-Body, und das Modell wählt den Modus über die Medien, die du mitschickst. Das Skript unten nutzt wan3.0-video, die Zeile MODEL schaltet um. Wan 3.0 Prime haben wir nicht ausgeführt; laut OmniaKey-Doku bietet es dieselben Fähigkeiten bei etwa halber Laufzeit (geprüft am 31. Oktober 2026).
Was brauchst du vor dem ersten Aufruf?
Drei Dinge, und das erste ist der Key:
-
Einen OmniaKey-API-Key, in der Shell exportiert:
bashexport OMNIAKEY_API_KEY="your-key" -
Python 3. Das Skript nutzt nur die Standardbibliothek, python3 führt es direkt aus.
-
Für Image to Video ein erstes Bild: ein JPEG mit etwa 1024 px Breite oder eine öffentliche HTTPS-URL. Das Skript lehnt eine Datei über 700.000 Byte ab, weil Base64 ein Drittel dazulegt und der Body bei 1 MiB endet (Doku, geprüft am 31. Oktober 2026).
Welche Parameter zählen?
Sieben Felder machen den größten Teil der Arbeit, und jedes ist ein Wert in parameters.
| Parameter | Was er tut | Standard |
|---|---|---|
| Dauer | Länge des Clips, Sekunden | 5 |
| Auflösung | Stufe der Bildgröße | 1080P |
| Verhältnis | Form des Bildes | adaptive |
| Audio | Tonspur | an |
| Seed | Hinweis für Wiederholbarkeit | -1 |
| Prompt erweitern | Schreibt den Prompt um | an |
| Wasserzeichen | Setzt eine Eckmarke | aus |
Das Skript setzt Dauer, Auflösung und Verhältnis. Es fragt 720P an, während Alibabas Standard 1080P ist, was zu Listenpreisen pro Sekunde doppelt so viel kostet.
Wie sieht der Python-Code aus?
Das Skript unten lief am 31. Oktober 2026 unverändert: nur Standardbibliothek, beide Modi, eine Zeile MODEL zum Umschalten.
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",
))
Was die einzelnen Teile machen:
run_taskerzeugt für jede Aufgabe einen neuenIdempotency-Key. Wird derselbe Key mit demselben Body erneut geschickt, kommt die ursprüngliche Aufgabe zurück, und es wird nie doppelt abgerechnet (Doku, geprüft am 31. Oktober 2026).- Es fragt alle 5 Sekunden ab, bis zu 15 Minuten lang, und wirft danach TimeoutError.
- Ein Timeout heißt: dieselbe ID später erneut abfragen. Ein erneutes Absenden erzeugt einen neuen Key, eine zweite Aufgabe und eine zweite Rechnung.
- Es lädt die erste Asset-URL sofort herunter, weil der signierte Link kurzlebig ist.
image_to_videolehnt ein Bild über 700.000 Byte ab: Base64 legt ein Drittel drauf, und der Body endet bei 1 MiB.- Der Bild-Aufruf setzt das Verhältnis auf
adaptive, damit der Clip die Form des Standbilds übernimmt.
Was es ausgegeben hat:
task task_<id>
done task_<id>
task task_<id>
done task_<id>
Was haben die beiden Aufrufe erzeugt?
Beide Dateien kamen als 5,04-Sekunden-MP4 zurück, 150 Frames bei 30 fps, H.264, mit einer AAC-Stereo-Tonspur bei 44,1 kHz.
Text to Video: die Schmiede

Der Clip folgt dem Prompt: Ein Schmied in dunklem Hemd und Lederschürze hämmert auf ein glühend oranges Hufeisen, bei 2,2 Sekunden sprühen Funken, und die Kamera fährt etwas näher heran. Der Fehler ist ein eingestempeltes Meisterzeichen aus unlesbaren Buchstaben auf dem Amboss, obwohl der Prompt keinen Text verlangte. Vom Start bis zur Datei vergingen 2 min 42 s; das MP4 ist 1280×720 groß und 6,6 MB.
Image to Video: das Papierboot

Der erste Frame war ein Standbild aus Nano Banana 2.1, ein rotes Papierboot auf einer Regenpfütze, auf ein JPEG mit 1024×571 und 158 KB verkleinert und inline als Data-URL geschickt. Der Clip behält das Dämmerlicht und das nasse Kopfsteinpflaster, lässt das Boot wie gewünscht von links nach rechts treiben, zeigt bei 1,6 Sekunden Wellenringe und hält die Kamera tief und ruhig. Zurück kam er als 1284×716, weil adaptive der Form des Standbilds folgte, in 3 min 20 s bei 7,4 MB.
Ist der Ton an, und greift "no music"?
Der Ton ist standardmäßig an. Gemini 3.8 Flash beschrieb die Tonspur der Schmiede als metallisches Klirren ohne Sprache und ohne Musik und die des Papierboots als melancholische, ruhige Klaviermelodie, obwohl dieser Prompt mit "no music" endete. Alibabas Prompt-Guide (aktualisiert am 16. Oktober 2026) empfiehlt "No BGM" oder "No background music", und unser Prompt nutzte keins von beiden.
Mit "audio": false trägt die Datei nur eine Videospur: Unser 2-Sekunden-Job in 480P mit der Laterne hatte keine Tonspur, und Alibaba rechnet in beiden Fällen gleich ab.
| Clip | Zeit | Größe | Ton |
|---|---|---|---|
| Schmiede (Text) | 2 min 42 s | 1280×720 | Klirren, keine Musik |
| Papierboot (Bild) | 3 min 20 s | 1284×716 | Klavier trotz "no music" |
| Laterne, Audio aus | 4 min 36 s | 854×480 | Keine Tonspur |
Die Wartezeit schwankt: Der 2-Sekunden-Job ohne Audio brauchte 4 min 36 s, länger als beide 5-Sekunden-Clips in 720P. Für die Formulierung von Prompts hat der Wan 3.0 Prompt-Guide den Aufbau und Beispiel-Prompts.
Wie bekommst du die Videodatei, und wie lange gelten die Links?
GET /v1/media/tasks/{id} abfragen, bis der Status succeeded, failed oder canceled lautet; während der Job läuft, steht dort queued oder processing. Eine fertige Aufgabe liefert eine signierte Asset-URL, die etwa eine Stunde gilt (OmniaKey-Doku, geprüft am 31. Oktober 2026). Lade sie sofort herunter und frage die Aufgabe später erneut ab, wenn die alte URL abläuft, denn der Eintrag bleibt 24 Stunden bestehen.
Die Datei ist ein MP4 mit H.264-Video bei 30 fps, und Alibabas eigene Video-URL gilt 24 Stunden. Der Abbruch eines Wan-3.0-Jobs stoppt das Rendern nicht, und ein Job, der nach dem Abbruch erfolgreich endet, wird trotzdem abgerechnet; prüfe Dauer und Auflösung, bevor du absendest.
Welche Fehler wirst du sehen?
Die meisten davon kommen zurück, bevor eine Aufgabe existiert, und jeder hat eine Lösung im Request oder im Key.
- 400
model_price_error— Dauer außerhalb von 2 bis 30 Sekunden. Unser Test mit"duration": 1scheiterte in 0,9 s mit "media duration must be between 2 and 30 seconds"; es wurde keine Aufgabe angelegt und nichts abgerechnet. - 400
missing_idempotency_key— kein Idempotency-Key-Header. Füge einen hinzu, bis 255 Zeichen. - 409
idempotency_key_reused— gleicher Key, anderer Body. Erzeuge für jeden Prompt einen neuen Key. - 403
model_not_allowed— der Key darf dieses Modell nicht aufrufen. Prüfe den Wertmodel, dann die Einstellungen des Keys. - 403 mit einer Meldung zu Guthaben oder Ausgabenlimit — wenig Guthaben oder ein Limit pro Key. Aufladen oder Limit anheben.
- 404
task_not_found— falsche ID oder eine Aufgabe, die über 24 Stunden alt ist. Frage die ID ab, die der Create-Aufruf zurückgegeben hat. - 409
task_state_conflict— der Job ist schon fertig, etwa wenn ein Abbruch nach dem Erfolg eintrifft. Lies zuerst den Status. - 429 — zu viele Anfragen. OmniaKey veröffentlicht keine festen Rate-Limits, also warte mit exponentieller Verzögerung und Jitter.
- 503
no_available_channel— kein Kanal für diese Operation, etwa Video to Video. Nutze Text to Video oder Image to Video. TimeoutError— läuft nach 15 Minuten noch. Frage dieselbe ID später ab; ein erneutes Absenden erzeugt eine zweite Aufgabe und eine zweite Rechnung.
Was kostet ein Wan-3.0-Clip?
Alibaba rechnet pro Sekunde Video ab, und eine fehlgeschlagene Anfrage wird nicht berechnet (Preisseite aktualisiert am 29. Oktober 2026). Die Tabelle zeigt Alibabas Listenpreise pro Sekunde für Singapur, geprüft am 31. Oktober 2026, aus Alibabas Preisseite für Model Studio.
| Modell | 480P | 720P | 1080P |
|---|---|---|---|
| Wan 3.0 | $0.05 | $0.1 | $0.2 |
| Wan 3.0 Prime | $0.068 | $0.14 | $0.28 |
Ein 5-Sekunden-Clip in 720P kostet bei Alibaba $0.50 mit Wan 3.0 (5 × $0.1) und $0.70 mit Prime (5 × $0.14). Die drei Wan-3.0-Preise tragen die Kennzeichnung "Limited-time 30% off", und die Seite sagt nicht, ob die Zahlen sie enthalten. Ton an oder aus kostet gleich viel.
Alibabas kostenloses Kontingent sind 30 Sekunden Video, Eingabe plus Ausgabe, bei wan3.0-video in Singapur; Prime hat keins. Bei Alibaba in China (Peking) stehen niedrigere Dollar-Sätze für das Standardmodell: $0.041256, $0.082513 und $0.165025 pro Sekunde bei 480P, 720P und 1080P.
OmniaKey rechnet ebenfalls pro Sekunde ab, die aktuellen Sätze stehen auf den Modellseiten Wan 3.0 und Wan 3.0 Prime.
Häufige Fragen
Wie lange dauert ein Aufruf?
Laut Alibaba dauert ein Job typischerweise 1 bis 5 Minuten, und die Referenz empfiehlt, alle 15 Sekunden abzufragen (geprüft am 31. Oktober 2026). Unsere drei Jobs brauchten 2 min 42 s, 3 min 20 s und 4 min 36 s.
Wie schalte ich den Ton aus?
Setze "audio": false in parameters, dann kommt das MP4 nur mit Videospur an, wie bei unserem Laternen-Job. Der Preis bleibt gleich.
wan3.0-video oder wan3.0-video-prime?
Nimm wan3.0-video für Alibabas niedrigeren Listenpreis und das kostenlose Kontingent von 30 Sekunden in Singapur, und Prime, wenn die Laufzeit wichtiger ist. OmniaKey beschreibt Prime als dieselben Fähigkeiten bei etwa der halben Zeit.
Wie lange gilt der Videolink?
Etwa eine Stunde bei OmniaKey, und eine erneute Abfrage der Aufgabe liefert einen frischen Link, solange der Eintrag 24 Stunden besteht. Alibabas eigene Video-URL gilt 24 Stunden.
Geprüfte Quellen
- Wan 3.0 API-Referenz für die Videogenerierung, geprüft am 31. Oktober 2026
- Wan 3.0 Leitfaden zur Videogenerierung, geprüft am 31. Oktober 2026
- Wan 3.0 Prompt-Guide zur Videogenerierung, geprüft am 31. Oktober 2026
- Alibaba Cloud Model Studio: Modellpreise, geprüft am 31. Oktober 2026
- OmniaKey-Doku zur Video-API, geprüft am 31. Oktober 2026
- OmniaKey: Überblick über die Media-API, geprüft am 31. Oktober 2026
- OmniaKey: Fehlercodes der API, geprüft am 31. Oktober 2026
Modelle in diesem Artikel
Verwandte Artikel
Wan 3.0 Prompt-Guide: Aufbau, Beispiele und echte Clips
Fünf Prompts, fünf echte Clips: Was Wan 3.0 befolgt hat, was nicht, und wie Sie es korrigieren.
Wan 3.0 vs. Wan 2.7 im Vergleich
Für einen neuen OmniaKey-Video-Workflow ist Wan 3.0 der praktische Standard. Wan 2.7 bleibt dort, wo eine bestehende Integration dessen Fortsetzungs- oder Bearbeitungsvertrag braucht.
Kling 3.0 vs Wan 3.0: derselbe Prompt im Test und der Preis
Drei Prompts, zwei Videomodelle, ein Tag: was jedes Modell erzeugt hat und was es gekostet hat.
Neueste Beiträge
- Claude Code 2.0: Erscheinungsdatum, neue Funktionen und Update
- Seedream 5.0 Pro vs Nano Banana Pro: Test mit gleichem Prompt und Preis
- Suno v6 im Test: echte Songs, Tempo und der Vergleich mit v4.5
- Codex Bilder generieren mit eigenem Provider und imagegen
- Eigene Modelle in Factory Droid: Claude und GPT mit eigenem API-Key nutzen

