Un avatar parlant cohérent à partir d'une photo avec la synchro labiale LTX-2.5 dans ComfyUI

Transformez un portrait et une voix off de n'importe quelle durée en un avatar parlant synchronisé sur les lèvres qui garde le même visage, que la vidéo dure 30 secondes ou 50 minutes. Mise en place, réglages et fonctionnement du découpage.

Anton Tenitsky13 octobre 20267 min de lectureVersion vidéo plus basCode sur GitHub

Ce guide a été traduit de l'anglais par IA et peut contenir des erreurs. Lire l'original.

Un personnage démon à la peau rouge et aux cornes, généré en avatar parlant avec LTX-2.5, avec le portrait source en incrustation

Statut: Testé sur RunPod. J'ai utilisé ce template sur RunPod pour de longues tâches d'avatars, en le faisant tourner sur plusieurs GPU à la fois.

Ce workflow transforme une photo et une voix off en un avatar parlant avec synchro labiale, et garde le visage identique du début à la fin, que la vidéo dure 30 secondes ou 50 minutes. Il fait tourner LTX-2.5, le modèle vidéo et audio de Lightricks, que ComfyUI prend en charge nativement.

Tout est sur GitHub : le workflow, un petit pack de nodes et le script d’installation. Vous pouvez le faire tourner gratuitement en local si vous avez le GPU ; le script d’installation liste chaque modèle à télécharger, et un chatbot peut le transformer en commandes d’installation pour votre machine. Je l’ai fait tourner sur RunPod parce que je pouvais mettre cinq ou six GPU sur un même projet en même temps.

En bref

  • Entrée : un portrait et une voix off d’environ 60 minutes au maximum.
  • GPU : une RTX 5090 (32 Go) est ce que je recommande.
  • Résolution : environ 0,9 mégapixel est le bon compromis. Plus bas, les lèvres commencent à se coller.
  • Fonctionnement : l’audio est coupé aux pauses en segments de 3 à 12 secondes ; chaque segment commence et finit sur votre portrait ; un script les assemble avec votre audio d’origine.
  • Les longues tâches reprennent après un arrêt, sur le même pod ou un autre.

Ce dont vous avez besoin

  • Un portrait : une photo nette, de face.
  • Une voix off d’environ 60 minutes au maximum. Au-delà, découpez-la. Même alors, je garderais des parties d’environ 30 minutes : 30 minutes de vidéo prennent quelques heures à rendre sur une RTX 5090.
  • Un GPU de 32 Go de VRAM, ou un compte RunPod.
  • 80 Go de stockage. Les modèles principaux pèsent environ 39 Go, ou environ 47 Go avec l’améliorateur de prompt et l’upscaler temporel optionnels.

Une astuce pour les entrées : les nouveaux comptes Google Cloud reçoivent 300 $ de crédits gratuits (ce n’est pas un lien de parrainage). J’ai réalisé le portrait de cette démo avec le modèle d’image Nano Banana de Google et la voix off avec la synthèse vocale de Google, le tout avec ces crédits. La voix coûte si peu que 300 $ en couvrent une très grande quantité ; les images coûtent plus. Pour des milliers d’images, mon template Z-Image est la voie la moins chère.

Préparer le pod

Mon introduction à RunPod couvre les bases. Pour ce template :

  1. Créez un volume réseau d’environ 100 Go dans un centre de données qui a beaucoup de GPU. Vous pourrez l’agrandir plus tard, et il est facturé à l’heure tant qu’il existe, soit environ 7 $ par mois à cette taille en stockage standard.
  2. Déployez le template. Ouvrez le lien du template, ou cherchez « LTX 2.5 consistent avatar » dans les templates publics. Attachez votre volume.
  3. Choisissez un GPU. Je recommande une RTX 5090. Une RTX 4500 fonctionne mais est lente.
  4. Attendez le premier démarrage, 10 à 15 minutes pendant le téléchargement des modèles. Les démarrages suivants sur le même volume sont beaucoup plus rapides.
Page de déploiement de RunPod avec le template LTX2.5 consistent avatar lipsync sélectionné
Déployer le template avec un volume réseau attaché.

Optionnel mais recommandé : les poids officiels de LTX-2.5 sur Hugging Face sont soumis à licence. Acceptez la licence sur la page du modèle, créez un jeton de lecture dans vos paramètres Hugging Face et ajoutez-le au pod comme variable d’environnement HF_TOKEN. Sans lui, le template se rabat sur un miroir public, mais les téléchargements anonymes sont limités en débit et les 40 Go et plus peuvent devenir très lents.

Quand il est prêt, le menu Connect du pod affiche ComfyUI et JupyterLab. JupyterLab affiche parfois « initializing » alors qu’il fonctionne déjà, ouvrez-le donc simplement.

Le workflow

Le template installe un workflow dans la barre latérale Workflows de ComfyUI : ltx2-5_long_video_workflow. Il paraît simple en surface ; la mécanique est dans un subgraph que vous pouvez ouvrir par un double-clic. Vous n’avez pas besoin d’y toucher. Les nodes à régler sont ceux entourés de rouge.

Le workflow LTX-2.5 long video dans ComfyUI, avec les nodes d'entrée entourés de rouge et des notes explicatives à côté
Le workflow. Les nodes rouges sont les seuls à régler ; les notes expliquent le reste.

1. Entrées

Chargez votre voix off et votre portrait dans les deux nodes d’entrée rouges. Après avoir envoyé un nouveau fichier via JupyterLab, rechargez ComfyUI pour qu’il apparaisse dans les listes déroulantes.

Les nodes Load Voiceover et Load Portrait, entourés de rouge
Deux entrées : la voix off et un portrait. Le portrait pilote les deux extrémités de chaque segment.

2. Prompt

Le workflow est fourni avec un prompt de tête parlante neutre : la personne parle et regarde la caméra sans mouvement étrange. Vous pouvez écrire le vôtre, mais celui par défaut convient aux vidéos de type présentateur.

3. Résolution

Le node de résolution travaille en mégapixels, avec un rapport d’aspect. J’ai surtout rendu des carrés à 0,9 mégapixel. Si vous rendez toujours en grand écran, changez-le une fois et enregistrez le workflow, ou désactivez l’option mégapixels et saisissez des dimensions exactes.

Le node de résolution réglé sur un rapport d'aspect 1:1 à 0,9 mégapixel, multiple de 32
0,9 mégapixel en 1:1 est le réglage que j'ai utilisé pour la plupart des rendus.

La résolution affecte la bouche plus que tout le reste. Vers 500 × 500, et même à 600 ou 700 pixels de côté, la qualité baisse d’une manière précise : les lèvres se collent et la bouche bouge à peine. 0,9 mégapixel est le bon compromis pour moi. Plus haut, c’est encore plus beau mais plus long.

Comment il garde le visage cohérent

LTX-2.5 ne peut générer qu’environ 10 à 12 secondes à la fois. Au-delà, il dérive en défauts. Le workflow fait donc trois choses.

La première et la dernière image sont toujours votre portrait. Chaque segment commence et finit sur la même image, avec la même expression neutre. L’avatar parle, revient au neutre et repart, ce qui paraît naturel pour un présentateur. Comme les deux extrémités sont fixes, le visage ne peut pas dériver sur une longue vidéo. (Utiliser des dernières images différentes est possible, mais vous faites alors un film, ce qui est un autre travail.)

L’audio est coupé aux pauses. Le node Split Audio Chunk cherche les silences dans la parole et coupe là, visant 8 secondes, jamais moins de 3 ni plus de 12. Un passage de 7 secondes entre deux pauses devient un segment de 7 secondes.

Le node Split Audio Chunk avec une cible de 8 secondes, un minimum de 3, un maximum de 12 et le mode de coupe réglé sur pause
Les segments visent 8 secondes, entre 3 et 12, toujours coupés à une pause.

Un script le réassemble. La sortie « image » du workflow est trompeuse : le résultat est une vidéo. Un script d’assemblage fourni avec le template joint les segments, supprime l’image supplémentaire que LTX ajoute à chacun (sinon l’audio glisse d’environ 2 secondes sur 7 minutes), et pose votre audio d’origine sur le résultat plutôt que la reconstruction du modèle.

Un artefact est à connaître : à chaque raccord, le motif de bruit change légèrement. C’est visible si on le cherche. J’ai accepté d’en vivre pour des vidéos de présentateur, mais c’est le principal point sur lequel MiniMax H3 s’est amélioré.

Sortie et noms de fichiers

Tout atterrit dans le dossier output de ComfyUI : un dossier de segments et la vidéo terminée. Par défaut, le nom de votre fichier audio devient à la fois le dossier du projet et le nom de la vidéo finale, de sorte que avatar-female-2.mp3 vous donne un dossier de segments avatar-female-2 et une vidéo finale correspondante. Quand vous rendez une centaine de fichiers, c’est bien plus simple que des sessions numérotées. Si vous préférez nommer les sessions vous-même, déconnectez l’entrée de nom et saisissez un nom de session.

L’exécuter, et que faire quand ça cale

Mettez en file avec Run (Instant) et gardez la console ouverte : elle indique combien il y a de segments et lequel est en cours. Le premier segment est plus long pendant le chargement des modèles.

Liste des pods RunPod montrant plusieurs pods RTX 5090 et RTX PRO 4000/4500 tournant en même temps
Plusieurs pods en rendu simultané. Sur une RTX 5090, 30 minutes de vidéo prennent quelques heures.

Les longs rendus s’arrêtent parfois sans raison visible. Pour moi, c’est arrivé entre deux et six heures après le début d’une tâche. La solution :

  1. Ouvrez le Manager de ComfyUI et cliquez sur Restart.
  2. Rechargez ComfyUI dans votre navigateur.
  3. Remettez en file. Les segments terminés sont ignorés, la tâche reprend donc là où elle s’est arrêtée.
Le panneau du ComfyUI Manager avec le bouton Restart
Rendu bloqué ? Redémarrez ComfyUI depuis le Manager, rechargez le navigateur et remettez en file.

La même reprise fonctionne le lendemain ou sur un autre pod : attachez le même volume réseau et remettez en file.

Erreurs à éviter

  • Résolution trop basse. Sous environ 0,9 mégapixel, le mouvement de la bouche en souffre d’abord.
  • Un seul énorme fichier. Gardez les voix off à environ 30 minutes par tâche.
  • Pas de jeton Hugging Face. Le téléchargement fonctionne sans, mais lentement.
  • Abandonner un rendu bloqué. Redémarrez, rechargez et remettez en file ; rien n’est perdu.

Le lien du template est un lien de parrainage RunPod, tout comme celui-ci : les nouveaux comptes inscrits avec Google reçoivent entre 5 et 500 $ de crédit après leurs 10 premiers dollars, et je touche une petite commission.

Voir la version vidéo (11:36)

Tout ce qui précède est aussi dans la vidéo, si vous préférez suivre à l’écran. La vidéo est en anglais.

Questions fréquentes

Quelle peut être la durée d'une vidéo d'avatar parlant LTX-2.5 ?

Une génération LTX-2.5 est limitée à environ 10–12 secondes, mais le workflow coupe votre voix off en segments et les assemble, l'entrée peut donc atteindre environ 60 minutes. Pour les très longues vidéos, découpez l'audio en parties d'environ 30 minutes.

Quelle résolution utiliser pour la synchro labiale LTX-2.5 ?

Environ 0,9 mégapixel. En dessous d'environ 700 × 700, la qualité baisse : les lèvres se collent et la bouche bouge à peine. Plus haut, c'est plus beau mais le rendu est plus lent.

De quel GPU ai-je besoin ?

Je recommande une RTX 5090 de 32 Go de VRAM. Le README du template indique que les cartes de 48 Go sont confortables et que 24 Go sont faisables avec les fichiers int8 qu'il télécharge, à des résolutions modérées.

Pourquoi mon long rendu s'arrête-t-il après quelques heures ?

Cela m'est arrivé après deux à six heures. Redémarrez ComfyUI depuis le Manager, rechargez le navigateur et remettez en file : la tâche reprend au dernier segment terminé.

Anton Tenitsky est artiste 3D avec plus de 15 ans d'expérience en infographie, qui a travaillé avec Nickelodeon, Gameloft, Marvel Rivals et de nombreux autres clients. En savoir plus sur moi

Guides associés