Video- og lydgenerering
Libre WebUI 0.18.0 udvider generering ud over billeder. Udbyderplugins kan erklære video- og lydfunktioner, og alt genereret — billeder, video, tale og lyd — lander i ét mediegalleri pr. bruger.
Mediegenerering er tilgængelig for alle godkendte brugere. Galleriet er strengt opdelt pr. bruger: Hver læsning, indholdshentning og sletning afgrænses til den konto, der er logget ind.
Pluginblokke til funktioner
En plugindefinition erklærer hver mediefunktion som sin egen blok:
"capabilities": {
"image": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"tts": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"audio": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"video": { "endpoint": "...", "model_map": ["..."], "config": { ... } }
}
Hver blok har en endpoint, en reserveliste i model_map, en valgfri
models_endpoint til aktuel modelsøgning og et config-objekt med
funktionsspecifikke muligheder — størrelser og billedformater til billeder, stemmer
og formater til tale samt opløsninger, billedformater og varigheder til video.
En videoudbyder kan også erklære en prompt-ID-baseret cancel_endpoint og
cancel_method. Libre udleder ikke understøttelse af annullering fra et almindeligt
genereringsslutpunkt.
Der findes to lydfunktioner, og begge ender som lyd i galleriet:
ttser tale: Tekst læses højt med en valgt stemme.audioer lyd: En model genererer lydindhold fra en prompt.
OpenRouter (plugins/openrouter.json) er i øjeblikket det eneste medfølgende plugin,
der erklærer blokkene video og audio. Når models_endpoint findes, opdateres
modellisten efter den normale søgecyklus (se Miljøvariabler
for indstillinger af søgningens TTL). model_map forbliver reserveløsningen.
Generér medier
Åbn Imagine (/gallery). Overskriften tilbyder Generate til billeder (når
billedgenerering er aktiveret i Settings) samt panelerne Video og Audio.
Tale- og lydgenerering er synkron. Anmodningen kører, resultatet gemmes i galleriet, og svaret returnerer det færdige element. Cancel afbryder browseranmodningen og Libres udgående udbyderanmodning. Et annulleret resultat gemmes ikke. Billedgenerering følger samme kontrakt for annullering ved afbrydelse.
For et accepteret ComfyUI-workflow sender Libre både jobannulleringen med prompt-ID
og sletning af køelementet med prompt-ID og venter derefter op til tre sekunder på
nedlukningen, før anmodningen frigives. Den kalder aldrig ComfyUI's uafgrænsede
interrupt-handling, som kan stoppe en anden brugers workflow. Aktuelle ComfyUI-versioner
udstiller /api/jobs/:promptId/cancel for et workflow, der kører. På en ældre version
uden denne handling kan Libre stadig fjerne præcis det ventende køelement, men kan ikke
sikkert stoppe et workflow, der allerede kører. Opgradér ComfyUI for at få hele
annulleringskontrakten.
TTS-plugins kan også erklære stemmekloning. For disse modeller viser Audio-panelet en upload af referencelyd og, når udbyderen kræver det, et felt til den nøjagtige transskription. Libre WebUI validerer filtype og størrelsesgrænser fra manifestet, holder uploaden i hukommelsen og videresender den kun til den valgte udbyder. Kun den genererede tale placeres i galleriet.
En klon kan valgfrit gemmes som en genanvendelig, navngivet stemme for samme plugin og model. Lagring kræver en separat bekræftelse af samtykke til opbevaring. Libre WebUI krypterer den oprindelige reference og transskription i en brugerejet stemmeprofil og bruger ikke genereret tale som reference. Gemte profiler kan vælges eller slettes permanent under Settings → Text-to-Speech. Den konfigurerede udbyder modtager den gemte reference igen, hver gang den genererer en talebatch. Profilen er bundet til udbyderens godkendte routing. Hvis plugindefinitionen eller slutpunktet ændres, skal profilen oprettes igen for at give samtykke til den nye destination. Brug kun optagelser fra talere, som har givet samtykke til både kloningen og enhver ønsket opbevaring.
Stemmeprofiler er bevidst udeladt fra Libre WebUI's generelle dataeksport, fordi de
indeholder biometrisk kildemateriale. Sikkerhedskopiér den krypterede programdatabase
og ENCRYPTION_KEY sammen, hvis du har brug for katastrofegendannelse. Ellers skal
profilerne genskabes fra de oprindelige optagelser med samtykke.
Videojobbets livscyklus
Videogenerering er asynkron. Når et job indsendes
(POST /api/media/video/generate), returneres 202 med en jobpost. Jobbet bevæger
sig gennem pending, in_progress og til sidst completed eller failed.
- Indsendelsen kobles fra browsersvaret efter validering. Libre gemmer udbyderens job-ID med det samme efter accept, selv hvis panelet eller netværksforbindelsen lukkes, mens udbyderen svarer.
GET /api/media/video/jobsviser kun den godkendte brugers gemte jobreferencer. Panelet anmoder om op til 100 aktive referencer, hver gang det åbnes. Et ventende job kan derfor åbnes igen efter navigation, opdatering eller afbrydelse.- Et vedvarende job
media.video.resume.v1poller udbyderen og downloader et færdigt resultat, selv når panelet er lukket. Solotilstand kører handleren i den indbyggede worker, og teamtilstand kører den i den eksterne worker. Leases, afgrænsede genforsøg, genvalidering af aktør og betinget fuldførelse gør det muligt for en anden worker at overtage jobbet, når en proces dør, uden at oprette en duplikeret gallerirække eller blobreference. De eksisterende resume-/GET-slutpunkter forbliver grænser for kompatibilitet og status. Grænsefladen kan stadig polle dem til visning. - Hvis panelet lukkes, eller Stop waiting vælges, afbrydes kun den aktuelle status- eller downloadtransport. Handlingen Cancel job hos udbyderen vises kun, når pluginet udtrykkeligt erklærer et annulleringsslutpunkt med job-ID. Når udbyderen bekræfter annulleringen, fjerner Libre den gemte lokale jobreference.
- Ved fuldførelse downloader backend videoen (maks. 200 MB, HTTP-omdirigeringer følges ikke) og gemmer den i galleriet.
- Jobposten gemmer plugin, model, indstillinger, status og prompt (krypteret ved lagring). Færdige og mislykkede jobposter, der er ældre end 30 dage, ryddes opportunistisk. Ventende jobreferencer udløber ikke gennem denne oprydning.
- Sluttilstande giver notifikationer: En færdig video opretter en media-ready- notifikation, og en udbyderfejl opretter media-failed. Begge linker til galleriet, deduplikeres pr. job og leveres gennem indbakken i appen og tilmeldte webhooks.
Billedredigering og inpainting
Galleribilleder får handlingen Edit image, når en model med redigeringsfunktioner
er konfigureret. Editoren maler en maske direkte på billedet — malede områder males om
af modellen, mens et uberørt lærred redigerer hele billedet — og kan vedhæfte flere
referencebilleder til komposition, når modellen accepterer mere end ét input.
Redigering bruger den OpenAI-kompatible multipart-kontrakt for edits. Et plugin
deltager ved at erklære edit_endpoint i billedfunktionens config samt valgfrie
grænser for supports_mask, max_reference_images, edit_mime_types og
max_edit_image_bytes (det medfølgende OpenAI-manifest erklærer dem alle).
Alle input valideres, før nogen bytes forlader processen: erklæret MIME, aflæste magic bytes (PNG, JPEG eller WebP) og en grænse på 10 MiB pr. billede. Masker skal være PNG, fordi kun PNG har den alfakanal, der markerer områderne, som skal males om. Resultater gemmes tilbage i galleriet med oprindelsesmetadata, som registrerer kildeelementet i galleriet, antallet af uploadede referencebilleder og om en maske blev brugt. Redigeringer måles præcis som genereringer.
Det samlede galleri
Galleriet viser alle medietyper blandet efter oprettelsestid med filterknapperne
All, Images, Videos og Audio. Video og lyd afspilles inline, billeder
åbnes i lightboxen, og hvert element kan downloades eller slettes. Administratorer kan
vælge automatisk opbevaring med GALLERY_RETENTION_DAYS. Planlæggerens oprydningskørsel
sletter medier, der er ældre end vinduet, gennem samme vedvarende slettelivscyklus som
manuel sletning. Hvis værdien ikke er angivet (standarden), bevares medier, indtil
ejeren sletter dem.
Lagring og levering er bevidst konservativ:
- Medier lagres krypteret i programdatabasen (under
DATA_DIR), ikke som løse filer på disken. Sikkerhedskopiér databasen ogENCRYPTION_KEYsammen som for alle krypterede data. - API-svar indlejrer aldrig mediepayloads. Elementer henviser i stedet til en indholds-URL pr. element.
- Leveret indhold skal matche en MIME-tilladelsesliste pr. type og den gemte type,
begrænses til 200 MB og leveres med
X-Content-Type-Options: nosniffog enContent-Security-Policy, der placerer svaret i en sandkasse.
De tidligere slutpunkter kun til billeder og panelet til billedgenerering fortsætter uændret. De skriver til det samme galleri.
Hastighedsgrænser
Medie-API'et er hastighedsbegrænset pr. klient:
| Handling | Grænse |
|---|---|
| Generering (video, tale, lyd) | 10 anmodninger pr. minut |
| Polling af videojob | 60 anmodninger pr. minut |
| Galleriliste, indhold og sletninger | 120 anmodninger pr. minut |
Grænsefladens 30-sekunders polling ligger godt inden for budgettet.
Måling og privatliv
Kald til mediegenerering måles i administratorens brugsanalyse som alle andre udgående udbyderkald: plugin, model, status, varighed og enhedsantal. Prompter og genereret indhold skrives aldrig til brugsposterne. De genererede medier og videojobbets prompt findes kun i brugerens egne krypterede rækker.
Som med chat modtager den konfigurerede udbyder prompten og returnerer indholdet. Udbyderens priser samt politikker for opbevaring og indhold gælder.