Video
Seedance 2.5
Generuj, edytuj i przedłużaj wideo w Seedance 2.5 przez oficjalne API zadań ModelArk: do 30 sekund w 1080p, z maksymalnie 30 referencjami obrazów, 10 wideo i 10 audio.
Seedance 2.5 to najnowszy model generowania wideo od ByteDance (Dreamina Seedance 2.5). Wyślij oficjalną treść żądania zadania ModelArk do POST /v1/videos/generations, zachowaj zwrócony identyfikator zadania i odczytaj gotowe wideo z GET /v1/tasks/{id}. Obrazy, wideo i audio umieszczasz w content jako adresy URL.
ID modeli
| ID modelu | Rozdzielczości | Długość |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | 4–30 sekund lub automatycznie |
Aktualne ceny znajdziesz na stronie modelu.
Krótki przykład
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
}'Punkt końcowy
POST https://api.seedrouter.ai/v1/videos/generations| Nagłówek | Wartość |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Treść to oficjalne żądanie ModelArk „utwórz zadanie generowania wideo”; to ten sam endpoint, z którego korzystają wszystkie modele wideo SeedRouter. Odpowiedź to nowe zadanie (id, status: "processing"), a nie gotowe wideo. Klucze API trzymaj w kodzie po stronie serwera.
Parametry
| Nazwa | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
model | string | Tak | — | dreamina-seedance-2-5. |
content | object[] | Tak | — | Prompt i multimedia; szczegóły poniżej. |
draft | boolean | Nie | false | true tworzy wersję roboczą w 480p. |
resolution | enum | Nie | 480p, 720p, 1080p. Domyślnie 720p dla standardowego generowania i 480p dla wersji roboczej. Przy generowaniu finalnego filmu z wersji roboczej trzeba jawnie podać 1080p. | 480p, 720p, 1080p. |
ratio | enum | Nie | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Przy pierwszej klatce oraz dla edit i extend musi mieć wartość adaptive (lub zostać pominięty). |
duration | integer | Nie | -1 | 4–30 sekund lub -1, aby wybór pozostawić modelowi. Dla edit musi mieć wartość -1. |
generate_audio | boolean | Nie | true | Generuje dźwięk razem z wideo. |
watermark | boolean | Nie | false | Dodaje znak wodny. |
return_last_frame | boolean | Nie | false | Zwraca też ostatnią klatkę jako adres URL obrazu. |
output_format | enum | Nie | mp4 | mp4 lub mov. |
omni_reference_task_type | enum | Nie | auto | auto, reference, edit, extend. edit i extend wymagają wideo referencyjnego. |
execution_expires_after | integer | Nie | 172800 | 3600–259200 sekund. Zadanie, które po tym czasie nadal nie jest zakończone, kończy się niepowodzeniem z task_expired i nie jest naliczane. |
priority | integer | Nie | 0 | 0–9. |
safety_identifier | string | Nie | — | 1–64 znaki identyfikujące Twojego użytkownika końcowego. Może to być hash. |
service_tier | enum | Nie | default | Tylko default. |
content_filter | boolean | Nie | true | Rozszerzenie SeedRouter. false wyłącza filtrowanie treści dla tego żądania. |
Elementy content
| Element | Postać | Rola | Limit |
|---|---|---|---|
| Tekst | {"type": "text", "text": "..."} | — | Jeden. |
| Obraz | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | Do 30 obrazów referencyjnych. |
| Wideo | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Do 10. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Do 10. |
Nieznane pola są odrzucane. Nieobsługiwane: seed, callback_url (zamiast tego odpytuj zadanie), tools oraz dostępne tylko w 1.x frames i camera_fixed. Zadań nie można anulować ani usunąć.
Tryby
Tryb wynika z elementów content; nie ma parametru trybu.
| Tryb | content |
|---|---|
| Tekst na wideo | jeden element tekstowy |
| Pierwsza klatka | tekst (opcjonalnie) + jeden obraz z rolą first_frame albo jeden obraz bez roli |
| Pierwsza i ostatnia klatka | tekst (opcjonalnie) + jeden obraz first_frame + jeden obraz last_frame |
| Referencja multimodalna | tekst + dowolne połączenie elementów reference_image, reference_video i reference_audio |
| Edycja wideo | tekst + jeden reference_video, z omni_reference_task_type: "edit" |
| Przedłużenie wideo | tekst + jeden reference_video, z omni_reference_task_type: "extend" |
Trybów z pierwszą klatką nie można łączyć z elementami referencyjnymi. Przy kilku obrazach lub jakichkolwiek innych multimediach każdy obraz wymaga role.
Przykład z referencjami
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
}'Zastąp przykładowe adresy URL własnymi, dostępnymi plikami.
Dane wejściowe multimediów
To API przyjmuje wyłącznie odwołania przez adres URL. Base64, adresy data:, identyfikatory asset:// oraz przesyłanie multipart nie są przyjmowane. Playground najpierw wysyła wybrane pliki do magazynu, a dopiero potem przesyła ich adresy URL.
Multimedia muszą być publicznymi adresami HTTP(S) i spełniać oficjalne limity modelu:
| Multimedia | Formaty | Limity |
|---|---|---|
| Obraz | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Mniej niż 30 MB; szerokość i wysokość 300–6000 px; proporcje (szerokość / wysokość) 0,4–2,5; 1–30 obrazów referencyjnych |
| Wideo | MP4, MOV (H.264 lub H.265) | 2–30 sekund każde (4–30 sekund dla edit), maksymalnie 10, łącznie najwyżej 30 sekund; najwyżej 200 MB; 24–60 FPS; szerokość i wysokość 300–6000 px; proporcje 0,4–2,5; 407 696–8 295 044 pikseli (szerokość × wysokość) |
| Audio | WAV, MP3 | 2–30 sekund każde, maksymalnie 10, łącznie najwyżej 30 sekund; najwyżej 15 MB |
Model nie obsługuje obrazów ani wideo referencyjnych, które zawierają prawdziwe ludzkie twarze.
Multimedia są sprawdzane w chwili uruchomienia zadania, przed jakimkolwiek generowaniem. Zadanie, którego multimedia naruszają któryś z tych limitów, kończy się stanem failed z invalid_request_error i komunikatem wskazującym regułę, na przykład The request was rejected: content reference videos must total at most 15 seconds., i nie jest naliczane. Plik, którego nie da się w tym momencie odczytać, zostaje przekazany modelowi, który go przyjmuje lub odrzuca; nieudane zadanie w żadnym z tych przypadków nie jest naliczane.
Czynniki wpływające na koszt
Aktualne stawki znajdziesz w sekcji cen modelu. Seedance 2.5 nalicza opłaty za tokeny wideo, czyli oficjalną jednostkę:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024Stawka za milion tokenów zależy od rozdzielczości wyjściowej oraz od tego, czy żądanie zawiera wideo referencyjne; żądanie z wideo referencyjnym korzysta z niższej stawki dla wszystkich swoich tokenów. Tekst, obrazy i audio na wejściu nie są naliczane. Przy 16:9 jedna sekunda to 9 607,5 tokena w 480p (854×480), 21 600 w 720p, 48 600 w 1080p.
Żądania z filmami referencyjnymi mają również minimalny próg tokenów. Przy szacowaniu kosztu przyjmij we wzorze co najmniej ceil(output seconds × 2 / 3) sekund materiału referencyjnego, nawet gdy pierwotne filmy referencyjne są krótsze. Dotyczy to zarówno zadań wersji roboczej, jak i finalnego filmu; sam klip wersji roboczej nie staje się filmem referencyjnym. Rzeczywista opłata zależy od zużycia zgłoszonego przez ukończone zadanie.
Opłata wynika z liczby tokenów raportowanej przez gotowe wideo (output.usage.completion_tokens), dlatego przy duration: -1 naliczana jest faktycznie wygenerowana długość. Wyrenderowane klipy są nieco dłuższe od żądanej długości: 5-sekundowe żądanie 720p 16:9 renderuje 121 klatek i raportuje 108 900 tokenów zamiast 108 000. Ostateczne opłaty zobaczysz w historii zużycia swojego konta. Nieudane zadania nie są naliczane.
Schemat odpowiedzi
Wysłanie zwraca nowe zadanie:
{"id": "task_...", "model": "dreamina-seedance-2-5", "status": "processing", "created_at": 1790321515}Pobieranie zadania
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Odpytuj co 10–20 sekund, aż status przyjmie wartość completed lub failed. Przekroczenie limitu czasu sieci podczas odpytywania nie oznacza, że generowanie się nie powiodło: zachowaj identyfikator zadania i wznów sprawdzanie. Nie twórz kolejnego zadania, aby sprawdzić postęp.
Pełny przykład odpytywania
Uruchom to po powyższym przykładzie wysyłania w Pythonie.
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}.")Zadanie zakończone
{
"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
}
}| Pole | Znaczenie |
|---|---|
id | Zachowaj ten identyfikator na potrzeby późniejszych zapytań. |
status | processing, completed lub failed. |
output.video_url | Wygenerowane wideo. |
output.last_frame_url | Ostatnia klatka, gdy return_last_frame ma wartość true. |
output.content | Te same adresy URL w oficjalnym kształcie ModelArk. |
output.usage.completion_tokens | Tokeny wideo gotowego klipu; ilość, za którą naliczana jest opłata. |
output.duration, output.resolution, output.ratio, output.framespersecond, output.seed | Faktycznie wyrenderowane wartości; seed to wartość wybrana przez model. |
created_at, finished_at | Znaczniki czasu Unix w sekundach. |
error | {"code", "message"} w nieudanym zadaniu. |
Adresy URL wideo są hostowane w naszym magazynie. Zapisz plik we własnym magazynie, jeśli potrzebujesz trwałej kopii.
Błędy
Żądania odrzucone przed utworzeniem zadania zwracają błąd HTTP wraz z obiektem error i nie są naliczane. Zadanie, które zawiodło po przyjęciu, przy odpytaniu zwraca HTTP 200 z status: "failed" i obiektem error. Wynik wstrzymany przez filtrowanie treści kończy się niepowodzeniem z content_policy_violation; zadanie, które przekroczy execution_expires_after, kończy się niepowodzeniem z task_expired.
Kody, statusy HTTP i wskazówki dotyczące ponawiania znajdziesz we wspólnym katalogu błędów.
{
"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."
}
}Jeśli limit czasu został przekroczony przy samym wysyłaniu, przed ponownym wysłaniem sprawdź historię zadań: pierwsze żądanie mogło już zostać przyjęte.
Wskazówki
- Opisz obiekt, akcję, ruch kamery i oświetlenie pełnymi zdaniami.
- Twórz szkice w 480p z krótkim
duration, a wybraną wersję wyrenderuj w wyższej rozdzielczości. - Łącz ujęcia za pomocą
return_last_frame: użyj zwróconej klatki jakofirst_framekolejnego zadania. - Aby edytować materiał, ustaw
omni_reference_task_typenaediti opisz tylko to, co ma się zmienić.
Powiązane
Podgląd w wersji roboczej i finalny film
Ustaw draft: true, aby wygenerować podgląd w 480p. Inne rozdzielczości są niedozwolone w trybie wersji roboczej. Sposób obliczania zużycia tokenów i cena jednostkowa są takie same jak przy standardowym generowaniu w 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"
}Odpytuj zwrócone ID zadania SeedRouter, aż status będzie mieć wartość completed i output.draft — true. W ciągu 7 dni od utworzenia wersji roboczej wyślij osobne żądanie z tym ID:
{
"model": "dreamina-seedance-2-5",
"content": [{ "type": "draft_task", "draft_task": { "id": "task_YOUR_DRAFT_ID" } }],
"resolution": "1080p"
}Wersja robocza musi należeć do twojego konta, być ukończona i korzystać z tego samego modelu. content może zawierać tylko jeden element draft_task. Jawnie ustaw resolution na 1080p; pomiń draft lub ustaw je na false. Nie wysyłaj ponownie duration, ratio, seed, generate_audio, omni_reference_task_type, tekstu ani multimediów, nawet z tymi samymi wartościami. Te ustawienia są dziedziczone z wersji roboczej.
W nowym zadaniu możesz ustawić watermark, return_last_frame, output_format, execution_expires_after, priority, safety_identifier i service_tier: "default". Pominięte opcje wyjściowe przyjmują swoje wartości domyślne. content_filter jest dziedziczony i nie można go zmienić. Pomyślne wygenerowanie finalnego filmu zwraca nowe ID zadania, output.draft: false oraz output.draft_task_id z ID pierwotnej wersji roboczej SeedRouter. Przed upływem terminu ważności jednej wersji roboczej można użyć do kilku osobnych generowań finalnego filmu.
Wersja robocza i finalny film są rozliczane niezależnie. Dla finalnego filmu obowiązuje stawka 1080p odpowiadająca kategorii danych wejściowych pierwotnej wersji roboczej: jeśli wersja robocza korzystała z filmu referencyjnego, finalny film również korzysta ze stawki dla wejścia z filmem referencyjnym, a czas trwania pierwotnego filmu referencyjnego jest uwzględniany w zużyciu tokenów. Sam klip wersji roboczej nie jest liczony jako dodatkowy film wejściowy. Każde zadanie korzysta z ceny obowiązującej w momencie jego wysłania. Nieudane żądania nie są płatne.
