yt-dlp 2026.1.19.359.dev0__py3-none-any.whl → 2026.1.25.233128.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
yt_dlp/extractor/cbc.py CHANGED
@@ -105,7 +105,7 @@ class CBCIE(InfoExtractor):
105
105
  # multiple CBC.APP.Caffeine.initInstance(...)
106
106
  'url': 'http://www.cbc.ca/news/canada/calgary/dog-indoor-exercise-winter-1.3928238',
107
107
  'info_dict': {
108
- 'title': 'Keep Rover active during the deep freeze with doggie pushups and other fun indoor tasks', # FIXME: actual title includes " | CBC News"
108
+ 'title': 'Keep Rover active during the deep freeze with doggie pushups and other fun indoor tasks',
109
109
  'id': 'dog-indoor-exercise-winter-1.3928238',
110
110
  'description': 'md5:c18552e41726ee95bd75210d1ca9194c',
111
111
  },
@@ -134,6 +134,13 @@ class CBCIE(InfoExtractor):
134
134
  title = (self._og_search_title(webpage, default=None)
135
135
  or self._html_search_meta('twitter:title', webpage, 'title', default=None)
136
136
  or self._html_extract_title(webpage))
137
+ title = self._search_regex(
138
+ r'^(?P<title>.+?)(?:\s*[|–-]\s*CBC.*)?$',
139
+ title, 'cleaned title', group='title', default=title)
140
+ data = self._search_json(
141
+ r'window\.__INITIAL_STATE__\s*=', webpage,
142
+ 'initial state', display_id, default={}, transform_source=js_to_json)
143
+
137
144
  entries = [
138
145
  self._extract_player_init(player_init, display_id)
139
146
  for player_init in re.findall(r'CBC\.APP\.Caffeine\.initInstance\(({.+?})\);', webpage)]
@@ -143,6 +150,11 @@ class CBCIE(InfoExtractor):
143
150
  r'<div[^>]+\bid=["\']player-(\d+)',
144
151
  r'guid["\']\s*:\s*["\'](\d+)'):
145
152
  media_ids.extend(re.findall(media_id_re, webpage))
153
+ media_ids.extend(traverse_obj(data, (
154
+ 'detail', 'content', 'body', ..., 'content',
155
+ lambda _, v: v['type'] == 'polopoly_media', 'content', 'sourceId', {str})))
156
+ if content_id := traverse_obj(data, ('app', 'contentId', {str})):
157
+ media_ids.append(content_id)
146
158
  entries.extend([
147
159
  self.url_result(f'cbcplayer:{media_id}', 'CBCPlayer', media_id)
148
160
  for media_id in orderedSet(media_ids)])
@@ -268,7 +280,7 @@ class CBCPlayerIE(InfoExtractor):
268
280
  'duration': 2692.833,
269
281
  'subtitles': {
270
282
  'en-US': [{
271
- 'name': 'English Captions',
283
+ 'name': r're:English',
272
284
  'url': 'https://cbchls.akamaized.net/delivery/news-shows/2024/06/17/NAT_JUN16-00-55-00/NAT_JUN16_cc.vtt',
273
285
  }],
274
286
  },
@@ -322,6 +334,7 @@ class CBCPlayerIE(InfoExtractor):
322
334
  'categories': ['Olympics Summer Soccer', 'Summer Olympics Replays', 'Summer Olympics Soccer Replays'],
323
335
  'location': 'Canada',
324
336
  },
337
+ 'skip': 'Video no longer available',
325
338
  'params': {'skip_download': 'm3u8'},
326
339
  }, {
327
340
  'url': 'https://www.cbc.ca/player/play/video/9.6459530',
@@ -380,7 +393,8 @@ class CBCPlayerIE(InfoExtractor):
380
393
  video_id = self._match_id(url)
381
394
  webpage = self._download_webpage(f'https://www.cbc.ca/player/play/{video_id}', video_id)
382
395
  data = self._search_json(
383
- r'window\.__INITIAL_STATE__\s*=', webpage, 'initial state', video_id)['video']['currentClip']
396
+ r'window\.__INITIAL_STATE__\s*=', webpage,
397
+ 'initial state', video_id, transform_source=js_to_json)['video']['currentClip']
384
398
  assets = traverse_obj(
385
399
  data, ('media', 'assets', lambda _, v: url_or_none(v['key']) and v['type']))
386
400
 
@@ -492,12 +506,14 @@ class CBCPlayerPlaylistIE(InfoExtractor):
492
506
  'info_dict': {
493
507
  'id': 'news/tv shows/the national/latest broadcast',
494
508
  },
509
+ 'skip': 'Playlist no longer available',
495
510
  }, {
496
511
  'url': 'https://www.cbc.ca/player/news/Canada/North',
497
512
  'playlist_mincount': 25,
498
513
  'info_dict': {
499
514
  'id': 'news/canada/north',
500
515
  },
516
+ 'skip': 'Playlist no longer available',
501
517
  }]
502
518
 
503
519
  def _real_extract(self, url):
yt_dlp/extractor/ccc.py CHANGED
@@ -18,23 +18,41 @@ class CCCIE(InfoExtractor):
18
18
  'id': '1839',
19
19
  'ext': 'mp4',
20
20
  'title': 'Introduction to Processor Design',
21
- 'creator': 'byterazor',
21
+ 'creators': ['byterazor'],
22
22
  'description': 'md5:df55f6d073d4ceae55aae6f2fd98a0ac',
23
23
  'thumbnail': r're:^https?://.*\.jpg$',
24
24
  'upload_date': '20131228',
25
25
  'timestamp': 1388188800,
26
26
  'duration': 3710,
27
27
  'tags': list,
28
+ 'display_id': '30C3_-_5443_-_en_-_saal_g_-_201312281830_-_introduction_to_processor_design_-_byterazor',
29
+ 'view_count': int,
28
30
  },
29
31
  }, {
30
32
  'url': 'https://media.ccc.de/v/32c3-7368-shopshifting#download',
31
33
  'only_matching': True,
34
+ }, {
35
+ 'url': 'https://media.ccc.de/v/39c3-schlechte-karten-it-sicherheit-im-jahr-null-der-epa-fur-alle',
36
+ 'info_dict': {
37
+ 'id': '16261',
38
+ 'ext': 'mp4',
39
+ 'title': 'Schlechte Karten - IT-Sicherheit im Jahr null der ePA für alle',
40
+ 'display_id': '39c3-schlechte-karten-it-sicherheit-im-jahr-null-der-epa-fur-alle',
41
+ 'description': 'md5:719a5a9a52630249d606219c55056cbf',
42
+ 'view_count': int,
43
+ 'duration': 3619,
44
+ 'thumbnail': 'https://static.media.ccc.de/media/congress/2025/2403-2b5a6a8e-327e-594d-8f92-b91201d18a02.jpg',
45
+ 'tags': list,
46
+ 'creators': ['Bianca Kastl'],
47
+ 'timestamp': 1767024900,
48
+ 'upload_date': '20251229',
49
+ },
32
50
  }]
33
51
 
34
52
  def _real_extract(self, url):
35
53
  display_id = self._match_id(url)
36
54
  webpage = self._download_webpage(url, display_id)
37
- event_id = self._search_regex(r"data-id='(\d+)'", webpage, 'event id')
55
+ event_id = self._search_regex(r"data-id=(['\"])(?P<event_id>\d+)\1", webpage, 'event id', group='event_id')
38
56
  event_data = self._download_json(f'https://media.ccc.de/public/events/{event_id}', event_id)
39
57
 
40
58
  formats = []
@@ -1,5 +1,6 @@
1
1
  import functools
2
2
  import json
3
+ import random
3
4
  import re
4
5
  import urllib.parse
5
6
 
@@ -363,6 +364,20 @@ class DailymotionIE(DailymotionBaseInfoExtractor):
363
364
  continue
364
365
  yield update_url(player_url, query=query_string)
365
366
 
367
+ @staticmethod
368
+ def _generate_blockbuster_headers():
369
+ # Randomize our HTTP header fingerprint to bust the HTTP Error 403 block
370
+ # See https://github.com/yt-dlp/yt-dlp/issues/15526
371
+
372
+ def random_letters(minimum, maximum):
373
+ # Omit vowels so we don't generate valid header names like 'authorization', etc
374
+ return ''.join(random.choices('bcdfghjklmnpqrstvwxz', k=random.randint(minimum, maximum)))
375
+
376
+ return {
377
+ random_letters(8, 24): random_letters(16, 32)
378
+ for _ in range(random.randint(2, 8))
379
+ }
380
+
366
381
  def _real_extract(self, url):
367
382
  url, smuggled_data = unsmuggle_url(url)
368
383
  video_id, is_playlist, playlist_id = self._match_valid_url(url).group('id', 'is_playlist', 'playlist_id')
@@ -425,7 +440,8 @@ class DailymotionIE(DailymotionBaseInfoExtractor):
425
440
  continue
426
441
  if media_type == 'application/x-mpegURL':
427
442
  fmt, subs = self._extract_m3u8_formats_and_subtitles(
428
- media_url, video_id, 'mp4', live=is_live, m3u8_id='hls', fatal=False)
443
+ media_url, video_id, 'mp4', live=is_live, m3u8_id='hls',
444
+ fatal=False, headers=self._generate_blockbuster_headers())
429
445
  formats.extend(fmt)
430
446
  self._merge_subtitles(subs, target=subtitles)
431
447
  else:
@@ -1,4 +1,6 @@
1
+ import base64
1
2
  import functools
3
+ import hashlib
2
4
  import itertools
3
5
  import json
4
6
  import random
@@ -15,6 +17,7 @@ from ..utils import (
15
17
  UnsupportedError,
16
18
  UserNotLive,
17
19
  determine_ext,
20
+ extract_attributes,
18
21
  filter_dict,
19
22
  format_field,
20
23
  int_or_none,
@@ -25,13 +28,13 @@ from ..utils import (
25
28
  qualities,
26
29
  srt_subtitles_timecode,
27
30
  str_or_none,
28
- traverse_obj,
29
31
  truncate_string,
30
32
  try_call,
31
33
  try_get,
32
34
  url_or_none,
33
35
  urlencode_postdata,
34
36
  )
37
+ from ..utils.traversal import find_element, require, traverse_obj
35
38
 
36
39
 
37
40
  class TikTokBaseIE(InfoExtractor):
@@ -217,38 +220,94 @@ class TikTokBaseIE(InfoExtractor):
217
220
  raise ExtractorError('Unable to extract aweme detail info', video_id=aweme_id)
218
221
  return self._parse_aweme_video_app(aweme_detail)
219
222
 
223
+ def _solve_challenge_and_set_cookie(self, webpage):
224
+ challenge_data = traverse_obj(webpage, (
225
+ {find_element(id='cs', html=True)}, {extract_attributes}, 'class',
226
+ filter, {lambda x: f'{x}==='}, {base64.b64decode}, {json.loads}))
227
+
228
+ if not challenge_data:
229
+ if 'Please wait...' in webpage:
230
+ raise ExtractorError('Unable to extract challenge data')
231
+ raise ExtractorError('Unexpected response from webpage request')
232
+
233
+ self.to_screen('Solving JS challenge using native Python implementation')
234
+
235
+ expected_digest = traverse_obj(challenge_data, (
236
+ 'v', 'c', {str}, {base64.b64decode},
237
+ {require('challenge expected digest')}))
238
+
239
+ base_hash = traverse_obj(challenge_data, (
240
+ 'v', 'a', {str}, {base64.b64decode},
241
+ {hashlib.sha256}, {require('challenge base hash')}))
242
+
243
+ for i in range(1_000_001):
244
+ number = str(i).encode()
245
+ test_hash = base_hash.copy()
246
+ test_hash.update(number)
247
+ if test_hash.digest() == expected_digest:
248
+ challenge_data['d'] = base64.b64encode(number).decode()
249
+ break
250
+ else:
251
+ raise ExtractorError('Unable to solve JS challenge')
252
+
253
+ cookie_value = base64.b64encode(
254
+ json.dumps(challenge_data, separators=(',', ':')).encode()).decode()
255
+
256
+ # At time of writing, the cookie name was _wafchallengeid
257
+ cookie_name = traverse_obj(webpage, (
258
+ {find_element(id='wci', html=True)}, {extract_attributes},
259
+ 'class', {require('challenge cookie name')}))
260
+
261
+ # Actual JS sets Max-Age=1, but we need to adjust for --sleep-requests and Python slowness
262
+ expire_time = int(time.time()) + (self.get_param('sleep_interval_requests') or 0) + 2
263
+ self._set_cookie('.tiktok.com', cookie_name, cookie_value, expire_time=expire_time)
264
+
220
265
  def _extract_web_data_and_status(self, url, video_id, fatal=True):
221
266
  video_data, status = {}, -1
222
267
 
223
- res = self._download_webpage_handle(url, video_id, fatal=fatal, impersonate=True)
224
- if res is False:
225
- return video_data, status
268
+ def get_webpage(note='Downloading webpage'):
269
+ res = self._download_webpage_handle(url, video_id, note, fatal=fatal, impersonate=True)
270
+ if res is False:
271
+ return False
226
272
 
227
- webpage, urlh = res
228
- if urllib.parse.urlparse(urlh.url).path == '/login':
229
- message = 'TikTok is requiring login for access to this content'
230
- if fatal:
231
- self.raise_login_required(message)
232
- self.report_warning(f'{message}. {self._login_hint()}')
273
+ webpage, urlh = res
274
+ if urllib.parse.urlparse(urlh.url).path == '/login':
275
+ message = 'TikTok is requiring login for access to this content'
276
+ if fatal:
277
+ self.raise_login_required(message)
278
+ self.report_warning(f'{message}. {self._login_hint()}', video_id=video_id)
279
+ return False
280
+
281
+ return webpage
282
+
283
+ webpage = get_webpage()
284
+ if webpage is False:
233
285
  return video_data, status
234
286
 
235
- if universal_data := self._get_universal_data(webpage, video_id):
236
- self.write_debug('Found universal data for rehydration')
237
- status = traverse_obj(universal_data, ('webapp.video-detail', 'statusCode', {int})) or 0
238
- video_data = traverse_obj(universal_data, ('webapp.video-detail', 'itemInfo', 'itemStruct', {dict}))
287
+ universal_data = self._get_universal_data(webpage, video_id)
288
+ if not universal_data:
289
+ try:
290
+ self._solve_challenge_and_set_cookie(webpage)
291
+ except ExtractorError as e:
292
+ if fatal:
293
+ raise
294
+ self.report_warning(e.orig_msg, video_id=video_id)
295
+ return video_data, status
239
296
 
240
- elif sigi_data := self._get_sigi_state(webpage, video_id):
241
- self.write_debug('Found sigi state data')
242
- status = traverse_obj(sigi_data, ('VideoPage', 'statusCode', {int})) or 0
243
- video_data = traverse_obj(sigi_data, ('ItemModule', video_id, {dict}))
297
+ webpage = get_webpage(note='Downloading webpage with challenge cookie')
298
+ if webpage is False:
299
+ return video_data, status
300
+ universal_data = self._get_universal_data(webpage, video_id)
244
301
 
245
- elif next_data := self._search_nextjs_data(webpage, video_id, default={}):
246
- self.write_debug('Found next.js data')
247
- status = traverse_obj(next_data, ('props', 'pageProps', 'statusCode', {int})) or 0
248
- video_data = traverse_obj(next_data, ('props', 'pageProps', 'itemInfo', 'itemStruct', {dict}))
302
+ if not universal_data:
303
+ message = 'Unable to extract universal data for rehydration'
304
+ if fatal:
305
+ raise ExtractorError(message)
306
+ self.report_warning(message, video_id=video_id)
307
+ return video_data, status
249
308
 
250
- elif fatal:
251
- raise ExtractorError('Unable to extract webpage video data')
309
+ status = traverse_obj(universal_data, ('webapp.video-detail', 'statusCode', {int})) or 0
310
+ video_data = traverse_obj(universal_data, ('webapp.video-detail', 'itemInfo', 'itemStruct', {dict}))
252
311
 
253
312
  if not traverse_obj(video_data, ('video', {dict})) and traverse_obj(video_data, ('isContentClassified', {bool})):
254
313
  message = 'This post may not be comfortable for some audiences. Log in for access'
yt_dlp/options.py CHANGED
@@ -574,7 +574,8 @@ def create_parser():
574
574
  '2021': ['2022', 'no-certifi', 'filename-sanitization'],
575
575
  '2022': ['2023', 'no-external-downloader-progress', 'playlist-match-filter', 'prefer-legacy-http-handler', 'manifest-filesize-approx'],
576
576
  '2023': ['2024', 'prefer-vp9-sort'],
577
- '2024': ['mtime-by-default'],
577
+ '2024': ['2025', 'mtime-by-default'],
578
+ '2025': [],
578
579
  },
579
580
  }, help=(
580
581
  'Options that can help keep compatibility with youtube-dl or youtube-dlc '
@@ -882,6 +883,10 @@ def create_parser():
882
883
  dest='format_sort', default=[], type='str', action='callback',
883
884
  callback=_list_from_options_callback, callback_kwargs={'append': -1},
884
885
  help='Sort the formats by the fields given, see "Sorting Formats" for more details')
886
+ video_format.add_option(
887
+ '--format-sort-reset',
888
+ dest='format_sort', action='store_const', const=[],
889
+ help='Disregard previous user specified sort order and reset to the default')
885
890
  video_format.add_option(
886
891
  '--format-sort-force', '--S-force',
887
892
  action='store_true', dest='format_sort_force', metavar='FORMAT', default=False,
yt_dlp/version.py CHANGED
@@ -1,8 +1,8 @@
1
1
  # Autogenerated by devscripts/update-version.py
2
2
 
3
- __version__ = '2026.01.19.000359'
3
+ __version__ = '2026.01.25.233128'
4
4
 
5
- RELEASE_GIT_HEAD = '9ab4777b97b5280ae1f53d1fe1b8ac542727238b'
5
+ RELEASE_GIT_HEAD = 'e3f0d8b731b40176bcc632bf92cfe5149402b202'
6
6
 
7
7
  VARIANT = 'pip'
8
8
 
@@ -12,4 +12,4 @@ CHANNEL = 'nightly'
12
12
 
13
13
  ORIGIN = 'yt-dlp/yt-dlp-nightly-builds'
14
14
 
15
- _pkg_version = '2026.01.19.000359dev'
15
+ _pkg_version = '2026.01.25.233128dev'
@@ -4,7 +4,7 @@ __yt_dlp()
4
4
  COMPREPLY=()
5
5
  cur="${COMP_WORDS[COMP_CWORD]}"
6
6
  prev="${COMP_WORDS[COMP_CWORD-1]}"
7
- opts="--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --no-plugin-dirs --js-runtimes --no-js-runtimes --remote-components --no-remote-components --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --preset-alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --print-traffic --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args"
7
+ opts="--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --no-plugin-dirs --js-runtimes --no-js-runtimes --remote-components --no-remote-components --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --preset-alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --print-traffic --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-reset --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args"
8
8
  keywords=":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
9
9
  fileopts="-a|--batch-file|--download-archive|--cookies|--load-info-json"
10
10
  diropts="--cache-dir"
@@ -963,6 +963,8 @@ Video Format Options:
963
963
  for more details
964
964
  -S, --format-sort SORTORDER Sort the formats by the fields given, see
965
965
  "Sorting Formats" for more details
966
+ --format-sort-reset Disregard previous user specified sort order
967
+ and reset to the default
966
968
  --format-sort-force Force user specified sort order to have
967
969
  precedence over all fields, see "Sorting
968
970
  Formats" for more details (Alias: --S-force)
@@ -2038,6 +2040,15 @@ respects. Most of the time, what you actually want is the video with the
2038
2040
  smallest filesize instead. So it is generally better to use
2039
2041
  -f best -S +size,+br,+res,+fps.
2040
2042
 
2043
+ If you use the -S/--format-sort option multiple times, each subsequent
2044
+ sorting argument will be prepended to the previous one, and only the
2045
+ highest priority entry of any duplicated field will be preserved. E.g.
2046
+ -S proto -S res is equivalent to -S res,proto, and
2047
+ -S res:720,fps -S vcodec,res:1080 is equivalent to
2048
+ -S vcodec,res:1080,fps. You can use --format-sort-reset to disregard any
2049
+ previously passed -S/--format-sort arguments and reset to the default
2050
+ order.
2051
+
2041
2052
  Tip: You can use the -v -F to see how the formats have been sorted
2042
2053
  (worst to best).
2043
2054
 
@@ -3097,7 +3108,7 @@ and youtube-dlc:
3097
3108
  files by default. Use --mtime or --compat-options mtime-by-default
3098
3109
  to revert this.
3099
3110
 
3100
- For ease of use, a few more compat options are available:
3111
+ For convenience, there are some compat option aliases available to use:
3101
3112
 
3102
3113
  - --compat-options all: Use all compat options (Do NOT use this!)
3103
3114
  - --compat-options youtube-dl: Same as
@@ -3109,8 +3120,13 @@ For ease of use, a few more compat options are available:
3109
3120
  - --compat-options 2022: Same as
3110
3121
  --compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx
3111
3122
  - --compat-options 2023: Same as --compat-options 2024,prefer-vp9-sort
3112
- - --compat-options 2024: Same as --compat-options mtime-by-default.
3113
- Use this to enable all future compat options
3123
+ - --compat-options 2024: Same as
3124
+ --compat-options 2025,mtime-by-default
3125
+ - --compat-options 2025: Currently does nothing. Use this to enable
3126
+ all future compat options
3127
+
3128
+ Using one of the yearly compat option aliases will pin yt-dlp's default
3129
+ behavior to what it was at the end of that calendar year.
3114
3130
 
3115
3131
  The following compat options restore vulnerable behavior from before
3116
3132
  security patches:
@@ -199,6 +199,7 @@ complete --command yt-dlp --long-option max-sleep-interval --description 'Maximu
199
199
  complete --command yt-dlp --long-option sleep-subtitles --description 'Number of seconds to sleep before each subtitle download'
200
200
  complete --command yt-dlp --long-option format --short-option f --description 'Video format code, see "FORMAT SELECTION" for more details'
201
201
  complete --command yt-dlp --long-option format-sort --short-option S --description 'Sort the formats by the fields given, see "Sorting Formats" for more details'
202
+ complete --command yt-dlp --long-option format-sort-reset --description 'Disregard previous user specified sort order and reset to the default'
202
203
  complete --command yt-dlp --long-option format-sort-force --description 'Force user specified sort order to have precedence over all fields, see "Sorting Formats" for more details (Alias: --S-force)'
203
204
  complete --command yt-dlp --long-option no-format-sort-force --description 'Some fields have precedence over the user specified sort order (default)'
204
205
  complete --command yt-dlp --long-option video-multistreams --description 'Allow multiple video streams to be merged into a single file'
@@ -811,6 +811,9 @@ Video format code, see \[dq]FORMAT SELECTION\[dq] for more details
811
811
  Sort the formats by the fields given, see \[dq]Sorting Formats\[dq] for
812
812
  more details
813
813
  .TP
814
+ --format-sort-reset
815
+ Disregard previous user specified sort order and reset to the default
816
+ .TP
814
817
  --format-sort-force
815
818
  Force user specified sort order to have precedence over all fields, see
816
819
  \[dq]Sorting Formats\[dq] for more details (Alias: --S-force)
@@ -2352,6 +2355,18 @@ filesize instead.
2352
2355
  So it is generally better to use
2353
2356
  \f[V]-f best -S +size,+br,+res,+fps\f[R].
2354
2357
  .PP
2358
+ If you use the \f[V]-S\f[R]/\f[V]--format-sort\f[R] option multiple
2359
+ times, each subsequent sorting argument will be prepended to the
2360
+ previous one, and only the highest priority entry of any duplicated
2361
+ field will be preserved.
2362
+ E.g.
2363
+ \f[V]-S proto -S res\f[R] is equivalent to \f[V]-S res,proto\f[R], and
2364
+ \f[V]-S res:720,fps -S vcodec,res:1080\f[R] is equivalent to
2365
+ \f[V]-S vcodec,res:1080,fps\f[R].
2366
+ You can use \f[V]--format-sort-reset\f[R] to disregard any previously
2367
+ passed \f[V]-S\f[R]/\f[V]--format-sort\f[R] arguments and reset to the
2368
+ default order.
2369
+ .PP
2355
2370
  \f[B]Tip\f[R]: You can use the \f[V]-v -F\f[R] to see how the formats
2356
2371
  have been sorted (worst to best).
2357
2372
  .SS Format Selection examples
@@ -4071,7 +4086,7 @@ default.
4071
4086
  Use \f[V]--mtime\f[R] or \f[V]--compat-options mtime-by-default\f[R] to
4072
4087
  revert this.
4073
4088
  .PP
4074
- For ease of use, a few more compat options are available:
4089
+ For convenience, there are some compat option aliases available to use:
4075
4090
  .IP \[bu] 2
4076
4091
  \f[V]--compat-options all\f[R]: Use all compat options (\f[B]Do NOT use
4077
4092
  this!\f[R])
@@ -4092,9 +4107,15 @@ this!\f[R])
4092
4107
  \f[V]--compat-options 2024,prefer-vp9-sort\f[R]
4093
4108
  .IP \[bu] 2
4094
4109
  \f[V]--compat-options 2024\f[R]: Same as
4095
- \f[V]--compat-options mtime-by-default\f[R].
4110
+ \f[V]--compat-options 2025,mtime-by-default\f[R]
4111
+ .IP \[bu] 2
4112
+ \f[V]--compat-options 2025\f[R]: Currently does nothing.
4096
4113
  Use this to enable all future compat options
4097
4114
  .PP
4115
+ Using one of the yearly compat option aliases will pin yt-dlp\[aq]s
4116
+ default behavior to what it was at the \f[I]end\f[R] of that calendar
4117
+ year.
4118
+ .PP
4098
4119
  The following compat options restore vulnerable behavior from before
4099
4120
  security patches:
4100
4121
  .IP \[bu] 2
@@ -21,7 +21,7 @@ __yt_dlp() {
21
21
  elif [[ ${prev} == "--recode-video" ]]; then
22
22
  _arguments '*: :(mp4 flv ogg webm mkv)'
23
23
  else
24
- _arguments '*: :(--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --no-plugin-dirs --js-runtimes --no-js-runtimes --remote-components --no-remote-components --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --preset-alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --print-traffic --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args)'
24
+ _arguments '*: :(--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --no-plugin-dirs --js-runtimes --no-js-runtimes --remote-components --no-remote-components --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --preset-alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --print-traffic --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-reset --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args)'
25
25
  fi
26
26
  ;;
27
27
  esac
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yt-dlp
3
- Version: 2026.1.19.359.dev0
3
+ Version: 2026.1.25.233128.dev0
4
4
  Summary: A feature-rich command-line audio/video downloader
5
5
  Project-URL: Documentation, https://github.com/yt-dlp/yt-dlp#readme
6
6
  Project-URL: Repository, https://github.com/yt-dlp/yt-dlp
@@ -932,6 +932,8 @@ Tip: Use `CTRL`+`F` (or `Command`+`F`) to search by keywords
932
932
  for more details
933
933
  -S, --format-sort SORTORDER Sort the formats by the fields given, see
934
934
  "Sorting Formats" for more details
935
+ --format-sort-reset Disregard previous user specified sort order
936
+ and reset to the default
935
937
  --format-sort-force Force user specified sort order to have
936
938
  precedence over all fields, see "Sorting
937
939
  Formats" for more details (Alias: --S-force)
@@ -1719,6 +1721,8 @@ Note that the default for hdr is `hdr:12`; i.e. Dolby Vision is not preferred. T
1719
1721
 
1720
1722
  If your format selector is `worst`, the last item is selected after sorting. This means it will select the format that is worst in all respects. Most of the time, what you actually want is the video with the smallest filesize instead. So it is generally better to use `-f best -S +size,+br,+res,+fps`.
1721
1723
 
1724
+ If you use the `-S`/`--format-sort` option multiple times, each subsequent sorting argument will be prepended to the previous one, and only the highest priority entry of any duplicated field will be preserved. E.g. `-S proto -S res` is equivalent to `-S res,proto`, and `-S res:720,fps -S vcodec,res:1080` is equivalent to `-S vcodec,res:1080,fps`. You can use `--format-sort-reset` to disregard any previously passed `-S`/`--format-sort` arguments and reset to the default order.
1725
+
1722
1726
  **Tip**: You can use the `-v -F` to see how the formats have been sorted (worst to best).
1723
1727
 
1724
1728
  ## Format Selection examples
@@ -2408,7 +2412,7 @@ Some of yt-dlp's default options are different from that of youtube-dl and youtu
2408
2412
  * Passing `--simulate` (or calling `extract_info` with `download=False`) no longer alters the default format selection. See [#9843](https://github.com/yt-dlp/yt-dlp/issues/9843) for details.
2409
2413
  * yt-dlp no longer applies the server modified time to downloaded files by default. Use `--mtime` or `--compat-options mtime-by-default` to revert this.
2410
2414
 
2411
- For ease of use, a few more compat options are available:
2415
+ For convenience, there are some compat option aliases available to use:
2412
2416
 
2413
2417
  * `--compat-options all`: Use all compat options (**Do NOT use this!**)
2414
2418
  * `--compat-options youtube-dl`: Same as `--compat-options all,-multistreams,-playlist-match-filter,-manifest-filesize-approx,-allow-unsafe-ext,-prefer-vp9-sort`
@@ -2416,7 +2420,10 @@ For ease of use, a few more compat options are available:
2416
2420
  * `--compat-options 2021`: Same as `--compat-options 2022,no-certifi,filename-sanitization`
2417
2421
  * `--compat-options 2022`: Same as `--compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx`
2418
2422
  * `--compat-options 2023`: Same as `--compat-options 2024,prefer-vp9-sort`
2419
- * `--compat-options 2024`: Same as `--compat-options mtime-by-default`. Use this to enable all future compat options
2423
+ * `--compat-options 2024`: Same as `--compat-options 2025,mtime-by-default`
2424
+ * `--compat-options 2025`: Currently does nothing. Use this to enable all future compat options
2425
+
2426
+ Using one of the yearly compat option aliases will pin yt-dlp's default behavior to what it was at the *end* of that calendar year.
2420
2427
 
2421
2428
  The following compat options restore vulnerable behavior from before security patches:
2422
2429
 
@@ -7,11 +7,11 @@ yt_dlp/cookies.py,sha256=82uis_3XUCryx5ymJD57Z41ujoHU6Sz1tpS0NZ_JOS0,57877
7
7
  yt_dlp/globals.py,sha256=zVr9imhoXcXHoCtV0VArT5--EGmjO1cfOxIKu4xCzSM,1259
8
8
  yt_dlp/jsinterp.py,sha256=GfZSNQlLG8l1dKcHA216DmIq9kszszqWClqHzEUd4sk,38770
9
9
  yt_dlp/minicurses.py,sha256=fDq7vdEn25qpZeEOdDk2YkEsckFMGAbrQaZcGNt4NUo,5328
10
- yt_dlp/options.py,sha256=72Qipr6jhFUO4gUPTIJsqYeHujnZi1L1GYx1Vn5qtiM,100390
10
+ yt_dlp/options.py,sha256=-PQ5DyRSIU9YBSG2oh0RTHC-eg4EewNt4zewTZTuERM,100632
11
11
  yt_dlp/plugins.py,sha256=EGmR0ydaahNspGrgszTNX4-YjHe93WOOhcw1gf6PZSs,8215
12
12
  yt_dlp/socks.py,sha256=oAuAfWM6jxI8A5hHDLEKq2U2-k9NyMB_z6nrKzNE9fg,8936
13
13
  yt_dlp/update.py,sha256=sY7gNFBQorzs7sEjRrqL5QOsTBNmGGa_FnpTtbxY1vA,25280
14
- yt_dlp/version.py,sha256=Af_WJ_Kb1KBR8M-2T3p45tzjcgWrxGmaEr6irFJdiuE,360
14
+ yt_dlp/version.py,sha256=jlXeK9_Clnj7MGlfVA4LmG9H4w-KIt4cbBnKAWpNWc4,360
15
15
  yt_dlp/webvtt.py,sha256=ONkXaaNCZcX8pQhJn3iwIKyaQ34BtVDrMEdG6wRNZwM,11451
16
16
  yt_dlp/__pyinstaller/__init__.py,sha256=-c4Zo8nQGKAm8wc_LDscxMtK7zr_YhZwRnC9CMruUBE,72
17
17
  yt_dlp/__pyinstaller/hook-yt_dlp.py,sha256=5Rd0zV2pDskjY1KtT0wsjxv4hStx67sLCjUexsFvFus,1339
@@ -173,11 +173,11 @@ yt_dlp/extractor/canalc2.py,sha256=1oCfeEggyw5vw_NmFo1_LjiVA2trHchJRH-mOi8AU7M,2
173
173
  yt_dlp/extractor/canalplus.py,sha256=ptoj2TULRSTkbdZFMHWkfAg6K_zEQku53QHx00Beolg,4329
174
174
  yt_dlp/extractor/canalsurmas.py,sha256=KNwrL-xpIjevVcxkkNESNOrwJXmww-XwlMApsgKCeSg,3336
175
175
  yt_dlp/extractor/caracoltv.py,sha256=ey7Uc32LzoTdfD10N_SvE4nQD6gnkwkO-q_gjOjZB9U,5735
176
- yt_dlp/extractor/cbc.py,sha256=0hdFHPRM6_rbSdk7QZyZ8L-IS76v_5rWpPJP2_wPPho,42335
176
+ yt_dlp/extractor/cbc.py,sha256=0clVdZ92qi3v4lwmLvBvd_YeszkxPQob0VXHrhpixwI,43102
177
177
  yt_dlp/extractor/cbs.py,sha256=Ai2Fmh0pxGhtiOVTKIaMPnXaj-KfQY05TvdyK8LyjSo,11852
178
178
  yt_dlp/extractor/cbsnews.py,sha256=Ynr8w0puSM0JqOAAiBfN671y34GBQX0b5RBeMKqjshc,19081
179
179
  yt_dlp/extractor/cbssports.py,sha256=2dtedsyB9qAwNm5IuyfvHRDkUH75lqMyiZaeQNl5FmE,4883
180
- yt_dlp/extractor/ccc.py,sha256=jpOxe8Gcj9SRYUB-uc1c9zcc8o5k3e31889LXrVawA8,4032
180
+ yt_dlp/extractor/ccc.py,sha256=HlH_d2vtu3guWKN_NZefk1PVD6kIpShN3Ltuud-27W8,5000
181
181
  yt_dlp/extractor/ccma.py,sha256=JuMYCgbsQ9u19_JOaa_coE_tkdatDY0KYeuqc5Dhvd4,7050
182
182
  yt_dlp/extractor/cctv.py,sha256=MFA6GISQmiyba_eyU11x6wz-cRRCRYQ6RLEV1SbNCtM,7346
183
183
  yt_dlp/extractor/cda.py,sha256=-ASuMo0kTFj1BzbSApkiLGaLh5C_d5vBsEuLtv1sZ8o,16947
@@ -228,7 +228,7 @@ yt_dlp/extractor/curiositystream.py,sha256=bzhwbA9jBy28tWn8m_y08mHbTpDJ6xz0S4XDG
228
228
  yt_dlp/extractor/cybrary.py,sha256=oSlXqw2Qzhu3Wy7utzEn-GreCD5h7KJ_KDcYysMTmao,6288
229
229
  yt_dlp/extractor/dacast.py,sha256=iO7RiFA5hxduDqicYdzKhrphUZWV45K5yolk057M0ko,7498
230
230
  yt_dlp/extractor/dailymail.py,sha256=AyLI8Shgpn0N3Nz4A1Yk_r4soa_sffB74gp3KnxhuII,3577
231
- yt_dlp/extractor/dailymotion.py,sha256=LDk2BqzQyORqv0NRzC6YieCNKGULeM0o878NJDiyOjc,24031
231
+ yt_dlp/extractor/dailymotion.py,sha256=lBHPkTNEfYumkhZj5ped3QZhybhUeTEkhNHfEdCkFJ8,24693
232
232
  yt_dlp/extractor/dailywire.py,sha256=5dCO2J4ThJ-G4pthAaVs_DFlDm2N0Bgu8DB8Mbthvos,4857
233
233
  yt_dlp/extractor/damtomo.py,sha256=wlRzM4PYbME7EfCU03pcw-PRHTeKAu-eIjcw2hvxMwY,5464
234
234
  yt_dlp/extractor/dangalplay.py,sha256=LmBxCY7hnd1UJKCCDvYGOzv7ZCSDaKGrqQfGHqPraxM,9345
@@ -890,7 +890,7 @@ yt_dlp/extractor/thisoldhouse.py,sha256=YLnhWuuA0xMbY766tVDVKi-iaRwwmgOs8sdD-ydB
890
890
  yt_dlp/extractor/thisvid.py,sha256=dxN-I56UieWt92iS2VSXK7IckobVNQ6BYPgvOJ9vWJI,8628
891
891
  yt_dlp/extractor/threeqsdn.py,sha256=zNHqF2ELqulYpoUCp1YYPlf0tyPS2krsrEUkS0Cw8YQ,6219
892
892
  yt_dlp/extractor/threespeak.py,sha256=agG3Ue0h19dAknJHwrK9a3RBQB4aja-5cx1crkOCIUc,4025
893
- yt_dlp/extractor/tiktok.py,sha256=DF97KMx2bxwKfVWAsYs_vqmOSRvk3Yzy-DefqCO0SkI,73875
893
+ yt_dlp/extractor/tiktok.py,sha256=oG320FyjXWBTtLf61aA3t6enQVFY4m7pBr5HPIrTWxo,76135
894
894
  yt_dlp/extractor/tmz.py,sha256=Nu3xReAc7dKyZcxTGwXYjOpDjeMdfLKSIgJMpjSobNI,9626
895
895
  yt_dlp/extractor/tnaflix.py,sha256=PAWzd7LtF97MF-aHSdUOpWpAmLUqBlAhP0FH0T3tpk0,13561
896
896
  yt_dlp/extractor/toggle.py,sha256=unbnd9IcJJOKcpoYSySISehBRbYeqHhr1x-fHmeLba4,7892
@@ -1124,13 +1124,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
1124
1124
  yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
1125
1125
  yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
1126
1126
  yt_dlp/utils/jslib/devalue.py,sha256=UtcQ1IEzt6HWBjB9Z_6rJMb3y2pFrbHXDNu1rrxXF1c,5583
1127
- yt_dlp-2026.1.19.359.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1128
- yt_dlp-2026.1.19.359.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=CD5lICntsMKv9rxBvt2Ge7gQeF2CNfkkLqkPUT13fuM,165349
1129
- yt_dlp-2026.1.19.359.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
1130
- yt_dlp-2026.1.19.359.dev0.data/data/share/man/man1/yt-dlp.1,sha256=2mhSDP0qM3ig2lFF6us8xlmaMH06BtWPKkJVGwr8Sm8,159918
1131
- yt_dlp-2026.1.19.359.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1132
- yt_dlp-2026.1.19.359.dev0.dist-info/METADATA,sha256=TSbVZYfmQIuwZtide_hgg6eoE2AGmkWZKOI-gGKMM2A,181116
1133
- yt_dlp-2026.1.19.359.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1134
- yt_dlp-2026.1.19.359.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1135
- yt_dlp-2026.1.19.359.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1136
- yt_dlp-2026.1.19.359.dev0.dist-info/RECORD,,
1127
+ yt_dlp-2026.1.25.233128.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=KKMwJ7JkH-B2rXIR9n4wAHTqn5waHyxzPtVmsMoYkDI,6009
1128
+ yt_dlp-2026.1.25.233128.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=ZT_UKIUjR5lFVtB7ctKc9FBVWkmnM-cFMNDpeVSwFfg,166159
1129
+ yt_dlp-2026.1.25.233128.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=L0JADRod-4ew2pvmYGiDUuXFgu1Ac8msk-ackiLYHCo,51632
1130
+ yt_dlp-2026.1.25.233128.dev0.data/data/share/man/man1/yt-dlp.1,sha256=blBneUC8ngI9Qjm2w4xDUIxeRQOLw6tnwNVs02fJFNM,160804
1131
+ yt_dlp-2026.1.25.233128.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=VsiR8Dn2RqbVSZHAqQyDtTfrc3BIBdzwgrcaJqux8kQ,6005
1132
+ yt_dlp-2026.1.25.233128.dev0.dist-info/METADATA,sha256=BypzGNXFzud6-T5bgDjQDheRF-O1s3zqYflP2XBkX7Q,181945
1133
+ yt_dlp-2026.1.25.233128.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1134
+ yt_dlp-2026.1.25.233128.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1135
+ yt_dlp-2026.1.25.233128.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1136
+ yt_dlp-2026.1.25.233128.dev0.dist-info/RECORD,,