Skip to content
CAI
Software that uses CAICheck a score

ytdl-org/youtube-dl

41.3

Weak · 22 September 2026

282.9k

lines of production code

Python

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a command-line utility for downloading and extracting media content from a wide variety of video and audio hosting sites. It provides robust extraction capabilities across numerous platforms, handling complex protocols like HLS and DASH, while offering advanced features such as shell completion, automated release page generation, and modular post-processing. The codebase is structured to support extensive unit testing and continuous integration of new site extractors and downloaders.

Features

Add shell completion scripts for bash, zsh, and fish

The devscripts directory now includes generators and templates for shell completion scripts for bash, zsh, and fish. This allows users to enable tab-completion for youtube-dl commands and options in their respective shells. The scripts dynamically generate completion definitions based on the current command-line options, including support for file and directory completion for specific arguments like --load-info and --batch-file.

devscripts · high confidence

Added youtube-dl wrapper script

A new executable script, bin/youtube-dl, has been added to the repository. This script serves as a wrapper for the youtube\_dl Python module, allowing users to invoke the tool directly from the command line.

bin · high confidence

Automated generation of download, supported sites, and release feed pages

The gh-pages build process now automatically generates the download page, the supported sites list, and an Atom release feed. The new scripts in devscripts/gh-pages read version metadata and extractor information to produce static HTML and XML files, replacing manual updates. This ensures the website content stays synchronized with the latest releases and supported sites without manual intervention.

devscripts/gh-pages · high confidence

Architecture

Restructure postprocessor module into separate files

The postprocessor package has been refactored by splitting the previously monolithic code into individual modules for each postprocessor (e.g., \embedthumbnail.py\, \ffmpeg.py\, \xattrpp.py\). This change improves code organization and maintainability by separating concerns into dedicated files while maintaining the same functionality for users.

_youtube\dl/postprocessor · high confidence

Behavioural changes

Improved format selection and metadata handling

The default format specification has been improved to better handle video and audio formats, and the system now ensures that metadata such as extractor IDs and titles are correctly propagated from the final extractor rather than using generic placeholders. Additionally, the format selection logic now allows grouping specifiers with parentheses and supports filtering by properties like audio sampling rate, providing more precise control over downloaded content.

_youtube\dl · high confidence

Multiple extractor fixes and improvements

This update addresses a wide range of extraction issues across numerous video and audio platforms. Key changes include fixing extraction for YouTube (including signature decryption, DASH manifest handling, and search/feed improvements), Twitch (login and clip extraction), and various other sites such as Pornhub, XHamster, and Dailymotion. The update also adds support for new sites like Space.com, Slideshare, and DCTP.tv, while removing or modernizing several outdated extractors. Additionally, the generic extractor has been enhanced to support more embed types and improve metadata extraction.

_youtube\dl/extractor · high confidence

Refactor downloader architecture into modular components

The download system has been restructured into distinct, modular components for each protocol (HLS, DASH, F4M, HTTP, RTMP, etc.) and external downloaders. This change introduces a new \FragmentFD\ base class to handle fragmented media downloads and a \get\_suitable\_downloader\ function to select the appropriate downloader based on the video's protocol and configuration. Users benefit from improved stability, better error handling, and the ability to use external downloaders like curl or wget more reliably.

_youtube\dl/downloader · high confidence

Fixes

Fix extraction for multiple video hosting sites

The tool now correctly extracts content from sites including Iwara, Bilibili, and Youku, resolving issues where downloads or metadata retrieval had previously failed due to changes in the source websites.

(repo-wide) · high confidence

Test coverage

Add test infrastructure and unit tests for the download and extractor systems; Added M3U8 test fixtures for multiple video platforms; Added SWF interpreter test suite for core language features.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 39 → 41 (+1.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 60 → 76 (+15.4)
  • Architecture 100 → 100 (-0.1)
  • Maturity 49 → 41 (-8.2)
  • Readiness 36 → 43 (+6.6)
  • Security 29 → 30 (+0.6)

Resolved (95)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (10 lines × 2) (youtube_dl/YoutubeDL.py)
  • Duplicated block (10 lines × 2) (youtube_dl/downloader/external.py)
  • Duplicated block (10 lines × 2) (youtube_dl/extractor/ard.py)
  • Duplicated block (10 lines × 2) (youtube_dl/extractor/atresplayer.py)
  • Duplicated block (10 lines × 2) (youtube_dl/extractor/byutv.py)
  • Duplicated block (10 lines × 2) (youtube_dl/swfinterp.py)
  • Duplicated block (10 lines × 5) (youtube_dl/extractor/generic.py)
  • Duplicated block (11 lines × 2) (youtube_dl/extractor/dplay.py)
  • Duplicated block (11 lines × 2) (youtube_dl/extractor/generic.py)
  • Duplicated block (12 lines × 2) (youtube_dl/YoutubeDL.py)
  • Duplicated block (12 lines × 2) (youtube_dl/downloader/dash.py)
  • Duplicated block (12 lines × 2) (youtube_dl/extractor/common.py)
  • Duplicated block (12 lines × 2) (youtube_dl/extractor/morningstar.py)
  • Duplicated block (12 lines × 2) (youtube_dl/extractor/youtube.py)
  • Duplicated block (12 lines × 2) (youtube_dl/options.py)
  • Duplicated block (12 lines × 2) (youtube_dl/utils.py)
  • Duplicated block (12 lines × 3) (youtube_dl/options.py)
  • Duplicated block (12 lines × 3) (youtube_dl/options.py)
  • …and 75 more

New (272)

  • CI installs an unverified third-party binary (.github/workflows/ci.yml)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (youtube_dl/YoutubeDL.py)
  • Duplicated block (10 lines × 2) (youtube_dl/extractor/npo.py)
  • Duplicated block (10 lines × 3) (youtube_dl/extractor/byutv.py)
  • Duplicated block (10 lines × 7) (youtube_dl/options.py)
  • Duplicated block (10–11 lines × 4) (youtube_dl/options.py)
  • Duplicated block (10–11 lines × 7) (youtube_dl/options.py)
  • Duplicated block (10–12 lines × 4) (youtube_dl/options.py)
  • Duplicated block (11 lines × 2) (youtube_dl/extractor/ard.py)
  • Duplicated block (11 lines × 2) (youtube_dl/extractor/byutv.py)
  • Duplicated block (11 lines × 2) (youtube_dl/extractor/howcast.py)
  • Duplicated block (11 lines × 2) (youtube_dl/utils.py)
  • Duplicated block (11 lines × 3) (youtube_dl/options.py)
  • Duplicated block (11 lines × 3) (youtube_dl/options.py)
  • Duplicated block (11 lines × 4) (youtube_dl/options.py)
  • Duplicated block (11 lines × 4) (youtube_dl/options.py)
  • Duplicated block (11–12 lines × 2) (youtube_dl/extractor/byutv.py)
  • Duplicated block (11–12 lines × 4) (youtube_dl/options.py)
  • Duplicated block (11–12 lines × 6) (youtube_dl/options.py)
  • …and 252 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

ytdl-org/youtube-dl was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 956b8c585591b401a543e409accb163eeaaa1193 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-be726e82e277.