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

Seedance 2.0

Generuj wideo w Seedance 2.0 przez oficjalne API zadań ModelArk: tekst na wideo, pierwsza i ostatnia klatka oraz referencje obrazów, wideo i audio, od 480p do 4K.

View Markdown

Seedance 2.0 to model generowania wideo od ByteDance (Dreamina Seedance 2.0). 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ściUwagi
dreamina-seedance-2-0480p, 720p, 1080p, 4KPełny model
dreamina-seedance-2-0-fast480p, 720pNiższa cena za sekundę
dreamina-seedance-2-0-mini480p, 720pNajniższa cena za sekundę

Wszystkie trzy ID przyjmują te same parametry. 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-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
  }'

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—Jeden z trzech powyższych ID modeli.
contentobject[]Tak—Prompt i multimedia; szczegóły poniżej.
resolutionenumNie720p480p, 720p, 1080p, 4k; ID Fast i Mini przyjmują tylko 480p i 720p.
ratioenumNieadaptive16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive.
durationintegerNie54–15 sekund lub -1, aby wybór pozostawić modelowi.
generate_audiobooleanNietrueGeneruje dźwięk razem z wideo.
watermarkbooleanNiefalseDodaje znak wodny.
return_last_framebooleanNiefalseZwraca też ostatnią klatkę jako adres URL obrazu.
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 9 obrazów referencyjnych.
Wideo{"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"}reference_videoDo 3.
Audio{"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"}reference_audioDo 3. Wymaga obrazu lub wideo referencyjnego.

Nieznane pola są odrzucane. Nieobsługiwane: seed, callback_url (zamiast tego odpytuj zadanie), draft i draft_task, tools, dostępne tylko w 1.x frames i camera_fixed, a także output_format i omni_reference_task_type (tylko Seedance 2.5). 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

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-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
  }'

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–9 obrazów referencyjnych
WideoMP4, MOV (H.264 lub H.265)2–15 sekund każde, maksymalnie 3, łącznie najwyżej 15 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–15 sekund każde, maksymalnie 3, łącznie najwyżej 15 sekund; wymaga obrazu lub wideo referencyjnego; 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.0 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 10 044 tokenów w 480p (864×496), 21 600 w 720p, 48 600 w 1080p i 194 400 w 4K.

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-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
}
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-0",
  "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.

Powiązane