Kling 4.0
Generuj wideo za pomocą modelu Kling 4.0, 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: kling-4-0
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 | 720p · 1080p |
| Czas trwania wyniku | 3–30 s |
| Proporcje obrazu | auto, 16:9, 9:16, 1:1, 21:9 |
| Obrazy referencyjne | Maksymalnie 10 zdjęć |
| Wideo referencyjne | Maksymalnie 5 filmów |
| Pliki audio referencyjne | Maksymalnie 3 plików dźwiękowych |
| Suma wszystkich plików referencyjnych | Łącznie maksymalnie 15 plików referencyjnych |
| Wideo referencyjne (Σ) | 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 |
|---|---|---|
720p | 13 kredytów/sekundę | 8 kredytów/sekundę |
1080p | 20 kredytów/sekundę | 13 kredytów/sekundę |
- Bez wejściowego wideo: sekundy wyjściowe × stawka bez wideo.
- Przy wejściu wideo T oznacza łączny czas filmów referencyjnych w sekundach zmierzony przez serwer. Końcową liczbę kredytów zaokrągla się w górę.
ceil((duration + max(duration, T)) × rate) - 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 × 13 = 65 kredytów.
5-sekundowy wynik 720p z 5-sekundowym wideo referencyjnym: (5 + 5) × 8 = 80 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.
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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": 65
}Utwórz zadanie
POST https://api.seevio.ai/v1/videos/generationsWyślij obiekt JSON zawierający model i dane wejściowe (input) oraz opcjonalnie adres callback_url. Zawsze podawaj identyfikator modelu widoczny na tej stronie – w przypadku jego braku domyślnie wybierany jest model seedance-2-0.
Treść żądania
| Pole | Typ | Wymagane | Opis i ograniczenia |
|---|---|---|---|
model | string | Tak | Identyfikator modelu. Aby użyć modelu Kling 4.0, ustaw w tym polu wartość kling-4-0. |
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 | Parametry wejściowe |
Parametry wejściowe
| Pole | Typ | Domyślnie | Opis i ograniczenia |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | Do 8000 znaków. Opcjonalne tylko przy generowaniu z obrazu. Odwołania numeruj według typu i kolejności w tablicy od @Image1, @Video1 i @Audio1. |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | Zależnie od trybu | Obsługiwane wartości auto16:99:161:121:9Stałe proporcje określają format wyniku. Po pominięciu pola lub wybraniu auto tryb tekstowy używa 16:9, a tryb obrazu zachowuje proporcje pierwszej klatki. Tryb referencyjny dobiera proporcje na podstawie obrazów lub filmów referencyjnych. |
input.image_urls | string[] | [] | Przy generowaniu z obrazu podaj pierwszą klatkę, a po niej opcjonalnie ostatnią. Tryb referencyjny obsługuje do 10 obrazów. |
input.keyframe_urls | string[] | [] | Uporządkowane klatki pośrednie do generowania z obrazu. Do 9 bez klatki końcowej lub 8 z nią. |
input.video_urls | string[] | [] | Tylko w trybie referencyjnym. Podaj adresy HTTPS filmów służących za wzór ruchu postaci lub kamery. Maksymalnie 5 klipów po 2–30 sekund, łącznie do 30 sekund. |
input.audio_urls | string[] | [] | Tylko w trybie referencyjnym. Podaj adresy HTTPS nagrań stanowiących wzór głosu lub dźwięku. Maksymalnie 3 klipy po 5–30 sekund. |
input.keep_original_sound | boolean | false | Jeśli video_urls zawiera film referencyjny, true zachowuje jego dźwięk, a false (domyślnie) generuje nowy. Bez filmu referencyjnego ustawienie jest ignorowane. |
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": 65
}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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg"
]
}
}'Pierwsza i ostatnia klatka
Przy generowaniu z obrazu podaj pierwszą klatkę, a po niej opcjonalnie ostatnią. Tryb referencyjny obsługuje do 10 obrazów.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg",
"https://example.com/last.jpg"
]
}
}'Przykład z klatkami kluczowymi: rozkwit róży
Z czterech zdjęć wykonanych pod tym samym kątem utwórz ośmiosekundowy film poklatkowy. W image_urls umieść zamknięty pąk i rozwiniętą różę jako pierwszą i ostatnią klatkę. W keyframe_urls podaj najpierw zdjęcie rozchylających się płatków, a następnie kwiatu otwartego do połowy. Film przejdzie od pąka przez oba etapy pośrednie do pełnego rozkwitu. Tablica określa kolejność, a model dobiera moment pojawienia się klatek.
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.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
"duration": 8,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/rose-bud.jpg",
"https://example.com/rose-full-bloom.jpg"
],
"keyframe_urls": [
"https://example.com/rose-opening.jpg",
"https://example.com/rose-half-open.jpg"
]
}
}'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": "kling-4-0",
"input": {
"prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/motion.mp4"
],
"audio_urls": [
"https://example.com/surf.mp3"
],
"keep_original_sound": false
}
}'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. |
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 zadania w sekundach, jeśli jest dostępny; w przeciwnym razie wartość 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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "failed",
"billing_status": "refunded",
"credits": 65,
"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": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
},
"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": "kling-4-0",
"status": "completed",
"task_created_at": 1788652800,
"billing_status": "charged",
"credits": 65,
"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": "kling-4-0",
"status": "failed",
"task_created_at": 1788652800,
"billing_status": "refunded",
"credits": 65,
"failed_reason": "provider_failed",
"credits_refunded": 65
}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.
- Rozmiar pojedynczego pliku wideo nie może przekraczać 100 MB.
- Rozmiar pojedynczego pliku audio nie może przekraczać 15 MB.
- Łącznie maksymalnie 15 plików referencyjnych