Vídeos para anuncios con RunPod
Generar clips hablados y escenas con Wan 2.2 e InfiniteTalk en tu pod de RunPod, con los scripts de RoyLead haciendo el grueso del trabajo. Costes, instalación, trampas.
Actualizada el 21 de septiembre de 2026
💡 Recomendada si usas Claude Code. El terminal,
sshyffmpeglos usa Claude por ti: solo necesitas una cuenta de RunPod con tarjeta asociada y la instalación de abajo, una vez. Pagas la GPU por horas en vez de por clip, y con varios vídeos seguidos sale a cuenta. Si trabajas en un chat (claude.ai, ChatGPT, Claude Desktop), que no puede usar el terminal, elige fal.ai: los mismos modelos, se paga por clip, nada que instalar.
Con RunPod alquilas una GPU por horas y ejecutas en ella los modelos de código abierto: Wan 2.2 para las escenas mudas (image-to-video) e InfiniteTalk para las frases habladas con los labios sincronizados. Los scripts de RoyLead hacen la parte aburrida: esperan a que ComfyUI esté listo, dejan InfiniteTalk a punto, suben fotos y voces, generan los clips en fila, los descargan y montan el vídeo final.
Cuánto cuesta
| Concepto | Coste |
|---|---|
| GPU RTX PRO 6000 (96 GB), Secure Cloud | 2,09 $ la hora, solo mientras está encendida |
| GPU RTX 5090 Community | 0,69 $ la hora, pero 62 GB de RAM: con los modelos completos puede quedarse sin memoria |
| Disco de red (opcional, no recomendado) | 14 $ al mes por 200 GB, siempre |
| Una escena muda o un clip hablado en la PRO 6000 | unos 2 minutos, unos 0,07 $ |
| Un vídeo de 8 escenas (pod recién encendido) | unos 25 minutos, menos de 1 $ |
| Corto de 60 s, 12 planos por 3 intentos | unas 2 horas de GPU |
El pod se borra al final de la sesión: un pod parado pero no borrado sigue costando. Sin disco no queda nada que pagar.
Paso 1 — Cuenta, clave SSH, disco
- Crea la cuenta en runpod.io y carga saldo.
- En Settings → SSH Public Keys registra tu clave pública (
~/.ssh/id_ed25519.pub; si no la tienes:ssh-keygen -t ed25519). Los scripts usan~/.ssh/id_ed25519; para otra clave, defineRUNPOD_SSH_KEY=/ruta/de/la/claveantes de lanzarlos. - El disco de red es opcional y a menudo conviene no tenerlo. Un Network Volume de
200 GB guarda los modelos (unos 176 GB) y te evita volver a descargarlos, pero cuesta 14 $
al mes y sobre todo te encadena a su centro de datos: el pod nace a la fuerza allí, y si
en ese centro de datos falta la GPU adecuada te quedas bloqueado.
Sin disco, la plantilla descarga sola los modelos al encender: con
download_wan22=true(escenas mudas) ydownload_wan21=true(clips hablados) tarda 1-3 minutos, unos céntimos. Los archivos de InfiniteTalk, en cambio, la plantilla no los descarga: si necesitas clips hablados, añádelos como en el paso 3 (pocos minutos). Así coges la GPU en cualquier centro de datos donde la haya. Verificado el 2026-09-21 en un pod sin disco: escenas mudas, clips hablados e imágenes. El disco solo compensa si generas todos los días o tienes modelos propios: en ese caso ponlo donde la RTX PRO 6000 esté disponible más a menudo, nunca en un centro de datos que solo tenga GPU de 32 GB.
Paso 2 — El pod
💡 Deja que lo gestione Claude. Si conectas tu cuenta de RunPod a Claude Code, Claude crea el pod, lo apaga en cuanto se descargan los clips y lo elimina (solo con tu confirmación) él solo: nada de pods olvidados encendidos. La conexión oficial de RunPod, desde el terminal, con tu API key de RunPod (Settings → API Keys):
claude mcp add --transport http runpod -s user https://mcp.getrunpod.io/ --header "Authorization: Bearer <tu API key>", y luego/mcpen Claude Code para recargar. Instrucciones completas y alternativas: github.com/runpod/runpod-mcp. Sin la conexión, el pod lo creas tú como se explica abajo.
Plantilla recomendada: «One Click - ComfyUI Wan2.1 - Wan 2.2» (autor Hearmeman, id
758dsjwiqz). Al crearlo:
- GPU: RTX PRO 6000 Blackwell (96 GB) en Secure Cloud. Con menos RAM, los modelos completos (28 GB cada uno) dejan el pod sin memoria al cargar el segundo.
- La GPU tiene que ser Blackwell, no una tarjeta más antigua. Si la PRO 6000 no está
disponible, recurre a otra Blackwell del mismo centro de datos (la RTX PRO 4500 de 32 GB
cuesta 0,72 $ la hora, pero sirve solo para las escenas mudas: los clips hablados se
quedan sin memoria incluso de 7 segundos). En arquitecturas anteriores — A100, 4090, 5090 — las escenas
mudas con Wan salen perfectas, pero InfiniteTalk produce un fotograma y luego negro: el
modelo hablado se va a NaN y no da ningún error, ni en el log de ComfyUI ni en
orchestrate.sh, que escribeDONEy descarga un clip negro. Solo te enteras abriendo el archivo. - Disco: ninguno (recomendado). Si tienes un network volume, móntalo en
/workspace. - Variables de la plantilla: sin disco, en cada pod,
download_wan22=true(escenas mudas) ydownload_wan21=true(clips hablados): 1-3 minutos. Con disco,truesolo la primera vez, luegofalse: los modelos ya están ahí y volver a descargarlos lo llena. - Puerto 8188: es ComfyUI en el navegador, en
https://<pod_id>-8188.proxy.runpod.net.
En la ficha del pod, en Connect, coge las dos cosas que necesitan los scripts: el pod id
(está en la URL) y el usuario SSH del proxy (<pod_id>-<código>@ssh.runpod.io).
Paso 3 — InfiniteTalk (solo para los clips hablados)
Una sola cara por clip. InfiniteTalk mueve la boca de todas las caras que encuentra en el fotograma, con el mismo audio — incluidas las del fondo y las reflejadas en un espejo. Dos personas en cuadro se convierten en dos que dicen la misma frase a la vez. Las escenas de diálogo se parten en dos clips, uno por frase, y quien no habla se queda de espaldas, desenfocado o fuera del encuadre.
La plantilla (v29) no descarga estos archivos: comprueba con
ls /workspace/ComfyUI/models/diffusion_models | grep -i infinitetalk, y si faltan añádelos
en /workspace/ComfyUI/models/ (desde Hugging Face; sin disco, en cada pod nuevo):
| Carpeta | Archivo | Repositorio |
|---|---|---|
diffusion_models | Wan2_1-InfiniTetalk-Single_fp16.safetensors | Kijai/WanVideo_comfy (carpeta 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 (carpeta Lightx2v) |
El modelo base wan2.1_i2v_480p_14B_bf16.safetensors ya lo descarga la plantilla.
💡 Espacio. Un disco de «200 GB» contiene unos 186 reales. Con todo instalado quedan unos 20 GB para los vídeos: si las descargas se paran sin error, está lleno. El archivo
wan2.1_t2v_14B_bf16.safetensors(27 GB, Wan desde texto) no hace falta: se puede borrar.
Las otras dos cosas que InfiniteTalk necesita (un enlace de carpeta y un parche para la biblioteca
transformers 5) las hace orchestrate.sh solo en cada pod nuevo, porque están en el disco
del contenedor y se pierden cuando el pod se borra.
Paso 4 — Los scripts en tu PC
Descárgalos en una carpeta, todos juntos (se buscan entre ellos):
- lib_video.sh ↗ — las comprobaciones comunes
- orchestrate.sh ↗ — genera los clips en el pod
- gen_video.py ↗ — un clip (lo usa orchestrate)
- fix_wav2vec_tf5.py ↗ — el parche para InfiniteTalk (lo aplica orchestrate)
- monta_video.sh ↗ — monta el vídeo hablado
- monta_short.sh ↗ — monta los shorts sin voz
- ejemplos: clip.tsv.esempio ↗, montaggio.tsv.esempio ↗, chiusura.txt.esempio ↗
Desde el 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
También necesitas ffmpeg (con libx264 y libass), ffprobe, python3, curl, ssh.
Los scripts no se modifican: lo leen todo de archivos de datos en la carpeta del vídeo.
Paso 5 — La carpeta de un vídeo
mi-video/
clip.tsv los trabajos: nombre, tipo (it = hablado, wan = escena muda), imagen, frase o fotogramas, prompt
immagini/ los fotogramas de partida (uno por plano, generados con ChatGPT a partir de las fotos del producto)
audio/battute/ las frases en mp3, una por clip hablado
montaggio.tsv el orden de los clips en el vídeo, con el mp3 que va bajo las escenas mudas
montaggio/sottotitoli.ass los subtítulos (en Meta se ve sin sonido)
chiusura.txt 3 líneas: oferta, línea 2, línea 3 (opcional)
prodotto.png foto del producto para el cierre (opcional, va con chiusura.txt)
Las voces se hacen con ElevenLabs, un texto entero por personaje con [long pause] entre las
frases, y luego se cortan por las pausas en un mp3 por frase (ffmpeg -af silencedetect).
Si usas el playbook del lanzamiento con Claude Code, el guion, clip.tsv, montaggio.tsv, los
subtítulos y los cortes de las voces te los prepara él.
Paso 6 — Generar y montar
# enciende el pod, coge pod_id y el usuario ssh en "Connect", y luego:
nohup ./orchestrate.sh <pod_id> <usuario_ssh> ~/mi-video > ~/mi-video/orchestrate.log 2>&1 &
tail -f ~/mi-video/orchestrate.log # READY, MODELS, UPLOADED, luego un DONE por clip, ALL_DONE
Los clips llegan a mi-video/clip/. Las manos con objetos fallan a menudo: cuenta con 2-3
intentos por escena (cambia la semilla relanzando, o el prompt). Tiempos medidos en la RTX PRO
6000: primer clip 5-7 minutos (carga los modelos), luego 1-4 minutos cada uno.
./monta_video.sh ~/mi-video # → mi-video/video-finale.mp4 (1080x1920, 30 fps, -16 LUFS)
./monta_short.sh ~/mi-video # → mi-video/short-<nombre>.mp4, uno por clip, con el grafismo encima
monta_video.sh se para solo si la voz tiene huecos de más de 1,5 segundos: mejor un error ahora
que un vídeo mudo publicado. El archivo final se escribe en el disco del sistema y luego se copia:
en un disco de Windows montado en WSL, la unión puede pararse con «No space left on device».
Después borra el pod.
Trampas ya encontradas
- ComfyUI responde 403 (error 1010) a las llamadas sin User-Agent de navegador: los scripts lo
mandan; si usas curl a mano, añade
-A "Mozilla/5.0". - SSH directo rechazado: se pasa por el proxy
ssh.runpod.iocon-tty los comandos por stdin (lo hacelib_video.sh). - ComfyUI no arranca en algunas máquinas Community (502 fijo, en el log «could not bind on any
address»): la máquina no tiene IPv6.
orchestrate.shlo relanza solo en0.0.0.0. - Sin memoria con la RTX 5090: 62 GB de RAM no bastan para dos modelos completos de 28 GB. O
una GPU con más RAM, o las versiones
fp8_scaledde los modelos. - GPU no disponible al crear el pod: el recambio que funcionó fue una RTX PRO 6000 Max-Q en
Community sin disco de red, con
download_wan22=true(vuelve a descargar en 8 minutos). Atención a dónde está el disco de red: el pod nace a la fuerza en su centro de datos, y allí la PRO 6000 puede no estar aunque el catálogo la dé como disponible en otro sitio. - Clips hablados negros (un fotograma y luego oscuro, el audio está): la GPU no es Blackwell.
Pasó con una A100 80 GB, sin un solo error en los logs —
orchestrate.shescribeDONEy descarga un clip negro. Antes de montar, comprueba que los hablados no estén oscuros:ffmpeg -i clip/shot-01.mp4 -vf "signalstats,metadata=print:key=lavfi.signalstats.YAVG" -f null -— si después del primer fotograma YAVG se queda alrededor de 16, son negros. Se regeneran en una Blackwell reescribiendoclip.tsvsolo con las filasit: las escenas ya descargadas no se tocan. - La clave SSH debe estar registrada en la cuenta (Settings → SSH Public Keys) antes de
crear el pod: las claves añadidas después no entran en los pods ya encendidos, y el proxy
responde
Permission denied (publickey). Sin SSHorchestrate.shno falla enseguida: llega hasta unPATCH output:vacío y se para ahí. - ComfyUI muere y la plantilla no lo reinicia:
orchestrate.shlo relanza; a mano:python3 /ComfyUI/main.py --listen 0.0.0.0 --use-sage-attention --extra-model-paths-config /ComfyUI/extra_model_paths.yaml.
Reglas de Meta para los vídeos con IA
- En Ads Manager hay que declarar que el contenido está generado con IA.
- El personaje se presenta como portavoz, nunca como «cliente real»: Meta lo considera engañoso.
- Subtítulos siempre: la mayoría mira sin sonido.
¿Listo para ponerlo en práctica?
Crea tu cuenta de RoyLead y empieza en pocos minutos.