Video- och ljudgenerering
Libre WebUI 0.18.0 utökar generering bortom bilder. Leverantörsplugin kan deklarera video- och ljudfunktioner, och allt som genereras — bilder, video, tal och ljud — hamnar i ett mediegalleri per användare.
Mediegenerering är tillgänglig för alla autentiserade användare. Galleriet är strikt per användare: varje läsning, innehållshämtning och radering avgränsas till det inloggade kontot.
Pluginblock för funktioner
En plugindefinition deklarerar varje mediefunktion som ett eget block:
"capabilities": {
"image": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"tts": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"audio": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"video": { "endpoint": "...", "model_map": ["..."], "config": { ... } }
}
Varje block har en endpoint, en reservlista i model_map, en valfri
models_endpoint för aktuell modellsökning och ett config-objekt med
funktionsspecifika alternativ — storlekar och bildförhållanden för bilder, röster
och format för tal samt upplösningar, bildförhållanden och längder för video.
En videoleverantör kan även deklarera cancel_endpoint och cancel_method för
prompt-ID. Libre antar inte att avbrytning stöds utifrån en vanlig genereringsslutpunkt.
Det finns två ljudfunktioner, och båda hamnar som ljud i galleriet:
ttsär tal: text läses upp med en vald röst.audioär ljud: en modell genererar ljudinnehåll från en prompt.
OpenRouter (plugins/openrouter.json) är för närvarande det enda medföljande pluginet
som deklarerar blocken video och audio. När models_endpoint finns uppdateras
modellistan enligt den normala sökcykeln (se Miljövariabler
för inställningar av sökningens TTL). model_map förblir reservlösningen.
Generera media
Öppna Imagine (/gallery). Rubriken erbjuder Generate för bilder (när
bildgenerering är aktiverad i Settings) samt panelerna Video och Audio.
Tal- och ljudgenerering är synkron. Förfrågan körs, resultatet sparas i galleriet och svaret returnerar den färdiga posten. Cancel avbryter webbläsarförfrågan och Libres utgående leverantörsförfrågan. Ett avbrutet resultat sparas inte. Bildgenerering följer samma kontrakt för avbrytning vid frånkoppling.
För ett godkänt ComfyUI-arbetsflöde skickar Libre både jobbavbrytningen med prompt-ID
och en köborttagning med prompt-ID och väntar sedan upp till tre sekunder på avslutet
innan förfrågan släpps. Den anropar aldrig ComfyUI:s oavgränsade avbrottsåtgärd, som
kan stoppa en annan användares arbetsflöde. Aktuella ComfyUI-versioner exponerar
/api/jobs/:promptId/cancel för ett arbetsflöde som körs. På en gammal version utan
den åtgärden kan Libre fortfarande ta bort exakt den väntande köposten, men kan inte
säkert stoppa ett arbetsflöde som redan körs. Uppgradera ComfyUI för hela avbrytningskontraktet.
TTS-plugin kan också deklarera röstkloning. För dessa modeller visar panelen Audio en uppladdning av referensljud och, när leverantören kräver det, ett fält för exakt transkript. Libre WebUI validerar filtyp och storleksgränser från manifestet, håller uppladdningen i minnet och vidarebefordrar den endast till vald leverantör. Endast det genererade talet placeras i galleriet.
En klon kan valfritt sparas som en återanvändbar namngiven röst för samma plugin och modell. Sparandet kräver en separat bekräftelse av lagringssamtycke. Libre WebUI krypterar originalreferensen och transkriptet i en användarägd röstprofil och använder inte genererat tal som referens. Sparade profiler kan väljas eller raderas permanent under Settings → Text-to-Speech. Den konfigurerade leverantören får den lagrade referensen igen varje gång en talbatch genereras. Profilen binds till leverantörens godkända dirigering. Om plugindefinitionen eller slutpunkten ändras ska profilen skapas om för att samtycka till den nya destinationen. Använd endast inspelningar från talare som samtyckt både till kloningen och eventuell lagring.
Röstprofiler utelämnas avsiktligt från Libre WebUI:s allmänna dataexport eftersom de
innehåller biometriskt källmaterial. Säkerhetskopiera den krypterade programdatabasen
och ENCRYPTION_KEY tillsammans för katastrofåterställning. Annars återskapar du
profiler från de ursprungliga inspelningarna med samtycke.
Livscykel för videojobb
Videogenerering är asynkron. När ett jobb skickas in
(POST /api/media/video/generate) returneras 202 med en jobbpost. Jobbet går genom
pending, in_progress och slutligen completed eller failed.
- Inskickningen kopplas loss från webbläsarsvaret efter validering. Libre sparar leverantörens jobb-ID omedelbart efter godkännande, även om panelen eller nätverksanslutningen stängs medan leverantören svarar.
GET /api/media/video/jobslistar endast den autentiserade användarens sparade jobbreferenser. Panelen begär upp till 100 aktiva jobbreferenser varje gång den öppnas. Ett väntande jobb kan därför öppnas igen efter navigering, uppdatering eller frånkoppling.- Ett beständigt jobb
media.video.resume.v1frågar leverantören och hämtar ett slutfört resultat även när panelen är stängd. Sololäge kör hanteraren i den inbäddade workern och teamläge kör den i den externa workern. Lås, begränsade återförsök, omvalidering av aktör och villkorat slutförande låter en annan worker återta jobbet efter att en process dör utan att skapa en duplicerad gallerirad eller blobreferens. Befintliga resume-/GET-slutpunkter förblir kompatibilitets- och statusgränser. Gränssnittet kan fortfarande fråga dem för visning. - Om panelen stängs eller Stop waiting väljs avbryts endast den aktuella status- eller hämtningstransporten. Åtgärden Cancel job på leverantörssidan visas bara när pluginet uttryckligen deklarerar en avbrytningsslutpunkt med jobb-ID. När leverantören bekräftar avbrytningen tar Libre bort den sparade lokala jobbreferensen.
- Vid slutförande hämtar backend videon (högst 200 MB, HTTP-omdirigeringar följs inte) och sparar den i galleriet.
- Jobbposten sparar plugin, modell, alternativ, status och prompt (krypterad vid lagring). Slutförda och misslyckade jobbposter som är äldre än 30 dagar rensas opportunistiskt. Väntande jobbreferenser löper inte ut genom denna rensning.
- Slutstatusar aviserar: en slutförd video skapar aviseringen media-ready och ett leverantörsfel skapar media-failed. Båda länkar till galleriet, dedupliceras per jobb och levereras genom inkorgen i appen och alla prenumererande webhooks.
Bildredigering och inpainting
Galleribilder får åtgärden Edit image när en redigeringskapabel modell är
konfigurerad. Redigeraren målar en mask direkt på bilden — målade områden målas om
av modellen, medan en orörd arbetsyta redigerar hela bilden — och kan bifoga ytterligare
referensbilder för komposition när modellen accepterar fler än en indata. Redigering
använder det OpenAI-kompatibla multipartkontraktet för redigeringar. Ett plugin deltar
genom att deklarera edit_endpoint i bildfunktionens config, plus valfria gränser för
supports_mask, max_reference_images, edit_mime_types och max_edit_image_bytes
(det medföljande OpenAI-manifestet deklarerar dem alla).
Varje indata valideras innan några byte lämnar processen: deklarerad MIME, identifierade magiska byte (PNG, JPEG eller WebP) och ett tak på 10 MiB per bild. Masker måste vara PNG, eftersom endast PNG har alfakanalen som markerar områden som ska målas om. Resultat sparas tillbaka i galleriet med ursprungsmetadata som registrerar källposten i galleriet, antalet uppladdade referensbilder och om en mask användes. Redigeringar mäts exakt som genereringar.
Det gemensamma galleriet
Galleriet listar alla medietyper blandade efter skapandetid, med filterknappar för
All, Images, Videos och Audio. Video och ljud spelas upp direkt, bilder
öppnas i ljuslådan och varje post kan hämtas eller raderas. Administratörer kan välja
automatisk lagringstid med GALLERY_RETENTION_DAYS. Schemaläggarens rensningskörning tar bort media
som är äldre än fönstret genom samma beständiga raderingslivscykel som en manuell
radering. Om värdet inte anges (standard) behålls media tills ägaren raderar dem.
Lagring och leverans är avsiktligt försiktiga:
- Media lagras krypterat i programdatabasen (under
DATA_DIR), inte som lösa filer på disk. Säkerhetskopiera databasen ochENCRYPTION_KEYtillsammans, som för all krypterad data. - API-svar bäddar aldrig in mediedata. Poster refererar i stället till en innehålls-URL per post.
- Levererat innehåll måste matcha en MIME-tillåtelselista per typ och den lagrade typen,
begränsas till 200 MB och levereras med
X-Content-Type-Options: nosniffsamt enContent-Security-Policysom sandlådar svaret.
De tidigare slutpunkterna enbart för bilder och panelen för bildgenerering fortsätter fungera oförändrade. De skriver till samma galleri.
Hastighetsgränser
Medie-API:et hastighetsbegränsas per klient:
| Åtgärd | Gräns |
|---|---|
| Generering (video, tal, ljud) | 10 förfrågningar per minut |
| Frågor om videojobbsstatus | 60 förfrågningar per minut |
| Gallerilista, innehåll och raderingar | 120 förfrågningar per minut |
Gränssnittets 30-sekundersintervall ligger väl inom frågebudgeten.
Mätning och integritet
Mediegenereringsanrop mäts i administratörens användningsanalys som alla andra utgående leverantörsanrop: plugin, modell, status, varaktighet och enhetsantal. Promptar och genererat innehåll skrivs aldrig till användningsposterna. Själva genererade media och videojobbets prompt finns endast i användarens egna krypterade rader.
Precis som med chatt får den konfigurerade leverantören prompten och returnerar innehållet. Leverantörens priser, lagrings- och innehållspolicyer gäller.