Vidéos d'avatars IA en lot à partir d'une seule photo avec MiniMax H3 dans ComfyUI

Un portrait et un dossier de voix off en entrée, une vidéo de tête parlante terminée pour chaque fichier en sortie. Comment fonctionne le workflow par lots MiniMax H3, quel GPU utiliser et ce que cela coûte par minute terminée.

Anton Tenitsky13 octobre 202611 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.

Deux vidéos d'avatars parlants terminées, rendues à partir de deux portraits et nommées d'après leurs fichiers de voix off

Statut: Testé sur RunPod. J'ai rendu des lots avec ce template sur RunPod, sur une RTX A5000, une RTX 5090 et une B200. Les chiffres de ce guide viennent de ces exécutions.

Donnez à ce workflow un portrait et un dossier de voix off (20, 50 ou 2 000), et il rend une vidéo de tête parlante pour chaque fichier, l’une après l’autre, sans que vous y touchiez. Il peut tourner pendant des jours.

Il est construit sur MiniMax H3, un modèle vidéo à poids ouverts que ComfyUI prend en charge nativement. Par rapport à ma configuration d’avatar LTX-2.5 précédente, il était environ 30 % plus rapide, environ 30 % moins cher et donnait des raccords plus propres entre les segments.

En bref

  • Coût : environ 20 minutes de vidéo 768 × 768 terminée pour 2 à 3 $ de temps GPU, soit à peu près 0,13 $ par minute terminée sur une RTX 5090.
  • GPU : 32 Go de VRAM sont le choix sûr. 24 Go fonctionnent mais peuvent caler après des heures de tâche.
  • Licence : non licencié aux États-Unis, dans l’UE, au Royaume-Uni et en Corée du Sud, y compris là où tourne votre pod.
  • Fonctionnement : la voix off est coupée en segments de 10 secondes maximum aux pauses, chaque segment commence et finit sur votre portrait, et les segments sont réassemblés avec votre audio d’origine.
  • Template gratuit sur GitHub, ou en un clic sur RunPod.

Vérifiez d’abord la licence

La licence communautaire de MiniMax H3 exclut les États-Unis, l’Union européenne, le Royaume-Uni et la Corée du Sud. Elle s’applique à l’endroit où le modèle tourne autant qu’à l’endroit où vous vous trouvez : choisissez donc un centre de données RunPod hors de ces régions. Si vous avez besoin de l’une d’elles, MiniMax accorde des licences sur demande.

Diapositive listant les régions exclues par la licence communautaire de MiniMax H3 : États-Unis, Union européenne, Royaume-Uni et Corée du Sud
Les quatre régions exclues. L'endroit où tourne le pod compte aussi.

La licence comporte aussi une politique d’utilisation acceptable. Entre autres, elle interdit d’usurper l’identité de personnes réelles sans leur consentement, et tout produit commercial construit dessus doit afficher « MiniMax H3 ». Lisez-la avant de l’utiliser pour un travail client.

Ce dont vous avez besoin

  • Un portrait, idéalement sur un fond uni et éclairé de façon homogène. Les panneaux, écrans et textes présents dans l’image ont tendance à s’animer.
  • Des voix off en .wav, .mp3, .flac, .m4a, .aac, .ogg ou .opus. Chaque fichier devient une vidéo, nommée d’après le fichier. Si vous avez besoin de voix off, mon template Qwen3-TTS les produit avec des modèles ouverts.
  • Un GPU de 32 Go de VRAM, comme une RTX 5090. Vous pouvez le faire tourner en local si vous en avez un ; le script d’installation liste chaque modèle et chaque node.
  • Environ 100 Go de stockage. Les modèles seuls pèsent environ 46 Go.
Diagramme en barres des téléchargements de MiniMax H3 : modèle H3 21 Go, encodeur de texte Qwen3-VL 15,7 Go, trois LoRA Turbo 6 Go, VAE vidéo 2,8 Go, VAE audio 0,6 Go
Ce que télécharge le premier démarrage : environ 46 Go, une seule fois. Ensuite, cela reste sur le volume.

Quel GPU

Je l’ai fait tourner sur trois GPU. Voici les temps pour le workflow Fast :

GPU VRAM Prix (oct. 2026) Temps GPU par segment Vidéo de 20 minutes
RTX A5000 24 Go 0,27 $/h ~118 s pour un segment de 7 s ~5,4 h, ~1,50 $
RTX 5090 32 Go 1,19 $/h 60–70 s par segment de 10 s ~2,2 h, ~2,60 $
B200 180 Go 7,99 $/h ~33 s par segment de 10 s ~1,1 h, ~8,70 $

La RTX 5090 est mon choix : le meilleur équilibre entre vitesse et coût. La B200 était environ deux fois plus rapide mais environ six fois plus chère de l’heure, elle n’a donc de sens que quand l’échéance compte plus que la facture. La A5000 est la moins chère par minute de vidéo si vous pouvez attendre.

Graphique comparant 24 Go de VRAM, qui ont tourné avec quelques blocages, à 32 Go, qui ont tourné des jours sans caler
Le modèle H3 seul occupe environ 20 Go une fois chargé. Sur 24 Go, il a tourné avec quelques blocages quand la mémoire s'étranglait ; sur 32 Go, il n'a jamais calé.

La VRAM est la vraie contrainte. Avec 24 Go, la tâche tourne, mais les longs lots peuvent caler après quelques heures. Avec 32 Go, j’ai fait tourner des tâches isolées pendant des jours.

Ces prix sont les tarifs catalogue de RunPod en octobre 2026. RunPod a récemment augmenté ses prix ; mon « 2–3 $ pour 20 minutes » a été mesuré aux anciens tarifs (la B200 coûtait alors environ 6,50 $/h).

Préparer le pod

Si vous n’avez jamais utilisé RunPod, mon introduction à RunPod détaille les comptes, les volumes réseau et les pods. La version courte pour ce template :

  1. Créez un volume réseau dans un centre de données hors des régions exclues. Le README du template recommande 100 Go ; j’ai utilisé 80 Go, ce qui convient aux modèles par défaut avec de la place pour les rendus. Le stockage coûte 0,07 $/Go par mois en standard et 0,14 $ en haute performance, donc 80 Go reviennent à 5,60 $ ou 11,20 $ par mois. Il est facturé tant que le volume existe, pas payé d’avance.
  2. Déployez le template avec le volume attaché. Sous Additional filters → CUDA Versions, sélectionnez 13.0 : le template tourne sur l’image CUDA 13 et a besoin d’un hôte avec un pilote récent.
  3. Attendez le premier démarrage. Il télécharge environ 46 Go, ce qui prend de 10 à 15 minutes. Suivez-le dans les logs. ComfyUI annonce parfois « ready » avant de l’être, et JupyterLab peut afficher « initializing » alors qu’il est prêt ; essayez donc de l’ouvrir.
Diapositive comparant la RTX A5000, 24 Go à 0,27 $ l'heure, à la RTX 5090, 32 Go à 1,19 $ l'heure
La A5000 est la moins chère par minute mais juste en mémoire. La 5090 est ma préférée.

Envoyer portraits et voix off

Ouvrez JupyterLab (port 8888) depuis le menu Connect du pod. C’est votre explorateur de fichiers.

  • Placez les portraits dans ComfyUI/input/.
  • Placez les voix off d’un lot dans ComfyUI/input/batch_audio/. Le template crée ce dossier au premier démarrage.

Vous faites tourner plusieurs pods à la fois ? Créez un dossier par lot (batch_audio_1, batch_audio_2, etc.) et faites pointer le workflow de chaque pod vers son propre dossier.

Après l’envoi, rechargez ComfyUI dans votre navigateur. Ses listes déroulantes de fichiers ne se mettent à jour qu’après un rechargement.

Choisir un workflow

Ouvrez ComfyUI (port 8188), puis la barre latérale Workflows. Il existe trois niveaux de qualité, chacun sous forme de workflow à un seul fichier et de version _batch qui rend un dossier entier :

Workflow Résolution Étapes Temps de rendu Quand l’utiliser
Fast 768 × 768 4 1× Bonne qualité ; mon choix
Standard 768 × 768 8 ~2× La meilleure qualité, mais excessif pour la plupart des tâches
Draft 544 × 544 4 ~0,5× Seulement pour tester le timing et le cadrage
Graphique du temps de rendu relatif par segment : Fast 1x, Standard environ 2x, Draft environ 0,5x
Temps de rendu relatif par segment pour les trois workflows.

Les workflows sont conçus pour les longues tâches : c’est là que louer un GPU fait économiser de l’argent. Pour un simple clip de test, l’effort n’en vaut pas la peine.

Comment ça marche

Comprendre trois idées rend les réglages compréhensibles.

Chaque segment commence et finit sur votre portrait. H3 verrouille la première et la dernière image de chaque génération sur l’image que vous lui donnez, si bien que le visage ne peut pas dériver sur une longue vidéo. La personne revient à la même expression neutre à chaque raccord, ce qui paraît naturel pour une tête parlante.

La voix off est coupée aux pauses. Une génération H3 plafonne à environ 15 secondes (362 images à 24 i/s), et plus un segment s’éloigne de ses images d’ancrage, plus l’arrière-plan et le cadrage dérivent. Le template coupe donc votre audio en segments de 10 secondes maximum, toujours dans une pause. Une voix off de 57,5 secondes est devenue 7 segments, aucun de plus de 10 secondes.

Forme d'onde audio d'une voix off de 57,5 secondes, coupée aux pauses en 7 segments de moins de 10 secondes
La voix off est découpée aux pauses naturelles, si bien qu'aucun mot n'est coupé en deux.

L’image suit votre audio. La portion de voix off de chaque segment est fournie à H3 comme guide, de sorte que le modèle anime la bouche sur votre son au lieu d’inventer la parole. La vidéo terminée utilise votre piste audio d’origine, pas la reconstruction du modèle.

Schéma : sept fichiers de segments sont assemblés par un node fourni après le dernier segment en output/avatar-female-2_fast.mp4
Après le dernier segment, un node fourni assemble le tout en une vidéo nommée d'après la voix off.

Les raccords sont presque invisibles, plus propres qu’avec LTX-2.5, où le motif de bruit change visiblement à chaque raccord. H3 a sa propre bizarrerie : il lui arrive de zoomer sur le visage sans raison, même quand le prompt ne le demande pas. Vérifiez le premier segment à ce sujet avant de vous engager dans des heures de rendu.

Décrivez le rendu, sinon il changera

C’est le réglage qui compte le plus. Le node Talking-Head Prompt a deux champs : le sujet et l’arrière-plan, qui décrivent tous deux ce qui figure déjà dans votre portrait.

Le node Talking-Head Prompt dans ComfyUI avec une description du sujet et une description de l'arrière-plan
Le node Talking-Head Prompt : un champ pour le sujet, un pour l'arrière-plan.

Seules la première et la dernière image sont ancrées ; tout ce qui est entre les deux est généré, et le modèle comble tout ce que le prompt laisse ouvert. Si vous ne décrivez pas les vêtements, ils peuvent changer au milieu d’un segment.

Côte à côte : sans les vêtements dans le prompt, le haut rouge de l'avatar est devenu bleu ; avec les vêtements décrits, il est resté rouge
À gauche : vêtements absents du prompt, et la tenue a changé. À droite : vêtements décrits, et elle a tenu.

Quelques règles qui ont fonctionné pour moi :

  • Décrivez les cheveux et les vêtements en mots simples : par exemple, « a woman with long, light, wavy hair falling past her shoulders, wearing a white toga ».
  • Gardez l’arrière-plan simple et dites-le : un fond uni, un éclairage doux et uniforme.
  • Ne surécrivez pas. Trop de description peut rendre le résultat raide ou brûlé. Visez quelques mots concrets par champ. Un chatbot peut resserrer votre formulation si vous séchez.

Le prompt du template exclut déjà le texte, les sous-titres et les logos, et évite des mots comme « presenter » qui tirent le modèle vers les graphismes de télévision.

Lancer le lot

Réglez la résolution si vous avez besoin d’autre chose que du carré, puis mettez en file avec Run (Instant). Chaque exécution rend le prochain segment inachevé, si bien qu’il continue jusqu’à ce que chaque fichier du dossier soit terminé, puis s’arrête tout seul.

Testez d’abord un segment. Le premier segment inclut le chargement des modèles, il est donc plus lent (212 secondes dans mon essai, contre 118 pour le deuxième sur la A5000). Ouvrez-le dans JupyterLab sous output/h3_longform/<nom de la voix off>/chunk_0000.mp4 et vérifiez trois choses : la synchro labiale, le visage et l’arrière-plan. Pas de zoom, pas de changement de tenue : c’est bon.

JupyterLab lisant chunk_0000.mp4 depuis le dossier de sortie, montrant l'avatar avec des ailes d'ange et un halo
Vérifiez le segment 1 pour la synchro labiale, l'identité et l'arrière-plan avant de laisser tourner le lot.
Graphique des secondes GPU par segment de 10 secondes : B200 environ 33 secondes, RTX 5090 de 60 à 70 secondes
Temps GPU par segment de 10 secondes avec le workflow Fast.

La reprise est automatique. Si le pod s’arrête au segment 150 sur 300, remettez en file et il reprend à 151, sur le même pod ou sur un nouveau attaché au même volume. Une vidéo terminée est aussi ignorée. Pour en rendre une à nouveau, changez name_suffix sur le node de nom de sortie ou supprimez son dossier sous output/h3_longform/. Pendant les tests, j’ai dû effacer d’anciens segments de cette façon quand j’avais réutilisé un nom de fichier.

Quand une vidéo est terminée, elle est enregistrée sous output/<nom de la voix off>_fast.mp4 (le suffixe correspond au workflow). Faites un clic droit dessus dans JupyterLab pour la télécharger.

Optionnel : motion carry

Le template a un réglage expérimental sur le node Split Audio Chunk, motion_carry, qui fait démarrer chaque segment à partir des dernières images du précédent au lieu du portrait. Il peut lisser encore les raccords, mais il est désactivé par défaut et le README précise qu’il n’a pas encore été testé sur un GPU. Si vous l’essayez, mettez les segments en file dans l’ordre et utilisez un nouveau nom de session.

Quand vous avez fini

Arrêtez le pod : vos fichiers restent sur le volume, et vous pourrez redémarrer plus tard sur n’importe quel GPU du même centre de données. Quand le projet est terminé, supprimez aussi le volume, sinon il continue d’être facturé. RunPod ne supprimera pas un volume tant qu’un pod y est attaché, terminez donc d’abord ces pods.

Erreurs à éviter

  • Le faire tourner dans une région exclue. Vérifiez le centre de données, pas seulement votre localisation.
  • Sauter la description des vêtements. La tenue peut changer en plein segment.
  • Un prompt trop chargé. Quelques mots concrets valent mieux qu’un paragraphe.
  • Partir directement sur un lot de 10 heures. Vérifiez le premier segment.
  • Mauvaise version de CUDA. Filtrez sur CUDA 13.0 au déploiement.
  • Oublier le volume. Les pods arrêtés coûtent peu ; un volume oublié est facturé chaque mois.

Le lien RunPod du template, et mon lien de parrainage RunPod, offrent aux nouveaux comptes inscrits avec Google entre 5 et 500 $ de crédit après leurs 10 premiers dollars, et je touche une petite commission.

Voir la version vidéo (14:43)

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

Combien coûte le rendu d'une vidéo d'avatar parlant MiniMax H3 ?

Dans mes essais, environ 20 minutes de vidéo 768 × 768 terminée ont coûté 2 à 3 $ de temps GPU, soit à peu près 0,10 à 0,15 $ par minute terminée sur une RTX 5090. C'était aux anciens tarifs, moins chers, de RunPod ; vérifiez les prix actuels avant une grosse tâche.

De combien de VRAM MiniMax H3 a-t-il besoin ?

32 Go est le choix sûr. 24 Go fonctionnent, mais les longues tâches peuvent caler après des heures quand la mémoire manque. Sur une RTX 5090 de 32 Go, il a tourné des jours sans caler.

Puis-je utiliser MiniMax H3 aux États-Unis ou dans l'UE ?

Pas sous la licence communautaire, qui exclut les États-Unis, l'Union européenne, le Royaume-Uni et la Corée du Sud, y compris l'endroit où tourne le pod. MiniMax accorde des licences pour ces régions sur demande.

Quelle peut être la durée d'une génération MiniMax H3 ?

Environ 15 secondes (362 images à 24 i/s). Le template rend des segments de 10 secondes coupés aux pauses et les assemble, la voix off elle-même peut donc avoir n'importe quelle durée.

Que se passe-t-il si le pod s'arrête au milieu d'un lot ?

Remettez-le en file. Les segments terminés et les vidéos terminées sont ignorés, et la tâche reprend au prochain segment inachevé, sur le même pod ou sur un nouveau attaché au même volume réseau.

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