Video ads con RunPod (per esperti)
Generare clip parlate e scene con Wan 2.2 e InfiniteTalk sul tuo pod RunPod, con gli script RoyLead che fanno il grosso del lavoro. Costi, setup, trappole.
Aggiornata il 16 settembre 2026
⚠️ Per esperti. Serve saper usare un terminale (Linux, macOS o WSL su Windows),
ssheffmpeg, e avere un account RunPod con carta collegata. Se non ti riconosci in questa descrizione, usa fal.ai: stessi modelli, si paga a clip, niente da installare. È la via che il playbook del lancio propone di default.
Con RunPod affitti una GPU a ore e ci fai girare i modelli open source: Wan 2.2 per le scene mute (image-to-video) e InfiniteTalk per le battute parlate con labiale sincronizzato. Gli script RoyLead fanno la parte noiosa: aspettano che ComfyUI sia pronto, sistemano InfiniteTalk, caricano foto e voci, generano le clip in fila, le scaricano e montano il video finale.
Quanto costa
| Voce | Costo |
|---|---|
| GPU RTX PRO 6000 (96 GB), Secure Cloud | 2,09 $ l'ora, solo da accesa |
| GPU RTX 5090 Community | 0,69 $ l'ora, ma 62 GB di RAM: con i modelli pieni può andare fuori memoria |
| Disco di rete da 200 GB con i modelli | 14 $ al mese, sempre |
| Un giro di 6 clip (pod appena acceso) | circa 25 minuti, meno di 1 $ |
| Corto da 60 s, 12 shot per 3 tentativi | circa 2 ore di GPU |
Il pod si cancella a fine sessione: un pod fermo ma non cancellato continua a costare. Il disco resta, con i modelli dentro.
Account, chiave SSH, disco
- Crea l'account su runpod.io e carica credito.
- In Settings → SSH Public Keys registra la tua chiave pubblica (
~/.ssh/id_ed25519.pub; se non ce l'hai:ssh-keygen -t ed25519). Gli script usano~/.ssh/id_ed25519; per una chiave diversa impostaRUNPOD_SSH_KEY=/percorso/chiaveprima di lanciarli. - Crea un Network Volume da 200 GB in un data center EU (es. EU-RO-1). Il disco tiene i modelli (circa 176 GB): li scarichi una volta sola. Il data center del disco decide dove creerai i pod.
Il pod
Template consigliato: "One Click - ComfyUI Wan2.1 - Wan 2.2" (autore Hearmeman, id
758dsjwiqz). Alla creazione:
- GPU: RTX PRO 6000 Blackwell (96 GB) in Secure Cloud. Con meno RAM i modelli pieni (28 GB l'uno) mandano il pod fuori memoria al caricamento del secondo.
- Disco: il tuo network volume, montato su
/workspace. - Variabili del template: la prima volta
download_wan22=trueedownload_wan21=true(scarica i modelli sul disco, 8-10 minuti). Dai pod successivi mettile afalse: i modelli sono già sul disco e riscaricarli lo riempie. - Porta 8188: è ComfyUI nel browser, all'indirizzo
https://<pod_id>-8188.proxy.runpod.net.
Dalla scheda del pod, in Connect, prendi due cose che servono agli script: il pod id
(è nell'URL) e l'utente SSH del proxy (<pod_id>-<codice>@ssh.runpod.io).
InfiniteTalk (solo per le clip parlate)
Il template non include InfiniteTalk. Una volta sola, sul disco, in
/workspace/ComfyUI/models/, aggiungi questi file (da Hugging Face):
| Cartella | File | Repository |
|---|---|---|
diffusion_models | Wan2_1-InfiniTetalk-Single_fp16.safetensors | Kijai/WanVideo_comfy (cartella 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 (cartella Lightx2v) |
Il modello base wan2.1_i2v_480p_14B_bf16.safetensors lo scarica già il template.
💡 Spazio. Un disco da "200 GB" ne contiene circa 186 veri. Con tutto installato restano circa 20 GB per i video: se i download si fermano senza errori, è pieno. Il file
wan2.1_t2v_14B_bf16.safetensors(27 GB, Wan da testo) non serve: si può cancellare.
Le altre due cose che InfiniteTalk richiede (un collegamento di cartella e una patch per la
libreria transformers 5) le fa orchestrate.sh da solo a ogni pod nuovo, perché stanno sul
disco del container e si perdono quando il pod viene cancellato.
Gli script sul tuo PC
Scaricali in una cartella, tutti insieme (si cercano a vicenda):
- lib_video.sh ↗ — i controlli condivisi
- orchestrate.sh ↗ — genera le clip sul pod
- gen_video.py ↗ — una clip (lo usa orchestrate)
- fix_wav2vec_tf5.py ↗ — la patch per InfiniteTalk (la applica orchestrate)
- monta_video.sh ↗ — monta il video parlato
- monta_short.sh ↗ — monta gli short senza voce
- esempi: clip.tsv.esempio ↗, montaggio.tsv.esempio ↗, chiusura.txt.esempio ↗
Da terminale:
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
Servono anche ffmpeg (con libx264 e libass), ffprobe, python3, curl, ssh.
Gli script non si modificano: leggono tutto da file di dati nella cartella del video.
La cartella di un video
mio-video/
clip.tsv i lavori: nome, tipo (it = parlata, wan = scena muta), immagine, battuta o fotogrammi, prompt
immagini/ i fotogrammi di partenza (uno per shot, generati con ChatGPT dalle foto del prodotto)
audio/battute/ le battute mp3, una per clip parlata
montaggio.tsv l'ordine delle clip nel video, con l'mp3 da mettere sotto le scene mute
montaggio/sottotitoli.ass i sottotitoli (su Meta si guarda senza audio)
chiusura.txt 3 righe: offerta, riga 2, riga 3 (opzionale)
prodotto.png foto del prodotto per la chiusura (opzionale, va con chiusura.txt)
Le voci si fanno con ElevenLabs, un testo intero per personaggio con [long pause] tra le
battute, poi si tagliano sulle pause in un mp3 per battuta (ffmpeg -af silencedetect).
Se usi il playbook del lancio con Claude Code, sceneggiatura, clip.tsv, montaggio.tsv,
sottotitoli e tagli delle voci li prepara lui.
Generare e montare
# accendi il pod, prendi pod_id e utente ssh da "Connect", poi:
nohup ./orchestrate.sh <pod_id> <utente_ssh> ~/mio-video > ~/mio-video/orchestrate.log 2>&1 &
tail -f ~/mio-video/orchestrate.log # READY, MODELS, UPLOADED, poi un DONE per clip, ALL_DONE
Le clip arrivano in mio-video/clip/. Le mani con gli oggetti sbagliano spesso: metti in conto
2-3 tentativi per scena (cambia il seme rilanciando, o il prompt). Tempi misurati sulla RTX PRO
6000: prima clip 5-7 minuti (carica i modelli), poi 1-4 minuti l'una.
./monta_video.sh ~/mio-video # → mio-video/video-finale.mp4 (1080x1920, 30 fps, -16 LUFS)
./monta_short.sh ~/mio-video # → mio-video/short-<nome>.mp4, uno per clip, con la grafica sopra
monta_video.sh si ferma da solo se la voce ha buchi oltre 1,5 secondi: meglio un errore adesso
che un video muto online. Il file finale si scrive sul disco di sistema e poi si copia: su un
disco Windows montato in WSL l'unione può fermarsi con "No space left on device".
Poi cancella il pod.
Trappole già incontrate
- ComfyUI risponde 403 (error 1010) alle chiamate senza User-Agent da browser: gli script lo
mandano; se usi curl a mano, aggiungi
-A "Mozilla/5.0". - SSH diretto rifiutato: si passa dal proxy
ssh.runpod.iocon-tte i comandi da stdin (lo falib_video.sh). - ComfyUI non parte su alcune macchine Community (502 fisso, nel log "could not bind on any
address"): la macchina non ha IPv6.
orchestrate.shlo rilancia da solo su0.0.0.0. - Fuori memoria con la RTX 5090: 62 GB di RAM non bastano per due modelli pieni da 28 GB. O
una GPU con più RAM, o le versioni
fp8_scaleddei modelli. - GPU non disponibile al momento della creazione: ripiego che ha funzionato, RTX PRO 6000
Max-Q in Community senza disco di rete, con
download_wan22=true(riscarica in 8 minuti). - ComfyUI muore e il template non lo riavvia:
orchestrate.shlo rilancia; a mano:python3 /ComfyUI/main.py --listen 0.0.0.0 --use-sage-attention --extra-model-paths-config /ComfyUI/extra_model_paths.yaml.
Regole Meta per i video con AI
- In Ads Manager va dichiarato che il contenuto è generato con AI.
- Il personaggio si presenta come portavoce, mai come "cliente vero": Meta lo considera ingannevole.
- Sottotitoli sempre: la maggior parte guarda senza audio.
Pronto a metterlo in pratica?
Crea il tuo account RoyLead e parti in pochi minuti.