Automation and scraping · Edition No. 13 · 7 Sep 2026

jmbannon/ytdl-sub

A YAML subscription layer over yt-dlp — competitors' new uploads arrive nightly with metadata attached.

← Automation and scrapingRead the whole edition →
07

jmbannon/ytdl-sub

💎 hidden gem
ytdl-sub: channels on a schedule. Files every new video with its details.

2.9k stars · GPL-3.0 · 2026.08.26.post1 (2026-08-26) · Track this in Rising ↗

A YAML subscription layer over yt-dlp — competitors' new uploads arrive nightly with metadata attached.

Verified26 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive90

Last code pushed 19 Oct 2026, 8 days before this check.

Releases85

Latest release 2026.08.26.post1 on 26 Aug 2026.

Maturity90

Public since September 2021, about 5 years.

Adoption69

2,983 stars and 110 forks.

Activity25

3 commits and 5 new issues in the last 90 days.

Community80

41 contributors. 3 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence GPL-3.0: free to use; software you hand out that includes it must be GPL tooSetup effort 3 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 26 Oct 2026 from the repository on GitHub. Covered in Edition 13.

▶Repo detailsthe review · specs · pros & cons · install

What it does

It is a configuration layer on top of yt-dlp, the downloader that does the actual work. The channels and playlists to follow are described in one YAML file, a plain text format for settings. Each run fetches what is new, skips what it already has, and writes files into a folder pattern you define. It saves the title, description, upload date, tags, thumbnail and subtitles alongside each file, and can write metadata files for media servers. Presets cover the common cases, so a working setup is a few lines rather than a script. Version 2026.8.26 is on PyPI, dated 26 August 2026. It downloads and files only: it does not analyse anything, and it will not work from most rented servers, because the large video sites block data-centre addresses.

Why it matters

Who it suits. It suits anyone doing regular research on a set of channels, or keeping an archive of material they are entitled to keep. The value is in the saved text rather than the video: titles, tags and subtitles collected over months answer questions no single visit can. Skip it if a weekly manual look is enough, and skip it if there is no machine at home that can run on a schedule.

Verdict. Worth an hour if the research is recurring, and worth nothing if it is a one-off, where plain yt-dlp/yt-dlp (Ed. 6) is simpler. Set it to fetch metadata and subtitles only unless the video itself is needed, because full downloads fill a disk quickly. The licence is GPL-3.0, which is fine for something run as a tool. meeb/tubesync is the alternative if a web page to click is preferred over a text file.

Stars2.9k
LicenceGPL-3.0
Latest2026.08.26.post1 (2026-08-26)checked 7 Sep 2026
Written inPython
NeedsDocker Compose, Docker and a GPU
RunsSelf-hosted on your own server
Summary (Key Points)from the README
Key features
  • Media server output: Formats downloads for Kodi, Jellyfin, Plex, Emby, and modern music players, with no additional plugins or external scrapers.
  • YouTube channels as TV shows: Organizes channel downloads in a layout that Plex and Jellyfin can read as TV shows.
  • Music videos and concerts: Supports organizing music videos and concerts for Kodi and Jellyfin.
  • SoundCloud discographies: Downloads SoundCloud discographies and writes music tags through the beets API.
  • Bandcamp discographies: Downloads Bandcamp discographies as a supported media type.
  • Prebuilt presets: Subscriptions are YAML files that import presets, so many users can start downloading without writing config from scratch.
  • Flexible formatting: Aims to give maximum flexibility for file and metadata formatting while keeping the setup simple.
  • Custom configs: Any part of the process can be changed with custom configs, backed by a walk-through guide, example configurations, and detailed field documentation on readthedocs.
  • Web-GUI Docker image: Bundles LSIO's code-server image with ytdl-sub preinstalled, which the README calls the recommended way to use it.
Ways to install
Platform or methodWhat it needsEffort
Docker ComposeDocker; the README does not list further requirementsNot stated in README
Web-GUIDocker; uses the LSIO code-server image with ytdl-sub preinstalled (recommended)Not stated in README
HeadlessDocker; runs without the Web-GUINot stated in README
CPU / GPU PassthroughDocker with CPU or GPU passthrough; no further detail givenNot stated in README
Docker CLIDocker, used from the command lineNot stated in README
WindowsNot stated in READMENot stated in README
UnraidNot stated in READMENot stated in README
LinuxNot stated in READMENot stated in README
Linux ARMNot stated in READMENot stated in README
PIPPython and pip; the README does not state versionsNot stated in README
Local InstallNot stated in READMENot stated in README
Local Docker BuildDocker, building the image locallyNot stated in README
Important
  • Setup details missing: The README lists twelve installation methods but gives no system requirements, step-by-step instructions, or effort estimates for the non-Docker options.
  • Docker is the documented path: The README describes Docker installs in detail and calls the Web-GUI image the recommended way to use the tool.
  • Downloads rely on yt-dlp: Media is fetched through yt-dlp, so the tool's download behavior depends on that external project.
  • Config knowledge may be needed: Subscriptions are defined in YAML, and changes beyond the prebuilt presets require custom configs documented on readthedocs.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
3 / 5
Payoff
4 / 5
Good
  • Scheduling, duplicate-skipping and file naming are handled, so none of that has to be written.
  • Built on yt-dlp, which is widely used and well maintained, so there is no new download logic to trust.
  • Its output drops neatly into a small database for querying later.
Watch for
  • GPL-3.0 licence: a tool to run, not a library to build into a closed product.
  • Data-centre addresses are blocked by the large video sites, so it has to run from a home or office connection.
  • Full video downloads fill a disk fast, and the default settings are generous.
Install
brew install ffmpeg        # or: sudo apt install ffmpeg
python3 -m venv venv
source venv/bin/activate
pip install ytdl-sub
ytdl-sub sub subscriptions.yaml
Screenshots
jmbannon/ytdl-sub: GitHub preview cardjmbannon/ytdl-sub: Screenshot 1jmbannon/ytdl-sub: Screenshot 2jmbannon/ytdl-sub: Screenshot 3jmbannon/ytdl-sub: Screenshot 4

On Stack Radar: Data & Research › Web Scraping & Crawling › Change Monitoring.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.