Krótkie wprowadzenie do Image & Video
Krótkie wprowadzenie do Image & Video
Dowiedz się, jak generować obrazy i wideo z promptów tekstowych oraz materiałów referencyjnych.
API Image & Video działa asynchronicznie. Wysyłasz żądanie generowania, a po jego zakończeniu pobierasz wynik z podpisanego URL-a. Obrazy i wideo mają osobne endpointy, ale struktura żądań i odpowiedzi jest taka sama dla obu.
Wynik możesz odebrać na dwa sposoby. Zalecamy dostarczenie przez webhook, używane też w poniższych przykładach: ElevenLabs wywołuje twój endpoint, gdy generowanie osiągnie status końcowy, więc nie tracisz czasu na oczekiwanie. Odpytanie to opcja zapasowa, gdy nie masz endpointu do odbierania callbacków, a każdy przykład pokazuje, jak z niej skorzystać.
API Image & Video wymaga planu Pro lub wyższego. Żądania z obszaru roboczego poniżej tego poziomu są
odrzucane z błędem 402 paid_plan_required. Twój klucz API musi też mieć uprawnienie Image & Video lub
Flows dla obszaru roboczego.
Wygeneruj obraz
Utwórz klucz API
Utwórz klucz API w panelu tutaj, aby bezpiecznie uzyskać dostęp do API.
Przechowuj klucz jako zarządzany sekret i przekaż go do SDK jako zmienną środowiskową przez plik .env lub bezpośrednio w konfiguracji aplikacji — zależnie od preferencji.
Wyślij żądanie generowania
Każdy model ma własną klasę żądania, a jej pola to parametry obsługiwane przez ten model, więc zmiana modelu może zmienić dostępne pola. Nieznane pola są odrzucane, a nie ignorowane.
webhook prosi o dostarczenie gotowego wyniku do webhooków twojego obszaru roboczego, więc wywołanie
zwraca odpowiedź, gdy tylko generowanie zostanie dodane do kolejki. Wymaga webhooka subskrybującego zdarzenia
generowania; zobacz webhooki Image & Video,
aby go skonfigurować, lub pomiń to pole i użyj odpytywania.
SDK
CLI
Odpowiedź zawiera identyfikator generowania i nic więcej. Nowo utworzone generowanie zawsze ma status
pending:
Odbierz wynik
Ponieważ żądanie używa webhook, ElevenLabs wysyła zdarzenie flows_generation do twojego
endpointu, gdy generowanie osiągnie status completed lub failed. Pole data zdarzenia jest identyczne z
tym, co zwraca endpoint GET, a
webhooki Image & Video pokazują
handler, który je odbiera.
Jeśli nie masz endpointu do odbierania callbacków, usuń webhook z powyższego żądania i użyj odpytywania.
Pobieraj dane generowania, aż jego status będzie completed lub failed, zachowując co najmniej dwie sekundy
między żądaniami obrazu — zobacz wytyczne dotyczące odpytywania, aby sprawdzić interwały
dla poszczególnych typów mediów.
W obu przypadkach ukończone generowanie zawiera te same pola:
Wygeneruj wideo
Generowanie wideo używa flows.video i przebiega według tego samego schematu wysłania żądania oraz odbioru wyniku. Wideo może trwać
kilka minut, dlatego ten przykład korzysta z dostarczania przez webhook za pomocą webhook, zamiast czekać na
wynik.
Wywołanie zwraca odpowiedź, gdy tylko generowanie zostanie dodane do kolejki, a gotowy wynik jest dostarczany do każdego
webhooka w twoim obszarze roboczym, który subskrybuje zdarzenia generowania. Wynik wideo to MP4, więc ukończony payload podaje
content_mime_type o wartości video/mp4. Zobacz
webhooki Image & Video, aby skonfigurować
webhook i napisać handler, który to odbierze.
webhook wymaga co najmniej jednego webhooka obszaru roboczego subskrybującego zdarzenia generowania. Bez niego
wywołanie create zostanie odrzucone, zamiast rozpoczynać generowanie, którego wynik nie ma dokąd trafić. Usuń
to pole, aby użyć odpytywania przez flows.video.get, i odpytywać nie częściej niż raz na 10
sekund.
Odbieranie wyników
Webhooki i odpytywanie zwracają ten sam payload, więc wybór dotyczy sposobu oczekiwania na wynik, a nie tego, co otrzymasz.
Używaj webhooków, gdzie tylko możesz. Wybierz odpytywanie, gdy nie masz gdzie odebrać callbacku, i stosuj poniższe interwały.
Wybór celów webhooków
webhook przyjmuje dwie formy. WebhookTarget_All dociera do każdego webhooka subskrybującego zdarzenia
generowania — to właściwy wybór domyślny, bo działa nawet po rotacji lub zastąpieniu webhooków.
WebhookTarget_Ids ogranicza dostarczanie do konkretnych webhooków — przydaje się, gdy jeden workspace
wysyła dane do kilku odbiorców, a dane zadanie powinno trafić tylko do jednego z nich:
Każde ID musi już subskrybować zdarzenia generowania; podanie webhooka bez subskrypcji powoduje odrzucenie żądania, a nie jego ciche zignorowanie. Dostarczony payload jest identyczny z tym, który zwraca endpoint GET, więc handler napisany dla jednego działa też z drugim. Przewodnik po webhookach opisuje konfigurację webhooka, weryfikację podpisu i obsługę zdarzenia.
Wskazówki dotyczące odpytywania
Czas generowania zależy od modelu, rozdzielczości, a w przypadku wideo także od czasu trwania, więc ustawiaj interwał odpytywania odpowiednio do żądanego wyniku, zamiast używać stałej pętli:
- Obrazy: odpytywanie nie częściej niż raz na 2 sekundy. Większość kończy się w ciągu kilku sekund.
- Wideo: odpytywanie nie częściej niż raz na 10 sekund. Spodziewaj się minut, nie sekund, i dostosuj
interwał do
duration_secsorazresolution.
Dwie zasady dotyczą obu przypadków. Wydłużaj interwał, gdy generowanie trwa długo — podwajanie go aż do około minuty zapobiega wysłaniu setek żądań przy wolnym generowaniu. Ustaw też limit pętli, aby zablokowane generowanie kończyło się timeoutem w twoim kodzie, a nie nieograniczoną pętlą.
Szybsze odpytywanie nic nie daje: status generowania nie zmieni się szybciej tylko dlatego, że zapytasz dwa razy. Długotrwałe agresywne odpytywanie może zwrócić odpowiedzi 429, które należy obsłużyć za pomocą wykładniczego wydłużania interwału.
Cykl życia generowania
Generowanie przechodzi przez cztery statusy. Dwa końcowe statusy zawierają różne pola, dlatego
sprawdź status, zanim odczytasz resztę odpowiedzi.
content_url to podpisany URL, który wygasa około godzinę po zwróceniu odpowiedzi. Pobierz
generowanie ponownie, aby uzyskać nowy URL, zamiast zapisywać sam podpisany URL.
Obsługa błędów
Nieudane generowanie zgłasza kategorię failure_reason wraz z czytelnym dla człowieka komunikatem error_message:
Nieudane generowania nie są płatne. Problemy z parametrami, które można wykryć z góry — nieobsługiwane pole, wartość poza dozwolonym zakresem modelu lub nieprawidłowe połączenie danych referencyjnych — są zamiast tego odrzucane przez żądanie utworzenia, zanim generowanie się rozpocznie.
Ceny
Generowania są rozliczane w kredytach. Koszt zależy od modelu, wybranych parametrów, takich jak rozdzielczość i czas trwania, oraz podanych danych wejściowych. Generowanie przez API kosztuje tyle samo, co w aplikacji ElevenLabs, gdzie cena jest widoczna przed wysłaniem. Zobacz Image & Video w playgroundzie, aby dowiedzieć się, jak prezentowany jest koszt danego modelu i kombinacji ustawień.
Lista generowań
Każdy endpoint wyświetla generowania utworzone przez niego, od najnowszych. Wyniki są ograniczone do twojego workspace’u i tego API, więc generowania utworzone w aplikacji ElevenLabs się nie pojawią.
page_size przyjmuje wartości od 1 do 100, a domyślnie wynosi 30. Przekaż status, aby zwrócić tylko
generowania w jednym stanie cyklu życia, oraz model_id, aby zwrócić tylko generowania z jednego modelu.
Traktuj next_cursor jako nieprzezroczystą wartość: przekaż z powrotem dokładnie tę samą wartość i zakończ,
gdy has_more ma wartość false.
Dostępne modele
API udostępnia część modeli dostępnych w aplikacji ElevenLabs. Każdy model przyjmuje tylko parametry dla niego wymienione — wysłanie pola obsługiwanego przez inny model zwraca błąd walidacji.
Modele ByteDance są domyślnie wyłączone i wymagają wyraźnej zgody przed użyciem. Do czasu przyznania
dostępu żądanie wskazujące jeden z nich zostanie odrzucone z błędem model_access_denied. Klienci
Enterprise mogą skontaktować się ze wsparciem, aby poprosić o dostęp.
Modele obrazów
Modele GPT Image 2.5 przyjmują wartości quality: low, medium, high, xhigh i max, a domyślnie
używają high. GPT Image 2 obsługuje maksymalnie high, a domyślnie używa medium.
Modele wideo
Informacje o możliwościach modeli, dostępności i cenach znajdziesz w przeglądzie Image & Video.