Skip to main content
Glama

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

pip がインストールできない2つのもの

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 ffmpeg

Node はオプションでもビルドツールでもありません。YouTube は HD ストリーム URL を引き渡すために JavaScript ランタイムを必要とし、これがないとダウンロードは失敗せずに静かに低画質に落ちます。ffmpeg は YouTube の別々のビデオストリームとオーディオストリームを結合します。

これらをインストールしたくない場合は、Docker イメージ を使用してください。ツールチェーン全体が同梱されています。


初回実行

4つのステップ。最初の3つは数秒で済み、何時間も節約できます。

1. マシンを確認します。

rad-migrate doctor

Node、ffmpeg、yt-dlp、ディスク容量、Rad の認証情報を検証します。

2. 実際に得られる画質を確認します。

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

実際の動画を1つプローブします。長時間の実行前にできる最も有用なことです。劣化した YouTube セッションはすべてを 360p に制限しますが、これは5秒で検出できます。1ファイルずつ無駄にする代わりに。

3. 何が移行されるかを確認します。

rad-migrate plan @yourchannel

ダウンロードも公開も行いません。動画、Rad にすでにあるもの、フィルタで除外されたものを表示します。

4. 最初に1本の動画を移行し、その後残りを移行します。

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

--limit 1 の実行で、認証情報、チャンネル、アップロードパス、トランスコードが、長時間の実行に着手する前に検証されます。


クッキーは必要ですか? おそらく不要

この分野のほとんどのツールは、cookies.txt をエクスポートするように指示することから始まります。rad-migrate はそうしません。通常は必要ないからです。そして、必要な場合でも、クッキーは最初の手段ではなく最後の手段です。

rad-migrate doctor @yourchannel で確認できます。1080p と報告されたら完了です。アカウントもセットアップも設定も不要です。

上限が報告された場合、rad-migrate はそれを修正する1つのコマンドをこの順序で示します。

1. 発信元証明トークン — Google アカウントは関与しません。

rad-migrate setup-potoken

YouTube はますます「発信元証明」トークンを要求するようになっており、現在は各動画 ID にバインドされているため、トークンを手動で抽出することはできません。これは、トークンを生成するプロバイダーをインストールします。自己完結型のバイナリ1つで、GitHub が固定リリースに対して公開する SHA-256 チェックサムで検証されます。Node、npm、Docker、サインインは不要です。ダウンロードする内容を正確に表示し、実行前に確認を求めます。rad-migrate setup-potoken --remove で削除できます。

2. ブラウザセッション — それだけでは不十分な場合のみ。

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

ブラウザから直接クッキーを読み取ります。手動エクスポートは不要です。Firefox を推奨します。 Chrome 127 以降、Windows はクッキー暗号化キーを Chrome プロセスにバインドするため、外部ツールは Chrome、Edge、Brave のクッキーを Windows で読み取ることができません。rad-migrate はこれを検出し、復号エラーで失敗する代わりにその旨を伝えます。

知っておくべきこと: これは簡単な段階ではなく、リスクのある段階です。サインインした自分のセッションに対して一括ダウンロードすることは、YouTube の不正使用検出システムが探すパターンです。そして、自分のチャンネルを移行するクリエイターにとって、そのセッションはチャンネルが置かれているアカウントに属しています。上記のトークンルートはアカウントに一切触れません。

3. クッキーファイル — 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

@ハンドル、ハンドル、完全な URL、または UC… チャンネル ID のいずれでも機能します。

すべてのコマンドは --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

フラグ

機能

--channel

宛先 Rad チャンネル (ID または名前)

--create-channel

存在しない場合に Rad チャンネルを作成

--limit N

この実行を N 本の動画に制限 — 最初のテストに最適

--newest N

最新の N 本のみ

--since YYYY-MM-DD

この日付より前にアップロードされたものは対象外

--landscape-only

縦長動画をスキップ

--min-duration / --max-duration

秒単位の範囲

--quality

hd-strict (デフォルト)、hd-preferred、または best

--min-height

画質の下限、デフォルト 720

--allow-sd

失敗する代わりに標準画質を受け入れる

--playlist TITLE

移行されたものからプレイリストを作成

--cleanup

Rad が処理を確認したらローカルファイルを削除

--workdir

ダウンロードと再開状態が保存される場所

--skip-preflight

実行前チェックをスキップ

--json

機械可読な出力

画質は想定ではなく検証されます

デフォルトの hd-strict では、HD で取得できない動画は標準画質で保存されるのではなく失敗します。また、完了したすべてのダウンロードは、要求されたものではなく、実際にディスクに保存されたものを確認するためにプローブされます。失敗が完了として記録されることはないため、次の実行ではより健全なセッションで再試行されます。通常はそれで十分です。

任意の解像度で動画を取得したい場合は、--allow-sd を渡してください。


最終的に得られるもの

Rad 上: 動画ごとに1つのコンテンツアイテム。元のタイトル、説明、サムネイル、公開日、および要求した場合はアップロード順のプレイリストが含まれます。縦長動画は縦長のまま公開されます。動画は、アップロードが成功しただけでなく、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 が処理を確認した後、各フォルダを削除します。チャンネルは簡単に数十ギガバイトに達する可能性があります。


再開と2回目の実行

中断しても安全、再実行しても安全です。状態は一度に1動画ずつ進み、即座に書き込まれるため、クラッシュや Ctrl-C で失われるのは進行中の動画だけです。

再実行は冪等です。rad-migrate はローカルファイルを信頼するのではなく、Rad にチャンネル上に何があるかを尋ねるためです。したがって、別のマシンでローカル状態がまったくなくても、2回目の実行で同じ動画が2回公開されることはありません。

state.db はキャッシュであり、真実のソースではありません。削除すると、次の実行で再スキャンされます。それでも二重公開はされません。

既知の制限

これらはすべて現在の Rad API に起因するもので、docs/rad-api-notes.md に提案された修正とともに詳細に文書化されています。

制限

理由

重複排除はタイトル + 公開日で一致

API にソース ID を記録するフィールドがないため、正確な一致は不可能

重複排除は最新100件のみ

コンテンツ一覧エンドポイントは100件に制限。rad-migrate は黙って過小報告するのではなく警告する

削除は不可

API は unpublish を公開しているが、コンテンツやプレイリストを削除するものはない

字幕はアップロードされない

ダウンロードしてローカルに保持される。Rad にはキャプションエンドポイントがない


AI エージェントから使用

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 はジョブ ID を即座に返し、バックグラウンドで実行されます。チャンネルは数時間かかる可能性があるため、ツール呼び出しがブロックされることはありません。エージェントは migration_status をポーリングします。これは CLI と同じジャーナルを読み取るため、あなたとエージェントは同じ実行を監視できます。

Claude Code

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

その後 /rad-migrate @yourchannel。

スクリプト

--json は単一の解析可能な結果を標準出力に置き、NDJSON の進行状況イベントを標準エラーにストリーミングするため、2つが混在することはありません:

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.txt をマウントし、--cookies-file を使用してください。


設定

フラグは環境変数に勝り、環境変数は .env に勝り、.env はデフォルトに勝ります。.env.example を .env にコピーして開始してください。

変数

目的

RAD_API_KEY

必須。Rad TV API キー。

RAD_MIGRATE_CHANNEL

宛先チャンネル

RAD_MIGRATE_WORKDIR

ダウンロードと状態、デフォルト ./rad-migrate-work

RAD_MIGRATE_COOKIES_FROM_BROWSER

firefox、chrome、…

RAD_MIGRATE_COOKIES_FILE

cookies.txt へのパス

API キーが状態、ログ、または --json 出力に書き込まれることはありません。rad-migrate が出力するすべては、最初に編集フィルタを通過し、それを検証するテストがあります。SECURITY.md を参照してください。


トラブルシューティング

すべてが 360p でダウンロードされる。 rad-migrate doctor @yourchannel を実行してください。ほとんどの場合、JS ランタイムの欠落 (Node 22+ をインストール) または劣化したセッション (rad-migrate setup-potoken) が原因です。

「ロボットではないことを確認するためにサインインしてください」 YouTube がスロットリングしています。rad-migrate は自動的にバックオフし、動画ごとの API 呼び出しを減らします。続く場合は待ってください。スロットルはセッションごとで、解除されます。

Windows で Chrome のクッキーが読み取れない。 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

Related MCP Connectors

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.
    22 npm
    3
    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.
    534 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to manage YouTube channels directly, including video publishing, SEO optimization, playlist curation, community interaction, and traffic analytics, all through local OAuth.
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to read transcripts of any public video, research channels, analyze performance, read comments, and manage multiple owned channels.
    16
    83 npm
    MIT