Skip to main content
Glama

rad-migrate

Mueve tu canal de YouTube a Rad TV con un solo comando.

export RAD_API_KEY=rad_...
rad-migrate @yourchannel

Eso 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 MB

Detenlo 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-migrate
uvx rad-migrate @yourchannel     # run without installing
uv tool install rad-migrate      # or install it
pipx install rad-migrate

Dos 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 ffmpeg

Node 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 doctor

Verifica 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 @yourchannel

No 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               # everything

La 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-potoken

YouTube 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 firefox

Lee 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.txt

Comandos

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 agents

Cualquiera 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 order

Flag

Qué hace

--channel

Canal de Rad de destino, por id o nombre

--create-channel

Crea el canal de Rad si no existe

--limit N

Limita esta ejecución a N videos — bueno para una primera prueba

--newest N

Solo los N más recientes

--since YYYY-MM-DD

Nada subido antes de esta fecha

--landscape-only

Omitir videos verticales

--min-duration / --max-duration

Límites en segundos

--quality

hd-strict (predeterminado), hd-preferred o best

--min-height

Piso de calidad, predeterminado 720

--allow-sd

Aceptar definición estándar en lugar de fallar

--playlist TITLE

Crear una lista de reproducción con lo migrado

--cleanup

Eliminar archivos locales una vez que Rad confirme el procesamiento

--workdir

Dónde viven las descargas y el estado de reanudación

--skip-preflight

Omitir las comprobaciones previas a la ejecución

--json

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 upload

Añ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 unpublish pero nada que elimine contenido o listas de reproducción

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-migrate

Luego /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 /work

La 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

RAD_API_KEY

Obligatoria. Tu clave de API de Rad TV.

RAD_MIGRATE_CHANNEL

Canal de destino

RAD_MIGRATE_WORKDIR

Descargas y estado, predeterminado ./rad-migrate-work

RAD_MIGRATE_COOKIES_FROM_BROWSER

firefox, chrome, …

RAD_MIGRATE_COOKIES_FILE

Ruta a un cookies.txt

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 pytest

Las 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

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
Release cycle
0Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives AI coding agents full control over a YouTube channel with 22 tools for channel management, videos, playlists, comments, search, analytics, thumbnails, and captions.
    27
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with token-optimized access to YouTube data, including video details, transcripts, channel statistics, trending videos, and search.
    572
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Provides comprehensive access to YouTube Data, Analytics, and Reporting APIs, enabling AI assistants to manage videos, analyze performance, handle comments, and extract transcripts.
    40
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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