Génération vidéo et audio
Libre WebUI 0.18.0 étend la génération au-delà des images : les plugins de fournisseurs peuvent déclarer des capacités vidéo et audio, et tout le contenu généré — images, vidéos, parole et son — est réuni dans une galerie multimédia propre à chaque utilisateur.
La génération de médias est accessible à tous les utilisateurs authentifiés. La galerie est strictement personnelle : chaque lecture, récupération de contenu et suppression est limitée au compte connecté.
Blocs de capacités des plugins
Une définition de plugin déclare chaque capacité multimédia dans son propre bloc :
"capabilities": {
"image": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"tts": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"audio": { "endpoint": "...", "model_map": ["..."], "config": { ... } },
"video": { "endpoint": "...", "model_map": ["..."], "config": { ... } }
}
Chaque bloc possède un endpoint, une liste de repli model_map, un
models_endpoint facultatif pour la découverte en direct des modèles et un objet
config contenant les options propres à la capacité : dimensions et proportions
pour les images, voix et formats pour la parole, résolutions, proportions et durées
pour la vidéo. Un fournisseur de vidéo peut également déclarer un cancel_endpoint
par identifiant d’invite et une cancel_method ; Libre ne déduit pas la prise en
charge de l’annulation d’un point de terminaison de génération ordinaire.
Il existe deux capacités audio, toutes deux enregistrées comme contenu audio dans la galerie :
ttscorrespond à la parole : un texte est lu avec une voix choisie.audiocorrespond au son : un modèle génère un contenu audio à partir d’une invite.
OpenRouter (plugins/openrouter.json) est actuellement le seul plugin intégré qui
déclare des blocs video et audio. Lorsqu’un models_endpoint est présent, la
liste des modèles s’actualise selon le cycle de découverte normal (consultez les
variables d’environnement pour les réglages de durée de
vie de la découverte) ; model_map reste la valeur de repli.
Générer des médias
Ouvrez Imagine (/gallery). L’en-tête propose Générer pour les images
(lorsque leur génération est activée dans les paramètres), ainsi que les volets
Vidéo et Audio.
La génération de parole et de son est synchrone : la requête s’exécute, le résultat est enregistré dans la galerie et la réponse renvoie l’élément terminé. Annuler interrompt la requête du navigateur et la requête sortante de Libre vers le fournisseur ; aucun résultat annulé n’est enregistré. La génération d’images suit le même contrat d’annulation lors de la déconnexion.
Pour un flux ComfyUI accepté, Libre envoie à la fois l’opération d’annulation de la
tâche par identifiant d’invite et la suppression de la file par identifiant
d’invite, puis attend jusqu’à trois secondes la fin de ce nettoyage avant de libérer
la requête. Il n’appelle jamais l’opération d’interruption non cloisonnée de ComfyUI,
qui pourrait arrêter le flux d’un autre utilisateur. Les versions actuelles de
ComfyUI exposent /api/jobs/:promptId/cancel pour un flux en cours d’exécution. Sur
une ancienne version dépourvue de cette opération, Libre peut toujours retirer
l’élément en attente exact de la file, mais ne peut pas arrêter en toute sécurité un
flux déjà lancé ; mettez ComfyUI à niveau pour bénéficier du contrat d’annulation
complet.
Les plugins TTS peuvent également déclarer le clonage de voix. Pour ces modèles, le volet Audio affiche un téléversement d’audio de référence et, lorsque le fournisseur l’exige, un champ de transcription exacte. Libre WebUI valide le type de fichier et les limites de taille du manifeste, conserve le téléversement en mémoire et ne le transmet qu’au fournisseur sélectionné. Seule la parole générée rejoint la galerie.
Un clone peut facultativement être enregistré comme voix nommée et réutilisable pour le même plugin et le même modèle. Cet enregistrement exige une confirmation de consentement au stockage distincte. Libre WebUI chiffre la référence d’origine et sa transcription dans un profil vocal appartenant à l’utilisateur ; il n’emploie pas la parole générée comme référence. Les profils enregistrés peuvent être sélectionnés ou supprimés définitivement sous Paramètres → Synthèse vocale. Le fournisseur configuré reçoit de nouveau la référence stockée chaque fois qu’il génère un lot de parole. Le profil est lié au routage approuvé de ce fournisseur ; si la définition du plugin ou le point de terminaison change, recréez le profil pour consentir à la nouvelle destination. N’utilisez que des enregistrements de personnes ayant consenti à la fois à la demande de clonage et à tout stockage demandé.
Les profils vocaux sont volontairement exclus de l’exportation générale des données
de Libre WebUI, car ils contiennent des données biométriques sources. Pour la reprise
après sinistre, sauvegardez ensemble la base de données chiffrée de l’application et
ENCRYPTION_KEY ; sinon, recréez les profils depuis les enregistrements originaux
obtenus avec consentement.
Cycle de vie des tâches vidéo
La génération vidéo est asynchrone. L’envoi d’une tâche
(POST /api/media/video/generate) renvoie 202 avec un enregistrement de tâche,
qui passe successivement par pending, in_progress, puis completed ou failed.
- Après validation, l’envoi est détaché de la réponse du navigateur. Libre conserve immédiatement l’identifiant de tâche du fournisseur dès son acceptation, même si le volet ou la connexion réseau se ferme pendant la réponse du fournisseur.
GET /api/media/video/jobsne répertorie que les références enregistrées de l’utilisateur authentifié ; le volet en demande jusqu’à 100 actives à chaque ouverture. Une tâche en attente peut donc être rouverte après une navigation, une actualisation ou une déconnexion.- Une tâche durable
media.video.resume.v1interroge le fournisseur et télécharge un résultat terminé même lorsque le volet est fermé. Le mode individuel exécute ce gestionnaire dans le worker intégré ; le mode équipe l’exécute dans le worker externe. Les baux, les nouvelles tentatives limitées, la revalidation de l’acteur et l’achèvement conditionnel permettent à un autre worker de reprendre la tâche après la mort d’un processus, sans créer de doublon dans la galerie ni de référence de blob en double. Les points de terminaison de reprise etGETexistants restent des frontières de compatibilité et d’état ; l’interface peut continuer à les interroger pour l’affichage. - Fermer le volet ou choisir Arrêter d’attendre interrompt seulement le transport actuel de l’état ou du téléchargement. Une action Annuler la tâche côté fournisseur n’apparaît que si le plugin déclare explicitement un point de terminaison d’annulation par identifiant de tâche. Après confirmation de l’annulation par le fournisseur, Libre supprime la référence locale enregistrée.
- À la fin, le backend télécharge la vidéo (limite de 200 MB, sans suivre les redirections HTTP) et l’enregistre dans la galerie.
- L’enregistrement de la tâche conserve le plugin, le modèle, les options, l’état et l’invite (chiffrée au repos). Les enregistrements de tâches terminées et en échec vieux de plus de 30 jours sont élagués de manière opportuniste ; ce nettoyage n’expire pas les références en attente.
- Les états finaux produisent une notification : une vidéo terminée publie une notification media-ready et un échec du fournisseur publie media-failed. Toutes deux renvoient vers la galerie, sont dédupliquées par tâche et livrées dans la boîte de réception intégrée ainsi qu’à tous les webhooks abonnés.
Retouche et remplissage d’images
Les images de la galerie disposent d’une action Retoucher l’image lorsqu’un
modèle de retouche est configuré. L’éditeur permet de peindre un masque directement
sur l’image : le modèle repeint les zones couvertes, tandis qu’un canevas intact
applique la retouche à l’ensemble de l’image. Des images de référence supplémentaires
peuvent être jointes pour la composition si le modèle accepte plusieurs entrées. La
retouche utilise le contrat multipart de retouche compatible avec OpenAI : un plugin
y participe en déclarant edit_endpoint dans la configuration de sa capacité image,
ainsi que les limites facultatives supports_mask, max_reference_images,
edit_mime_types et max_edit_image_bytes (le manifeste OpenAI intégré les déclare
toutes).
Chaque entrée est validée avant qu’un seul octet ne quitte le processus : type MIME déclaré, octets magiques détectés (PNG, JPEG ou WebP) et limite de 10 MiB par image. Les masques doivent être au format PNG, seul format qui conserve le canal alpha servant à marquer les zones à repeindre. Les résultats sont enregistrés dans la galerie avec des métadonnées de provenance indiquant l’élément source, le nombre d’images de référence téléversées et l’utilisation éventuelle d’un masque. Les retouches sont mesurées exactement comme les générations.
La galerie unifiée
La galerie répertorie tous les types de médias, entremêlés selon leur date de
création, avec des pastilles de filtre Tout, Images, Vidéos et Audio.
Les vidéos et le contenu audio se lisent directement ; les images s’ouvrent dans la
visionneuse ; chaque élément peut être téléchargé ou supprimé. Les administrateurs
peuvent activer une conservation automatique avec GALLERY_RETENTION_DAYS : la
tâche planifiée supprime les médias plus anciens que cette fenêtre selon le même
cycle de suppression durable qu’une suppression manuelle. Lorsque cette variable
n’est pas définie (valeur par défaut), les médias sont conservés jusqu’à leur
suppression par le propriétaire.
Le stockage et la diffusion sont volontairement prudents :
- Les médias sont stockés sous forme chiffrée dans la base de données de
l’application (sous
DATA_DIR), et non sous forme de fichiers distincts sur le disque. Comme pour toutes les données chiffrées, sauvegardez ensemble la base de données etENCRYPTION_KEY. - Les réponses de l’API n’intègrent jamais les charges utiles multimédias ; les éléments font plutôt référence à une URL de contenu propre à chacun.
- Le contenu servi doit correspondre à une liste blanche MIME propre à son type et
au type stocké, sa taille est limitée à 200 MB, et il est livré avec
X-Content-Type-Options: nosniffet uneContent-Security-Policyqui isole la réponse.
Les anciens points de terminaison réservés aux images et le volet de génération d’images continuent de fonctionner sans changement ; ils écrivent dans la même galerie.
Limites de débit
L’API multimédia est soumise à une limite de débit par client :
| Opération | Limite |
|---|---|
| Génération (vidéo, parole, son) | 10 requêtes par minute |
| Interrogation des tâches vidéo | 60 requêtes par minute |
| Liste, contenu et suppressions de la galerie | 120 requêtes par minute |
L’interrogation toutes les 30 secondes de l’interface reste largement dans le budget prévu.
Mesure et confidentialité
Les appels de génération de médias sont comptabilisés dans l’analyse de l’utilisation réservée aux administrateurs, comme tous les autres appels sortants aux fournisseurs : plugin, modèle, état, durée et nombre d’unités. Les invites et le contenu généré ne sont jamais écrits dans les enregistrements d’utilisation. Les médias générés eux-mêmes et l’invite de la tâche vidéo n’existent que dans les lignes chiffrées propres à l’utilisateur.
Comme pour le chat, le fournisseur configuré reçoit l’invite et renvoie le contenu ; ses politiques de tarification, de conservation et de contenu s’appliquent.