Przejdź do dokumentacji
Na tej stronie

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

FunkcjaObsługiwane wartości
Rozdzielczość wyjściowa720p · 1080p
Czas trwania wyniku3–30 s
Proporcje obrazuauto, 16:9, 9:16, 1:1, 21:9
Obrazy referencyjneMaksymalnie 10 zdjęć
Wideo referencyjneMaksymalnie 5 filmów
Pliki audio referencyjneMaksymalnie 3 plików dźwiękowych
Suma wszystkich plików referencyjnychŁącznie maksymalnie 15 plików referencyjnych
Wideo referencyjne (Σ)Sekundy: 30
seedNieobsł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ściowaBez wejściowego wideoZ wejściowym wideo
720p13 kredytów/sekundę8 kredytów/sekundę
1080p20 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.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": "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/generations

Wyś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

PoleTypWymaganeOpis i ograniczenia
model
stringTak

Identyfikator modelu. Aby użyć modelu Kling 4.0, ustaw w tym polu wartość kling-4-0.

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

Parametry wejściowe

Parametry wejściowe

PoleTypDomyślnieOpis i ograniczenia
input.generation_typestringtext-to-videotext-to-video | image-to-video | reference-to-video
input.promptstring—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.durationinteger53–30 s
input.resolutionstring720p720p | 1080p
input.aspect_ratiostringZależnie od trybu
Obsługiwane wartościauto16:99:161:121:9

Stał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_urlsstring[][]Przy generowaniu z obrazu podaj pierwszą klatkę, a po niej opcjonalnie ostatnią. Tryb referencyjny obsługuje do 10 obrazów.
input.keyframe_urlsstring[][]Uporządkowane klatki pośrednie do generowania z obrazu. Do 9 bez klatki końcowej lub 8 z nią.
input.video_urlsstring[][]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_urlsstring[][]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_soundbooleanfalseJeś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

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": "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"
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.
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 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