Modern Python CLI for archiving YouTube playlists with media-server metadata support
Project description
ytdl-archiver
Modern Python CLI for archiving YouTube playlists with media-server-friendly sidecar files.
Dependencies
- Python 3.14+
uv- FFmpeg on
PATH - (Recommended) External JavaScript runtime (
denoorNode.js) for full yt-dlp extraction compatibility - (Recommended) Firefox recommended for cookie extraction
- (Optional) Rust for setup TUI
Install
Install with uv (recommended):
uv tool install ytdl-archiver
Or with pip:
pip install ytdl-archiver
From source (development):
git clone https://github.com/htmlgxn/ytdl-archiver.git
cd ytdl-archiver
uv sync
Quick Start
1. Run first-time setup
ytdl-archiver archive
If ~/.config/ytdl-archiver/config.toml is missing, setup runs automatically on non-help commands and generates:
~/.config/ytdl-archiver/config.toml~/.config/ytdl-archiver/playlists.toml
You can also run setup directly:
ytdl-archiver init
2. Define playlists
Edit ~/.config/ytdl-archiver/playlists.toml:
[[playlists]]
id = "UUxxxxxxxxxxxxxxxxxxxxxx"
path = "Music/Example Channel"
name = "Example Music Channel"
[playlists.download]
format = "bestaudio"
write_subtitles = false
write_thumbnail = true
Notes:
[[playlists]]entries are loaded from theplaylistsarray.- If both
playlists.tomlandplaylists.jsonexist in the config directory, TOML is preferred. - Playlist download overrides accept canonical snake_case keys and yt-dlp-style aliases (for example
write_subtitlesandwritesubtitles).
3. Run archive
ytdl-archiver archive
Core Commands
ytdl-archiver --help
ytdl-archiver archive --help
ytdl-archiver convert-playlists --help
ytdl-archiver init --help
Documentation
- Docs index:
docs/index.md - CLI reference:
docs/cli.md - Configuration reference:
docs/configuration.md - Development/contributing:
docs/development.md - Migration notes:
MIGRATION.md - Terminal output modes:
docs/terminal-output.md
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ytdl_archiver-0.2.8.tar.gz.
File metadata
- Download URL: ytdl_archiver-0.2.8.tar.gz
- Upload date:
- Size: 2.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a97e33085ed0c6f941217c653e9e3137343a94743e85e3e0329c4d318bb8492
|
|
| MD5 |
89910380afb52db34dff1217f52bad2e
|
|
| BLAKE2b-256 |
987505523065ca1de7620e4f4d683159a5c04a21f9c5cb4ccc89eb374f9ce845
|
Provenance
The following attestation bundles were made for ytdl_archiver-0.2.8.tar.gz:
Publisher:
release.yml on htmlgxn/ytdl-archiver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ytdl_archiver-0.2.8.tar.gz -
Subject digest:
7a97e33085ed0c6f941217c653e9e3137343a94743e85e3e0329c4d318bb8492 - Sigstore transparency entry: 975078627
- Sigstore integration time:
-
Permalink:
htmlgxn/ytdl-archiver@6d612ba10c26f0f34f5fbb496719758a64e81d7c -
Branch / Tag:
refs/tags/v0.2.8 - Owner: https://github.com/htmlgxn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@6d612ba10c26f0f34f5fbb496719758a64e81d7c -
Trigger Event:
push
-
Statement type:
File details
Details for the file ytdl_archiver-0.2.8-py3-none-any.whl.
File metadata
- Download URL: ytdl_archiver-0.2.8-py3-none-any.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
900edd34f7fb08b5e4f98b96d931fca8c3b9aa6ca4246f43f61fd0b0e963f94e
|
|
| MD5 |
8c287dc9b7ab6ba42491b4cb6cb37451
|
|
| BLAKE2b-256 |
fb8181fea8202df3d768f5711b7d1cdf0b2aecc228a927755884a538eafe5bbe
|
Provenance
The following attestation bundles were made for ytdl_archiver-0.2.8-py3-none-any.whl:
Publisher:
release.yml on htmlgxn/ytdl-archiver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ytdl_archiver-0.2.8-py3-none-any.whl -
Subject digest:
900edd34f7fb08b5e4f98b96d931fca8c3b9aa6ca4246f43f61fd0b0e963f94e - Sigstore transparency entry: 975078630
- Sigstore integration time:
-
Permalink:
htmlgxn/ytdl-archiver@6d612ba10c26f0f34f5fbb496719758a64e81d7c -
Branch / Tag:
refs/tags/v0.2.8 - Owner: https://github.com/htmlgxn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@6d612ba10c26f0f34f5fbb496719758a64e81d7c -
Trigger Event:
push
-
Statement type: