rad-migrate
Officialrad-migrate
Mueve tu canal de YouTube a Rad TV con un solo comando.
export RAD_API_KEY=rad_...
rad-migrate @yourchannelEso es todo. rad-migrate descarga tu canal en HD y publica cada video en Rad TV con su título, descripción, miniatura y fecha de publicación original, y luego crea una lista de reproducción en el orden de subida original.
rad-migrate 0.1.0
✓ node 22.22 · ffmpeg 8.1 · yt-dlp 2026.08 · Rad auth ok
✓ quality probe 1080p available (no cookies)
→ channel: Your Channel · 47 videos
→ 12 already on Rad · 3 vertical, skipped · 32 to migrate
[ 7/32] Inside Barolo Grill uploading 412.8 MBDetenlo cuando quieras. Vuelve a ejecutarlo y retoma exactamente donde lo dejaste.
Hecho para creadores que mueven contenido que les pertenece. Ver Propiedad.
Contenido
Related MCP server: @kirbah/mcp-youtube
Instalación
No hay nada que compilar. rad-migrate es un paquete de Python: instálalo y ejecútalo.
# Not yet on PyPI. For now, install from source:
uv tool install git+https://github.com/little-core-labs/rad-migrate
# or with pipx
pipx install git+https://github.com/little-core-labs/rad-migrateuvx rad-migrate @yourchannel # run without installing
uv tool install rad-migrate # or install it
pipx install rad-migrateDos cosas que pip no puede instalar por ti
rad-migrate necesita Node 20+ (se recomienda 22) y ffmpeg en tu PATH.
# macOS
brew install node ffmpeg
# Windows
winget install OpenJS.NodeJS.LTS Gyan.FFmpeg
# Debian/Ubuntu
sudo apt install nodejs ffmpegNode no es opcional ni una herramienta de compilación: YouTube requiere un runtime de JavaScript para entregar las URLs de transmisión en HD, y sin él, las descargas bajan silenciosamente a baja calidad en lugar de fallar. ffmpeg fusiona las transmisiones de video y audio separadas de YouTube.
Si prefieres no instalar nada de esto, usa la imagen de Docker — incluye todo el conjunto de herramientas.
Tu primera ejecución
Cuatro pasos. Los tres primeros cuestan segundos y ahorran horas.
1. Comprueba la máquina.
rad-migrate doctorVerifica Node, ffmpeg, yt-dlp, espacio en disco y tus credenciales de Rad.
2. Comprueba qué calidad obtendrás realmente.
rad-migrate doctor @yourchannel
# ✓ quality probe 1080p available (no cookies)Esto prueba un video real. Es lo más útil que puedes hacer antes de una ejecución larga: una sesión de YouTube degradada limita todo a 360p, y esto lo detecta en cinco segundos en lugar de un archivo desperdiciado a la vez.
3. Ve qué se movería.
rad-migrate plan @yourchannelNo descarga ni publica nada. Muestra los videos, lo que ya está en Rad y lo que tus filtros excluyeron.
4. Migra primero un video y luego el resto.
rad-migrate @yourchannel --limit 1 # one full round trip
rad-migrate @yourchannel # everythingLa ejecución con --limit 1 prueba tus credenciales, el canal, la ruta de subida y la transcodificación antes de comprometer horas a ello.
¿Necesitas cookies? Probablemente no.
La mayoría de las herramientas en este espacio comienzan diciéndote que exportes un cookies.txt. rad-migrate no lo hace, porque normalmente no es necesario — y cuando lo es, las cookies son el último recurso, no el primero.
rad-migrate doctor @yourchannel te lo dice. Si informa 1080p, has terminado: sin cuenta, sin configuración, nada que ajustar.
Si informa un límite, rad-migrate nombra el único comando que lo soluciona, en este orden:
1. Un token de prueba de origen — sin involucrar una cuenta de Google.
rad-migrate setup-potokenYouTube exige cada vez más un token de "prueba de origen", ahora vinculado a cada id de video individual, por lo que los tokens ya no se pueden extraer manualmente. Esto instala un proveedor que los genera: un binario autocontenido, verificado contra el checksum SHA-256 que GitHub publica para la versión fijada. Sin Node, sin npm, sin Docker, sin inicio de sesión. Te muestra exactamente lo que descargará y pregunta antes de hacerlo. Elimínalo con rad-migrate setup-potoken --remove.
2. Tu sesión de navegador — solo si eso no es suficiente.
rad-migrate @yourchannel --cookies-from-browser firefoxLee las cookies directamente de tu navegador; sin exportación manual. Prefiere Firefox. Desde Chrome 127, Windows vincula la clave de cifrado de cookies al proceso de Chrome, por lo que ninguna herramienta externa puede leer las cookies de Chrome, Edge o Brave allí. rad-migrate detecta esto y lo dice en lugar de fallar con un error de descifrado.
Vale la pena saberlo: este es el peldaño arriesgado, no el fácil. Descargar en masa contra tu propia sesión iniciada es el patrón que los sistemas de abuso de YouTube buscan — y para un creador que migra su propio canal, esa sesión pertenece a la cuenta en la que vive el canal. La ruta del token anterior no toca ninguna cuenta.
3. Un archivo de cookies — para Docker y máquinas sin cabeza, donde la extracción del navegador no puede funcionar:
rad-migrate @yourchannel --cookies-file cookies.txtComandos
rad-migrate @yourchannel # migrate (shorthand for `rad-migrate run`)
rad-migrate plan @yourchannel # show what would happen, change nothing
rad-migrate doctor @yourchannel # check the machine and the quality
rad-migrate status # progress from previous runs
rad-migrate retry @yourchannel # retry only what failed
rad-migrate setup-potoken # install the HD token provider
rad-migrate mcp # run as an MCP server for AI agentsCualquiera de @handle, handle, una URL completa o un id de canal UC… funciona.
Cada comando acepta --help.
Elegir qué se mueve
rad-migrate @yourchannel \
--newest 50 \ # the 50 most recent
--since 2024-01-01 \ # nothing older
--landscape-only \ # skip vertical videos (Shorts)
--min-duration 60 \ # skip anything under a minute
--playlist "My Channel" # build a playlist in upload orderFlag | Qué hace |
| Canal de Rad de destino, por id o nombre |
| Crea el canal de Rad si no existe |
| Limita esta ejecución a N videos — bueno para una primera prueba |
| Solo los N más recientes |
| Nada subido antes de esta fecha |
| Omitir videos verticales |
| Límites en segundos |
|
|
| Piso de calidad, predeterminado 720 |
| Aceptar definición estándar en lugar de fallar |
| Crear una lista de reproducción con lo migrado |
| Eliminar archivos locales una vez que Rad confirme el procesamiento |
| Dónde viven las descargas y el estado de reanudación |
| Omitir las comprobaciones previas a la ejecución |
| Salida legible por máquina |
La calidad se verifica, no se asume
Bajo el hd-strict predeterminado, un video que no se puede obtener en HD falla en lugar de guardarse en definición estándar — y cada descarga terminada se prueba para confirmar lo que realmente llegó al disco, no lo que se solicitó. Un fallo nunca se registra como hecho, por lo que la siguiente ejecución lo reintenta en una sesión más saludable. Eso suele ser suficiente.
Pasa --allow-sd si prefieres tener el video en cualquier resolución.
Lo que obtienes
En Rad: un elemento de contenido por video, con el título, descripción, miniatura y fecha de publicación originales, más una lista de reproducción en orden de subida si lo pediste. El video vertical se publica como vertical. Los videos se marcan como hechos solo cuando Rad confirma que la transcodificación terminó — no solo que la subida tuvo éxito.
En disco, bajo --workdir (predeterminado ./rad-migrate-work):
rad-migrate-work/
├── state.db resume journal
└── media/
└── <channel-id>/
└── 2024-03-15 - Video Title [dQw4w9WgXcQ]/
├── video.mp4 the download
├── video.info.json full yt-dlp metadata
├── video.webp original thumbnail
└── thumbnail.jpg converted for uploadAñade --cleanup para eliminar cada carpeta una vez que Rad confirme el procesamiento — un canal puede fácilmente llegar a decenas de gigabytes.
Reanudar y ejecutarlo dos veces
Seguro de interrumpir, seguro de volver a ejecutar. El estado avanza un video a la vez y se escribe inmediatamente, por lo que un bloqueo o un Ctrl-C pierde como máximo el video en curso.
Volver a ejecutar es idempotente porque rad-migrate pregunta a Rad qué hay ya en el canal en lugar de confiar en un archivo local. Así, una segunda ejecución en una máquina diferente, sin estado local alguno, no publicará el mismo video dos veces.
state.db es una caché, no la fuente de verdad. Bórralo y la siguiente ejecución vuelve a escanear; aún así no publicará dos veces.
Límites conocidos
Todos provienen de la API de Rad tal como está hoy, y están documentados en detalle — con soluciones propuestas — en docs/rad-api-notes.md.
Límite | Por qué |
La deduplicación coincide por título + fecha de publicación | La API no tiene un campo para registrar un id de origen, por lo que la coincidencia no puede ser exacta |
La deduplicación solo cubre los 100 elementos más recientes | El endpoint de listado de contenido tiene un límite de 100; rad-migrate advierte en lugar de informar de menos silenciosamente |
No hay eliminación | La API expone |
Los subtítulos no se suben | Se descargan y se guardan localmente; Rad no tiene un endpoint de subtítulos |
Usarlo desde un agente de IA
Servidor MCP
Funciona con Claude Desktop, OpenClaw, Hermes y cualquier otra cosa que hable MCP:
{
"mcpServers": {
"rad-migrate": {
"command": "rad-migrate",
"args": ["mcp"],
"env": { "RAD_API_KEY": "rad_..." }
}
}
}Herramientas: check_environment, plan_migration, start_migration, migration_status, cancel_migration, retry_failed, install_potoken_provider.
start_migration devuelve un id de trabajo inmediatamente y se ejecuta en segundo plano — un canal puede tardar horas, por lo que ninguna llamada a herramienta bloquea. El agente consulta migration_status, que lee el mismo registro que el CLI, así que tú y el agente observan la misma ejecución.
Claude Code
/plugin marketplace add little-core-labs/rad-migrate
/plugin install rad-migrateLuego /rad-migrate @yourchannel.
Scripting
--json coloca un único resultado analizable en stdout y transmite eventos de progreso NDJSON en stderr, por lo que los dos nunca se intercalan:
rad-migrate plan @yourchannel --json | jq '.to_migrate'Docker
Incluye Node, ffmpeg y yt-dlp, por lo que no hay nada que instalar.
docker run --rm \
-e RAD_API_KEY \
-v "$PWD/work:/work" \
ghcr.io/little-core-labs/rad-migrate @yourchannel --workdir /workLa extracción de cookies del navegador no puede funcionar en un contenedor, así que monta un cookies.txt y usa --cookies-file si lo necesitas.
Configuración
Las banderas superan a las variables de entorno, que superan a .env, que superan a los valores predeterminados. Copia .env.example a .env para empezar.
Variable | Propósito |
| Obligatoria. Tu clave de API de Rad TV. |
| Canal de destino |
| Descargas y estado, predeterminado |
|
|
| Ruta a un |
Tu clave de API nunca se escribe en el estado, los registros ni la salida --json. Todo lo que rad-migrate imprime pasa primero por un filtro de redacción, y hay una prueba que lo verifica. Ver SECURITY.md.
Solución de problemas
Todo se descarga a 360p. Ejecuta rad-migrate doctor @yourchannel. Casi siempre es un runtime de JS faltante (instala Node 22+) o una sesión degradada (rad-migrate setup-potoken).
"Inicia sesión para confirmar que no eres un bot". YouTube está limitando. rad-migrate retrocede automáticamente y reduce sus llamadas a la API por video. Si persiste, espera: la limitación es por sesión y se levanta.
Las cookies de Chrome no se leen en Windows. No pueden, por diseño, desde Chrome 127. Usa Firefox o --cookies-file.
Una transcodificación falló en Rad. La subida funcionó; la conversión no. Reintenta con rad-migrate retry @yourchannel. Los videos solo se informan como hechos cuando Rad confirma el procesamiento, por lo que un fallo aquí es visible en lugar de silencioso.
Es lento. Deliberadamente. YouTube limita la API de extracción por sesión, por lo que rad-migrate se dosifica para sobrevivir a un canal completo en lugar de correr hacia un bloqueo.
Más detalle: skills/rad-migrate/references/troubleshooting.md.
Propiedad
Esta herramienta existe para creadores que mueven su propio trabajo a una plataforma de su elección. Descargar los videos de otras personas para republicarlos es tanto un problema de derechos de autor como un problema de los Términos de Servicio de YouTube, y no es para eso.
Si quieres tus propios originales sin detección de bots en el proceso, Google Takeout exporta los archivos fuente que YouTube tiene para tu canal. Es más lento y más manual, pero es la ruta totalmente sancionada.
Contribuyendo
Ver CONTRIBUTING.md.
git clone https://github.com/little-core-labs/rad-migrate && cd rad-migrate
uv sync --dev
uv run pytestLas fuentes y los destinos se sitúan detrás de protocolos en source/base.py y dest/base.py — los nuevos son bienvenidos.
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceGives AI coding agents full control over a YouTube channel with 22 tools for channel management, videos, playlists, comments, search, analytics, thumbnails, and captions.272MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI agents with token-optimized access to YouTube data, including video details, transcripts, channel statistics, trending videos, and search.572MIT
- FlicenseNot gradedqualityBmaintenanceEnables managing a YouTube channel through natural language: upload videos, edit metadata, set thumbnails, run pseudo A/B thumbnail tests, and pull analytics.
- AlicenseBqualityCmaintenanceProvides comprehensive access to YouTube Data, Analytics, and Reporting APIs, enabling AI assistants to manage videos, analyze performance, handle comments, and extract transcripts.40MIT
Related MCP Connectors
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
15 media & data tools for AI agents: search, transcribe, subtitles, voiceover, translate & more.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/little-core-labs/rad-migrate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server