join_nonempty
, add **kwargs
to unpack
(#11559) by Grub4Ksubs_list_to_dict
: Add lang
default parameter (#11508) by Grub4Kext
override for thumbnails (#11545) by bashonlysort_order
extractor-arg (#11569) by bashonlydefault
group
If you're installing yt-dlp with pip/pipx or requiring yt-dlp in your own Python project, you'll need to specify yt-dlp[default]
if you want to also install yt-dlp's optional dependencies (which were previously included by default). Read moreyt-dlp.exe
and yt-dlp_x86.exe
binaries are no longer supported on Windows 7. Read more.jpe
extension (#11408) by bashonly--plugin-dirs
(#11334) by bashonly--netrc
empty string parsing for Python <=3.10 (#11414) by bashonly, Grub4Kfind_element
by class (#11402) by bashonlyfind_element
and find_elements
(#11443) by bashonly, Grub4Klanguage
to ISO639-2 for ISM formats (#11359) by bashonlymake_changelog
: Parse full commit message for fixes (#11366) by bashonly, Grub4Kdefault
group
If you're installing yt-dlp with pip/pipx or requiring yt-dlp in your own Python project, you'll need to specify yt-dlp[default]
if you want to also install yt-dlp's optional dependencies (which were previously included by default). Read moreyt-dlp_min.exe
will be the last, and it's actually a PyInstaller-bundled executable so that yt-dlp users updating their py2exe build with -U
will be automatically migrated. Read more--plugin-dirs
(#11277) by coletdjnz, imranh2Popen
: Reset PyInstaller environment (#11258) by bashonly, Grub4Ksanitize_path
: Reimplement function (#11198) by Grub4K_VALID_URL
(#11269) by seproDevpy2exe
builds to win_exe
(#11256) by bashonlymacos-13
image for macOS builds (#11236) by bashonlymake_lazy_extractors
: Force running without plugins (#11205) by Grub4Kios,mweb
(#11190) by seproDevnone
arg to negate --convert-subs
and --convert-thumbnails
(#11066) by kieraneglin--cookies-from-browser chrome
issue (#11090) by seproDevmimetype2ext
: Recognize aacp
as aac
(#10860) by bashonly_VALID_URL
(#10867) by bashonly, sahilsinghss73id
values (#10726) by garret1317po_token
, visitor_data
, data_sync_id
extractor args (#10648) by bashonly, coletdjnz, seproDev (With fixes in fa2be9a by bashonly)player_client
s in extractor-arg (#10710) by bashonlyhttps
formats (#11102) by bashonlycurl-cffi
version to < 0.7.2 (#11092) by bashonlyslice
implementation (#10664) by seproDevunified_timestamp
: Recognize Sunday (#10589) by bashonlyn
function name extraction for player 3400486c
(#10542) by bashonlysetuptools
version (#10493) by bashonlynoprogress
if test=True
with --quiet
and --verbose
(#10454) by Grub4Kauto-tty
and no_color-tty
for --color
(#10453) by Grub4Kparse_codecs
: Fix parsing of mixed case codec strings by bashonlylegacy_ssl
(#10440) by bashonlylegacy_ssl
request extension (#10448) by coletdjnzcurl_cffi
0.7.X by coletdjnzn
function extraction fallback (#10396) by pukkandan, seproDevn
function name extraction (#10390) by bashonly, seproDev--ignore-no-formats-error
(#10345) by Grub4Kplaylist_channel
and playlist_channel_id
fields (#10266) by bashonly--cookies-from-browser
DE detection on Linux (#10237) by peisenwang_VALID_URL
and embed extraction (#10215) by bashonlykey_query
extractor-arg by bashonlycampaign_id
extraction (#10070) by bashonlydownload
format extraction (#10125) by bashonlyrequests
version to 2.32.2 (#10079) by bashonly--write-pages
filenames (#9879) by minamotorin (With fixes in c999bac by bashonly)_search_nextjs_data
non fatal (#8937) by Grub4Kcdn
extractor-arg (#9666) by bashonly--geo-verification-proxy
support (#9817) by fireattack_VALID_URL
(#9866) by carusocr_VALID_URL
(#9949) by bohwaz, seproDevCloudflareStreamIE
explicitly (#9672) by llamasblade/reels/
URLs (#9539) by amir16yp--no-playlist
message (#9488) by pzhlkj6612device_id
extractor-arg (#9951) by bashonlyextensions
attribute to Response
(#9756) by bashonlyhatch
, ruff
, pre-commit
and improve dev docs (#7409) by bashonly, Grub4K, seproDev--exec
with %q
on Windows
%
, \
and \n
.utils.Popen
has been patched accordingly.--progress-delta
(#9082) by Grub4K--impersonate
and --list-impersonate-targets
by bashonly, coletdjnz, Grub4K, pukkandan--no-break-on-existing
(#9610) by bashonlyfilesize_approx
calculation (#9560) by pukkandan, seproDevacodec
for single-codec containers by pukkandan--exec
with %q
(CVE-2024-22423) by Grub4K--cookies-from-browser
support for Firefox Flatpak (#9619) by un-deftraverse_obj
_VALID_URL
(#9636) by bashonlySSLKEYLOGFILE
environment variable (#9543) by luiso1979curl_cffi
by bashonly, coletdjnz, Grub4K, pukkandanimport datetime as dt
(#8978) by pukkandanfrom
stdlib imports in extractors by pukkandantraversal
: Separate traversal tests (#9574) by Grub4K--compat-options 2023
(#9084) by Grub4K (With fixes in ffff1bc by pukkandan)ydl._request_director
when needed by pukkandan (With fixes in dbd8b1b by Grub4k)--load-info-json
format selection errors (#9392) by bashonlyPermissionError
(#9229) by pukkandan, syntaxsurgerepr
of DateRange
, match_filter_func
by pukkandantraverse_obj
: Support xml.etree.ElementTree.Element
(#8911) by Grub4K--no-playlist
(#9139) by c-basalt--wait-for-video
(#9309) by hui1601_VALID_URL
(#9404) by Xpl0itU_VALID_URL
(#9320) by rvsit_VALID_URL
(#9218) by glensc_VALID_URL
(#8999) by FinnRGcreators
(#9258) by gmes78_VALID_URL
(#9044) by gmes78_VALID_URL
(#9232) by seproDev_CompatHTTPError
(#8871) by coletdjnzdefault
optional dependency group (#9295) by bashonly, Grub4Ksetup.py
and pyinst.py
(#9296) by bashonly, Grub4K, pukkandanactions/upload-artifact
to v4 and adjust workflows by bashonlyconda-incubator/setup-miniconda
to v3 by bashonlysecretstorage
for ARM builds by bashonlypyproject.toml
and hatchling
by bashonly (With fixes in 43cfd46)bundle
submodule by bashonlyactions/setup-python
to v5 by bashonlyhttp
and https
in _VALID_URL
(#8968) by seproDevinstall_deps
: Add script and migrate to it by bashonlytomlparse
: Add makeshift toml parser by Grub4Kread_stdin
obey --quiet
by pukkandanrelease_year
from release_date
(#8524) by seproDevNO_COLOR
environment variable (#8385) by Grub4K, prettykooltraverse_obj
: Move is_user_input
into output template (#8673) by Grub4Kmedia_type
field by trainman261media
elements in SMIL manifests (#8504) by seproDevshow
page (#8601) by bashonly, JC-Chungconcurrent_view_count
(#8600) by sonmezberkaygetheader
(#8606) by qbnurun_tests
: Create Python script (#8720) by Grub4K (With fixes in 225cf2b)README.md
by bashonly_VALID_URL
(#8576) by seproDev_VALID_URL
(#7692) by TravisDupessecretstorage
an optional dependency (#8585) by bashonlyhttp_headers
; extractors now only use specific headers--compat-option manifest-filesize-approx
(#8356) by bashonly--load-info-json
(#8521) by bashonlyhttp_headers
by coletdjnzxml.etree.ElementTree.Element
(#8582) by bashonly_VALID_URL
(#8368) by peci1POST
request to streams API endpoint (#8413) by bartbroere_VALID_URL
(#8426) by bashonly--file-allocation=none
(#8332) by CrendKing--live-from-start
(#8339) by bashonlyRequest Handler: requests: Add handler for requests
HTTP library (#3668) by bashonly, coletdjnz, Grub4K (With fixes in 4e38e2a)
Adds support for HTTPS proxies and persistent connections (keep-alive)
js_to_json
: Fix Date
constructor parsing (#8295) by awalgarg, Grub4Kwrite_xattr
: Use os.setxattr
if available (#8205) by bashonly, Grub4Kdownloader_options
by bashonly--extractor-retries inf
(#8328) by Grub4Kepisode
extraction (#8201) by xofeuploader_id
(#8244) by drzraf--exec
with %q
on Windows
""
instead of \"
.utils.Popen
has been patched to properly quote commands.--check-formats
by pukkandan--exec
with %q
(CVE-2023-40581) by Grub4KFFmpegFixupM3u8PP
may need to run with ffmpeg by pukkandantypes.NoneType
by pukkandan (With fixes in 25b6e8f)sqlite3.version
(#8167) by bashonlyplaylist_index
by pukkandanparse_duration
by bashonlyclean_podcast_url
: Handle more trackers (#7556) by bashonly, mabdelfattahjs_to_json
: Handle Array
objects by Grub4K, std-move--load-pages
by pukkandan_search_nuxt_data
more lenient by std-move_VALID_URL
(#8153) by kylegustavo_VALID_URL
(#7649) by simon300000_VALID_URL
(#7683) by AmirAflak_VALID_URL
by bashonlyPBSKidsIE
(#7602) by snixon/content
URL (#7592) by FinnRGm4v
(#7583) by Neurognostic--legacy-server-connect
(#7645) by bashonlymake_changelog
: Fix changelog grouping and add networking group (#8124) by Grub4K--add-header Cookie:
is deprecated and auto-scoped to input URL domainscookies
field to info.json and deprecate http_headers.Cookie
Cookie
headers are handled by Grub4KCookie
leaks on HTTP redirect by coletdjnzplaylist_index
etc even when with internal formatting by pukkandan_VALID_URL
(#7439) by AmanSal1, rdamas_VALID_URL
by bashonlyformats
by pukkandanis_favorited
(#7390) by bbilly1post_live
over 2 hours by pukkandan--no-conf
by pukkandan--download-sections
by pukkandan
*from-url
to obey time-ranges in URLfilesize
approximated from tbr
better by pukkandan_VALID_URL
s (#5812) by nixxoios
to default clients used by pukkandan
--compat-option playlist-match-filter
by pukkandan--no-quiet
by pukkandan--color
(#6904) by Grub4K--netrc-cmd
(#6682) by NDagestad, pukkandan--xff
by pukkandan-f-
(#7101) by ivanskodje, pukkandanYoutubedl-no-compression
header (#6876) by coletdjnz--print-to-file
by pukkandan--print
by pukkandan (With fixes in 17ba434)filepath
being copied to underlying format dict by pukkandanfilename
and urls
fields at all stages of --print
by pukkandan (With fixes in b5f61b6)__bool__
by pukkandanFormatSorter
: Improve size
and br
by pukkandan, u-spec-pngjs_to_json
: Implement template strings (#6623) by Grub4Klocked_file
: Fix for virtiofs (#6840) by brandon-dacribstrftime_or_none
: Handle negative timestamps by dirkf, pukkandantraverse_obj
write_string
: Fix noconsole behavior by Grub4Kurl_result
by pukkandanCharter_Direct
MSO as Spectrum
(#6824) by bashonlyParamountPressExpress
extractor (#6604) by bashonly_VALID_URL
(#7076) by HobbyistDevfragment_query
, variant_query
(#6600) by bashonly (With fixes in 9bfe0d1)hls_key
, variant_query
(#6567) by bashonly/shows/
URLs (#7225) by bashonly_extract_embed_urls
(#6383) by carusocrWinSports
and embed extraction (#6426) by bashonlyNBCStations
direct mp4 formats (#6637) by bashonlybeta.nebula.tv
(#6516) by unbeatable-101NhkRadiru
extractor (#6819) by garret1317NhkRadiruLive
: Add extractor (#7332) by garret1317MujRozhlas
: Add extractor (#7129) by stanoarnstream_key
header to downloader (#7224) by bashonly_VALID_URL
(#6522) by hatienl0i261299release_timestamp
(#7186) by CeruleanSkyformat_note
when -v
(#6254) by Lesmiscore, pukkandaninclude_duplicate_formats
by pukkandan-f17
by pukkandanchannel_is_verified
(#7213) by coletdjnzheatmap
data (#7100) by tntmod54321comment_count
(#6523) by nick-cdhttps
by pukkandan--progress-template
by pukkandanmake_changelog
: Various improvements by Grub4Kmake_changelog
: Stop at Release ...
commit by pukkandannightly
builds will be made after each push, containing the latest fixes (but also possibly bugs).--update
/-U
, a release binary will only update to its current channel (either stable
or nightly
).--update-to
option has been added allowing the user more control over program upgrades (or downgrades).--update-to
can change the release channel (stable
, nightly
) and also upgrade or downgrade to specific tags.--update-to CHANNEL
, --update-to TAG
, --update-to CHANNEL@TAG
--break-match-filters
by pukkandan--break-on-existing
with --lazy-playlist
by pukkandanLenientJSONDecoder
: Parse unclosed objects by pukkandanPopen
: Shim undocumented text_mode
property by Grub4KChangelog
by pukkandan--concat-playlist
--no-progress
when --print
title
completely non-fatal__bool__
and property
Cryptodome
imports_search_nuxt_data
by LowSuggestion912if
statementstraverse_obj
: Various improvements by Grub4Ktraverse_obj
: Fix more bugstraverse_obj
: Fix several behavioral problems by Grub4Ktime_seconds
to use the provided TZ by Grub4K, Lesmiscoremake_dir
by aionescupassthrough_module
EnhancedModule
pyinstaller
hooksCryptodome
uploader_id
extraction by bashonlyconsent.youtube
/live/
URLrmc
prefix by carusocrwav
by qulazNBC
and NBCStations
extractors by bashonlyNFLPlus
extractors by bashonlyOnDemandChinaEpisodeIE
by HobbyistDev, pukkandanstream.tvp.pl
by selfisekai--no-playlist
and add media view_count
when using GraphQL by Grub4KplayerConfig
extraction by LeoniePhiline, bashonlyViuOTTIndonesiaIE
extractor by HobbyistDevVLiveWebArchiveIE
by seproDev_VALID_URL
by carusocrmimetype2ext
: weba
is not standardwindows_enable_vt_mode
: Better error handlingpyproject.toml
/media
to VALID_URL
by HobbyistDevvideo_data
by HobbyistDevlanguage
to entries by Chrissi2812channel_id
by gschizasTikTokLive
extractor by JC-Chung--compat-options 2021,2022
--compat 2022
in your config to guard against future compat changes.video
--parse/replace-in-metadata
run at any post-processing stage--enable-file-urls
by coletdjnzaspect_ratio
ac4
to known codecsweba
to known extensionsgif
to --recode-video
--match-filter
stricter--cookies-from-browser
CLI parsingoriginal_url
in playlistsPlaylistEntries
_sort_formats
_extract_format
functions obey --ignore-no-formats
fragment_query
extractor arg for DASH and HLS by bashonly, pukkandanAccept-Encoding: identity
for initial request by coletdjnzmov
to vext
classproperty
: Add cache supportget_exe_version
: Detect broken executables by dirkf, pukkandanjs_to_json
: Fix bug in f55523c by ChillingPepper, pukkandanExtractorError
mutableFileDownloader.parse_bytes
into utilsutils
windows_enable_vt_mode
: Proper implementation by Grub4Krandom.choices
by freezboltzAmazonReviews
extractor by bashonlyNetverseSearch
extractor by HobbyistDevVimeoProIE
by bashonly, pukkandanpiped.video
by Bnyroytuser:
und
album_artist
by stelcodes--no-playlist
for anthology_VALID_URL
by skbehBrightcoveNewBaseIE
and fix embed extraction_VALID_URL
by muddi900Iq
JS regex by bashonly--wait-for-video
_VALID_URL
for NaverNowIE
by bashonlyDouyinIE
, improve _VALID_URL
by bashonly_VALID_URL
, add api_hostname
arg by bashonly--no-playlist
for multi-video tweets by Grub4K, bashonlyReferer
to m3u8 by nixxo--flat-playlist
--list
options not implying -s
in some cases by Grub4K, bashonlyformats=None
type
field, obey --retry-sleep extractor
, relax duration check for large segmentschapter
category by ajayyy, pukkandanLenientSimpleCookie
by Grub4Kfatal=False
for _search_nuxt_data
_generic_title
json_ld
type checks by Grub4Kjs_to_json
: Improve escape handling by Grub4Kstrftime_or_none
: Workaround Python bug on Windowstraverse_obj
: Always return list when branching, allow re.Match
objects by Grub4Kpy2exe
: Migrate to freeze API by SG5, pukkandanarmv7l
and aarch64
releases by MrOctopus, pukkandanconda
by mlampeset-output
with GITHUB_OUTPUT
by Lesmiscore100
for update errorsshutils.move
in restricted ACL mode on BSD by ClosedPort22, pukkandanpyinst
's argument passthrough by jahway603extract_flat
in download tests by coletdjnz, pukkandanconcurrent_view_count
for livestreams by coletdjnzduration
for premieres by nosooplive_status
by coletdjnz, pukkandanapproximate_date
return timestampBitChuteChannelIE
by flashdagger, pukkandanFoxNewsVideo
extractorMLBArticle
extractor by HobbyistDev_VALID_URL
by bashonlydata-movie-playlist
extraction by Lesmiscore_VALID_URL
by DoubleCouponDay_VALID_URL
release_timestamp
_VALID_URL
by freezboltz_VALID_URL
by m4tu4gset
to be passed as download_archive
by pukkandan, bashonly--download-sections
--config-location -
webpage_url
--ffmpeg-location
libc_ver
not be available on Windows Store version of Python%s
work in strfformat for all systems_get_mac_keyring_password
fail gracefullyfatal=False
in RetryManager
_search_json
able to parse lists%
in representation_id
of m3u8base_url
: URL paths can contain &
by elyse0js_to_json
: ImprovePopen.run
: Fix default return in binary modetraverse_obj
: Rewrite, document and add tests by Grub4Kmake_lazy_extractors
: Fix for Docker by josanabrpost_live
videos from start by Lesmiscore, pukkandanlazy-load-for-videos
embedsreporthistory
pageuploader_url
_VALID_URL
by coletdjnz_VALID_URL
_VALID_URL
by 0xGodspeed_VALID_URL
by LiviaMedeirosjw_config
regex by julien-hadleyjack_EMBED_REGEX
by coletdjnz--flat-playlist
by SuperSonicHub1_YT_INITIAL_PLAYER_RESPONSE_RE
_VALID_URL
by Grub4K_VALID_URL
by m4tu4g--use-extractors
--break-per-url --max-downloads
--alias
--cookies-from-browser
by bashonly, coletdjnz, pukkandanaext
for --prefer-free-formats
deprecation_warning
orderedSet_from_options
Popen
: Restore LD_LIBRARY_PATH
when using PyInstaller by Lesmiscoremake tar
should not follow DESTDIR
by satan1sttest_youtube_signature
--compat-option no-youtube-prefer-utc-upload-date
by coletdjnzflac
with premium account by jackyyf--video-password
by shreyasminocha_VALID_URL
by dirkf_VALID_URL
--download-archive
channels
--prefer-avconv
libatomicparsley.so
fixup_webp
get_compatible_ext
e.g.
by Lesmiscore_VALID_URL
swf
domain by aldoridhoni_VALID_URL
by masta79--compat-option no-live-chat
should disable danmaku--match-filter
-J
--merge-output-format
audio_channels
ffmpeg_location
in a contextvarNone
when the field didn't matchutils
and refactorbest*
live_status=post_live
by lazypete365_VALID_URL
by HobbyistDev_VALID_URL
None
certifi
is used--no-progress
for --wait-for-video
h
for HTML escapingerrnote=False
to parsers--config-location
get_domain
setup.py
_update_spec
when up to datedownload_ranges
by FirefoxMetzger_VALID_URL
_VALID_URL
by IONECarter, dirkf--downloader native
section_end
of clipschapters
_create_request
when headers is NoneBaseURL
in MPDparse_known_args
for --
compat.WINDOWS_VT_MODE
_downloader
_VALID_URL
_VALID_URL
--download-sections
to download video partially
--download-sections *1:10-2:20
--alias
--lazy-playlist
to process entries as they are received--retry-sleep
--playlist-items
-I
as alias for --playlist-index
--playlist-start
, --playlist-end
, --playlist-reverse
, --no-playlist-reverse
redundant--config-location -
to provide options interactively--no-update
stderr
with -q
--simulate --max-downloads
--live-from-start
by flashdagger_search_json
by coletdjnz, pukkandandefault
parameter to _search_json
by coletdjnz, pukkandan--load-pages
json_ld
with multiple @type
s_ALL_CLASSES
lazilysrc
attribute from HTML5 media elements by Lesmiscoree6ae51c123
functools.cache
ExtractorError
: Fix exc_info
ISO3166Utils
: Add EU
and AP
Popen
: Refactor to use contextmanagerlocked_file
: Fix for PyPy on Windows.git
folder to distinguish source
/unknown
functools.cached_property
FakeYDL
signatures by coletdjnzreport_progress
_download_...
methodsextractors.py
to _extractors.py
format_field
YoutubeDL.parse_outtmpl
innertube_host
and innertube_key
extractor args by coletdjnz_extract_chapters_from_description
comment_count
from webpage:ytnotifications
extractor by coletdjnzvideoRenderer
in _post_thread_continuation_entries
auth_token
from cookie by mnnmountComponent
WatchESPN
extractor by ischmidt20, pukkandandata-video-jw-id
_VALID_URL
navernow
extractor by pinguploader_id
field by Lesmiscoresouthpark.lat
extractor by darkxexSIGI_STATE
by dirkf, pukkandan, sulyi--client-certificate
, --client-certificate-key
, --client-certificate-password
--match-filter -
to interactively ask for each video--max-downloads
should obey --break-per-input
--legacy-server-connect
-s
for later stages of -O
--date today
--skip-unavailable-fragments
-q -F
--clean-infojson
FFmpegFixupM3u8PP
for live-streams if neededcookiefile
to be a text stream--test
--live-from-start
by Lesmiscorebyte_range
for EXT-X-MAP
fragment by fstirlitz-k
\0
from metadata--hls-prefer-mpegts
manifest_url
s after redirect by elyse0manifest_url
after redirects by elyse0classmethod
/property
where possible_extract_rss
is_html
: Handle double BOMlocked_file
: Ignore illegal seek on truncate
by jakeoghsanitize_path
: Fix when path is empty stringwrite_string
: Workaround newline issue in conhost
certifi
: Make sure the pem file existsWebSocketsWrapper
locked_file
: Do not give executable bits for newly created files by LesmiscoreYoutubeDLCookieJar
: Detect and reject JSON file by Lesmiscorecompat.imghdr
make uninstall
by MrRawesinstall -D
Makefile
by putnam--onedir
on macOSpyupgrade
) and sort imports (isort
):ytnotifications
extractor by krichbananaytstories:<channel UCID>
) by coletdjnz_VALID_URL
by vertanexpected_protocol
to a public fieldrelease_year
_VALID_URL
by ca-za_VALID_URL
by dirkfcertifi
if installed by coletdjnz--match-filters
as OR--sub-lang
is given--dump-user-agent
--abort-on-error
for subtitles--no-overwrite
for playlist infojson--print
with --ignore-no-formats
when url is None
by flashdagger--sleep-interval
--throttled-rate
autonumber
http_headers
--print-to-file
--wait-for-video
mhtml
formats from -f mergeall
--match-filter
Accept-Encoding
header from std_headers
by coletdjnz--dateafter
HttpieFD
_perform_login
function--remux-video
test_locked_file
format_decimal_suffix
: Fix for very large numbers by s0u1htraverse_obj
: Allow filtering by valuefilter_dict
, get_first
, try_call
__enter__
invocation by Lesmiscore.editorconfig
file by fstirlitzBSD
license of dependencies by MrRawesrequirements.txt
to pip distributions_download_json
_html_extract_title
AfreecaTVUserIE
by hatienl0i261299format_note
to m3u8 formatstv.telezueri.ch
by gogglegeo.dailymotion.com
by hatienl0i26129952efa4b312
_VALID_URL
xnxx3.com
by rozari0membership
tab__init__.py
after_filter
--live-from-start
format--print-to-file
-all
for --sub-langs
video_id
in ExtractorError
None
--add-header
without modifying std_headers
--abort-on-error
for "ffmpeg not installed"webpage_url_...
from webpage_url
and not input URL--write-link
due to unknown URL--http-accept-gzip=true
Cookies.binarycookies
location by mdpauleyprepare_manpage
m3u8
--file-access-retries
when deleting/renaming by ehoogeveen-medwebhttp_headers
to be specified for thumbnails
--mark-watched
without _NETRC_MACHINE
by coletdjnz--simulate
acodec
=ogg
as vorbis
--live-from-start
for YouTube livestreams by Lesmiscoreguid
as video id by Bricio--clean-infojson
to --clean-info-json
ExtractorError
locked_file
for sanitize_open
by jakeoghDateRange
input_extract_m3u8_formats
for live videosform_params
GettrStreamingIE
by i6t--ignore-no-formats-error
uploader
by regarten_VALID_URL
webp
vm.tiktok
/vt.tiktok
URLsview_count
approximate_date
extractor-arg$
in _extract_n_function_name
regex by Lesmiscorewebsockets
module non-fatal--print-to-file
_type
is present in info.json
--compat-options list-formats
InAdvancePagedList
-o ""
better_yes_playlist
title
extractionArticle
json_ldclean_html
by dirkfunpad_pkcs7
test_youtube_playlist_noplaylist
YoutubeMusicSearchURLIE
ytarchive:
prefix and misc cleanupe06dea74
--concat-playlist
to concat videos in a playlistafter_video
, playlist
)--exec
to be run at any post-processing stage (Deprecates --exec-before-download
)--print
to be run at any post-processing stage--print
by pukkandan, Zirrovideo_autonumber
, modified_date
, modified_timestamp
, playlist_count
, channel_follower_count
requested_downloads
in the root info_dict
download_archive
only after all formats are downloadedmeta<n>_
prefix--legacy-server-connect
by xtkoba,
in --extractor-args
info.json
None
in sanitize_info
-s --ignore-no-formats --force-write-archive
--list-thumbnails
-map 0
D
and fix suffix's caseSec-Fetch-Mode
to std_headers
format_bytes
output for Bytes by pukkandan, mdawarss:xxx
in parse_duration
None
in traverse_obj
to return as-isurl_result
and related_search_nextjs_data
, format_field
http
for manifestsuploader
tv.line.me
by sian1468MixchArchiveIE
by Lesmiscoreclip
URLs_VALID_URL
by k3ns1nupload_date
for playlists--ppa
--no-progress
TYPES:
in -P
/-o
extractor_key
used in archivelive-from-start
properly when stream ends with 403--live-from-start
to enable downloading live videos from startis_from_start
in formats to identify formats (of live videos) that downloads from starthttp_dash_segments_generator
that allows a function to be passed instead of fragmentsFFmpegFixupDuplicateMoovPP
to fixup duplicated moov atomsFiller
and Highlight
categories by nihil-admirari, pukkandan
--sponsorblock-cut all
to --sponsorblock-cut default
if you do not want filler sections to be removedwebpage_url_domain
-f -
--file-access-retries
by ehoogeveen-medwebS
, D
and improve id
detection&
for replacement text by PilzAdam_search_nuxt_data
by nao20010128nao-i
is given_live_title
faststart
YYYYMMDD
dates in Nov/Dec by wlritchiparse_count
std_headers
by kikuyan, fstirlitz--no-write-thumbnail
to override --write-all-thumbnail
--throttled-rate
--console-title
--flat-playlist
info_dict
-f best
parse_duration
for --wait-for-video
and some minor fixwebpage_url_domain
by std-moveRTVEAudioIE
by kebianizaodiscoveryplus.com/it
tv_android
m3u8 by YuenSzeHong_VALID_URL_RE
by jaller94jw_config
regex by julien-hadleyjack_VALID_URL
TrovoChannelBaseIE
ytsearchdate
--wait-for-video
to wait for scheduled streams--break-per-input
to apply --break-on... to each input URL--embed-info-json
to embed info.json in mkvembed-metadata
workflow_dispatch
for releasewav
and vorbis
alac
average_rating
from JSON-LDf1ca6900
)render_table
and add testsPagedList
LazyList
postprocessor_hooks
--break-on-archive
when pre-checking--check-formats
for mhtml
--load-info-json
of playlists with failed entries--trim-filename
when filename has .
--add-header
report_unplayable_conflict
by shirt--no-clean-infojson
DiscoveryPlusItalyShowIE
by Ashish0804NebulaCollectionIE
and rewrite extractor by hheimbuergerwebpage_url
correctlydefault
player client by coletdjnzratebypass
JSInterpreter._seperate
_search_nextjs_data
--check-all-formats
from --check-formats
windows_enable_vt_mode
--load-infojson
of playlists-F
and standardize color-printing codelink
for internet shortcut filesq
and j
None
--audio-quality
correctly by CrypticSignal, pukkandanlibfdk_aac
if available by CrypticSignaleac3
is better than ac3
ExtractorError
join_nonempty
jwt_decode_hs256
by Ashish0804DownloadCancelled
exceptionvp09
as vp9bv
SkyNewsStoryIE
by ajj8thumbnail
with the best "known" thumbnaillanguage
and hardsub
py2exe
YTDLP_NO_LAZY_EXTRACTORS
to forcefully disable this (experimental)pyinst.py
, misc cleanup and improve docsmeta_default
key--remove-chapters
to remove sections by timestamp--match-filter
--no-batch-file
by Zirro--check-formats
is specified--restrict-filename
when used with default templatecheck_formats
output being written to stdout when -qv
duration_string
and resolution
available in --match-filter--id
--socket-timeout
EXT-X-KEY
Apple FairPlayimportlib
to load plugins by sulyi--skip-unavailable-fragment
extractor-retries
and sleep-requests
aac_adtstoasc
to non-hls audiobeta.crunchyroll
URLs and fix series URLs with language codeformat_id
by Ashish0804player.vimeo
getcomments
implementation for extractorsFFmpegPostProcessor
--console-title
and --no-progress
--progress
to show progress-bar even in quiet modeminicurses
and use it for all progress reporting--progress-template
to customize progress-bar and console-title--use-postprocessor
l
for \n
delimited listU
for unicode normalizationreddit_session
by AjaxGb--flat-playlist
when neither IE nor id is known-f mp4
behaving differently from youtube-dlssl.SSLContext.load_default_certs
--netrc-location
,
B
to treat the value as bytes, e.g. to limit the filename to a certain number of bytes--ignore-errors
and --no-abort-on-error
collection-playlist
by nixxo/en
502
error and update _CLIENT_ID
--mark-watched
with --cookies-from-browser
--force-write-archive
to work with --flat-playlist
--sub-langs
0
in --playlist-items
-i
--no-get-comments
extra_info
being reused across runsno-direct-merge
and playlist-index
--trim-filename
by sulyiaes_gcm_decrypt_and_verify
by sulyi, pukkandanHOME
(if set) on windowsaac_adtstoasc
when merging if needed-N
and media sequence by shirtCryptodome
in addition to Crypto
extract_timezone
by dirkf--no-config
and refactor reading of config files--onedir
zip for windowsnebula.py
by glenn-slaydenmake clean-test
by sulyi--sponsorblock-remove CATS
removes specified chapters from file--sponsorblock-mark CATS
marks the specified sponsor sections as chapters--sponsorblock-chapter-title TMPL
to specify sponsor chapter template--sponsorblock-api URL
to use a different API--force-keyframes-at-cuts
is used--sponskrub
, --no-sponskrub
, --sponskrub-cut
, --no-sponskrub-cut
, --sponskrub-force
, --no-sponskrub-force
, --sponskrub-location
, --sponskrub-args
--embed-chapters
from --embed-metadata
(it still implies the former by default)--remove-chapters
to remove arbitrary chapters by nihil-admirari, pukkandan--force-keyframes-at-cuts
for more accurate cuts when removing and splitting chapters by nihil-admirari--match-filter
reject entries early
--match-title
, --reject-title
, --min-views
, --max-views
suitable
and add flake8 test-i
HungamaSongIE
and add HungamaAlbumPlaylistIE
by Ashish0804PatreonUserIE
by zenerdi0destartv.com.tr
by mrfade, coletdjnzTikTokUserIE
by Ashish0804, pukkandanTV2HuIE
and add TV2HuSeriesIE
by Ashish0804client_id
on 403uploader_id
by octotherpshorts
to _VALID_URL
--write-annotations
by coletdjnz--rate-limit
_match_valid_url
lang
_set_from_options_callback
parse_qs
--replace-in-metadata
--force-overwrites
when using -k
--no-prefer-free-formats
by CeruleanSky-F
for extractors that directly return url-J
when there are failed videosextra_info
being reused across runsplaylist_index
not obeying playlist_start
and add tests--no-part
Content-Length
header by fstirlitzos.replace
where applicable by; paulwrubelyt-dlp/taps/yt-dlp
by nao20010128naoyt-dlp.tar.gz
--replace-in-metadata
--no-simulate
to not simulate even when --print
or --list...
are used - Deprecates --print-json
%()s
- makes --dump-json
redundant--exec
and --exec-before-download
--match-filter
--match-filter
by max-teno-keep-subs
_THEPLATFORM_KEY
and _THEPLATFORM_SECRET
by wesnmdisplay_id
by dirkfinclude-live-dash
to show live dash formats_write_ytdl_file
closes file handle on error--compat-options filename
by stdedos--no-part
BrokenPipeError
by kikuyansttp
as subtitles in MPD by fstirlitzmp4
to stdout
--ffmpeg-location
to be a file with different nameInAdvancePagedList.__getitem__
traverse_obj
depth when is_user_input
pyinstaller
by shirttest_YourExtractor_all
)--add-metadata
adds to the filej
(json), l
(comma delimited list), q
(quoted for terminal)agegate
clients by pukkandan, MinePlayersPEthirdParty
to agegate clients to bypass more videosembedded
clientscreator
clients for age-gate bypass using unverified accounts by zerodytrash, coletdjnz, pukkandanScienceChannelIE
by Sipherdrakonmweb
client by coletdjnzplayer_client=all
hl=en
for comments by coletdjnz_VALID_URL
no-clean-infojson
asr
appearing twice in -F
home:
as the default key for -P
LazyList
ignore_no_formats_error
info_dict
to progress_hook
sget_video_info
age-gate workaround - This endpoint seems to be completely dead_get_text
sqlite
ImportError
gracefully by mbwaykeyring
--cookies-from-browser
to load cookies from a browser by mbway
--cookies-from-browser BROWSER[:PROFILE_NAME_OR_PATH]
--no-cookies-from-browser
keyring
is needed for UNIX and pycryptodome
for Windows--exec-before-download
live_status
player_client
now accepts multiple clientsplayer_client
= android,web
music.youtube.com
player_client=ios
(Known issue: formats from ios are not sorted correctly)--no-check-formats
to not test them--extractor-retries
work for more errorschapters
(and refactor related code)parse_time_text
and _extract_chapters
non-fatalcomment_sort
(top
/new
), max_comments
, max_comment_depth
is_favorited
, improve like_count
parsing by coletdjnz_VALID_URL
by nao20010128naovideo_types
to vikichannel
by zackmark29, pukkandan_get_thumbnail_resolution
all
, mergeall
and add tests--ignore-errors
original_url
was not propagated when _type
=url
write_thumbnail
extractor_args
parsingNOTE
in -F
to MORE INFO
since it's often confused to be the same as format_note
only_once
param for write_debug
and report_warning
_search_regex
by fstirlitztraverse_obj
variadic
js_to_json
comment regex by fstirlitz--extractor-args
to pass some extractor-specific arguments. See readme
skip
for youtube
, e.g. --extractor-args youtube:skip=hls,dash
--youtube-skip-dash-manifest
, --youtube-skip-hls-manifest
, --youtube-include-dash-manifest
, --youtube-include-hls-manifest
--list...
options to work with --print
, --quiet
and other --list...
optionsplayer
API for additional video extraction requests by coletdjnz
player_client
= web
/android
--extractor-args youtube:player_client=android
works around the throttling for the time-beingplayer_skip=config
itct
to params by coletdjnzclickTrackingParams
by siikamiikaFunimationShowIE
by Meviousid
and will break break existing archivesseperate-video-versions
to fall back to old behavior including using the old video ids/player/
URLlanguage
and version
to pre-select them during extraction
-f
filters instead_VALID_URL
--ignore-no-formats-error
by krichbanana--throttled-rate
when using --load-info-json
--flat-playlist
when entry has no ie_key
check_formats
catching ExtractorError
instead of DownloadError
--list-formats-old
--ppa
when using simultaneous downloadhls_split_discontinuity
jpeg
as jpg
LazyList
reversalLazyList
and yield from
extractor.common._merge_subtitles
signature--throttled-rate
below which video data is re-extracted-N
, and refactor hls
/dash
WebSocketFragmentFD
by nao20010128nao, pukkandanimages
formats in addition to video/audio:ytrec
cast
embed-thumbnail-atomicparsley
--check-formats
to thumbnails--fixup force
to force it-f
NamedTemporaryFile
for --check-formats
--min-split-size
for HTTP downloads--add-metadata
to --embed-metadata
LazyList
and add tests--embed-metadata
embeds chapter markers%(field)d
in filename template throws errorprepare_filename
original_url
with the user-inputted URLprepare_outtmpl
--print
when used with --flat-playlist
traverse_dict
to traverse_obj
yt-dlp.tar.gz
python3
by fstirlitztrovolive.py
user:pass
in URLs by hhirtz and pukkandan-N
, do not keep the fragment content in memorypng
and make it the default by louie-githubmp4
/m4a
using mutagen by tripulse and pukkandan__process_playlist
by creating LazyList
stderr
when both quiet
and verbose
None
values from info.json
socket.io
response as json
by pukkandan and llacb47note=False
when extracting manifestssanitized_Request
, not sanitize_url
webtt
/live
URLs should raise error if channel is not live-
before id by olifreYoutubeDL._match_entry
MP
, VL
and browse
pagesvideos
tab to their UU
playlistsmaxresdefault
thumbnailhtml5=1
param to get_video_info
page requests by coletdjnz--print
: to print any field/template
--get-description
, --get-duration
, --get-filename
, --get-format
, --get-id
, --get-thumbnail
, --get-title
, --get-url
additional_urls
to download additional videos from metadata using --parse-metadata
pl_thumbnail
outtmpl keyflac
support and refactor mutagen
code by pukkandan and tripulse_VALID_URL
no-attach-infojson
name
for subtitlespost_extract
and pre_process
only run once--check-formats
when there is network errorwrite_debug
and get_param
--write-comments
, --no-write-comments
playlist_mincount
compat_opts
is not givenfield.start:end:step
field1+num+field2
field|default
-l
, -t
, -A
completely and disable --auto-number
, --title
, --literal
, --id
quiet
and to_stderr
network_exceptions
_VALID_URL
to support moviesallow_unplayable_formats
_VALID_URL
title
and series
extraction by Ashish0804oembed
to reserved namesplaylist_index
and add playlist_autonumber
. See #302 for details--check-formats
to test the URLs before format selection--compat-options
to revert some of yt-dlp's changes
--list-formats-as-table
, --list-formats-old
%(playlist_index)s
-o
and -P
preload_download_archive
writing verbose message to stdout
YoutubeDL
so that they obey --no-warnings
and can output colorsFileNotFoundError
%(field.key1.key2)s
%(field+N)s
--autonumber-start
--sub-langs
:
--sub-langs
entries as regexall
can be used to refer to all the subtitles-
to exclude it--all-subs
--ignore-no-formats-error
to ignore the "no video format" and similar errors--skip-playlist-after-errors
to skip the rest of a playlist after a given number of errors are encountered_extract_ytcfg
_VALID_URL
%
report_warning
mergeall
selects best format when multistreams are disabled--convert-thumbnails
(only jpg currently supported)mergeall
to download and merge all formats--exec
using similar syntax to output template--downloader PROTO:NAME
--downloader
for --external-downloader
native
as an option for the downloaderdatetime_from_str
and datetime_add_months
by coletdjnzpostprocessors
before actual download-P
, -o
, -S
m3u8
not obeying --allow-unplayable-formats
dynamic_mpd
--all-formats
, --include-ads
, --hls-prefer-native
, --hls-prefer-ffmpeg
--parse-metadata
-f bv*.2
availability
by coletdjnzview-source:
--parse-metadata
documentation--parse-metadata
--load-info-json
--no-clean-infojson
--no-clean-infojson
to keep private keys in the infojsonquality
being ignoredpost_hook
gets the final filenamemp4
by damianoamatruda and pukkandanwebm
formats into mkv
if thumbnails are to be embedded by damianoamatruda[docs] Fix some minor mistakes
[niconico] Partial fix adapted from animelover1984/youtube-dl@b5eff52 (login and smile formats still don't work)
[niconico] Add user extractor by animelover1984
[bilibili] Add anthology support by animelover1984
[amcnetworks] Fix extractor by 2ShedsJackson
[stitcher] Merge from youtube-dl by nixxo
[rcs] Improved extraction by nixxo
[linuxacadamy] Improve regex
[youtube] Show if video is private
, unlisted
etc in info (availability
) by coletdjnz and pukkandan
[youtube] bugfix for channel playlist extraction
[nbc] Improve metadata extraction by 2ShedsJackson
--split-chapters
-o
/-P
using the prefix chapter:
section_title
, section_number
, section_start
, section_end
are available in the output template--concurrent-fragments
(-N
) to set the number of threads (default 1)lbry://
url by nixxoAccept
header by pukkandan and animelover1984ffmpeg
/httpie
m3u8
extension--extractor-retries
are exhausted--extractor-retries
to 3--external-downloader
--sleep-requests
to sleep b/w requests--extractor-retries
to retry on known extractor errors--get-comments
doesn't imply --write-info-json
if -J
, -j
or --print-json
are usedget_executable_path
by shirtwebpage_url
--hls-use-mpegts
by default when downloading live-streamsyoutube-dlc
config files are no longer loadedwas_live
)hyland.com
--hls-split-discontinuity
to better support media discontinuity by shirt--ppa "ffmpeg_i1:ARGS"
syntax--windows-filenames
removing /
from UNIX pathsExtractor Options
all
in format selectionplayable_in_embed
in output templateschannel
and channel_id
by kurumigi--windows-filenames
to force use of windows compatible filenamesparser.error
when exiting for update--trim-file-name
to --trim-filenames
to be similar to related optionsvp9.2
more than other vp9
codecsquality
field_preference
and misuse of preference
from extractors--prefer-free-formats
and add --no-prefer-free-format
--allow-unplayable-formats
to allow downloading unplayable video formatsx86.exe
yt-dlp
and youtube-dlc
in releases for future-proofingpycryptodome
allow_playlist_files
not being correctly passed throughget_executable_path
in UNIX__real_download
should be false when ffmpeg unavailable and no downloadexe
/zip
/source
and 32/64bit in verbose message-U
) by shirt--console-log-level=warn --summary-interval=0 --file-allocation=none -x16 -j16 -s16
strftime
to format date/time fields. Example: %(upload_date>%Y-%m-%d)s
-o TYPE:TEMPLATE
subtitle|thumbnail|description|annotation|infojson|pl_description|pl_infojson
--no-write-playlist-metafiles
to prevent writing playlist metadata filesparse_yt_initial_data
and add fragment_retries
quality
had more priority than hasvid
_filename
from infojson--get-comments
-disposition
-movflags +faststart
when remuxing to mp4--parse-metadata
to extract additional metadata from existing fields
--output
--metadata-from-title
.description
filerecode
/remux
(extract-audio
is partially fixed)avconv
/avprobe
. All current functionality is left untouched. But don't expect any new features to work with avconvwrite_debug
to not throw error when there is no _downloader
update-version
, pyinst.py
and related files-P
/--paths
to give different paths for different types of files
-P "type:path" -P "type:path"
--external-downloader-args
and --post-processor-args
--no-overwrite
when using --write-link
unrecognized argument
error message correctlyformatSort
. The aliases remain functional for backward compatibility, but will be left undocumented/#/player
URLs--ppa
as alias./yt-dlp.conf
yt-dlp
instead of youtube-dlc
. See this for details--break-on-reject
--force-overwrites
, --no-force-overwrites
by alxnullyt-dlp
playable_in_embed
)test_youtube_search_matching
to_screen
and similar functions in postprocessor/commonpost_hooks
to YoutubeDL by alexmerkel--max-downloads
by glenn-slayden--postprocessor-args
--sponskrub-args
. The same can now be done using --postprocessor-args "sponskrub:<args>"
av01
codec in -S
since most devices don't support it yetduration_string
to be used in --output
--ignore
--video-multistreams
and --audio-multistreams
bv*+ba/b
when --audio-multistreams
is disabledres,fps,codec,size,br,asr,proto,ext,has_audio,source,format_id
webm
to be more preferable than flv
in format sorting%(title)s [%(id)s].%(ext)s
--list-formats-as-table
--format-sort
(-S
), --format-sort-force
(--S-force
) - See Sorting Formats for detailsbest*
, worst*
, bestvideo*
, bestaudio*
, worstvideo*
, worstaudio*
--video-multistreams
, --no-video-multistreams
, --audio-multistreams
, --no-audio-multistreams
b
,w
,v
,a
as alias for best
, worst
, video
and audio
respectively--write-link
, --write-url-link
, --write-webloc-link
, --write-desktop-link
by h-h-h-h - See Internet Shortcut Options for details--sponskrub
, --sponskrub-cut
, --sponskrub-force
, --sponskrub-location
, --sponskrub-args
- See SponSkrub Options for details--force-download-archive
(--force-write-archive
) by h-h-h-h--list-formats-as-table
, --list-formats-old
no-
to the switch. Usefull when you want to reverse an option that is defined in a config file
--no-ignore-dynamic-mpd
, --no-allow-dynamic-mpd
, --allow-dynamic-mpd
, --youtube-include-hls-manifest
, --no-youtube-include-hls-manifest
, --no-youtube-skip-hls-manifest
, --no-download
, --no-download-archive
, --resize-buffer
, --part
, --mtime
, --no-keep-fragments
, --no-cookies
, --no-write-annotations
, --no-write-info-json
, --no-write-description
, --no-write-thumbnail
, --youtube-include-dash-manifest
, --post-overwrites
, --no-keep-video
, --no-embed-subs
, --no-embed-thumbnail
, --no-add-metadata
, --no-include-ads
, --no-write-sub
, --no-write-auto-sub
, --no-playlist-reverse
, --no-restrict-filenames
, --youtube-include-dash-manifest
, --no-format-sort-force
, --flat-videos
, --no-list-formats-as-table
, --no-sponskrub
, --no-sponskrub-cut
, --no-sponskrub-force
--write-subs
, --no-write-subs
, --no-write-auto-subs
, --write-auto-subs
. Note that these can still be used without the ending "s"Note: All uncredited changes above this point are authored by pukkandan
Note: This was constructed from the merge commit messages and may not be entirely accurate