Vídeos para anuncios con RunPod (para expertos)
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 16 de septiembre de 2026
⚠️ Para expertos. Hace falta saber usar un terminal (Linux, macOS o WSL en Windows),
sshyffmpeg, y tener una cuenta de RunPod con tarjeta asociada. Si no te reconoces en esta descripción, usa fal.ai: los mismos modelos, se paga por clip, nada que instalar. Es la vía que el playbook del lanzamiento propone por defecto.
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 de 200 GB con los modelos | 14 $ al mes, siempre |
| Una tanda de 6 clips (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. El disco se queda, con los modelos dentro.
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. - Crea un Network Volume de 200 GB en un centro de datos EU (p. ej. EU-RO-1). El disco guarda los modelos (unos 176 GB): los descargas una sola vez. El centro de datos del disco decide dónde podrás crear los pods.
Paso 2 — El pod
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.
- Disco: tu network volume, montado en
/workspace. - Variables de la plantilla: la primera vez
download_wan22=trueydownload_wan21=true(descarga los modelos al disco, 8-10 minutos). En los pods siguientes ponlas afalse: los modelos ya están en el disco 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)
La plantilla no incluye InfiniteTalk. Una sola vez, en el disco, en
/workspace/ComfyUI/models/, añade estos archivos (desde Hugging Face):
| 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). - 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.