Syncs YouTube subscriptions locally using yt-dlp. Reads exported subscriptions CSV and downloads latest videos from each channel.
yt-sync -s subscriptions.csv -o ~/Videos/YouTubeGet subscriptions CSV from Google Takeout:
- Click "Deselect all", then select only "YouTube and YouTube Music"
- Click "All YouTube data included" → "Deselect all" → select only "subscriptions" → "OK"
- Click "Next step" → "Create export" and wait for the email with download link
- Extract the archive and find
YouTube and YouTube Music/subscriptions/subscriptions.csv
Pass extra flags to yt-dlp after --:
yt-sync -s subs.csv -o out -- --windows-filenames --cookies-from-browser firefox --js-runtimes bunThese are just examples of useful yt-dlp flags, not requirements.
Sync YouTube subscriptions using yt-dlp
Usage: yt-sync [OPTIONS] --subscriptions <SUBSCRIPTIONS> --output <OUTPUT> [-- <YT_DLP_ARGS>...]
Arguments:
[YT_DLP_ARGS]... Additional arguments passed to yt-dlp
Options:
-s, --subscriptions <SUBSCRIPTIONS>
YouTube subscriptions CSV export file
-o, --output <OUTPUT>
Output directory for downloaded videos
-l, --limit <LIMIT>
Max videos per channel (0 = unlimited) [default: 1]
--skip-shorts <SKIP_SHORTS>
Skip YouTube Shorts [default: true] [possible values: true, false]
-p, --parallel <PARALLEL>
Number of parallel downloads [default: 4]
-r, --retries <RETRIES>
Retry attempts for failed downloads [default: 3]
--retry-delay <RETRY_DELAY>
Delay between retries in seconds [default: 5]
--yt-dlp-path <YT_DLP_PATH>
Path to yt-dlp binary
--yt-dlp-version <YT_DLP_VERSION>
yt-dlp version to download if not found [default: 2025.12.08]
--no-version-warning
Suppress yt-dlp version mismatch warning
--no-ffmpeg-warning
Suppress ffmpeg not found warning
--color <COLOR>
Color output mode [default: auto] [possible values: auto, always, never]
--progress <PROGRESS>
Progress display style [default: auto] [possible values: auto, interactive, plain]
--debug
Print debug info and full yt-dlp output
--thumbnail <THUMBNAIL>
Save video thumbnails [default: true] [possible values: true, false]
--slim-metadata <SLIM_METADATA>
Save trimmed video metadata as .info.json [default: true] [possible values: true, false]
-h, --help
Print help
- yt-dlp - does the actual downloading (auto-downloaded if not found)
- ffmpeg - required by yt-dlp to merge video+audio into best quality (without it, falls back to lower quality pre-merged formats)
Requires Rust 1.85+ (2024 edition).
cargo build --release
cp target/release/yt-sync ~/.local/bin/Or run directly without compiling:
cargo install rust-script
rust-script yt-sync.rs -s subs.csv -o outMIT