Skip to main content
Glama

rad-migrate

Verschiebe deinen YouTube-Kanal in einem Befehl zu Rad TV.

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

Das ist alles. rad-migrate lädt deinen Kanal in HD herunter und veröffentlicht jedes Video mit Titel, Beschreibung, Thumbnail und ursprünglichem Veröffentlichungsdatum auf Rad TV und erstellt dann eine Wiedergabeliste in der ursprünglichen Upload-Reihenfolge.

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

Du kannst es jederzeit stoppen. Wenn du es erneut ausführst, setzt es genau dort fort, wo es aufgehört hat.

Entwickelt für Creator, die Inhalte verschieben, die ihnen gehören. Siehe Eigentum.


Inhalt


Related MCP server: @kirbah/mcp-youtube

Installation

Es gibt nichts zu bauen. rad-migrate ist ein Python-Paket – installiere es und führe es aus.

# 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

Zwei Dinge, die pip nicht für dich installieren kann

rad-migrate benötigt Node 20+ (22 empfohlen) und ffmpeg in deinem PATH.

# macOS
brew install node ffmpeg
# Windows
winget install OpenJS.NodeJS.LTS Gyan.FFmpeg
# Debian/Ubuntu
sudo apt install nodejs ffmpeg

Node ist nicht optional und kein Build-Tool – YouTube benötigt eine JavaScript-Laufzeitumgebung, um HD-Stream-URLs zu übergeben, und ohne sie sinken Downloads stillschweigend auf niedrige Qualität, anstatt zu scheitern. ffmpeg führt die getrennten Video- und Audiostreams von YouTube zusammen.

Wenn du das lieber nicht installieren möchtest, verwende das Docker-Image – es enthält die gesamte Toolchain.


Dein erster Lauf

Vier Schritte. Die ersten drei kosten Sekunden und sparen Stunden.

1. Überprüfe die Maschine.

rad-migrate doctor

2. Überprüfe, welche Qualität du tatsächlich bekommst.

rad-migrate doctor @yourchannel
# ✓ quality probe   1080p available (no cookies)

Dies testet ein echtes Video. Es ist das Nützlichste, was du vor einem langen Lauf tun kannst – eine beeinträchtigte YouTube-Sitzung begrenzt alles auf 360p, und das erkennt es in fünf Sekunden, anstatt eine Datei nach der anderen zu verschwenden.

3. Sieh, was verschoben würde.

rad-migrate plan @yourchannel

Lädt nichts herunter und veröffentlicht nichts. Zeigt die Videos, was bereits auf Rad ist und was deine Filter ausgeschlossen haben.

4. Migriere zuerst ein Video, dann den Rest.

rad-migrate @yourchannel --limit 1     # one full round trip
rad-migrate @yourchannel               # everything

Der Lauf mit --limit 1 bestätigt deine Anmeldedaten, den Kanal, den Upload-Pfad und die Transkodierung, bevor du Stunden investierst.


Brauchst du Cookies? Wahrscheinlich nicht.

Die meisten Tools in diesem Bereich beginnen damit, dir zu sagen, dass du eine cookies.txt exportieren sollst. rad-migrate tut das nicht, weil es normalerweise nicht notwendig ist – und wenn doch, sind Cookies das letzte Mittel und nicht das erste.

rad-migrate doctor @yourchannel sagt es dir. Wenn es 1080p meldet, bist du fertig – kein Konto, keine Einrichtung, nichts zu konfigurieren.

Wenn es eine Begrenzung meldet, nennt rad-migrate den einen Befehl, der das behebt, in dieser Reihenfolge:

1. Ein Proof-of-Origin-Token – kein Google-Konto erforderlich.

rad-migrate setup-potoken

YouTube verlangt zunehmend ein „Proof-of-Origin“-Token, das jetzt an jede einzelne Video-ID gebunden ist, sodass Tokens nicht mehr von Hand extrahiert werden können. Dies installiert einen Anbieter, der sie erstellt: eine eigenständige Binärdatei, die gegen die SHA-256-Prüfsumme verifiziert wird, die GitHub für die festgelegte Version veröffentlicht. Kein Node, kein npm, kein Docker, keine Anmeldung. Es zeigt dir genau, was es herunterladen wird, und fragt, bevor es das tut. Entferne es mit rad-migrate setup-potoken --remove.

2. Deine Browsersitzung – nur wenn das nicht ausreicht.

rad-migrate @yourchannel --cookies-from-browser firefox

Liest Cookies direkt aus deinem Browser; kein manueller Export. Bevorzuge Firefox. Seit Chrome 127 bindet Windows den Cookie-Verschlüsselungsschlüssel an den Chrome-Prozess, sodass kein externes Tool dort Chrome-, Edge- oder Brave-Cookies lesen kann. rad-migrate erkennt das und sagt es, anstatt mit einem Entschlüsselungsfehler zu scheitern.

Wissenswert: Das ist die riskante Stufe, nicht die einfache. Massen-Downloads über deine eigene angemeldete Sitzung sind das Muster, nach dem YouTubes Missbrauchssysteme suchen – und für einen Creator, der seinen eigenen Kanal migriert, gehört diese Sitzung zu dem Konto, auf dem der Kanal läuft. Der Token-Weg oben berührt überhaupt kein Konto.

3. Eine Cookie-Datei – für Docker und Headless-Maschinen, wo die Browser-Extraktion nicht funktionieren kann:

rad-migrate @yourchannel --cookies-file cookies.txt

Befehle

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

Jede der Optionen @handle, handle, eine vollständige URL oder eine UC…-Kanal-ID funktioniert.

Jeder Befehl unterstützt --help.

Auswählen, was verschoben wird

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

Was es tut

--channel

Ziel-Rad-Kanal, nach ID oder Name

--create-channel

Erstellt den Rad-Kanal, falls er nicht existiert

--limit N

Begrenzt diesen Lauf auf N Videos – gut für einen ersten Test

--newest N

Nur die N neuesten

--since YYYY-MM-DD

Nichts, das vor diesem Datum hochgeladen wurde

--landscape-only

Überspringt vertikale Videos

--min-duration / --max-duration

Grenzen in Sekunden

--quality

hd-strict (Standard), hd-preferred oder best

--min-height

Qualitätsuntergrenze, Standard 720

--allow-sd

Akzeptiert Standardauflösung anstatt zu scheitern

--playlist TITLE

Erstellt eine Wiedergabeliste aus dem, was migriert wurde

--cleanup

Löscht lokale Dateien, sobald Rad die Verarbeitung bestätigt

--workdir

Wo Downloads und Fortsetzungsstatus gespeichert werden

--skip-preflight

Überspringt die Vorabprüfungen

--json

Maschinenlesbare Ausgabe

Qualität wird verifiziert, nicht angenommen

Unter dem Standard hd-strict wird ein Video, das nicht in HD verfügbar ist, als fehlgeschlagen markiert, anstatt in Standardauflösung gespeichert zu werden – und jeder abgeschlossene Download wird geprüft, um zu bestätigen, was tatsächlich auf der Festplatte gelandet ist, nicht was angefordert wurde. Ein Fehler wird nie als erledigt aufgezeichnet, sodass der nächste Lauf es in einer gesünderen Sitzung erneut versucht. Das reicht normalerweise aus.

Verwende --allow-sd, wenn du das Video lieber in beliebiger Auflösung hättest.


Was du am Ende bekommst

Auf Rad: ein Inhaltselement pro Video, mit dem ursprünglichen Titel, der Beschreibung, dem Thumbnail und dem Veröffentlichungsdatum, plus eine Wiedergabeliste in Upload-Reihenfolge, falls du eine angefordert hast. Hochformat-Videos werden als Hochformat veröffentlicht. Videos werden erst als erledigt markiert, wenn Rad bestätigt, dass die Transkodierung abgeschlossen ist – nicht nur, dass der Upload erfolgreich war.

Auf der Festplatte, unter --workdir (Standard ./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

Füge --cleanup hinzu, um jeden Ordner zu löschen, sobald Rad die Verarbeitung bestätigt – ein Kanal kann leicht dutzende Gigabyte umfassen.


Fortsetzen und zweimal ausführen

Sicher zu unterbrechen, sicher erneut auszuführen. Der Status wird Video für Video fortgeschrieben und sofort geschrieben, sodass ein Absturz oder ein Strg-C höchstens das gerade laufende Video verliert.

Erneutes Ausführen ist idempotent, weil rad-migrate Rad fragt, was bereits auf dem Kanal ist, anstatt einer lokalen Datei zu vertrauen. Ein zweiter Lauf auf einer anderen Maschine ohne lokalen Status wird also dasselbe Video nicht zweimal veröffentlichen.

state.db ist ein Cache, nicht die Quelle der Wahrheit. Lösche es und der nächste Lauf scannt erneut; es wird trotzdem nicht doppelt veröffentlicht.

Bekannte Grenzen

Alle diese stammen von der Rad-API, wie sie heute existiert, und sind im Detail – mit vorgeschlagenen Lösungen – in docs/rad-api-notes.md dokumentiert.

Limit

Warum

Dedupe gleicht Titel + Veröffentlichungsdatum ab

Die API hat kein Feld, um eine Quell-ID zu speichern, daher kann der Abgleich nicht exakt sein

Dedupe deckt nur die 100 neuesten Elemente ab

Der Content-Listing-Endpunkt begrenzt auf 100; rad-migrate warnt, anstatt stillschweigend zu unterberichten

Kein Löschen

Die API bietet unpublish, aber nichts, das Inhalte oder Wiedergabelisten entfernt

Untertitel werden nicht hochgeladen

Sie werden heruntergeladen und lokal gespeichert; Rad hat keinen Untertitel-Endpunkt


Verwendung über einen KI-Agenten

MCP-Server

Funktioniert mit Claude Desktop, OpenClaw, Hermes und allem anderen, das MCP spricht:

{
  "mcpServers": {
    "rad-migrate": {
      "command": "rad-migrate",
      "args": ["mcp"],
      "env": { "RAD_API_KEY": "rad_..." }
    }
  }
}

Werkzeuge: check_environment, plan_migration, start_migration, migration_status, cancel_migration, retry_failed, install_potoken_provider.

start_migration gibt sofort eine Job-ID zurück und läuft im Hintergrund – ein Kanal kann Stunden dauern, daher blockiert kein Tool-Aufruf. Der Agent fragt migration_status ab, das dasselbe Journal liest wie die CLI, sodass du und der Agent denselben Lauf beobachten.

Claude Code

/plugin marketplace add little-core-labs/rad-migrate
/plugin install rad-migrate

Dann /rad-migrate @yourchannel.

Skripterstellung

--json gibt ein einzelnes parsebares Ergebnis auf stdout aus und streamt NDJSON-Fortschrittsereignisse auf stderr, sodass die beiden nie verschachtelt werden:

rad-migrate plan @yourchannel --json | jq '.to_migrate'

Docker

Enthält Node, ffmpeg und yt-dlp, sodass nichts installiert werden muss.

docker run --rm \
  -e RAD_API_KEY \
  -v "$PWD/work:/work" \
  ghcr.io/little-core-labs/rad-migrate @yourchannel --workdir /work

Die Browser-Cookie-Extraktion kann in einem Container nicht funktionieren, also mounte eine cookies.txt und verwende --cookies-file, falls du sie brauchst.


Konfiguration

Flags schlagen Umgebungsvariablen, Umgebungsvariablen schlagen .env, .env schlägt Standardwerte. Kopiere .env.example in .env, um loszulegen.

Variable

Zweck

RAD_API_KEY

Erforderlich. Dein Rad-TV-API-Schlüssel.

RAD_MIGRATE_CHANNEL

Zielkanal

RAD_MIGRATE_WORKDIR

Downloads und Status, Standard ./rad-migrate-work

RAD_MIGRATE_COOKIES_FROM_BROWSER

firefox, chrome, …

RAD_MIGRATE_COOKIES_FILE

Pfad zu einer cookies.txt

Dein API-Schlüssel wird nie in Status, Logs oder --json-Ausgabe geschrieben. Alles, was rad-migrate ausgibt, durchläuft zuerst einen Schwärzungsfilter, und es gibt einen Test, der das bestätigt. Siehe SECURITY.md.


Fehlerbehebung

Alles wird in 360p heruntergeladen. Führe rad-migrate doctor @yourchannel aus. Fast immer fehlt eine JavaScript-Laufzeitumgebung (installiere Node 22+) oder eine beeinträchtigte Sitzung (rad-migrate setup-potoken).

„Melde dich an, um zu bestätigen, dass du kein Bot bist“. YouTube drosselt. rad-migrate reduziert automatisch die Geschwindigkeit und verringert seine API-Aufrufe pro Video. Wenn es anhält, warte – die Drosselung ist pro Sitzung und hebt sich auf.

Chrome-Cookies können unter Windows nicht gelesen werden. Das ist seit Chrome 127 konstruktionsbedingt so. Verwende Firefox oder --cookies-file.

Eine Transkodierung ist auf Rad fehlgeschlagen. Der Upload hat funktioniert; die Konvertierung nicht. Wiederhole mit rad-migrate retry @yourchannel. Videos werden erst als erledigt gemeldet, wenn Rad die Verarbeitung bestätigt, sodass ein Fehler hier sichtbar ist und nicht still.

Es ist langsam. Absichtlich. YouTube drosselt die Extraktions-API pro Sitzung, daher passt rad-migrate sein Tempo an, um einen ganzen Kanal zu überstehen, anstatt in eine Sperre zu sprinten.

Weitere Details: skills/rad-migrate/references/troubleshooting.md.


Eigentum

Dieses Tool existiert für Creator, die ihre eigene Arbeit auf eine Plattform ihrer Wahl verschieben. Das Herunterladen von Videos anderer Personen, um sie erneut zu veröffentlichen, ist sowohl ein Urheberrechtsproblem als auch ein Problem mit den YouTube-Nutzungsbedingungen, und dafür ist das nicht gedacht.

Wenn du deine eigenen Originale ohne Bot-Erkennung im Prozess möchtest, exportiert Google Takeout die Quelldateien, die YouTube für deinen Kanal speichert. Es ist langsamer und manueller, aber es ist der vollständig sanktionierte Weg.


Mitwirken

Siehe CONTRIBUTING.md.

git clone https://github.com/little-core-labs/rad-migrate && cd rad-migrate
uv sync --dev
uv run pytest

Quellen und Ziele stehen hinter Protokollen in source/base.py und dest/base.py — neue sind willkommen.

Lizenz

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