Video
Seedance 2.5
Videos mit Seedance 2.5 über die offizielle ModelArk-Aufgaben-API erzeugen, bearbeiten und verlängern: bis zu 30 Sekunden in 1080p, mit bis zu 30 Bild-, 10 Video- und 10 Audioreferenzen.
Seedance 2.5 ist das neueste Videogenerierungsmodell von ByteDance (Dreamina Seedance 2.5). Sende den offiziellen ModelArk-Aufgaben-Body zu POST /v1/videos/generations, behalte die zurückgegebene Aufgaben-ID und lies das fertige Video von GET /v1/tasks/{id}. Bilder, Videos und Audio gehören als URLs in content.
Modell-IDs
| Modell-ID | Auflösungen | Länge |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | 4–30 Sekunden oder automatisch |
Aktuelle Preise findest du auf der Modellseite.
Kurzbeispiel
curl https://api.seedrouter.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"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/videos/generations| Header | Wert |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Der Body ist die offizielle ModelArk-Anfrage „Videogenerierungsaufgabe erstellen“; das ist derselbe Endpunkt, den jedes SeedRouter-Videomodell verwendet. Die Antwort ist die neue Aufgabe (id, status: "processing"), nicht das fertige Video. Bewahre API-Schlüssel in serverseitigem Code auf.
Parameter
| Name | Typ | Pflicht | Standardwert | Hinweise |
|---|---|---|---|---|
model | string | Ja | — | dreamina-seedance-2-5. |
content | object[] | Ja | — | Der Prompt und die Medien; siehe unten. |
draft | boolean | Nein | false | true erstellt einen Entwurf in 480p. |
resolution | enum | Nein | 480p, 720p, 1080p. Standardmäßig 720p bei normaler Generierung und 480p bei Entwürfen; für ein fertiges Video aus einem Entwurf muss 1080p explizit angegeben werden. | 480p, 720p, 1080p. |
ratio | enum | Nein | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Muss mit einem ersten Frame sowie bei edit und extend adaptive sein (oder weggelassen werden). |
duration | integer | Nein | -1 | 4–30 Sekunden, oder -1, damit das Modell wählt. Muss bei edit -1 sein. |
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. |
output_format | enum | Nein | mp4 | mp4 oder mov. |
omni_reference_task_type | enum | Nein | auto | auto, reference, edit, extend. edit und extend erfordern ein Referenzvideo. |
execution_expires_after | integer | Nein | 172800 | 3600–259200 Sekunden. Eine Aufgabe, die danach noch nicht abgeschlossen ist, schlägt mit task_expired fehl und wird 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 30 Referenzbilder. |
| Video | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Bis zu 10. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Bis zu 10. |
Unbekannte Felder werden abgelehnt. Nicht unterstützt: seed, callback_url (frag stattdessen die Aufgabe ab), tools sowie die nur für 1.x geltenden frames und camera_fixed. 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 |
| Video bearbeiten | Text + ein reference_video, mit omni_reference_task_type: "edit" |
| Video verlängern | Text + ein reference_video, mit omni_reference_task_type: "extend" |
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/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"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–30 Referenzbilder |
| Video | MP4, MOV (H.264 oder H.265) | Je 2–30 Sekunden (4–30 Sekunden bei edit), bis zu 10, insgesamt höchstens 30 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–30 Sekunden, bis zu 10, insgesamt höchstens 30 Sekunden; 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.5 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 9.607,5 Token in 480p (854×480), 21.600 in 720p und 48.600 in 1080p.
Für Anfragen mit Referenzvideos gilt außerdem eine Mindestmenge an Tokens. Setze für die Kostenschätzung in der Formel mindestens ceil(output seconds × 2 / 3) Referenzsekunden an, auch wenn die ursprünglichen Referenzvideos kürzer sind. Das gilt sowohl für Entwürfe als auch für fertige Videos; der Entwurfsclip selbst wird dabei nicht zum Referenzvideo. Die tatsächlichen Kosten richten sich nach der von der abgeschlossenen Aufgabe gemeldeten Nutzung.
Berechnet werden die Token, die das fertige Video meldet (output.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 Aufgaben werden nicht berechnet.
Ausgabeschema
Beim Senden wird die neue Aufgabe zurückgegeben:
{"id": "task_...", "model": "dreamina-seedance-2-5", "status": "processing", "created_at": 1790321515}Aufgabe abrufen
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Frag alle 10–20 Sekunden ab, bis status den Wert completed oder failed 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/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
print(task["output"]["video_url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Abgeschlossene Aufgabe
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "completed",
"created_at": 1790321515,
"finished_at": 1790321652,
"output": {
"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",
"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
}
}| Feld | Bedeutung |
|---|---|
id | Bewahre diese ID für spätere Abfragen auf. |
status | processing, completed oder failed. |
output.video_url | Das erzeugte Video. |
output.last_frame_url | Der letzte Frame, wenn return_last_frame den Wert true hat. |
output.content | Die gleichen URLs in der offiziellen ModelArk-Form. |
output.usage.completion_tokens | Video-Token des fertigen Videos; die abgerechnete Menge. |
output.duration, output.resolution, output.ratio, output.framespersecond, output.seed | Was tatsächlich gerendert wurde; seed ist der vom Modell gewählte Wert. |
created_at, finished_at | Unix-Zeitstempel in Sekunden. |
error | {"code", "message"} bei einer fehlgeschlagenen Aufgabe. |
Video-URLs werden in unserem Speicher gehostet. Speichere die Datei in deinem eigenen Speicher, wenn du eine dauerhafte Kopie benötigst.
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" 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, schlägt mit task_expired fehl.
Codes, HTTP-Status und Hinweise zu Wiederholungen findest du im gemeinsamen Fehlerkatalog.
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"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 deinen Aufgabenverlauf, 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. - Um Filmmaterial zu bearbeiten, setze
omni_reference_task_typeaufeditund beschreibe nur, was sich ändern soll.
Weiterführend
Entwurf als Vorschau und fertiges Video
Setze draft: true, um eine Vorschau in 480p zu generieren. Andere Auflösungen sind im Entwurfsmodus ungültig. Für Vorschauen gelten dieselbe Berechnung der Token-Nutzung und derselbe Token-Preis wie für die normale Generierung in 480p.
{
"model": "dreamina-seedance-2-5",
"content": [{ "type": "text", "text": "A fox walks through a sunny garden." }],
"draft": true,
"resolution": "480p",
"duration": 4,
"ratio": "16:9"
}Frage die zurückgegebene SeedRouter-Aufgaben-ID ab, bis status den Wert completed und output.draft den Wert true hat. Sende innerhalb von 7 Tagen nach Erstellung des Entwurfs eine separate Anfrage mit dieser ID:
{
"model": "dreamina-seedance-2-5",
"content": [{ "type": "draft_task", "draft_task": { "id": "task_YOUR_DRAFT_ID" } }],
"resolution": "1080p"
}Der Entwurf muss zu deinem Konto gehören, abgeschlossen haben und dasselbe Modell verwenden. content darf nur ein einziges draft_task-Element enthalten. Setze resolution explizit auf 1080p; lass draft weg oder setze es auf false. Sende duration, ratio, seed, generate_audio, omni_reference_task_type, Text oder Medien nicht erneut, auch nicht mit identischen Werten. Diese Einstellungen werden aus dem Entwurf übernommen.
Für die neue Aufgabe kannst du watermark, return_last_frame, output_format, execution_expires_after, priority, safety_identifier und service_tier: "default" setzen. Für nicht angegebene Ausgabeoptionen gelten die jeweiligen Standardwerte. content_filter wird übernommen und kann nicht geändert werden. Bei erfolgreicher Erstellung des fertigen Videos werden eine neue Aufgaben-ID, output.draft: false und output.draft_task_id mit deiner ursprünglichen SeedRouter-Entwurfs-ID zurückgegeben. Mit einem Entwurf kannst du vor Ablauf seiner Gültigkeit mehrere fertige Videos separat generieren.
Entwurf und fertiges Video werden unabhängig voneinander berechnet. Für das fertige Video gilt der 1080p-Tarif für die Eingabekategorie des ursprünglichen Entwurfs: Wurde für den Entwurf ein Referenzvideo verwendet, gilt auch für das fertige Video der Referenzvideo-Tarif, und die Dauer des ursprünglichen Referenzvideos fließt in die Token-Nutzung ein. Der Entwurfsclip selbst wird nicht als zusätzliches Eingabevideo gezählt. Für jede Aufgabe gilt der zum Zeitpunkt ihrer Übermittlung gültige Preis. Fehlgeschlagene Anfragen werden nicht berechnet.
