Cómo automatizar descargas de vídeo en OpenClaw con yt-dlp
OpenClaw es una potente plataforma de automatización de flujos de trabajo que te permite conectar APIs, disparadores y acciones en pipelines fluidos. Combinado con yt-dlp - el descargador de vídeo más capaz disponible - puedes construir sistemas automatizados para monitorizar el contenido de la competencia, archivar tutoriales, extraer audio para transcripción y mucho más.
Esta guía te explica cómo configurar flujos de trabajo de descarga de vídeo potenciados por yt-dlp dentro de OpenClaw, desde un simple disparador de URL única hasta un pipeline de monitorización de contenido completamente automatizado.
¿Por qué combinar yt-dlp con OpenClaw?
Hacer las cosas manualmente no escala. Si necesitas rastrear contenido de vídeo en múltiples canales, archivar material educativo, o alimentar vídeos descargados en procesamiento posterior (transcripción, compresión, análisis), necesitas automatización.
OpenClaw gestiona la orquestación - disparadores, programación, lógica de ramificación y notificaciones - mientras yt-dlp se encarga del trabajo duro: extraer vídeo de forma fiable desde más de 1.000 sitios compatibles.
Casos de uso habituales:
- Monitorización de competidores: descargar automáticamente nuevos vídeos de canales de YouTube de la competencia y enrutarlos a un paso de transcripción o análisis.
- Archivado de contenido: disparar una descarga cuando aparece un nuevo vídeo en un feed RSS o lista de reproducción monitorizada.
- Extracción de audio: extraer audio de URLs de vídeo para generación de podcasts, pipelines de transcripción o conjuntos de datos de entrenamiento.
- Control de calidad: verificar que los vídeos disponibles públicamente (demos de producto, tutoriales) siguen siendo accesibles y coinciden con el contenido esperado.
Requisitos previos
Antes de construir tu flujo de trabajo en OpenClaw, asegúrate de tener:
- Una cuenta de OpenClaw con al menos un espacio de trabajo activo.
- Un servidor o función en la nube donde yt-dlp esté instalado y sea accesible via HTTP (puedes exponerlo con un pequeño wrapper de FastAPI o Express, o usar un endpoint gestionado de HuntAPI).
- Conocimientos básicos del editor basado en nodos de OpenClaw.
Paso 1 - Configurar un endpoint HTTP de yt-dlp
OpenClaw se comunica con herramientas externas via HTTP. El enfoque más sencillo es envolver yt-dlp en un pequeño servidor API.
Aquí tienes un ejemplo mínimo en Python usando FastAPI:
from fastapi import FastAPI
from pydantic import BaseModel
import subprocess, json
app = FastAPI()
class DownloadRequest(BaseModel):
url: str
format: str = "bestvideo+bestaudio/best"
output_dir: str = "/tmp/downloads"
@app.post("/download")
def download_video(req: DownloadRequest):
result = subprocess.run(
[
"yt-dlp",
"--format", req.format,
"--output", f"{req.output_dir}/%(title)s.%(ext)s",
"--print-json",
req.url,
],
capture_output=True,
text=True,
)
metadata = json.loads(result.stdout.splitlines()[-1]) if result.returncode == 0 else {}
return {
"success": result.returncode == 0,
"title": metadata.get("title"),
"duration": metadata.get("duration"),
"filepath": metadata.get("filename"),
"error": result.stderr if result.returncode != 0 else None,
}
Despliega este servicio y anota la URL pública - la usarás como destino en el nodo de acción HTTP de OpenClaw.
Paso 2 - Crear un flujo de trabajo en OpenClaw
Disparador: nuevo vídeo en un canal de YouTube
- Abre el editor de OpenClaw y crea un nuevo flujo de trabajo.
- Añade un nodo disparador de Programación o Feed RSS. Los feeds RSS de canales de YouTube siguen este patrón:
https://www.youtube.com/feeds/videos.xml?channel_id=TU_CHANNEL_ID
- Establece el intervalo de sondeo (por ejemplo, cada hora).
Acción: descargar el vídeo
- Añade un nodo de acción Petición HTTP después del disparador.
- Configúralo como una petición POST a tu endpoint de yt-dlp:
{
"url": "{{trigger.link}}",
"format": "bestvideo[height<=1080]+bestaudio/best",
"output_dir": "/mnt/storage/videos"
}
- Mapea
trigger.linkdel elemento del feed RSS al campourl.
Acción: extraer solo audio (opcional)
Si solo necesitas audio (para transcripción o flujos de trabajo de podcast), cambia el formato a:
{
"url": "{{trigger.link}}",
"format": "bestaudio/best"
}
Y añade --extract-audio --audio-format mp3 a tu comando de yt-dlp en el lado del servidor.
Paso 3 - Procesar la respuesta
Tras la descarga, el nodo de acción HTTP devuelve un objeto JSON con la ruta del archivo, título, duración y estado de éxito. Puedes usar estos campos para:
- Enviar una notificación de Slack con el título del vídeo y una confirmación de descarga.
- Disparar un flujo de transcripción pasando la ruta del archivo a un nodo de Whisper o AssemblyAI.
- Subir a almacenamiento en la nube (S3, GCS, R2) usando un nodo de acción de almacenamiento.
- Registrar resultados en una hoja de cálculo para seguimiento e informes.
Ejemplo: gestión condicional de errores
Añade un nodo Condición tras la petición HTTP para comprobar el campo success:
- Si
true→ continuar con la siguiente acción (subida, transcripción, etc.). - Si
false→ enviar una alerta a tu equipo con el mensajeerrorde yt-dlp.
Paso 4 - Gestionar límites de velocidad y restricciones geográficas
Los flujos de trabajo a gran escala pueden alcanzar los límites de velocidad de YouTube (Error 429) o encontrarse con contenido bloqueado geográficamente. Pasa un argumento --proxy en tu comando de yt-dlp:
"yt-dlp",
"--proxy", "http://tu-proxy:puerto",
"--format", req.format,
...
Para proxies rotativos, usa un proveedor que exponga una única pasarela que cambie automáticamente las IPs de salida. Esto evita gestionar una lista de proxies en la lógica de tu flujo de trabajo.
También puedes añadir un nodo de reintento en OpenClaw para volver a ejecutar automáticamente el paso de descarga con retroceso exponencial si el primer intento falla.
Blueprint del flujo de trabajo: pipeline completo de monitorización de contenido
Aquí tienes un blueprint completo que puedes importar directamente en OpenClaw:
| Nodo | Tipo | Descripción |
|---|---|---|
| Disparador RSS | Disparador | Sondea un feed RSS de canal de YouTube cada hora |
| Filtro | Condición | Omite vídeos de menos de 2 minutos |
| Descarga | HTTP POST | Llama al endpoint de yt-dlp, devuelve la ruta del archivo |
| Verificación de error | Condición | Ramifica según el campo success |
| Transcripción | HTTP POST | Envía audio a la API de Whisper |
| Notificación | Slack | Publica título + resumen de transcripción en un canal |
| Registro | Hoja de cálculo | Añade una fila a un Google Sheet |
Consejos para producción
- Cachear URLs procesadas usando un nodo de Redis o base de datos para evitar volver a descargar el mismo vídeo en cada ciclo de disparador.
- Establecer plantillas de salida cuidadosamente en yt-dlp para evitar colisiones de nombres de archivo:
%(upload_date)s_%(id)s_%(title)s.%(ext)ses un valor seguro por defecto. - Monitorizar el espacio en disco en tu servidor de descarga; añade un paso de limpieza que elimine archivos más antiguos de N días tras haber sido procesados.
- Usar la opción
--cookies-from-browserde yt-dlp (en el servidor) para sitios que requieren autenticación, y rotar sesiones para mantener el cumplimiento normativo.
Simplifica con HuntAPI
En lugar de desplegar y mantener tu propio servidor yt-dlp (Paso 1), puedes apuntar tu nodo HTTP de OpenClaw directamente a HuntAPI. HuntAPI proporciona un endpoint de descarga de vídeo gestionado y listo para usar - sin infraestructura que mantener, sin lista de proxies que gestionar, y con soporte integrado para desbloqueo geográfico y gestión de límites de velocidad.
Esto te permite pasar de cero a un workflow de descarga de vídeo en OpenClaw en cuestión de minutos.