Hop til hovedindhold

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:

  • tts er tale: Tekst læses højt med en valgt stemme.
  • audio er 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/jobs viser 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.v1 poller 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 og ENCRYPTION_KEY sammen 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: nosniff og en Content-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:

HandlingGrænse
Generering (video, tale, lyd)10 anmodninger pr. minut
Polling af videojob60 anmodninger pr. minut
Galleriliste, indhold og sletninger120 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.

Relateret dokumentation