Przejdź do dokumentacji
Na tej stronie

Seedance 2.5

Generuj wideo za pomocą modelu Seedance 2.5, używając tekstu, pierwszej i ostatniej klatki lub referencji multimodalnych. Ta strona opisuje pełny proces od wysłania żądania do otrzymania gotowego wyniku.

ID modelu w API: seedance-2-5

Generowanie odbywa się asynchronicznie. Zapisz identyfikator taskId zwrócony przy tworzeniu zadania, a następnie odpytuj o jego status lub odbierz webhook.

Możliwości

FunkcjaObsługiwane wartości
Rozdzielczość wyjściowa480p · 720p · 1080p
Czas trwania wyniku4–30 s
Proporcje obrazu16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Obrazy referencyjneMaksymalnie 30 zdjęć
Wideo referencyjneMaksymalnie 10 filmów
Pliki audio referencyjneMaksymalnie 10 plików dźwiękowych
Suma wszystkich plików referencyjnychŁącznie maksymalnie 50 plików referencyjnych
Łączny czas trwania na grupę wideo/audioSekundy: 30
seedNieobsługiwane
W trybie referencji do wideo dopuszczalna jest również wartość duration=-1; szczegóły dotyczące edycji wideo i cennika znajdziesz poniżej. Tryb image-to-video akceptuje wyłącznie wartość adaptive; pomiń to pole lub ustaw je na adaptive.

Cennik i kredyty

Generowanie wideo jest rozliczane w kredytach na podstawie naliczanego czasu trwania w sekundach. Bez wejściowego pliku wideo naliczany czas trwania odpowiada długości wygenerowanego materiału; w przypadku korzystania z wejściowego pliku wideo uwzględnia się również czas trwania wideo referencyjnego.

Szkice są rozliczane według powyższych stawek dla 480p, wliczając w to wejściowe wideo referencyjne, jeśli ma zastosowanie. Wersje końcowe są rozliczane według stawki dla 1080p (tylko wideo wyjściowe) wynoszącej 30 kredytów/sekundę; wejściowe wideo referencyjne nie jest naliczane ponownie. Przykładowo, 5-sekundowy szkic bez wideo referencyjnego kosztuje 50 kredytów, a 5-sekundowa wersja końcowa to dodatkowy koszt 150 kredytów.

Poniższa tabela przedstawia liczbę kredytów pobieranych za sekundę, a nie całkowity koszt zadania. Stawka zależy od modelu, rozdzielczości wyjściowej oraz tego, czy w trybie referencyjnym (reference-to-video) dostarczono wideo referencyjne. Wzory i przykłady obliczania całkowitego kosztu znajdują się pod tabelą.

Rozdzielczość wyjściowaBez wejściowego wideoZ wejściowym wideo
480p10 kredytów/sekundę6 kredytów/sekundę
720p20 kredytów/sekundę12 kredytów/sekundę
1080p30 kredytów/sekundę20 kredytów/sekundę
  • Bez wejściowego wideo: sekundy wyjściowe × stawka bez wideo.
  • Z wejściowym wideo: (sekundy wyjściowe + zmierzony czas trwania wejściowego wideo) × stawka z wideo. Serwer mierzy łączny czas trwania referencyjnego materiału wideo i przed naliczeniem opłaty zaokrągla go w górę do pełnych sekund.
  • Użycie samych obrazów lub plików audio jako referencji rozliczane jest według stawki bez wideo. Stawka dla referencji wideo ma zastosowanie wyłącznie w trybie referencyjnym (reference-to-video), gdy dostarczono pliki wideo.

Przykłady obliczania kosztów

5-sekundowe wideo 720p z tekstu (text-to-video): 5 × 20 = 100 kredytów.

5-sekundowy wynik 720p z 5-sekundowym wideo referencyjnym: (5 + 5) × 12 = 120 kredytów.

Kredyty te są pobierane z góry w momencie utworzenia zadania. Jeśli zadanie zakończy się pomyślnie, kwota ta stanowi ostateczną opłatę – nie zostanie ona zwiększona ani częściowo zwrócona na podstawie rzeczywistego czasu trwania wygenerowanego pliku. W przypadku zadań nieudanych lub przekroczenia limitu czasu następuje automatyczny zwrot środków.

Kredyty są rezerwowane w momencie przesłania zadania i pobierane po jego pomyślnym zakończeniu. Zadania zakończone błędem lub przerwane z powodu limitu czasu trafiają do procesu zwrotu. Status rozliczenia refund_failed oznacza, że zwrot nie został sfinalizowany – sprawdź wtedy logi API lub skontaktuj się ze wsparciem.

Jak naliczane są kredyty, gdy duration=-1

Gdy czas trwania jest ustawiony na -1, końcowa długość wyjściowa nie jest stała i decyduje o niej model.

W większości przypadków zaleca się ustawienie konkretnego czasu trwania wideo zamiast wartości -1. Użycie wartości -1 rekomendujemy wyłącznie do edycji wideo, a nie do innych zastosowań związanych z generowaniem wideo.

Materiały referencyjneSposób obliczania opłatyPrzykład
Z wideo referencyjnymZsumuj czas trwania wszystkich filmów referencyjnych i zaokrąglij wynik w górę do pełnej sekundy – oznaczmy go jako T. Opłata wynosi (T + T) × stawka dla wideo: jedno T odpowiada szacowanemu czasowi trwania wyjściowego wideo, a drugie czasowi trwania wejściowego wideo referencyjnego.720p z 5-sekundowym wideo referencyjnym: (5 + 5) × 12 = 120 kredytów.
Bez wideo referencyjnego (tylko obrazy lub dźwięk)Jako szacowany czas trwania wyjściowego wideo przyjmuje się 30 sekund. Opłata wynosi 30 × stawka bez wideo.720p bez wideo referencyjnego: 30 × 20 = 600 kredytów.

Uwierzytelnianie

Utwórz klucz API w panelu użytkownika. Pełny klucz zostanie wyświetlony tylko raz. Przechowuj go bezpiecznie na swoim serwerze i przesyłaj w nagłówku jako token Bearer przy każdym żądaniu.

Bazowy adres URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Przed uruchomieniem poniższych przykładów ustaw zmienną środowiskową SEEVIO_API_KEY. Przykłady w JavaScript należy uruchamiać na serwerze przy użyciu Node.js; przykłady w Pythonie korzystają z pakietu requests.

Szybki start

Wyślij to proste żądanie, zapisz zwrócony identyfikator taskId, a następnie użyj poniższego przykładu odpytywania o stan zadania. Liczba kredytów w odpowiedzi na utworzenie zadania to kwota zarezerwowana.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Przykładowa odpowiedź na utworzenie zadania

Po zaakceptowaniu powyższego żądania interfejs API zwraca tę odpowiedź JSON. taskId to identyfikator zadania służący do późniejszego sprawdzania jego statusu, a credits określa liczbę kredytów zarezerwowanych na poczet tego zadania. Ta odpowiedź potwierdza jedynie utworzenie zadania, a nie gotowość wideo. Aby otrzymać gotowy plik wideo, należy odpytywać API o status zadania lub skorzystać z Webhooka.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Utwórz zadanie

POST https://api.seevio.ai/v1/videos/generations

Wyślij obiekt JSON zawierający model, input oraz opcjonalny callback_url. Zawsze podawaj dokładny identyfikator modelu pokazany na tej stronie; pominięcie pola model spowoduje wybranie seedance-2-0.

Treść żądania

PoleTypWymaganeOpis i ograniczenia
model
stringTak

Identyfikator modelu. Aby użyć modelu Seedance 2.5, ustaw w tym polu wartość seedance-2-5.

callback_url
stringNie

Publiczny punkt końcowy HTTPS dla wywołań zwrotnych POST po zakończeniu lub błędzie zadania. Sieci prywatne i localhost nie są obsługiwane.

Przykład: https://example.com/webhooks/seevio
input
objectTak

Ustawienia generowania. Pole musi zawierać niepusty prompt.

Parametry wejściowe

Pole image_urls jest wymagane w trybie image-to-video. Tryb reference-to-video wymaga co najmniej jednej referencji w polach image_urls, video_urls lub audio_urls.
Gdy podany jest parametr draft_task_id, pomiń parametry: prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search oraz omni_reference_task_type, nawet jeśli ich wartości odpowiadają tym ze szkicu. Te ustawienia są dziedziczone automatycznie. Nie łącz parametru draft=true z draft_task_id.

Podaj wartości image_urls, video_urls i audio_urls jako tablice ciągów znaków URL (string[]). Każdy podany adres URL musi być publicznie dostępny przez protokół HTTPS, w tym również multimedia ignorowane przez wybrany tryb.

PoleTypWymaganeDomyślnieOpis i ograniczenia
input.draft
booleanNiefalse

Utwórz podgląd szkicu w 480p. Tylko dla modelu Seedance 2.5. Wyklucza się wzajemnie z parametrem draft_task_id.

Obsługiwane wartości
true | false
input.draft_task_id
stringNie—

Utwórz wersję końcową 1080p na podstawie własnego, ukończonego szkicu API utworzonego mniej niż 7 dni temu. Podaj taskId zwrócony przez to API i pomiń dziedziczone pola generowania.

Przykład: 3f2aK9mR7xQp4TnZ8bLc6YwH
input.output_format
stringNiemp4

Kontener wyjściowy wideo. Obsługuje formaty mp4 i mov, również w żądaniach szkicu i wersji końcowej.

Obsługiwane wartości
mp4 | mov
input.prompt
stringWarunkowo—

Wymagany do standardowego generowania oraz przy tworzeniu szkicu. Nie wysyłaj go przy generowaniu wersji końcowej za pomocą draft_task_id; prompt zostanie odziedziczony ze szkicu.

Przykład: A cat surfing at sunset
input.generation_type
stringNietext-to-video

Tryb text-to-video korzysta tylko z promptu; image-to-video używa 1–2 obrazów; reference-to-video korzysta z referencji obrazu, wideo i/lub audio.

Obsługiwane wartości
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Warunkowo[]

image-to-video: 1 obraz jako pierwsza klatka lub 2 uporządkowane obrazy jako pierwsza i ostatnia klatka. reference-to-video: maksymalnie 30 obrazów. Ignorowane w trybie text-to-video.

Przykład: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Warunkowo[]

Przekazywane tylko w trybie reference-to-video; maksymalnie 10 plików wideo o łącznym czasie trwania do 30 s. Ignorowane w pozostałych trybach.

Przykład: ["https://example.com/source.mp4"]
input.audio_urls
string[]Warunkowo[]

Przekazywane tylko w trybie reference-to-video; maksymalnie 10 plików audio o łącznym czasie trwania do 30 s. Ignorowane w pozostałych trybach.

Przykład: ["https://example.com/music.mp3"]
input.duration
integerNie5

Czas trwania wideo wyjściowego: 4–30 sekund, domyślnie 5. Wartość duration=-1 jest akceptowana dla szkiców oraz w trybie reference-to-video. W przypadku wersji końcowej pomiń ten parametr – zostanie odziedziczony ze szkicu.

Obsługiwane wartości
-1 | 4–30
Przykład: 5
input.aspect_ratio
stringNieadaptive

Proporcje obrazu wyjściowego. Wartość adaptive pozwala modelowi samodzielnie określić proporcje. Tryb image-to-video akceptuje wyłącznie wartość adaptive; pomiń to pole lub ustaw je na adaptive.

Obsługiwane wartości
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Przykład: adaptive
input.resolution
stringNie720p

Standardowe generowanie domyślnie ustawia rozdzielczość 720p. Szkice obsługują wyłącznie 480p (domyślna wartość dla Draft). Wersje końcowe obsługują wyłącznie 1080p (domyślna wartość dla wersji końcowej).

Obsługiwane wartości
480p | 720p | 1080p
Przykład: 720p
input.generate_audio
booleanNietrue

Zażądaj wygenerowania zsynchronizowanej ścieżki dźwiękowej.

Obsługiwane wartości
true | false
Przykład: true
input.watermark
booleanNiefalse

Zażądaj dodania znaku wodnego AI do wygenerowanego wideo.

Obsługiwane wartości
true | false
Przykład: false
input.web_search
booleanNiefalse

Zezwól na wyszukiwanie w sieci, jeśli model obsługuje tę funkcję.

Obsługiwane wartości
true | false
Przykład: false
input.return_last_frame
booleanNiefalse

Zażądaj wyodrębnienia ostatniej klatki. Wynik zapytania będzie zawierał adres w data.last_frame_url, gdy klatka będzie gotowa; w przeciwnym razie wartość wyniesie null.

Obsługiwane wartości
true | false
Przykład: true

Pola logiczne (boolean) muszą mieć wartość true lub false w formacie JSON (nie jako ciąg znaków czy liczba).

Odpowiedź na utworzenie

Kod HTTP 200 zwraca taskId (string) oraz credits (number). Oznacza to przyjęcie zadania do realizacji, a nie jego zakończenie. Wartość poniżej odpowiada 5-sekundowemu wideo 720p z sekcji szybkiego startu.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Podgląd szkicu → wersja końcowa w 1080p

Model Seedance 2.5 obsługuje dwuetapowy proces: wygeneruj szkic (Draft) w rozdzielczości 480p, aby ocenić warstwę wizualną i ruch, a następnie użyj go do stworzenia wersji końcowej w 1080p. Oba kroki korzystają z metody POST /v1/videos/generations i tworzą osobne, płatne zadania.

Tryb Draft pozwala obniżyć koszty testowania różnych pomysłów. Zamiast generować każdą próbę w 1080p, utwórz kilka tańszych szkiców 480p, wybierz ten, który najbardziej Ci odpowiada, a następnie użyj go do wygenerowania wersji końcowej w rozdzielczości 1080p. Dzięki temu możesz sprawdzić różne warianty niższym kosztem przed zapłaceniem za ostateczną wersję w wysokiej rozdzielczości.

Użyj ukończonego szkicu (Draft) w ciągu 7 dni od jego utworzenia, aby wygenerować wersję końcową. Szkic musi należeć do tego samego konta API. Użyj parametru taskId zwróconego przez to API.

1. Wygeneruj szkic (Draft) w 480p

Ustaw parametr input.draft=true i prześlij standardowy prompt, referencje oraz ustawienia generowania. Rozdzielczość w trybie Draft jest domyślnie ustawiana na 480p; inne rozdzielczości zostaną odrzucone. Możesz włączyć opcję return_last_frame dla szkicu, jak pokazano poniżej.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "draft": true,
    "duration": 5,
    "resolution": "480p",
    "return_last_frame": true
  }
}'
{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 50
}

2. Poczekaj na ukończenie szkicu

Zapisz taskId z odpowiedzi na utworzenie zadania i odpytuj GET /v1/tasks/TASK_ID, aż status zmieni się na completed. Odpowiedź zawiera is_draft=true; podgląd filmu znajdziesz w data.results. Żądana ostatnia klatka znajduje się w data.last_frame_url, jeśli jest dostępna.

Możesz także otrzymać powiadomienie Webhook po zakończeniu generowania szkicu. Ustaw parametr callback_url na najwyższym poziomie żądania tworzenia szkicu. Po ukończeniu szkicu na wskazany adres URL zostanie wysłane powiadomienie, a Twój system będzie mógł je obsłużyć, aby zapisać wynik, zaktualizować stan zadania lub uruchomić własne procesy. Format powiadomienia opisano w sekcji Webhooki na tej stronie.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": true,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 50,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
    "processing_time": 48
  }
}

3. Wygeneruj wersję końcową w 1080p

Zastąp parametr draft_task_id w tym przykładzie identyfikatorem taskId swojego ukończonego szkicu. Wersja końcowa dziedziczy treść i czas trwania ze szkicu. Rozdzielczość domyślnie wynosi 1080p i żadna inna nie jest akceptowana. Parametry output_format, watermark oraz return_last_frame można ustawić niezależnie dla każdej wersji końcowej; callback_url pozostaje na najwyższym poziomie żądania.

Gdy podany jest parametr draft_task_id, pomiń parametry: prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search oraz omni_reference_task_type, nawet jeśli ich wartości odpowiadają tym ze szkicu. Te ustawienia są dziedziczone automatycznie. Nie łącz parametru draft=true z draft_task_id.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
    "resolution": "1080p",
    "output_format": "mp4",
    "watermark": false,
    "return_last_frame": true
  }
}'

Odpowiedź zawiera nowy identyfikator taskId dla wersji końcowej. Odpytuj ten nowy identyfikator lub poczekaj na powiadomienie webhook. Odpowiedź na zapytanie o wersję końcową ma flagę is_draft=false oraz parametr draft_task_id równy identyfikatorowi pierwotnego szkicu. Oryginalny szkic pozostaje dostępny. Każde zaakceptowane żądanie wersji końcowej tworzy nowe, osobno rozliczane zadanie.

{
  "taskId": "final_7mQx2pN8kR4vT9cL6bW3",
  "credits": 150
}

Rozliczanie szkiców (Draft) i wersji końcowych

Szkice są rozliczane według powyższych stawek dla 480p, wliczając w to wejściowe wideo referencyjne, jeśli ma zastosowanie. Wersje końcowe są rozliczane według stawki dla 1080p (tylko wideo wyjściowe) wynoszącej 30 kredytów/sekundę; wejściowe wideo referencyjne nie jest naliczane ponownie. Przykładowo, 5-sekundowy szkic bez wideo referencyjnego kosztuje 50 kredytów, a 5-sekundowa wersja końcowa to dodatkowy koszt 150 kredytów.

Gdy parametr duration=-1, zarówno szkic, jak i wersja końcowa rezerwują kredyty na maksymalnie 30 sekund wideo wyjściowego, przy czym wejściowe wideo referencyjne doliczane jest tylko do szkicu. Po zakończeniu zadania opłata jest korygowana do rzeczywistego czasu trwania filmu, jeśli można go ustalić, a niewykorzystane zarezerwowane kredyty są zwracane. Wersja końcowa rezerwuje do 900 kredytów.

Próba użycia nieukończonego, wygasłego, niebędącego szkicem lub niedostępnego zadania źródłowego zostanie odrzucona z błędem HTTP 400 (invalid_request). Niepoprawna rozdzielczość, przesłanie dziedziczonych pól lub sprzeczne parametry szkicu również zwrócą błąd HTTP 400. Brak wystarczającej liczby kredytów skutkuje błędem HTTP 402.

Tryby generowania i przykłady

Zastąp przykładowe adresy URL multimediów z domeny example.com własnymi, publicznie dostępnymi plikami HTTPS. Przykładowe adresy pokazują strukturę żądania i nie są plikami do pobrania.

Tekst na wideo

Generowanie na podstawie promptu tekstowego. Adresy URL multimediów nie są przekazywane w tym trybie.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Pierwsza klatka

Prześlij jeden obraz jako pierwszą klatkę, a następnie opisz ruch w prompcie.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Pierwsza i ostatnia klatka

Prześlij dwa adresy URL obrazów w kolejności: pierwsza klatka, a następnie ostatnia klatka. Ten przykład żąda również wyodrębnienia ostatniej klatki wygenerowanego wideo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Referencja multimodalna

Połącz referencje obrazu, wideo i audio. Prompt tekstowy pozostaje wymagany. Przesłanie wideo referencyjnego zmienia sposób naliczania opłat.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Referencja audio

Użyj dźwięku jako jedynego typu referencji wraz z wymaganym promptem tekstowym opisującym pożądane wideo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Edycja wideo

W przypadku edycji wideo w programie Seedance 2.5 parametr duration musi mieć wartość -1, a aspect_ratio musi być ustawiony na adaptive. Wymagane jest skonfigurowanie obu tych ustawień – w przeciwnym razie wygenerowanie pliku się nie powiedzie.

Opisz edycję i prześlij wideo źródłowe. Ustaw duration=-1 i użyj proporcji adaptive. Do tego procesu użyj klipu źródłowego o długości co najmniej 4 sekund. Zasady rozliczeń dla wartości duration=-1 podano powyżej.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Przedłużenie wideo

W przypadku rozszerzenia wideo Seedance 2.5 parametr aspect_ratio musi być ustawiony na adaptive – w przeciwnym razie generowanie może się nie powieść. Parametr duration należy ustawić normalnie, na żądaną długość wyjściowego wideo w obsługiwanym zakresie; nie ma potrzeby używania wartości -1.

Opisz, jak powinno kontynuować się wideo źródłowe. Użyj proporcji adaptive i ustaw standardowy czas trwania z zakresu obsługiwanego przez dany model.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Sprawdź stan zadania

GET https://api.seevio.ai/v1/tasks/{taskId}

Zastąp przykładowy identyfikator wartością taskId otrzymaną przy tworzeniu zadania. Zapytania zwracają wyłącznie zadania należące do użytkownika powiązanego z danym kluczem API; nieznane lub niedostępne identyfikatory zwracają HTTP 404.

Na początek odpytuj o stan co 10–20 sekund, wydłużaj odstępy w przypadku błędu HTTP 429 i przerwij, gdy status zmieni się na completed lub failed. W środowisku produkcyjnym zalecamy korzystanie z webhooków. Każdy poniższy przykład kodu wykonuje jedno zapytanie.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusOpis i ograniczenia
queuedZaakceptowano i oczekuje na uruchomienie.
generatingTrwa generowanie wideo.
completedZakończono sukcesem. Pobierz pliki z data.results przed upływem limitu czasu.
failedZakończono błędem. Sprawdź failed_reason oraz billing_status.
PoleTypOpis i ograniczenia
idstring
Identyfikator zadania. Jest to wartość taskId z odpowiedzi na utworzenie.
created_atnumber
Czas utworzenia zadania jako znacznik czasu Unix (w sekundach).
modelstring
Publiczny identyfikator modelu użyty do tego zadania.
is_draftboolean
Wartość true dla szkicu 480p; false dla wersji końcowej lub standardowego filmu.
draft_task_idstring | null
Identyfikator API źródłowego szkicu w przypadku wersji końcowej; null dla szkiców i standardowych filmów.
billing_statusstring
Status rozliczenia: reserved (zarezerwowane), charged (pobrane), refunded (zwrócone) lub refund_failed (błąd zwrotu).
creditsnumber
Kredyty zarezerwowane dla tego zadania. Wartość ta jest widoczna również po zwrocie; sprawdź billing_status, aby poznać ostateczny wynik rozliczenia.
failed_reasonstring | null
Powód błędu dla zadań zakończonych niepowodzeniem; w przeciwnym razie null. Odpowiedzi na zapytania o błędne zadania nie zawierają obiektu data.
dataobject
Obecne w zapytaniach o zadania, które nie zakończyły się błędem. Zawiera szczegóły dotyczące wyniku i przetwarzania.
data.resultsstring[]
Tablica adresów URL wygenerowanych wideo. Pusta do momentu zakończenia zadania lub po wygaśnięciu plików wideo.
data.video_expires_atstring | null
Czas wygaśnięcia plików wideo jako znacznik czasu ISO 8601 (lub null, zanim plik będzie dostępny). Zapisz wynik przed tym czasem.
data.last_frame_urlstring | null
Adres URL ostatniej klatki (jeśli o nią wnioskowano i jest dostępna); w przeciwnym razie null.
data.processing_timenumber | null
Czas przetwarzania po stronie dostawcy w sekundach (jeśli jest dostępny); w przeciwnym razie null.

Zakończone zadanie: odpowiedź na zapytanie z wynikowym wideo

Gdy zapytanie zwróci status=completed, oznacza to, że generowanie wideo zostało zakończone. Pobierz adresy URL materiałów wideo z pola data.results i zapisz pliki przed upływem czasu wskazanego w data.video_expires_at. Wartość billing_status=charged oznacza, że zarezerwowane kredyty zostały pobrane.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Nieudane zadanie: odpowiedź na zapytanie ze szczegółami błędu i rozliczenia

Gdy zapytanie zwróci status=failed, oznacza to, że generowanie zakończyło się niepowodzeniem. Przyczynę błędu znajdziesz w polu failed_reason, a wynik zwrotu środków w billing_status. W tym przykładzie status refunded oznacza, że kredyty zostały zwrócone. Pole credits zachowuje pierwotnie zarezerwowaną wartość, a odpowiedź nie zawiera obiektu data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooki

Ustaw parametr callback_url w żądaniu utworzenia, aby otrzymać żądanie POST z formatem JSON, gdy zadanie zostanie zakończone sukcesem lub błędem. Zwróć odpowiedź z kodem 2xx w ciągu 15 sekund. Nieudane doręczenia są ponawiane; powtarzające się wywołania należy przetwarzać idempotentnie na podstawie identyfikatora zadania.

Twój punkt końcowy (callback endpoint) musi akceptować żądania POST z treścią w formacie JSON (Content-Type: application/json).

Utwórz zadanie z wywołaniem zwrotnym (callback)

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Zadanie zakończone: struktura danych pomyślnego wywołania zwrotnego

Gdy generowanie zakończy się sukcesem, wywołanie zwrotne zawiera status=completed. Użyj parametru id do identyfikacji zadania, a data.results do pobrania adresów URL wideo. Pobierz i zapisz wyniki przed upływem czasu określonego w data.video_expires_at.

created_at oznacza czas utworzenia zdarzenia, a task_created_at zadania, w sekundach Unix. Przykłady pokazują zalecane pola; odpowiedzi mogą zawierać dodatkowe pola.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Zadanie nie powiodło się: struktura danych błędu wywołania zwrotnego

Gdy generowanie nie powiedzie się, wywołanie zwrotne zawiera status=failed. Użyj parametru id do identyfikacji zadania, failed_reason, aby poznać przyczynę błędu, oraz credits_refunded, aby sprawdzić liczbę zwróconych kredytów.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed",
  "credits_refunded": 100
}

Przykładowy odbiorca

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Ten przykład dla Next.js odczytuje treść wywołania zwrotnego JSON i bezpośrednio obsługuje zakończone oraz nieudane zadania. W swojej aplikacji dodaj mechanizm trwałości danych oraz deduplikację identyfikatorów zadań (task-ID). Przed potwierdzeniem odbioru wywołania zwrotnego dodaj czasochłonne operacje do kolejki.

Wymagania i ograniczenia plików

  • Wszystkie adresy URL multimediów i wywołań zwrotnych muszą być publicznymi adresami HTTPS. Unikaj adresów localhost, prywatnych IP oraz plików wymagających plików cookie lub logowania. Adresy URL referencyjnych wideo/audio muszą wskazywać bezpośrednio na pliki multimedialne.
  • W trybie reference-to-video prześlij co najmniej jedną referencję, maksymalnie do 30 obrazów, 10 wideo, 10 plików audio i łącznie do 50 materiałów. Łączny czas trwania wideo oraz łączny czas trwania audio nie mogą przekraczać 30 sekund każdy.
  • Tryb text-to-video ignoruje wszystkie referencje multimedialne. Tryb image-to-video uwzględnia wyłącznie obrazy pierwszej/ostatniej klatki, a ignoruje referencje wideo i audio. Aby łączyć różne multimedia, użyj trybu reference-to-video.
  • Każde referencyjne wideo oraz plik audio musi trwać od 2 do 30 sekund. W przypadku edycji wideo używaj klipów źródłowych o długości co najmniej 4 sekund.

Wymagania dotyczące obrazów

  • Rozmiar pojedynczego obrazu nie może przekraczać 30 MB.
  • Obsługiwane formaty: jpeg, png, webp, bmp, tiff, gif.
  • Proporcje obrazu (szerokość ÷ wysokość): od 0,4 do 2,5 włącznie.
  • Szerokość i wysokość muszą mieścić się w przedziale od 300 do 6000 pikseli włącznie.

Wymagania dotyczące filmów

  • Obsługiwane formaty: mp4, mov.
  • Rozmiar pojedynczego pliku wideo nie może przekraczać 100 MB.
  • Liczba klatek na sekundę: od 24 do 60 FPS włącznie.
  • Proporcje obrazu (szerokość ÷ wysokość): od 0,4 do 2,5 włącznie.
  • Całkowita liczba pikseli (szerokość × wysokość): od 407 696 do 8 295 044 włącznie. Na przykład: 614 × 664 = 407 696 oraz 3326 × 2494 = 8 295 044. Są to jedynie przykłady liczby pikseli, a nie sztywne wymagania dotyczące szerokości i wysokości.

Wymagania dotyczące dźwięku

  • Obsługiwane formaty: wav, mp3.
  • Rozmiar pojedynczego pliku audio nie może przekraczać 15 MB.

Błędy

Błędy HTTP zawierają obiekt error z polami code i message. Pomyślnie przyjęte zadanie może nadal zakończyć się błędem na późniejszym etapie – sprawdzaj stan zadania lub obsłuż wywołanie zwrotne (callback) informujące o błędzie.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPPoleCo zrobić
400invalid_request
Przed ponownym wysłaniem popraw strukturę JSON, brakujący prompt, zakresy parametrów lub adresy URL multimediów.
401invalid_api_key
Sprawdź poprawność tokenu Bearer oraz czy klucz API jest aktywny.
402insufficient_credits
Doładuj konto lub zmniejsz koszt zadania. Odpowiedź może zawierać informacje o wymaganej i dostępnej liczbie kredytów.
403forbidden
Sprawdź ograniczenia na poziomie konta opisane w komunikacie o błędzie.
404not_found
Sprawdź identyfikator zadania oraz czy klucz API należy do właściciela zadania.
429rate_limited
Odczekaj czas wskazany w nagłówku Retry-After przed ponowną próbą.
500internal_error
Sprawdź treść błędu oraz logi API. Ponawiaj próby ostrożnie – ponowne wysłanie żądania utworzenia może wygenerować kolejne płatne zadanie.

Limity żądań

Tworzenie zadań: każdy klucz API pozwala domyślnie na maksymalnie 100 żądań na minutę. Niestandardowe limity żądań nie są obecnie dostępne.

Zapytania o zadania: każdy klucz API pozwala domyślnie na maksymalnie 120 żądań na minutę. Zapytania i żądania utworzenia zadań są liczone oddzielnie.

Błąd HTTP 429 zawiera nagłówek Retry-After: 60 dla tworzenia zadań oraz Retry-After: 5 dla zapytań o stan. Stosuj algorytm ponawiania z opóźnieniem (backoff) i unikaj zbyt częstego odpytywania.