Video ads cu RunPod
Generează clipuri vorbite și scene cu Wan 2.2 și InfiniteTalk pe pod-ul tău RunPod, cu scripturile RoyLead care fac grosul muncii. Costuri, configurare, capcane.
Actualizat pe 21 septembrie 2026
💡 Recomandată dacă folosești Claude Code. Terminalul,
sshșiffmpegle folosește Claude în locul tău: îți trebuie doar un cont RunPod cu card atașat și configurarea de mai jos, o singură dată. Plătești GPU-ul pe oră, nu pe clip, și cu mai multe videouri la rând merită. Dacă lucrezi într-un chat (claude.ai, ChatGPT, Claude Desktop), care nu poate folosi terminalul, alege fal.ai: aceleași modele, plătești pe clip, nu instalezi nimic.
Cu RunPod închiriezi un GPU la oră și rulezi pe el modelele open source: Wan 2.2 pentru scenele mute (image-to-video) și InfiniteTalk pentru replicile vorbite, cu buzele sincronizate. Scripturile RoyLead fac partea plictisitoare: așteaptă ca ComfyUI să fie gata, pregătesc InfiniteTalk, urcă pozele și vocile, generează clipurile pe rând, le descarcă și montează videoclipul final.
Cât costă
| Element | Cost |
|---|---|
| GPU RTX PRO 6000 (96 GB), Secure Cloud | 2,09 $ pe oră, doar cât e pornit |
| GPU RTX 5090 Community | 0,69 $ pe oră, dar 62 GB de RAM: cu modelele complete poate rămâne fără memorie |
| Disc de rețea (opțional, nerecomandat) | 14 $ pe lună pentru 200 GB, tot timpul |
| O scenă mută sau un clip vorbit pe PRO 6000 | circa 2 minute, circa 0,07 $ |
| Un video de 8 scene (pod abia pornit) | circa 25 de minute, sub 1 $ |
| Scurtmetraj de 60 s, 12 cadre ori 3 încercări | circa 2 ore de GPU |
Pod-ul se șterge la finalul sesiunii: un pod oprit, dar neșters, continuă să coste. Fără disc nu mai rămâne nimic de plătit.
Pasul 1 — Cont, cheie SSH, disc
- Creează contul pe runpod.io și încarcă credit.
- În Settings → SSH Public Keys înregistrează cheia ta publică (
~/.ssh/id_ed25519.pub; dacă nu ai una:ssh-keygen -t ed25519). Scripturile folosesc~/.ssh/id_ed25519; pentru altă cheie seteazăRUNPOD_SSH_KEY=/cale/catre/cheieînainte să le pornești. - Discul de rețea este opțional și de multe ori e mai bine fără. Un Network Volume de
200 GB ține modelele (circa 176 GB) și te scutește să le descarci din nou, dar costă 14 $ pe
lună și mai ales te leagă de centrul lui de date: pod-ul se creează obligatoriu acolo,
iar dacă în acel centru lipsește GPU-ul potrivit, rămâi blocat.
Fără disc, template-ul descarcă singur modelele la pornire: cu
download_wan22=true(scene mute) șidownload_wan21=true(clipuri vorbite) durează 1-3 minute, câțiva cenți. Fișierele InfiniteTalk, în schimb, template-ul nu le descarcă: dacă ai nevoie de clipuri vorbite, adaugă-le ca la pasul 3 (câteva minute). Așa iei GPU-ul din orice centru de date unde există. Verificat pe 2026-09-21 pe un pod fără disc: scene mute, clipuri vorbite și imagini. Discul merită doar dacă generezi zilnic sau ai modele proprii: în acel caz pune-l acolo unde RTX PRO 6000 e disponibil cel mai des, niciodată într-un centru de date care are doar GPU-uri de 32 GB.
Pasul 2 — Pod-ul
💡 Las-o pe Claude să-l gestioneze. Dacă îți conectezi contul RunPod la Claude Code, Claude creează pod-ul, îl oprește imediat ce clipurile sunt descărcate și îl șterge (doar cu confirmarea ta) singur: fără pod-uri uitate pornite. Conectarea oficială RunPod, din terminal, cu cheia ta API RunPod (Settings → API Keys):
claude mcp add --transport http runpod -s user https://mcp.getrunpod.io/ --header "Authorization: Bearer <cheia ta API>", apoi/mcpîn Claude Code ca să reîncarci. Instrucțiuni complete și alternative: github.com/runpod/runpod-mcp. Fără conectare, pod-ul îl creezi tu, ca mai jos.
Template recomandat: „One Click - ComfyUI Wan2.1 - Wan 2.2” (autor Hearmeman, id
758dsjwiqz). La creare:
- GPU: RTX PRO 6000 Blackwell (96 GB) în Secure Cloud. Cu mai puțin RAM, modelele complete (28 GB fiecare) scot pod-ul din memorie la încărcarea celui de-al doilea.
- GPU-ul trebuie să fie Blackwell, nu o placă mai veche. Dacă PRO 6000 nu este disponibil,
treci pe alt Blackwell din același centru de date (RTX PRO 4500 de 32 GB costă 0,72 $ pe oră,
dar face față doar scenelor mute: clipurile vorbite rămân fără memorie chiar și la 7 secunde). Pe arhitecturi mai vechi — A100, 4090, 5090 — scenele mute cu Wan ies foarte
bine, dar InfiniteTalk produce un cadru și apoi negru: modelul vorbit intră în NaN și nu
dă nicio eroare, nici în logul ComfyUI, nici în
orchestrate.sh, care scrieDONEși descarcă un clip negru. Îți dai seama doar deschizând fișierul. - Disc: niciunul (recomandat). Dacă ai un network volume, montează-l pe
/workspace. - Variabilele template-ului: fără disc, la fiecare pod,
download_wan22=true(scene mute) șidownload_wan21=true(clipuri vorbite): 1-3 minute. Cu disc,truedoar prima dată, apoifalse: modelele sunt deja acolo, iar o nouă descărcare îl umple. - Portul 8188: este ComfyUI în browser, la adresa
https://<pod_id>-8188.proxy.runpod.net.
Din pagina pod-ului, la Connect, ia cele două lucruri de care au nevoie scripturile: pod
id-ul (e în URL) și utilizatorul SSH al proxy-ului (<pod_id>-<cod>@ssh.runpod.io).
Pasul 3 — InfiniteTalk (doar pentru clipurile vorbite)
Un singur chip pe clip. InfiniteTalk mișcă gura tuturor fețelor pe care le găsește în cadru, cu același audio — inclusiv cele din fundal și cele reflectate într-o oglindă. Două persoane în cadru devin două care spun aceeași frază în același timp. Scenele de dialog se împart în două clipuri, unul pe replică, iar cine nu vorbește rămâne cu spatele, neclar sau în afara cadrului.
Template-ul (v29) nu descarcă aceste fișiere: verifică cu
ls /workspace/ComfyUI/models/diffusion_models | grep -i infinitetalk, iar dacă lipsesc
adaugă-le în /workspace/ComfyUI/models/ (de pe Hugging Face; fără disc, la fiecare pod nou):
| Folder | Fișier | Repository |
|---|---|---|
diffusion_models | Wan2_1-InfiniTetalk-Single_fp16.safetensors | Kijai/WanVideo_comfy (folderul 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 (folderul Lightx2v) |
Modelul de bază wan2.1_i2v_480p_14B_bf16.safetensors îl descarcă deja template-ul.
💡 Spațiu. Un disc de „200 GB” are în realitate circa 186. Cu tot instalat rămân vreo 20 GB pentru videoclipuri: dacă descărcările se opresc fără eroare, e plin. Fișierul
wan2.1_t2v_14B_bf16.safetensors(27 GB, Wan din text) nu e necesar: poate fi șters.
Celelalte două lucruri cerute de InfiniteTalk (o legătură de folder și un patch pentru biblioteca
transformers 5) le face orchestrate.sh singur la fiecare pod nou, pentru că stau pe discul
containerului și se pierd când pod-ul e șters.
Pasul 4 — Scripturile pe PC-ul tău
Descarcă-le într-un folder, pe toate (se caută unele pe altele):
- lib_video.sh ↗ — verificările comune
- orchestrate.sh ↗ — generează clipurile pe pod
- gen_video.py ↗ — un clip (îl folosește orchestrate)
- fix_wav2vec_tf5.py ↗ — patch-ul pentru InfiniteTalk (îl aplică orchestrate)
- monta_video.sh ↗ — montează videoclipul vorbit
- monta_short.sh ↗ — montează short-urile fără voce
- exemple: clip.tsv.esempio ↗, montaggio.tsv.esempio ↗, chiusura.txt.esempio ↗
Din 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
Îți mai trebuie ffmpeg (cu libx264 și libass), ffprobe, python3, curl, ssh.
Scripturile nu se modifică: citesc totul din fișiere de date aflate în folderul videoclipului.
Pasul 5 — Folderul unui videoclip
video-ul-meu/
clip.tsv lucrările: nume, tip (it = vorbit, wan = scenă mută), imagine, replică sau cadre, prompt
immagini/ cadrele de pornire (unul pe scenă, generate cu ChatGPT din pozele produsului)
audio/battute/ replicile în mp3, una pentru fiecare clip vorbit
montaggio.tsv ordinea clipurilor în videoclip, cu mp3-ul care merge sub scenele mute
montaggio/sottotitoli.ass subtitrările (pe Meta se uită fără sunet)
chiusura.txt 3 rânduri: ofertă, rândul 2, rândul 3 (opțional)
prodotto.png poza produsului pentru final (opțional, merge cu chiusura.txt)
Vocile se fac cu ElevenLabs, un text întreg pentru fiecare personaj, cu [long pause] între
replici, apoi se taie pe pauze într-un mp3 per replică (ffmpeg -af silencedetect).
Dacă folosești playbook-ul lansării cu Claude Code, scenariul, clip.tsv, montaggio.tsv,
subtitrările și tăieturile vocilor ți le pregătește el.
Pasul 6 — Generează și montează
# pornește pod-ul, ia pod_id și utilizatorul ssh din "Connect", apoi:
nohup ./orchestrate.sh <pod_id> <utilizator_ssh> ~/video-ul-meu > ~/video-ul-meu/orchestrate.log 2>&1 &
tail -f ~/video-ul-meu/orchestrate.log # READY, MODELS, UPLOADED, apoi câte un DONE pe clip, ALL_DONE
Clipurile ajung în video-ul-meu/clip/. Mâinile cu obiecte ies greșit des: pune la socoteală 2-3
încercări pe scenă (schimbi sămânța relansând, sau promptul). Timpi măsurați pe RTX PRO 6000:
primul clip 5-7 minute (încarcă modelele), apoi 1-4 minute fiecare.
./monta_video.sh ~/video-ul-meu # → video-ul-meu/video-finale.mp4 (1080x1920, 30 fps, -16 LUFS)
./monta_short.sh ~/video-ul-meu # → video-ul-meu/short-<nume>.mp4, unul pe clip, cu grafica deasupra
monta_video.sh se oprește singur dacă vocea are goluri mai mari de 1,5 secunde: mai bine o
eroare acum decât un videoclip mut online. Fișierul final se scrie pe discul de sistem și apoi se
copiază: pe un disc Windows montat în WSL, unirea se poate opri cu „No space left on device”.
Apoi șterge pod-ul.
Capcane deja întâlnite
- ComfyUI răspunde 403 (eroarea 1010) la apelurile fără User-Agent de browser: scripturile îl
trimit; dacă folosești curl de mână, adaugă
-A "Mozilla/5.0". - SSH direct refuzat: se trece prin proxy-ul
ssh.runpod.iocu-ttși comenzile pe stdin (o facelib_video.sh). - ComfyUI nu pornește pe unele mașini Community (502 constant, în log „could not bind on any
address”): mașina nu are IPv6.
orchestrate.shîl repornește singur pe0.0.0.0. - Memorie insuficientă cu RTX 5090: 62 GB de RAM nu ajung pentru două modele complete de
28 GB. Ori un GPU cu mai mult RAM, ori versiunile
fp8_scaledale modelelor. - GPU indisponibil în momentul creării: varianta de rezervă care a mers, RTX PRO 6000 Max-Q în
Community fără disc de rețea, cu
download_wan22=true(redescarcă în 8 minute). Atenție la unde se află discul de rețea: pod-ul se creează obligatoriu în centrul lui de date, iar acolo PRO 6000 poate lipsi chiar dacă în catalog apare disponibil în altă parte. - Clipuri vorbite negre (un cadru și apoi întuneric, sunetul există): GPU-ul nu e Blackwell.
S-a întâmplat pe un A100 80 GB, fără nicio eroare în loguri —
orchestrate.shscrieDONEși descarcă un clip negru. Înainte de montaj, verifică dacă cele vorbite nu sunt întunecate:ffmpeg -i clip/shot-01.mp4 -vf "signalstats,metadata=print:key=lavfi.signalstats.YAVG" -f null -— dacă după primul cadru YAVG rămâne în jur de 16, sunt negre. Se regenerează pe un Blackwell rescriindclip.tsvdoar cu rândurileit: scenele deja descărcate rămân neatinse. - Cheia SSH trebuie înregistrată în cont (Settings → SSH Public Keys) înainte de a crea
pod-ul: cheile adăugate ulterior nu ajung în pod-urile deja pornite, iar proxy-ul răspunde
Permission denied (publickey). Fără SSH,orchestrate.shnu eșuează imediat: ajunge la unPATCH output:gol și se oprește acolo. - ComfyUI moare și template-ul nu îl repornește:
orchestrate.shîl repornește; de mână:python3 /ComfyUI/main.py --listen 0.0.0.0 --use-sage-attention --extra-model-paths-config /ComfyUI/extra_model_paths.yaml.
Regulile Meta pentru videoclipurile cu AI
- În Ads Manager trebuie declarat că materialul este generat cu AI.
- Personajul se prezintă ca purtător de cuvânt, niciodată ca „client real”: Meta consideră asta înșelător.
- Subtitrări întotdeauna: majoritatea se uită fără sunet.
Gata să pui asta în practică?
Creează-ți contul RoyLead și începe în câteva minute.