Seedance 2.0
Videos mit Seedance 2.0 über die offizielle ModelArk-Aufgaben-API erzeugen: Text zu Video, erster und letzter Frame sowie Bild-, Video- und Audioreferenzen, 480p bis 4K.
Seedance 2.0 ist das Videogenerierungsmodell von ByteDance (Dreamina Seedance 2.0). Sende den offiziellen ModelArk-Aufgaben-Body, behalte die zurückgegebene Aufgaben-ID und lies das fertige Video aus der Aufgabe. Bilder, Videos und Audio gehören als URLs in content.
Modell-IDs
| Modell-ID | Auflösungen | Hinweise |
|---|---|---|
dreamina-seedance-2-0 | 480p, 720p, 1080p, 4K | Vollständiges Modell |
dreamina-seedance-2-0-fast | 480p, 720p | Niedrigerer Preis pro Sekunde |
dreamina-seedance-2-0-mini | 480p, 720p | Niedrigster Preis pro Sekunde |
Alle drei IDs akzeptieren dieselben Parameter. Aktuelle Preise findest du auf der Modellseite.
Kurzbeispiel
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'Endpunkt
POST https://api.seedrouter.ai/v1/contents/generations/tasks| Header | Wert |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Der Body ist die offizielle ModelArk-Anfrage „Videogenerierungsaufgabe erstellen“. Wenn du ModelArk bereits aufrufst, änderst du nur die Basis-URL auf https://api.seedrouter.ai/v1 und den API-Schlüssel. Die Antwort ist {"id": "task_..."}, nicht das fertige Video. Bewahre API-Schlüssel in serverseitigem Code auf.
Parameter
| Name | Typ | Pflicht | Standardwert | Hinweise |
|---|---|---|---|---|
model | string | Ja | — | Eine der drei Modell-IDs oben. |
content | object[] | Ja | — | Der Prompt und die Medien; siehe unten. |
resolution | enum | Nein | 720p | 480p, 720p, 1080p, 4k; die IDs Fast und Mini akzeptieren nur 480p und 720p. |
ratio | enum | Nein | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. |
duration | integer | Nein | 5 | 4–15 Sekunden, oder -1, damit das Modell wählt. |
generate_audio | boolean | Nein | true | Ton zusammen mit dem Video erzeugen. |
watermark | boolean | Nein | false | Ein Wasserzeichen hinzufügen. |
return_last_frame | boolean | Nein | false | Den letzten Frame zusätzlich als Bild-URL zurückgeben. |
execution_expires_after | integer | Nein | 172800 | 3600–259200 Sekunden. Eine Aufgabe, die danach noch nicht abgeschlossen ist, wird zu expired und nicht berechnet. |
priority | integer | Nein | 0 | 0–9. |
safety_identifier | string | Nein | — | 1–64 Zeichen, die deinen Endnutzer kennzeichnen. Ein Hash genügt. |
service_tier | enum | Nein | default | Nur default. |
content_filter | boolean | Nein | true | SeedRouter-Erweiterung. false schaltet die Inhaltsfilterung für diese Anfrage aus. |
content-Einträge
| Eintrag | Form | Rolle | Limit |
|---|---|---|---|
| Text | {"type": "text", "text": "..."} | — | Einer. |
| Bild | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | Bis zu 9 Referenzbilder. |
| Video | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Bis zu 3. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Bis zu 3. Erfordert ein Referenzbild oder -video. |
Unbekannte Felder werden abgelehnt. Nicht unterstützt: seed, callback_url (frag stattdessen die Aufgabe ab), draft und draft_task, tools sowie die nur für 1.x geltenden frames und camera_fixed, außerdem output_format und omni_reference_task_type (nur Seedance 2.5). Aufgaben können weder abgebrochen noch gelöscht werden.
Modi
Der Modus ergibt sich aus den content-Einträgen; es gibt keinen Modus-Parameter.
| Modus | content |
|---|---|
| Text zu Video | ein Texteintrag |
| Erster Frame | Text (optional) + ein Bild mit der Rolle first_frame oder ein Bild ohne Rolle |
| Erster und letzter Frame | Text (optional) + ein first_frame-Bild + ein last_frame-Bild |
| Multimodale Referenz | Text + beliebige Kombination aus reference_image-, reference_video- und reference_audio-Einträgen |
Die Modi mit erstem Frame lassen sich nicht mit Referenzeinträgen kombinieren. Bei mehreren Bildern oder anderen Medien braucht jedes Bild eine role.
Referenzbeispiel
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [
{"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
{"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
],
"ratio": "adaptive",
"duration": 8
}'Ersetze die Beispiel-URLs durch eigene, erreichbare Dateien.
Medieneingaben
Diese API akzeptiert ausschließlich URL-Verweise. Base64, data:-URLs, asset://-IDs und Multipart-Uploads werden nicht akzeptiert. Das Playground lädt ausgewählte Dateien zunächst in den Speicher und sendet dann deren URLs.
Medien müssen öffentliche HTTP(S)-URLs sein und die offiziellen Grenzen des Modells einhalten:
| Medium | Formate | Grenzen |
|---|---|---|
| Bild | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Kleiner als 30 MB; Breite und Höhe 300–6000 px; Seitenverhältnis (Breite / Höhe) 0,4–2,5; 1–9 Referenzbilder |
| Video | MP4, MOV (H.264 oder H.265) | Je 2–15 Sekunden, bis zu 3, insgesamt höchstens 15 Sekunden; höchstens 200 MB; 24–60 FPS; Breite und Höhe 300–6000 px; Seitenverhältnis 0,4–2,5; 407.696–8.295.044 Pixel (Breite × Höhe) |
| Audio | WAV, MP3 | Je 2–15 Sekunden, bis zu 3, insgesamt höchstens 15 Sekunden; erfordert ein Referenzbild oder -video; höchstens 15 MB |
Referenzbilder und -videos mit echten menschlichen Gesichtern werden vom Modell nicht unterstützt.
Medien werden beim Start der Aufgabe geprüft, vor jeder Generierung. Eine Aufgabe, deren Medien eine dieser Grenzen verletzen, endet als failed mit invalid_request_error und einer Meldung, die die Regel nennt, zum Beispiel The request was rejected: content reference videos must total at most 15 seconds., und wird nicht berechnet. Eine Datei, die zu diesem Zeitpunkt nicht gelesen werden kann, wird an das Modell weitergegeben, das sie annimmt oder ablehnt; eine fehlgeschlagene Aufgabe wird in keinem Fall berechnet.
Kostenfaktoren
Die aktuellen Preise findest du im Preisabschnitt des Modells. Seedance 2.0 rechnet Video-Token ab, die offizielle Einheit:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024Der Preis pro Million Token hängt von der Ausgabeauflösung ab und davon, ob die Anfrage ein Referenzvideo enthält; eine Anfrage mit Referenzvideo verwendet für alle ihre Token einen niedrigeren Tarif. Text-, Bild- und Audioeingaben werden nicht berechnet. Bei 16:9 entspricht eine Sekunde 10.044 Token in 480p (864×496), 21.600 in 720p, 48.600 in 1080p und 194.400 in 4K.
Berechnet werden die Token, die das fertige Video meldet (usage.completion_tokens); duration: -1 wird daher nach der tatsächlich erzeugten Länge abgerechnet. Gerenderte Clips laufen etwas über die angefragte Länge hinaus: Eine Anfrage über 5 Sekunden in 720p und 16:9 rendert 121 Frames und meldet 108.900 statt 108.000 Token. Die endgültigen Kosten siehst du im Nutzungsverlauf deines Kontos. Fehlgeschlagene und abgelaufene Aufgaben werden nicht berechnet.
Ausgabeschema
Beim Senden wird die Aufgaben-ID zurückgegeben:
{"id": "task_..."}Aufgabe abrufen
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Frag alle 10–20 Sekunden ab, bis status den Wert succeeded, failed oder expired hat. Eine Zeitüberschreitung des Netzwerks während der Abfrage bedeutet nicht, dass die Erzeugung fehlgeschlagen ist: Behalte die Aufgaben-ID und setze die Prüfung fort. Erstelle keine weitere Aufgabe, um den Fortschritt zu prüfen.
Vollständiges Abfragebeispiel
Führe dies nach dem obigen Python-Beispiel zum Senden aus.
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "succeeded":
print(task["content"]["video_url"])
break
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Erfolgreiche Aufgabe
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "succeeded",
"content": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
"last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
},
"usage": {"completion_tokens": 108900, "total_tokens": 108900},
"seed": 42,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false,
"output_format": "mp4",
"service_tier": "default",
"execution_expires_after": 172800,
"priority": 0,
"created_at": 1790321515,
"updated_at": 1790321652
}| Feld | Bedeutung |
|---|---|
id | Bewahre diese ID für spätere Abfragen auf. |
status | queued, running, succeeded, failed oder expired. |
content.video_url | Das erzeugte Video. |
content.last_frame_url | Der letzte Frame, wenn return_last_frame den Wert true hat. |
usage.completion_tokens | Video-Token des fertigen Videos; die abgerechnete Menge. |
duration, resolution, ratio, framespersecond, seed | Was tatsächlich gerendert wurde; seed ist der vom Modell gewählte Wert. |
created_at, updated_at | Unix-Zeitstempel in Sekunden. |
error | {"code", "message"} bei einer fehlgeschlagenen oder abgelaufenen Aufgabe. |
Video-URLs werden in unserem Speicher gehostet. Speichere die Datei in deinem eigenen Speicher, wenn du eine dauerhafte Kopie benötigst.
Aufgaben auflisten
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Gibt {"total": N, "items": [...]} mit Aufgabenobjekten der letzten 7 Tage zurück, die neuesten zuerst. page_num und page_size liegen bei 1–500 (Vorgabewerte 1 und 20). Filter: filter.status, filter.model, filter.task_ids (wiederholbar) und filter.service_tier.
Fehler
Anfragen, die vor der Erstellung einer Aufgabe abgelehnt werden, geben einen HTTP-Fehler mit einem error-Objekt zurück und werden nicht berechnet. Eine Aufgabe, die nach der Annahme fehlschlägt, gibt bei der Abfrage HTTP 200 zurück, zusammen mit status: "failed" (oder "expired") und einem error-Objekt. Von der Inhaltsfilterung zurückgehaltene Ausgaben schlagen mit content_policy_violation fehl; eine Aufgabe, die über execution_expires_after hinaus läuft, endet als expired mit task_expired.
Codes, HTTP-Status und Hinweise zu Wiederholungen findest du im gemeinsamen Fehlerkatalog.
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Kommt es beim Senden selbst zu einer Zeitüberschreitung, prüfe deine Aufgabenliste, bevor du erneut sendest: Die erste Anfrage wurde möglicherweise bereits angenommen.
Tipps
- Beschreibe Motiv, Handlung, Kamerabewegung und Beleuchtung in ganzen Sätzen.
- Erstelle Entwürfe in 480p mit kurzer
durationund rendere die beste Version dann in höherer Auflösung. - Verkette Einstellungen mit
return_last_frame: Verwende den zurückgegebenen Frame alsfirst_frameder nächsten Aufgabe.
