Vidéos publicitaires avec RunPod
Générer des clips parlés et des scènes avec Wan 2.2 et InfiniteTalk sur votre pod RunPod, avec les scripts RoyLead qui font le gros du travail. Coûts, installation, pièges.
Mis à jour le 21 septembre 2026
💡 Recommandée si vous utilisez Claude Code. Le terminal,
sshetffmpeg, c'est Claude qui s'en sert à votre place : il vous faut seulement un compte RunPod avec une carte enregistrée et l'installation ci-dessous, une fois. Vous payez le GPU à l'heure plutôt qu'au clip, ce qui devient rentable avec plusieurs vidéos d'affilée. Si vous travaillez dans un chat (claude.ai, ChatGPT, Claude Desktop), qui ne peut pas utiliser de terminal, prenez fal.ai : mêmes modèles, paiement au clip, rien à installer.
Avec RunPod vous louez un GPU à l'heure et vous y faites tourner les modèles open source : Wan 2.2 pour les scènes muettes (image-to-video) et InfiniteTalk pour les répliques parlées avec les lèvres synchronisées. Les scripts RoyLead font la partie ennuyeuse : ils attendent que ComfyUI soit prêt, installent InfiniteTalk, envoient photos et voix, génèrent les clips à la suite, les téléchargent et montent la vidéo finale.
Combien ça coûte
| Poste | Coût |
|---|---|
| GPU RTX PRO 6000 (96 Go), Secure Cloud | 2,09 $ de l'heure, seulement quand il est allumé |
| GPU RTX 5090 Community | 0,69 $ de l'heure, mais 62 Go de RAM : avec les modèles complets, la mémoire peut manquer |
| Disque réseau (facultatif, déconseillé) | 14 $ par mois pour 200 Go, en permanence |
| Une scène muette ou un clip parlé sur la PRO 6000 | environ 2 minutes, environ 0,07 $ |
| Une vidéo de 8 scènes (pod tout juste allumé) | environ 25 minutes, moins d'1 $ |
| Court de 60 s, 12 plans en 3 essais | environ 2 heures de GPU |
Le pod se supprime à la fin de la session : un pod arrêté mais non supprimé continue de coûter. Sans disque, il ne reste rien à payer.
Étape 1 — Compte, clé SSH, disque
- Créez le compte sur runpod.io et chargez du crédit.
- Dans Settings → SSH Public Keys, enregistrez votre clé publique (
~/.ssh/id_ed25519.pub; si vous n'en avez pas :ssh-keygen -t ed25519). Les scripts utilisent~/.ssh/id_ed25519; pour une autre clé, définissezRUNPOD_SSH_KEY=/chemin/de/la/cleavant de les lancer. - Le disque réseau est facultatif, et souvent il vaut mieux s'en passer. Un Network
Volume de 200 Go garde les modèles (environ 176 Go) et vous évite de les retélécharger, mais
il coûte 14 $ par mois et surtout il vous enchaîne à son centre de données : le pod y
naît forcément, et si le bon GPU n'y est pas, vous êtes bloqué.
Sans disque, le template télécharge lui-même les modèles au démarrage : avec
download_wan22=true(scènes muettes) etdownload_wan21=true(clips parlés), cela prend 1 à 3 minutes, quelques centimes. Les fichiers InfiniteTalk, en revanche, le template ne les télécharge pas : s'il vous faut des clips parlés, ajoutez-les comme à l'étape 3 (quelques minutes). Ainsi vous prenez le GPU dans n'importe quel centre de données où il y en a. Vérifié le 2026-09-21 sur un pod sans disque : scènes muettes, clips parlés et images. Le disque n'est rentable que si vous générez tous les jours ou si vous avez vos propres modèles : dans ce cas, placez-le là où la RTX PRO 6000 est le plus souvent disponible, jamais dans un centre de données qui n'a que des GPU de 32 Go.
Étape 2 — Le pod
💡 Laissez Claude le gérer. Si vous connectez votre compte RunPod à Claude Code, Claude crée le pod, l'arrête dès que les clips sont téléchargés et le supprime (seulement avec votre confirmation) tout seul : plus de pod oublié allumé. La connexion officielle de RunPod, depuis le terminal, avec votre clé API RunPod (Settings → API Keys) :
claude mcp add --transport http runpod -s user https://mcp.getrunpod.io/ --header "Authorization: Bearer <votre clé API>", puis/mcpdans Claude Code pour recharger. Instructions complètes et alternatives : github.com/runpod/runpod-mcp. Sans la connexion, vous créez le pod vous-même comme ci-dessous.
Template conseillé : « One Click - ComfyUI Wan2.1 - Wan 2.2 » (auteur Hearmeman, id
758dsjwiqz). À la création :
- GPU : RTX PRO 6000 Blackwell (96 Go) en Secure Cloud. Avec moins de RAM, les modèles complets (28 Go chacun) font sortir le pod de la mémoire au chargement du second.
- Le GPU doit être un Blackwell, pas une carte plus ancienne. Si la PRO 6000 n'est pas
disponible, repliez-vous sur un autre Blackwell du même centre de données (la RTX PRO 4500 de
32 Go coûte 0,72 $ l'heure, mais ne tient que les scènes muettes : les clips parlés
manquent de mémoire même à 7 secondes). Sur les architectures précédentes — A100, 4090,
5090 — les scènes muettes avec Wan sortent très bien, mais InfiniteTalk produit une image
puis du noir : le modèle parlé part en NaN sans aucune erreur, ni dans le log de ComfyUI ni
dans
orchestrate.sh, qui écritDONEet télécharge un clip noir. On ne s'en aperçoit qu'en ouvrant le fichier. - Disque : aucun (recommandé). Si vous avez un network volume, montez-le sur
/workspace. - Variables du template : sans disque, à chaque pod,
download_wan22=true(scènes muettes) etdownload_wan21=true(clips parlés) : 1 à 3 minutes. Avec un disque,trueseulement la première fois, puisfalse: les modèles sont déjà là et les retélécharger le remplit. - Port 8188 : c'est ComfyUI dans le navigateur, à l'adresse
https://<pod_id>-8188.proxy.runpod.net.
Sur la fiche du pod, dans Connect, récupérez les deux choses dont les scripts ont besoin : le
pod id (il est dans l'URL) et l'utilisateur SSH du proxy
(<pod_id>-<code>@ssh.runpod.io).
Étape 3 — InfiniteTalk (seulement pour les clips parlés)
Un seul visage par clip. InfiniteTalk fait bouger la bouche de tous les visages présents dans l'image, avec le même audio — y compris ceux de l'arrière-plan et ceux reflétés dans un miroir. Deux personnes à l'image deviennent deux personnes qui disent la même phrase ensemble. Les scènes de dialogue se coupent en deux clips, un par réplique, et celui qui ne parle pas reste de dos, flou ou hors cadre.
Le template (v29) ne télécharge pas ces fichiers : vérifiez avec
ls /workspace/ComfyUI/models/diffusion_models | grep -i infinitetalk, et s'ils manquent,
ajoutez-les dans /workspace/ComfyUI/models/ (depuis Hugging Face ; sans disque, à chaque
nouveau pod) :
| Dossier | Fichier | Dépôt |
|---|---|---|
diffusion_models | Wan2_1-InfiniTetalk-Single_fp16.safetensors | Kijai/WanVideo_comfy (dossier InfiniteTalk) |
wav2vec2 | wav2vec2-chinese-base_fp16.safetensors | Kijai/wav2vec2_safetensors |
text_encoders | umt5-xxl-enc-bf16.safetensors | Kijai/WanVideo_comfy |
vae | Wan2_1_VAE_bf16.safetensors | Kijai/WanVideo_comfy |
loras | lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors | Kijai/WanVideo_comfy (dossier Lightx2v) |
Le modèle de base wan2.1_i2v_480p_14B_bf16.safetensors est déjà téléchargé par le template.
💡 Espace. Un disque de « 200 Go » en contient environ 186 réels. Avec tout installé, il reste environ 20 Go pour les vidéos : si les téléchargements s'arrêtent sans erreur, c'est qu'il est plein. Le fichier
wan2.1_t2v_14B_bf16.safetensors(27 Go, Wan à partir de texte) ne sert à rien : on peut le supprimer.
Les deux autres choses qu'InfiniteTalk réclame (un lien de dossier et un patch pour la
bibliothèque transformers 5), orchestrate.sh les fait tout seul à chaque nouveau pod,
parce qu'elles se trouvent sur le disque du conteneur et disparaissent quand le pod est supprimé.
Étape 4 — Les scripts sur votre PC
Téléchargez-les dans un dossier, tous ensemble (ils se cherchent entre eux) :
- lib_video.sh ↗ — les contrôles partagés
- orchestrate.sh ↗ — génère les clips sur le pod
- gen_video.py ↗ — un clip (utilisé par orchestrate)
- fix_wav2vec_tf5.py ↗ — le patch pour InfiniteTalk (appliqué par orchestrate)
- monta_video.sh ↗ — monte la vidéo parlée
- monta_short.sh ↗ — monte les shorts sans voix
- exemples : clip.tsv.esempio ↗, montaggio.tsv.esempio ↗, chiusura.txt.esempio ↗
Depuis le terminal :
mkdir -p ~/video-tools && cd ~/video-tools
for f in lib_video.sh orchestrate.sh gen_video.py fix_wav2vec_tf5.py monta_video.sh monta_short.sh clip.tsv.esempio montaggio.tsv.esempio chiusura.txt.esempio; do
curl -fsSLO "https://app.roylead.com/supporto/video-tools/$f"
done
chmod +x *.sh
Il vous faut aussi ffmpeg (avec libx264 et libass), ffprobe, python3, curl, ssh.
On ne modifie pas les scripts : ils lisent tout dans des fichiers de données placés dans le dossier de la vidéo.
Étape 5 — Le dossier d'une vidéo
ma-video/
clip.tsv les travaux : nom, type (it = parlé, wan = scène muette), image, réplique ou images de départ, prompt
immagini/ les images de départ (une par plan, générées avec ChatGPT à partir des photos du produit)
audio/battute/ les répliques en mp3, une par clip parlé
montaggio.tsv l'ordre des clips dans la vidéo, avec le mp3 à mettre sous les scènes muettes
montaggio/sottotitoli.ass les sous-titres (sur Meta, on regarde sans le son)
chiusura.txt 3 lignes : offre, ligne 2, ligne 3 (facultatif)
prodotto.png photo du produit pour la clôture (facultatif, va avec chiusura.txt)
Les voix se font avec ElevenLabs, un texte entier par personnage avec [long pause] entre les
répliques, puis on coupe sur les pauses en un mp3 par réplique (ffmpeg -af silencedetect).
Si vous utilisez le playbook du lancement avec Claude Code, c'est lui qui prépare le scénario,
clip.tsv, montaggio.tsv, les sous-titres et les coupes des voix.
Étape 6 — Générer et monter
# allumez le pod, prenez pod_id et l'utilisateur ssh dans "Connect", puis :
nohup ./orchestrate.sh <pod_id> <utilisateur_ssh> ~/ma-video > ~/ma-video/orchestrate.log 2>&1 &
tail -f ~/ma-video/orchestrate.log # READY, MODELS, UPLOADED, puis un DONE par clip, ALL_DONE
Les clips arrivent dans ma-video/clip/. Les mains qui tiennent des objets ratent souvent :
comptez 2-3 essais par scène (changez la graine en relançant, ou le prompt). Temps mesurés sur la
RTX PRO 6000 : premier clip 5-7 minutes (il charge les modèles), puis 1-4 minutes chacun.
./monta_video.sh ~/ma-video # → ma-video/video-finale.mp4 (1080x1920, 30 fps, -16 LUFS)
./monta_short.sh ~/ma-video # → ma-video/short-<nom>.mp4, un par clip, avec le graphisme par-dessus
monta_video.sh s'arrête tout seul si la voix a des trous de plus de 1,5 seconde : mieux vaut une
erreur maintenant qu'une vidéo muette en ligne. Le fichier final est écrit sur le disque système
puis copié : sur un disque Windows monté dans WSL, la fusion peut s'arrêter avec « No space left
on device ».
Ensuite, supprimez le pod.
Pièges déjà rencontrés
- ComfyUI répond 403 (erreur 1010) aux appels sans User-Agent de navigateur : les scripts en
envoient un ; si vous utilisez curl à la main, ajoutez
-A "Mozilla/5.0". - SSH direct refusé : on passe par le proxy
ssh.runpod.ioavec-ttet les commandes sur stdin (c'est ce que faitlib_video.sh). - ComfyUI ne démarre pas sur certaines machines Community (502 permanent, dans le log « could
not bind on any address ») : la machine n'a pas d'IPv6.
orchestrate.shle relance tout seul sur0.0.0.0. - Mémoire insuffisante avec la RTX 5090 : 62 Go de RAM ne suffisent pas pour deux modèles
complets de 28 Go. Soit un GPU avec plus de RAM, soit les versions
fp8_scaleddes modèles. - GPU non disponible au moment de la création : la solution de repli qui a marché, une RTX PRO
6000 Max-Q en Community sans disque réseau, avec
download_wan22=true(retéléchargement en 8 minutes). Attention à l'endroit où se trouve le disque réseau : le pod naît forcément dans son centre de données, et la PRO 6000 peut y être absente même si le catalogue l'annonce ailleurs. - Clips parlés noirs (une image puis le noir, l'audio est là) : le GPU n'est pas un
Blackwell. C'est arrivé sur un A100 80 Go, sans la moindre erreur dans les logs —
orchestrate.shécritDONEet télécharge un clip noir. Avant le montage, vérifiez que les clips parlés ne sont pas noirs :ffmpeg -i clip/shot-01.mp4 -vf "signalstats,metadata=print:key=lavfi.signalstats.YAVG" -f null -— si après la première image YAVG reste autour de 16, ils sont noirs. On les régénère sur un Blackwell en réécrivantclip.tsvavec les seules lignesit: les scènes déjà téléchargées ne bougent pas. - La clé SSH doit être enregistrée sur le compte (Settings → SSH Public Keys) avant de
créer le pod : les clés ajoutées ensuite n'entrent pas dans les pods déjà allumés, et le proxy
répond
Permission denied (publickey). Sans SSH,orchestrate.shn'échoue pas tout de suite : il va jusqu'à unPATCH output:vide et s'arrête là. - ComfyUI meurt et le template ne le relance pas :
orchestrate.shle relance ; à la main :python3 /ComfyUI/main.py --listen 0.0.0.0 --use-sage-attention --extra-model-paths-config /ComfyUI/extra_model_paths.yaml.
Règles Meta pour les vidéos faites avec l'IA
- Dans Ads Manager, il faut déclarer que le contenu est généré avec de l'IA.
- Le personnage se présente comme porte-parole, jamais comme « vrai client » : Meta considère cela comme trompeur.
- Toujours des sous-titres : la plupart des gens regardent sans le son.
Prêt à passer à la pratique ?
Crée ton compte RoyLead et démarre en quelques minutes.