Aller au contenu principal

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 :

  • tts correspond à la parole : un texte est lu avec une voix choisie.
  • audio correspond 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/jobs ne 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.v1 interroge 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 et GET existants 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 et ENCRYPTION_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: nosniff et une Content-Security-Policy qui 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érationLimite
Génération (vidéo, parole, son)10 requêtes par minute
Interrogation des tâches vidéo60 requêtes par minute
Liste, contenu et suppressions de la galerie120 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.

Documentation connexe