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
| Funkcja | Obsługiwane wartości |
|---|---|
| Rozdzielczość wyjściowa | 480p · 720p · 1080p |
| Czas trwania wyniku | 4–30 s |
| Proporcje obrazu | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Obrazy referencyjne | Maksymalnie 30 zdjęć |
| Wideo referencyjne | Maksymalnie 10 filmów |
| Pliki audio referencyjne | Maksymalnie 10 plików dźwiękowych |
| Suma wszystkich plików referencyjnych | Łącznie maksymalnie 50 plików referencyjnych |
| Łączny czas trwania na grupę wideo/audio | Sekundy: 30 |
| seed | Nieobsługiwane |
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.
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ściowa | Bez wejściowego wideo | Z wejściowym wideo |
|---|---|---|
480p | 10 kredytów/sekundę | 6 kredytów/sekundę |
720p | 20 kredytów/sekundę | 12 kredytów/sekundę |
1080p | 30 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 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 referencyjne | Sposób obliczania opłaty | Przykład |
|---|---|---|
| Z wideo referencyjnym | Zsumuj 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.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonPrzed 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/generationsWyś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
| Pole | Typ | Wymagane | Opis i ograniczenia |
|---|---|---|---|
model | string | Tak | Identyfikator modelu. Aby użyć modelu Seedance 2.5, ustaw w tym polu wartość seedance-2-5. |
callback_url | string | Nie | 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 | object | Tak | Ustawienia generowania. Pole musi zawierać niepusty prompt. |
Parametry wejściowe
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.
| Pole | Typ | Wymagane | Domyślnie | Opis i ograniczenia |
|---|---|---|---|---|
input.draft | boolean | Nie | false | 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 | string | Nie | — | 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 | string | Nie | mp4 | 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 | string | Warunkowo | — | 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 | string | Nie | text-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 | integer | Nie | 5 | 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–30Przykład: 5 |
input.aspect_ratio | string | Nie | adaptive | 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, adaptivePrzykład: adaptive |
input.resolution | string | Nie | 720p | 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 | 1080pPrzykład: 720p |
input.generate_audio | boolean | Nie | true | Zażądaj wygenerowania zsynchronizowanej ścieżki dźwiękowej. Obsługiwane wartości true | falsePrzykład: true |
input.watermark | boolean | Nie | false | Zażądaj dodania znaku wodnego AI do wygenerowanego wideo. Obsługiwane wartości true | falsePrzykład: false |
input.web_search | boolean | Nie | false | Zezwól na wyszukiwanie w sieci, jeśli model obsługuje tę funkcję. Obsługiwane wartości true | falsePrzykład: false |
input.return_last_frame | boolean | Nie | false | 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 | falsePrzykł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.
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.
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.
Tryby generowania i przykłady
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
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
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"| Status | Opis i ograniczenia |
|---|---|
queued | Zaakceptowano i oczekuje na uruchomienie. |
generating | Trwa generowanie wideo. |
completed | Zakończono sukcesem. Pobierz pliki z data.results przed upływem limitu czasu. |
failed | Zakończono błędem. Sprawdź failed_reason oraz billing_status. |
| Pole | Typ | Opis i ograniczenia |
|---|---|---|
id | string | Identyfikator zadania. Jest to wartość taskId z odpowiedzi na utworzenie. |
created_at | number | Czas utworzenia zadania jako znacznik czasu Unix (w sekundach). |
model | string | Publiczny identyfikator modelu użyty do tego zadania. |
is_draft | boolean | Wartość true dla szkicu 480p; false dla wersji końcowej lub standardowego filmu. |
draft_task_id | string | null | Identyfikator API źródłowego szkicu w przypadku wersji końcowej; null dla szkiców i standardowych filmów. |
billing_status | string | Status rozliczenia: reserved (zarezerwowane), charged (pobrane), refunded (zwrócone) lub refund_failed (błąd zwrotu). |
credits | number | Kredyty zarezerwowane dla tego zadania. Wartość ta jest widoczna również po zwrocie; sprawdź billing_status, aby poznać ostateczny wynik rozliczenia. |
failed_reason | string | 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. |
data | object | Obecne w zapytaniach o zadania, które nie zakończyły się błędem. Zawiera szczegóły dotyczące wyniku i przetwarzania. |
data.results | string[] | Tablica adresów URL wygenerowanych wideo. Pusta do momentu zakończenia zadania lub po wygaśnięciu plików wideo. |
data.video_expires_at | string | 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_url | string | null | Adres URL ostatniej klatki (jeśli o nią wnioskowano i jest dostępna); w przeciwnym razie null. |
data.processing_time | number | 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."
}
}| HTTP | Pole | Co zrobić |
|---|---|---|
| 400 | invalid_request | Przed ponownym wysłaniem popraw strukturę JSON, brakujący prompt, zakresy parametrów lub adresy URL multimediów. |
| 401 | invalid_api_key | Sprawdź poprawność tokenu Bearer oraz czy klucz API jest aktywny. |
| 402 | insufficient_credits | Doładuj konto lub zmniejsz koszt zadania. Odpowiedź może zawierać informacje o wymaganej i dostępnej liczbie kredytów. |
| 403 | forbidden | Sprawdź ograniczenia na poziomie konta opisane w komunikacie o błędzie. |
| 404 | not_found | Sprawdź identyfikator zadania oraz czy klucz API należy do właściciela zadania. |
| 429 | rate_limited | Odczekaj czas wskazany w nagłówku Retry-After przed ponowną próbą. |
| 500 | internal_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.