rad-migrate
Officialrad-migrate
Переместите свой канал YouTube на Rad TV одной командой.
export RAD_API_KEY=rad_...
rad-migrate @yourchannelВот и всё. rad-migrate скачивает ваш канал в HD и публикует каждое видео на Rad TV с его названием, описанием, миниатюрой и исходной датой публикации, а затем создаёт плейлист в исходном порядке загрузки.
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Остановите в любой момент. Запустите снова — и он продолжит ровно с того места, где остановился.
Создано для авторов, перемещающих контент, которым они владеют. См. Право собственности.
Содержание
Related MCP server: @kirbah/mcp-youtube
Установка
Собирать нечего. rad-migrate — это Python-пакет: установите его и запускайте.
# 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-migrateДве вещи, которые pip не может установить за вас
rad-migrate требует Node 20+ (рекомендуется 22) и ffmpeg в вашем PATH.
# macOS
brew install node ffmpeg
# Windows
winget install OpenJS.NodeJS.LTS Gyan.FFmpeg
# Debian/Ubuntu
sudo apt install nodejs ffmpegNode не является опциональным и не является инструментом сборки — YouTube требует среду выполнения JavaScript, чтобы выдать HD-потоки, и без неё загрузки молча снижаются до низкого качества, а не завершаются ошибкой. ffmpeg объединяет отдельные видеопотоки и аудиопотоки YouTube.
Если вы не хотите устанавливать всё это, используйте Docker-образ — он включает весь инструментарий.
Первый запуск
Четыре шага. Первые три занимают секунды и экономят часы.
1. Проверьте машину.
rad-migrate doctorПроверяет Node, ffmpeg, yt-dlp, место на диске и ваши учётные данные Rad.
2. Проверьте, какое качество вы реально получите.
rad-migrate doctor @yourchannel
# ✓ quality probe 1080p available (no cookies)Это проверяет одно реальное видео. Это самая полезная вещь, которую можно сделать перед долгим запуском — деградированная сессия YouTube ограничивает всё на 360p, и это выявляется за пять секунд, а не по одному потерянному файлу за раз.
3. Посмотрите, что будет перемещено.
rad-migrate plan @yourchannelНичего не скачивает и не публикует. Показывает видео, что уже есть на Rad, и что исключили ваши фильтры.
4. Сначала перенесите одно видео, затем остальные.
rad-migrate @yourchannel --limit 1 # one full round trip
rad-migrate @yourchannel # everythingЗапуск с --limit 1 подтверждает ваши учётные данные, канал, путь загрузки и транскодирование, прежде чем вы потратите часы на это.
Нужны ли вам cookies? Вероятно, нет.
Большинство инструментов в этой области начинают с того, что просят экспортировать cookies.txt. rad-migrate этого не делает, потому что обычно это не нужно — а когда нужно, cookies являются последним средством, а не первым.
rad-migrate doctor @yourchannel скажет вам. Если он сообщает 1080p — всё готово: никакого аккаунта, никакой настройки, ничего настраивать.
Если он сообщает об ограничении, rad-migrate называет единственную команду, которая это исправляет, в следующем порядке:
1. Токен подтверждения происхождения — без участия аккаунта Google.
rad-migrate setup-potokenYouTube всё чаще требует токен «подтверждения происхождения», теперь привязанный к каждому отдельному идентификатору видео, поэтому токены больше нельзя извлечь вручную. Это устанавливает провайдера, который их создаёт: один автономный бинарный файл, проверенный по контрольной сумме SHA-256, которую GitHub публикует для закреплённого релиза. Без Node, без npm, без Docker, без входа в систему. Он показывает, что именно будет скачано, и спрашивает перед выполнением. Удалите его с помощью rad-migrate setup-potoken --remove.
2. Ваша сессия браузера — только если этого недостаточно.
rad-migrate @yourchannel --cookies-from-browser firefoxЧитает cookies прямо из вашего браузера; без ручного экспорта. Предпочтительно Firefox. Начиная с Chrome 127, Windows привязывает ключ шифрования cookies к процессу Chrome, поэтому ни один внешний инструмент не может прочитать cookies Chrome, Edge или Brave в Windows. rad-migrate обнаруживает это и сообщает об этом, а не завершается ошибкой дешифрования.
Стоит знать: это рискованная ступень, а не лёгкая. Массовая загрузка с использованием вашей собственной авторизованной сессии — это тот паттерн, который ищут системы злоупотреблений YouTube — и для автора, переносящего свой собственный канал, эта сессия принадлежит аккаунту, на котором живёт канал. Указанный выше путь с токеном вообще не касается аккаунта.
3. Файл cookies — для Docker и безголовых машин, где извлечение из браузера невозможно:
rad-migrate @yourchannel --cookies-file cookies.txtКоманды
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Подойдёт любой из вариантов: @handle, handle, полный URL или идентификатор канала UC….
Каждая команда принимает --help.
Выбор того, что перемещается
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Флаг | Что делает |
| Целевой канал Rad, по идентификатору или имени |
| Создать канал Rad, если он не существует |
| Ограничить этот запуск N видео — хорошо для первого теста |
| Только N самых последних |
| Ничего, загруженного до этой даты |
| Пропустить вертикальные видео |
| Границы в секундах |
|
|
| Минимальное качество, по умолчанию 720 |
| Принять стандартное разрешение вместо ошибки |
| Создать плейлист из перенесённого |
| Удалить локальные файлы после подтверждения обработки Rad |
| Где хранятся загрузки и состояние возобновления |
| Пропустить предварительные проверки |
| Машиночитаемый вывод |
Качество проверяется, а не предполагается
При стандартном hd-strict видео, которое нельзя получить в HD, считается ошибкой, а не сохраняется в стандартном разрешении — и каждая завершённая загрузка проверяется, чтобы подтвердить, что реально попало на диск, а не то, что было запрошено. Ошибка никогда не записывается как выполненная, поэтому следующий запуск повторит её на более здоровой сессии. Обычно этого достаточно.
Передайте --allow-sd, если вы предпочитаете получить видео в любом разрешении.
Что вы получаете в итоге
На Rad: один элемент контента на каждое видео, с исходным названием, описанием, миниатюрой и датой публикации, плюс плейлист в порядке загрузки, если вы об этом попросили. Вертикальное видео публикуется как вертикальное. Видео помечаются как завершённые только после того, как Rad подтвердит завершение транскодирования — а не просто успешную загрузку.
На диске, в --workdir (по умолчанию ./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Добавьте --cleanup, чтобы удалять каждую папку после подтверждения обработки Rad — канал легко может достигать десятков гигабайт.
Возобновление и повторный запуск
Безопасно прерывать, безопасно перезапускать. Состояние продвигается по одному видео за раз и записывается немедленно, поэтому сбой или Ctrl-C теряет максимум видео, находящееся в процессе.
Повторный запуск идемпотентен, потому что rad-migrate спрашивает Rad, что уже есть на канале, а не доверяет локальному файлу. Таким образом, второй запуск на другой машине, вообще без локального состояния, всё равно не опубликует одно и то же видео дважды.
state.db — это кэш, а не источник истины. Удалите его, и следующий запуск пересканирует; он всё равно не опубликует дважды.
Известные ограничения
Все они исходят из текущего API Rad и подробно описаны — с предложенными исправлениями — в docs/rad-api-notes.md.
Ограничение | Почему |
Дедупликация по названию + дате публикации | В API нет поля для записи исходного идентификатора, поэтому сопоставление не может быть точным |
Дедупликация охватывает только 100 последних элементов | Конечная точка списка контента ограничена 100; rad-migrate предупреждает, а не молча занижает отчёт |
Нет удаления | API предоставляет |
Субтитры не загружаются | Они скачиваются и хранятся локально; у Rad нет конечной точки для субтитров |
Использование с ИИ-агентом
MCP-сервер
Работает с Claude Desktop, OpenClaw, Hermes и всем остальным, что говорит на MCP:
{
"mcpServers": {
"rad-migrate": {
"command": "rad-migrate",
"args": ["mcp"],
"env": { "RAD_API_KEY": "rad_..." }
}
}
}Инструменты: check_environment, plan_migration, start_migration, migration_status,
cancel_migration, retry_failed, install_potoken_provider.
start_migration немедленно возвращает идентификатор задания и работает в фоновом режиме — канал может занять часы, поэтому ни один вызов инструмента никогда не блокируется. Агент опрашивает migration_status, который читает тот же журнал, что и CLI, так что вы и агент наблюдаете за одним и тем же запуском.
Claude Code
/plugin marketplace add little-core-labs/rad-migrate
/plugin install rad-migrateЗатем /rad-migrate @yourchannel.
Скрипты
--json выводит один разбираемый результат в stdout и передаёт NDJSON-события прогресса в stderr, поэтому они никогда не смешиваются:
rad-migrate plan @yourchannel --json | jq '.to_migrate'Docker
Включает Node, ffmpeg и yt-dlp, так что устанавливать нечего.
docker run --rm \
-e RAD_API_KEY \
-v "$PWD/work:/work" \
ghcr.io/little-core-labs/rad-migrate @yourchannel --workdir /workИзвлечение cookies из браузера в контейнере невозможно, поэтому при необходимости смонтируйте cookies.txt и используйте --cookies-file.
Конфигурация
Флаги важнее переменных окружения, переменные окружения важнее .env, .env важнее значений по умолчанию. Скопируйте .env.example в .env, чтобы начать.
Переменная | Назначение |
| Обязательно. Ваш API-ключ Rad TV. |
| Целевой канал |
| Загрузки и состояние, по умолчанию |
|
|
| Путь к |
Ваш API-ключ никогда не записывается в состояние, журналы или вывод --json. Всё, что печатает rad-migrate, сначала проходит через фильтр редактирования, и есть тест, который это проверяет. См. SECURITY.md.
Устранение неполадок
Всё скачивается в 360p. Запустите rad-migrate doctor @yourchannel. Почти всегда это отсутствующая среда выполнения JavaScript (установите Node 22+) или деградированная сессия (rad-migrate setup-potoken).
«Войдите, чтобы подтвердить, что вы не бот». YouTube ограничивает трафик. rad-migrate автоматически снижает темп и уменьшает количество вызовов API на видео. Если это продолжается, подождите — ограничение действует на сессию и снимается.
Cookies Chrome не читаются в Windows. Они не могут быть прочитаны по дизайну, начиная с Chrome 127. Используйте Firefox или --cookies-file.
Транскодирование на Rad не удалось. Загрузка прошла; конвертация — нет. Повторите с rad-migrate retry @yourchannel. Видео помечаются как завершённые только после подтверждения обработки Rad, поэтому ошибка здесь видна, а не молчалива.
Это медленно. Намеренно. YouTube ограничивает API извлечения на сессию, поэтому rad-migrate задаёт темп, чтобы пережить весь канал, а не мчаться к блокировке.
Подробнее: skills/rad-migrate/references/troubleshooting.md.
Право собственности
Этот инструмент существует для авторов, переносящих свою собственную работу на платформу по своему выбору. Скачивание чужих видео для их перепубликации — это и проблема авторских прав, и проблема Условий использования YouTube, и это не то, для чего он предназначен.
Если вы хотите получить свои собственные оригиналы вообще без детекции ботов, Google Takeout экспортирует исходные файлы, которые YouTube хранит для вашего канала. Это медленнее и более ручной процесс, но это полностью санкционированный путь.
Вклад
См. CONTRIBUTING.md.
git clone https://github.com/little-core-labs/rad-migrate && cd rad-migrate
uv sync --dev
uv run pytestИсточники и назначения находятся за протоколами в
source/base.py и
dest/base.py — новые приветствуются.
Лицензия
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