Generowanie filmów i dźwięku
Libre WebUI 0.18.0 rozszerza generowanie poza obrazy: wtyczki mogą deklarować możliwości filmowe i dźwiękowe, a wszystkie obrazy, filmy, mowa i dźwięki trafiają do jednej galerii per użytkownik.
Generowanie jest dostępne dla każdego uwierzytelnionego użytkownika. Galeria jest ściśle prywatna: odczyt, pobranie treści i usunięcie są ograniczone do zalogowanego konta.
Bloki możliwości wtyczek
Definicja wtyczki deklaruje każdą możliwość w osobnym bloku:
"capabilities": {
"image": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"tts": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"audio": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"video": { "endpoint": "...", "model_map": ["..."], "config": { ... } }
}
Każdy blok ma endpoint, listę zapasową model_map, opcjonalny models_endpoint do wykrywania i obiekt config z opcjami: rozmiarami i proporcjami obrazów, głosami i formatami mowy, rozdzielczościami, proporcjami i czasem filmu. Dostawca filmu może też zadeklarować cancel_endpoint i cancel_method oparte na ID promptu; Libre nie zakłada anulowania na podstawie zwykłego punktu generowania.
Istnieją dwie możliwości audio, obie zapisywane jako dźwięk:
ttsto mowa: tekst jest czytany wybranym głosem.audioto dźwięk: model generuje treść audio z promptu.
OpenRouter (plugins/openrouter.json) jest obecnie jedyną dołączoną wtyczką deklarującą video i audio. Przy models_endpoint lista odświeża się w zwykłym cyklu (zobacz Zmienne środowiskowe dla TTL); model_map pozostaje zapasem.
Generowanie multimediów
Otwórz Imagine (/gallery). Nagłówek oferuje Generuj dla obrazów (gdy włączone w Ustawieniach) oraz panele Film i Dźwięk.
Generowanie mowy i dźwięku jest synchroniczne: żądanie działa, wynik jest zapisywany i zwracany jako gotowy element. Anuluj przerywa żądanie przeglądarki i wychodzące żądanie Libre; anulowany wynik nie jest zapisywany. Obrazy mają ten sam kontrakt przy rozłączeniu.
Dla zaakceptowanego przepływu ComfyUI Libre wysyła anulowanie zadania i usunięcie z kolejki według ID promptu, a następnie czeka do trzech sekund. Nigdy nie wywołuje nieograniczonej operacji interrupt, która mogłaby zatrzymać cudzy przepływ. Obecne ComfyUI udostępnia /api/jobs/:promptId/cancel. Starsza wersja może usunąć dokładnie oczekującą pozycję, ale nie zatrzyma bezpiecznie już uruchomionej; zaktualizuj dla pełnego kontraktu.
Wtyczki TTS mogą deklarować klonowanie głosu. Panel Dźwięk pokazuje przesłanie nagrania referencyjnego i, jeśli wymagane, dokładny transkrypt. Libre sprawdza typ i rozmiar z manifestu, trzyma plik w pamięci i wysyła tylko wybranemu dostawcy. Do galerii trafia tylko wygenerowana mowa.
Klon można zapisać jako nazwany głos dla tej samej wtyczki i modelu. Wymaga osobnej zgody na przechowywanie. Libre WebUI szyfruje oryginalne nagranie i transkrypt w profilu użytkownika; nie używa wygenerowanej mowy jako referencji. Profile można wybierać lub trwale usuwać w Ustawienia → Tekst na mowę. Dostawca ponownie otrzymuje referencję przy każdej partii mowy. Profil jest związany z zatwierdzonym routingiem; po zmianie definicji lub punktu utwórz go ponownie, aby wyrazić zgodę na nowy cel. Używaj tylko nagrań osób, które zgodziły się na klonowanie i przechowywanie.
Profile są celowo pomijane w ogólnym eksporcie, bo zawierają biometryczny materiał źródłowy. Dla odzyskiwania twórz razem kopię szyfrowanej bazy i ENCRYPTION_KEY; inaczej odtwórz profile z oryginalnych nagrań objętych zgodą.
Cykl życia zadania filmowego
Film jest generowany asynchronicznie. POST /api/media/video/generate zwraca 202 z rekordem przechodzącym przez pending, in_progress, a następnie completed lub failed.
- Po walidacji zgłoszenie odłącza się od odpowiedzi. Libre utrwala ID dostawcy natychmiast po akceptacji, nawet jeśli panel lub sieć zamknie się podczas odpowiedzi.
GET /api/media/video/jobspokazuje tylko uchwyty użytkownika; panel pobiera do 100 aktywnych przy otwarciu. Oczekujące zadanie można otworzyć po nawigacji, odświeżeniu lub rozłączeniu.- Trwałe zadanie
media.video.resume.v1odpytuje dostawcę i pobiera wynik przy zamkniętym panelu. W solo obsługuje je worker wbudowany, w team — zewnętrzny. Dzierżawy, ograniczone próby, ponowna walidacja aktora i warunkowe ukończenie pozwalają innemu workerowi przejąć zadanie po awarii bez podwójnego wiersza lub blobu. Istniejące punkty resume/GET pozostają granicami zgodności i stanu; interfejs może je odpytywać. - Zamknięcie panelu lub Przestań czekać przerywa tylko bieżący transport stanu/pobierania. Anuluj zadanie po stronie dostawcy pojawia się tylko przy jawnym punkcie anulowania według ID. Po potwierdzeniu Libre usuwa lokalny uchwyt.
- Po ukończeniu zaplecze pobiera film (limit 200 MB, bez przekierowań HTTP) i zapisuje go.
- Rekord przechowuje wtyczkę, model, opcje, stan i prompt (szyfrowany). Zakończone rekordy starsze niż 30 dni są oportunistycznie usuwane; oczekujące uchwyty nie wygasają przez to czyszczenie.
- Stany końcowe powiadamiają: ukończony film tworzy media-ready, błąd dostawcy media-failed. Oba linkują galerię, są deduplikowane per zadanie i dostarczane w aplikacji i webhookami.
Edycja obrazów i inpainting
Obrazy z modelem edycji otrzymują Edytuj obraz. Edytor maluje maskę — zaznaczone obszary są przerysowywane, nietknięte płótno edytuje całość — i może dołączać obrazy referencyjne do kompozycji. Edycja używa zgodnego z OpenAI kontraktu multipart: wtyczka deklaruje edit_endpoint oraz opcjonalne supports_mask, max_reference_images, edit_mime_types, max_edit_image_bytes (manifest OpenAI ma wszystkie).
Każde wejście jest sprawdzane przed wysłaniem bajtów: deklarowany MIME, magic bytes (PNG, JPEG, WebP) i limit 10 MiB per obraz. Maska musi być PNG, bo tylko PNG ma kanał alfa zaznaczający obszary. Wynik zapisuje metadane pochodzenia: element źródłowy, liczbę referencji i użycie maski. Edycje są mierzone jak generowanie.
Wspólna galeria
Galeria miesza wszystkie typy według czasu, z filtrami Wszystko, Obrazy, Filmy, Dźwięk. Filmy i audio odtwarzają się w miejscu, obrazy otwierają w lightboxie, wszystko można pobrać lub usunąć. Administrator może włączyć retencję przez GALLERY_RETENTION_DAYS: harmonogram usuwa starsze media tą samą trwałą ścieżką co ręczne usunięcie. Brak ustawienia (domyślny) zachowuje do usunięcia przez właściciela.
Pamięć i serwowanie są celowo zachowawcze:
- Media są szyfrowane w bazie pod
DATA_DIR, nie jako luźne pliki. Kopiuj bazę zENCRYPTION_KEY. - Odpowiedzi API nie osadzają ładunków; wskazują URL treści elementu.
- Treść musi pasować do listy MIME i zapisanego typu, ma limit 200 MB i nagłówki
X-Content-Type-Options: nosnifforazContent-Security-Policyz piaskownicą.
Stare punkty obrazowe i panel nadal działają i zapisują w tej samej galerii.
Limity szybkości
API ma limity per klient:
| Operacja | Limit |
|---|---|
| Generowanie (film, mowa, dźwięk) | 10 żądań na minutę |
| Odpytywanie zadań filmowych | 60 żądań na minutę |
| Lista, treść i usuwanie galerii | 120 żądań na minutę |
Odpytywanie interfejsu co 30 sekund mieści się w budżecie.
Pomiar i prywatność
Wywołania są mierzone w administracyjnej analizie użycia: wtyczka, model, stan, czas i jednostki. Prompty i treść nigdy nie trafiają do rekordów. Media i prompt zadania są tylko w szyfrowanych wierszach użytkownika.
Jak w czacie, dostawca otrzymuje prompt i zwraca treść — obowiązują jego ceny, retencja i polityka treści.