Claude Opus 5.5 jest już dostępny w SeedRouter
SeedRouter Docs

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.

View Markdown

Seedance 2.5 to najnowszy model generowania wideo od ByteDance (Dreamina Seedance 2.5). Wyślij oficjalną treść żądania zadania ModelArk, zachowaj zwrócony identyfikator zadania i odczytaj gotowe wideo z tego zadania. Obrazy, wideo i audio umieszczasz w content jako adresy URL.

ID modeli

ID modeluRozdzielczościDługość
dreamina-seedance-2-5480p, 720p, 1080p4–30 sekund lub automatycznie

Aktualne ceny znajdziesz na stronie modelu.

Krótki przykład

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-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/contents/generations/tasks
NagłówekWartość
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Treść to oficjalne żądanie ModelArk „utwórz zadanie generowania wideo”. Jeśli już wywołujesz ModelArk, zmień tylko bazowy adres URL na https://api.seedrouter.ai/v1 oraz klucz API. Odpowiedź to {"id": "task_..."}, a nie gotowe wideo. Klucze API trzymaj w kodzie po stronie serwera.

Parametry

NazwaTypWymaganyDomyślnieUwagi
modelstringTak—dreamina-seedance-2-5.
contentobject[]Tak—Prompt i multimedia; szczegóły poniżej.
resolutionenumNie720p480p, 720p, 1080p.
ratioenumNieadaptive16: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).
durationintegerNie-14–30 sekund lub -1, aby wybór pozostawić modelowi. Dla edit musi mieć wartość -1.
generate_audiobooleanNietrueGeneruje dźwięk razem z wideo.
watermarkbooleanNiefalseDodaje znak wodny.
return_last_framebooleanNiefalseZwraca też ostatnią klatkę jako adres URL obrazu.
output_formatenumNiemp4mp4 lub mov.
omni_reference_task_typeenumNieautoauto, reference, edit, extend. edit i extend wymagają wideo referencyjnego.
execution_expires_afterintegerNie1728003600–259200 sekund. Zadanie, które po tym czasie nadal nie jest zakończone, przechodzi w stan expired i nie jest naliczane.
priorityintegerNie00–9.
safety_identifierstringNie—1–64 znaki identyfikujące Twojego użytkownika końcowego. Może to być hash.
service_tierenumNiedefaultTylko default.
content_filterbooleanNietrueRozszerzenie SeedRouter. false wyłącza filtrowanie treści dla tego żądania.

Elementy content

ElementPostaćRolaLimit
Tekst{"type": "text", "text": "..."}—Jeden.
Obraz{"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."}first_frame, last_frame, reference_imageDo 30 obrazów referencyjnych.
Wideo{"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"}reference_videoDo 10.
Audio{"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"}reference_audioDo 10.

Nieznane pola są odrzucane. Nieobsługiwane: seed, callback_url (zamiast tego odpytuj zadanie), draft i draft_task, 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.

Trybcontent
Tekst na wideojeden element tekstowy
Pierwsza klatkatekst (opcjonalnie) + jeden obraz z rolą first_frame albo jeden obraz bez roli
Pierwsza i ostatnia klatkatekst (opcjonalnie) + jeden obraz first_frame + jeden obraz last_frame
Referencja multimodalnatekst + dowolne połączenie elementów reference_image, reference_video i reference_audio
Edycja wideotekst + jeden reference_video, z omni_reference_task_type: "edit"
Przedłużenie wideotekst + 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/contents/generations/tasks \
  -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:

MultimediaFormatyLimity
ObrazJPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIFMniej niż 30 MB; szerokość i wysokość 300–6000 px; proporcje (szerokość / wysokość) 0,4–2,5; 1–30 obrazów referencyjnych
WideoMP4, 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ść)
AudioWAV, MP32–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 / 1024

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

Opłata wynika z liczby tokenów raportowanej przez gotowe wideo (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 i wygasłe zadania nie są naliczane.

Schemat odpowiedzi

Wysłanie zwraca identyfikator zadania:

{"id": "task_..."}

Pobieranie zadania

curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Odpytuj co 10–20 sekund, aż status przyjmie wartość succeeded, failed lub expired. 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/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}.")

Zadanie zakończone powodzeniem

{
  "id": "task_...",
  "model": "dreamina-seedance-2-5",
  "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
}
PoleZnaczenie
idZachowaj ten identyfikator na potrzeby późniejszych zapytań.
statusqueued, running, succeeded, failed lub expired.
content.video_urlWygenerowane wideo.
content.last_frame_urlOstatnia klatka, gdy return_last_frame ma wartość true.
usage.completion_tokensTokeny wideo gotowego klipu; ilość, za którą naliczana jest opłata.
duration, resolution, ratio, framespersecond, seedFaktycznie wyrenderowane wartości; seed to wartość wybrana przez model.
created_at, updated_atZnaczniki czasu Unix w sekundach.
error{"code", "message"} w nieudanym lub wygasłym zadaniu.

Adresy URL wideo są hostowane w naszym magazynie. Zapisz plik we własnym magazynie, jeśli potrzebujesz trwałej kopii.

Lista zadań

curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Zwraca {"total": N, "items": [...]} z obiektami zadań z ostatnich 7 dni, od najnowszych. page_num i page_size przyjmują wartości 1–500 (domyślnie 1 i 20). Filtry: filter.status, filter.model, filter.task_ids (można powtarzać) i filter.service_tier.

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" (lub "expired") 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ę stanem expired 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ź listę 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 jako first_frame kolejnego zadania.
  • Aby edytować materiał, ustaw omni_reference_task_type na edit i opisz tylko to, co ma się zmienić.

Powiązane