← Torna alle guide

Video ads con RunPod

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 21 settembre 2026


💡 Consigliata se usi Claude Code. Terminale, ssh e ffmpeg li usa Claude al posto tuo: a te servono solo un account RunPod con la carta collegata e il setup qui sotto, una volta. Paghi la GPU a ore invece che a clip, e con più video di fila conviene. Se lavori in chat (claude.ai, ChatGPT, Claude Desktop), che il terminale non lo possono usare, scegli fal.ai: stessi modelli, si paga a clip, niente da installare.

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

VoceCosto
GPU RTX PRO 6000 (96 GB), Secure Cloud2,09 $ l'ora, solo da accesa
GPU RTX 5090 Community0,69 $ l'ora, ma 62 GB di RAM: con i modelli pieni può andare fuori memoria
Disco di rete (facoltativo, sconsigliato)14 $ al mese per 200 GB, sempre
Una scena muta o una clip parlata sulla PRO 6000circa 2 minuti, circa 0,07 $
Un video da 8 scene (pod appena acceso)circa 25 minuti, meno di 1 $
Corto da 60 s, 12 shot per 3 tentativicirca 2 ore di GPU

Il pod si cancella a fine sessione: un pod fermo ma non cancellato continua a costare. Senza disco non resta niente da pagare.

1

Account, chiave SSH, disco

  1. Crea l'account su runpod.io e carica credito.
  2. 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 imposta RUNPOD_SSH_KEY=/percorso/chiave prima di lanciarli.
  3. Il disco di rete è facoltativo, e spesso conviene non averlo. Un Network Volume da 200 GB tiene i modelli (circa 176 GB) e te li fa scaricare una volta sola, ma costa 14 $ al mese e soprattutto ti incatena al suo data center: il pod nasce per forza lì, e se in quel data center la GPU giusta non c'è, sei bloccato. Senza disco il template scarica da solo i modelli all'accensione: con download_wan22=true (scene mute) e download_wan21=true (clip parlate) ci mette 1-3 minuti, pochi centesimi. I file di InfiniteTalk invece il template non li scarica: se ti servono clip parlate, aggiungili come al passo 3 (pochi minuti). Così prendi la GPU in qualunque data center dove c'è. Verificato il 2026-09-21 su pod senza disco: scene mute, clip parlate e immagini. Il disco conviene solo se generi tutti i giorni o hai modelli tuoi: in quel caso mettilo dove la RTX PRO 6000 c'è più spesso, mai in un data center che ha solo GPU da 32 GB.
2

Il pod

💡 Fallo gestire a Claude. Se colleghi il tuo account RunPod a Claude Code, il pod lo crea, lo spegne appena le clip sono scaricate e lo cancella (solo con la tua conferma) Claude da solo: niente pod dimenticati accesi. Il collegamento ufficiale di RunPod, da terminale, con la tua API key di RunPod (Settings → API Keys): claude mcp add --transport http runpod -s user https://mcp.getrunpod.io/ --header "Authorization: Bearer <la tua API key>", poi /mcp in Claude Code per ricaricare. Istruzioni complete e alternative: github.com/runpod/runpod-mcp. Senza collegamento, il pod lo crei tu come qui sotto.

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.
  • La GPU dev'essere Blackwell, non una scheda più vecchia. Se la PRO 6000 non è disponibile, ripiega su un'altra Blackwell dello stesso data center (RTX PRO 4500 da 32 GB costa 0,72 $ l'ora, ma regge solo le scene mute: le clip parlate vanno fuori memoria anche da 7 secondi). Su architetture precedenti — A100, 4090, 5090 — le scene mute con Wan vengono benissimo, ma InfiniteTalk produce un fotogramma e poi nero: il modello parlato va in NaN e non dà nessun errore, né nel log di ComfyUI né in orchestrate.sh, che scrive DONE e scarica una clip nera. Te ne accorgi solo aprendo il file.
  • Disco: nessuno (consigliato). Se hai un network volume, montalo su /workspace.
  • Variabili del template: senza disco, a ogni pod, download_wan22=true (scene mute) e download_wan21=true (clip parlate): 1-3 minuti. Con un disco, true solo la prima volta, poi false: i modelli sono già lì 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).

3

InfiniteTalk (solo per le clip parlate)

Un volto solo per clip. InfiniteTalk muove la bocca a tutte le facce che trova nel fotogramma, con lo stesso audio — compresi i volti di sfondo e quelli riflessi in uno specchio. Due persone inquadrate diventano due che dicono la stessa frase insieme. Le scene di dialogo si spezzano in due clip, una per battuta, e chi non parla resta di spalle, sfocato o fuori dal bordo.

Il template (v29) non scarica questi file: controlla con ls /workspace/ComfyUI/models/diffusion_models | grep -i infinitetalk, e se mancano aggiungili in /workspace/ComfyUI/models/ (da Hugging Face; senza disco, a ogni pod nuovo):

CartellaFileRepository
diffusion_modelsWan2_1-InfiniTetalk-Single_fp16.safetensorsKijai/WanVideo_comfy (cartella InfiniteTalk)
wav2vec2wav2vec2-chinese-base_fp16.safetensorsKijai/wav2vec2_safetensors
text_encodersumt5-xxl-enc-bf16.safetensorsKijai/WanVideo_comfy
vaeWan2_1_VAE_bf16.safetensorsKijai/WanVideo_comfy
loraslightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensorsKijai/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.

4

Gli script sul tuo PC

Scaricali in una cartella, tutti insieme (si cercano a vicenda):

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.

5

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.

6

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.io con -tt e i comandi da stdin (lo fa lib_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.sh lo rilancia da solo su 0.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_scaled dei 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). Attenzione a dove sta il disco di rete: il pod nasce per forza nel suo data center, e lì la PRO 6000 può non esserci anche se il catalogo la dà disponibile altrove.
  • Clip parlate nere (un fotogramma e poi buio, l'audio c'è): la GPU non è Blackwell. È successo su A100 80 GB, senza un solo errore nei log — orchestrate.sh scrive DONE e scarica una clip nera. Prima di montare, controlla che le parlate non siano buie: ffmpeg -i clip/shot-01.mp4 -vf "signalstats,metadata=print:key=lavfi.signalstats.YAVG" -f null - — se dopo il primo fotogramma YAVG resta intorno a 16, sono nere. Si rigenerano su una Blackwell riscrivendo clip.tsv con le sole righe it: le scene già scaricate non si toccano.
  • La chiave SSH dev'essere registrata sull'account (Settings → SSH Public Keys) prima di creare il pod: le chiavi aggiunte dopo non entrano nei pod già accesi, e il proxy risponde Permission denied (publickey). Senza SSH orchestrate.sh non fallisce subito: arriva fino a PATCH output: vuoto e si ferma lì.
  • ComfyUI muore e il template non lo riavvia: orchestrate.sh lo 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.

Inizia gratis ↗