yt-dlp 2025.12.26.233056.dev0__py3-none-any.whl → 2025.12.29.233040.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/generic.py +9 -5
- yt_dlp/extractor/picarto.py +3 -3
- yt_dlp/extractor/youtube/_base.py +1 -1
- yt_dlp/extractor/youtube/_video.py +73 -14
- yt_dlp/version.py +3 -3
- {yt_dlp-2025.12.26.233056.dev0.data → yt_dlp-2025.12.29.233040.dev0.data}/data/share/doc/yt_dlp/README.txt +9 -5
- {yt_dlp-2025.12.26.233056.dev0.data → yt_dlp-2025.12.29.233040.dev0.data}/data/share/man/man1/yt-dlp.1 +9 -4
- {yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/METADATA +4 -3
- {yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/RECORD +15 -15
- {yt_dlp-2025.12.26.233056.dev0.data → yt_dlp-2025.12.29.233040.dev0.data}/data/share/bash-completion/completions/yt-dlp +0 -0
- {yt_dlp-2025.12.26.233056.dev0.data → yt_dlp-2025.12.29.233040.dev0.data}/data/share/fish/vendor_completions.d/yt-dlp.fish +0 -0
- {yt_dlp-2025.12.26.233056.dev0.data → yt_dlp-2025.12.29.233040.dev0.data}/data/share/zsh/site-functions/_yt-dlp +0 -0
- {yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/WHEEL +0 -0
- {yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/entry_points.txt +0 -0
- {yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/licenses/LICENSE +0 -0
yt_dlp/extractor/generic.py
CHANGED
|
@@ -821,13 +821,17 @@ class GenericIE(InfoExtractor):
|
|
|
821
821
|
'Referer': smuggled_data.get('referer'),
|
|
822
822
|
}), impersonate=impersonate)
|
|
823
823
|
except ExtractorError as e:
|
|
824
|
-
if not
|
|
825
|
-
|
|
826
|
-
|
|
824
|
+
if not isinstance(e.cause, HTTPError) or e.cause.status != 403:
|
|
825
|
+
raise
|
|
826
|
+
res = e.cause.response
|
|
827
|
+
already_impersonating = res.extensions.get('impersonate') is not None
|
|
828
|
+
if already_impersonating or (
|
|
829
|
+
res.get_header('cf-mitigated') != 'challenge'
|
|
830
|
+
and b'<title>Attention Required! | Cloudflare</title>' not in res.read()
|
|
831
|
+
):
|
|
827
832
|
raise
|
|
828
833
|
cf_cookie_domain = traverse_obj(
|
|
829
|
-
LenientSimpleCookie(
|
|
830
|
-
('__cf_bm', 'domain'))
|
|
834
|
+
LenientSimpleCookie(res.get_header('set-cookie')), ('__cf_bm', 'domain'))
|
|
831
835
|
if cf_cookie_domain:
|
|
832
836
|
self.write_debug(f'Clearing __cf_bm cookie for {cf_cookie_domain}')
|
|
833
837
|
self.cookiejar.clear(domain=cf_cookie_domain, path='/', name='__cf_bm')
|
yt_dlp/extractor/picarto.py
CHANGED
|
@@ -4,6 +4,7 @@ from .common import InfoExtractor
|
|
|
4
4
|
from ..utils import (
|
|
5
5
|
ExtractorError,
|
|
6
6
|
str_or_none,
|
|
7
|
+
strip_or_none,
|
|
7
8
|
traverse_obj,
|
|
8
9
|
update_url,
|
|
9
10
|
)
|
|
@@ -50,7 +51,6 @@ class PicartoIE(InfoExtractor):
|
|
|
50
51
|
|
|
51
52
|
if metadata.get('online') == 0:
|
|
52
53
|
raise ExtractorError('Stream is offline', expected=True)
|
|
53
|
-
title = metadata['title']
|
|
54
54
|
|
|
55
55
|
cdn_data = self._download_json(''.join((
|
|
56
56
|
update_url(data['getLoadBalancerUrl']['url'], scheme='https'),
|
|
@@ -79,7 +79,7 @@ class PicartoIE(InfoExtractor):
|
|
|
79
79
|
|
|
80
80
|
return {
|
|
81
81
|
'id': channel_id,
|
|
82
|
-
'title':
|
|
82
|
+
'title': strip_or_none(metadata.get('title')),
|
|
83
83
|
'is_live': True,
|
|
84
84
|
'channel': channel_id,
|
|
85
85
|
'channel_id': metadata.get('id'),
|
|
@@ -159,7 +159,7 @@ class PicartoVodIE(InfoExtractor):
|
|
|
159
159
|
'id': video_id,
|
|
160
160
|
**traverse_obj(data, {
|
|
161
161
|
'id': ('id', {str_or_none}),
|
|
162
|
-
'title': ('title', {str}),
|
|
162
|
+
'title': ('title', {str.strip}),
|
|
163
163
|
'thumbnail': 'video_recording_image_url',
|
|
164
164
|
'channel': ('channel', 'name', {str}),
|
|
165
165
|
'age_limit': ('adult', {lambda x: 18 if x else 0}),
|
|
@@ -1065,7 +1065,7 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
|
|
1065
1065
|
return next_continuation
|
|
1066
1066
|
|
|
1067
1067
|
return traverse_obj(renderer, (
|
|
1068
|
-
('contents', 'items', 'rows'), ..., 'continuationItemRenderer',
|
|
1068
|
+
('contents', 'items', 'rows', 'subThreads'), ..., 'continuationItemRenderer',
|
|
1069
1069
|
('continuationEndpoint', ('button', 'buttonRenderer', 'command')),
|
|
1070
1070
|
), get_all=False, expected_type=cls._extract_continuation_ep_data)
|
|
1071
1071
|
|
|
@@ -1660,6 +1660,41 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
1660
1660
|
'live_status': 'not_live',
|
|
1661
1661
|
},
|
|
1662
1662
|
'params': {'skip_download': True},
|
|
1663
|
+
}, {
|
|
1664
|
+
# Threaded comments with 4 levels of depth
|
|
1665
|
+
'url': 'https://www.youtube.com/watch?v=f6HNySwZV4c',
|
|
1666
|
+
'info_dict': {
|
|
1667
|
+
'id': 'f6HNySwZV4c',
|
|
1668
|
+
'ext': 'mp4',
|
|
1669
|
+
'title': 'dlptestvideo2',
|
|
1670
|
+
'description': '',
|
|
1671
|
+
'media_type': 'video',
|
|
1672
|
+
'uploader': 'cole-dlp-test-acc',
|
|
1673
|
+
'uploader_id': '@coletdjnz',
|
|
1674
|
+
'uploader_url': 'https://www.youtube.com/@coletdjnz',
|
|
1675
|
+
'channel': 'cole-dlp-test-acc',
|
|
1676
|
+
'channel_id': 'UCiu-3thuViMebBjw_5nWYrA',
|
|
1677
|
+
'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA',
|
|
1678
|
+
'view_count': int,
|
|
1679
|
+
'like_count': int,
|
|
1680
|
+
'age_limit': 0,
|
|
1681
|
+
'duration': 5,
|
|
1682
|
+
'thumbnail': 'https://i.ytimg.com/vi/f6HNySwZV4c/maxresdefault.jpg',
|
|
1683
|
+
'categories': ['People & Blogs'],
|
|
1684
|
+
'tags': [],
|
|
1685
|
+
'timestamp': 1709856007,
|
|
1686
|
+
'upload_date': '20240308',
|
|
1687
|
+
'release_timestamp': 1709856007,
|
|
1688
|
+
'release_date': '20240308',
|
|
1689
|
+
'playable_in_embed': True,
|
|
1690
|
+
'availability': 'public',
|
|
1691
|
+
'live_status': 'not_live',
|
|
1692
|
+
'comment_count': 15,
|
|
1693
|
+
},
|
|
1694
|
+
'params': {
|
|
1695
|
+
'skip_download': True,
|
|
1696
|
+
'getcomments': True,
|
|
1697
|
+
},
|
|
1663
1698
|
}]
|
|
1664
1699
|
_WEBPAGE_TESTS = [{
|
|
1665
1700
|
# <object>
|
|
@@ -2437,6 +2472,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2437
2472
|
def extract_thread(contents, entity_payloads):
|
|
2438
2473
|
if not parent:
|
|
2439
2474
|
tracker['current_page_thread'] = 0
|
|
2475
|
+
|
|
2476
|
+
if max_depth < tracker['current_depth']:
|
|
2477
|
+
return
|
|
2478
|
+
|
|
2440
2479
|
for content in contents:
|
|
2441
2480
|
if not parent and tracker['total_parent_comments'] >= max_parents:
|
|
2442
2481
|
yield
|
|
@@ -2480,6 +2519,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2480
2519
|
'Detected YouTube comments looping. Stopping comment extraction '
|
|
2481
2520
|
f'{"for this thread" if parent else ""} as we probably cannot get any more.')
|
|
2482
2521
|
yield
|
|
2522
|
+
break # Safeguard for recursive call in subthreads code path below
|
|
2483
2523
|
else:
|
|
2484
2524
|
tracker['seen_comment_ids'].add(comment['id'])
|
|
2485
2525
|
|
|
@@ -2492,12 +2532,28 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2492
2532
|
comment_thread_renderer, lambda x: x['replies']['commentRepliesRenderer'], dict)
|
|
2493
2533
|
|
|
2494
2534
|
if comment_replies_renderer:
|
|
2535
|
+
subthreads = traverse_obj(comment_replies_renderer, (
|
|
2536
|
+
'subThreads', lambda _, v: v['commentThreadRenderer']))
|
|
2537
|
+
# Recursively extract from `commentThreadRenderer`s in `subThreads`
|
|
2538
|
+
if subthreads:
|
|
2539
|
+
tracker['current_depth'] += 1
|
|
2540
|
+
for entry in extract_thread(subthreads, entity_payloads):
|
|
2541
|
+
if entry:
|
|
2542
|
+
yield entry
|
|
2543
|
+
tracker['current_depth'] -= 1
|
|
2544
|
+
# All of the subThreads' `continuationItemRenderer`s were within the nested
|
|
2545
|
+
# `commentThreadRenderer`s and are now exhausted, so avoid unnecessary recursion below
|
|
2546
|
+
continue
|
|
2547
|
+
|
|
2495
2548
|
tracker['current_page_thread'] += 1
|
|
2549
|
+
tracker['current_depth'] += 1
|
|
2550
|
+
# Recursively extract from `continuationItemRenderer`s in `subThreads`
|
|
2496
2551
|
comment_entries_iter = self._comment_entries(
|
|
2497
2552
|
comment_replies_renderer, ytcfg, video_id,
|
|
2498
|
-
parent=
|
|
2553
|
+
parent=comment_id, tracker=tracker)
|
|
2499
2554
|
yield from itertools.islice(comment_entries_iter, min(
|
|
2500
2555
|
max_replies_per_thread, max(0, max_replies - tracker['total_reply_comments'])))
|
|
2556
|
+
tracker['current_depth'] -= 1
|
|
2501
2557
|
|
|
2502
2558
|
# Keeps track of counts across recursive calls
|
|
2503
2559
|
if not tracker:
|
|
@@ -2509,19 +2565,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2509
2565
|
'total_reply_comments': 0,
|
|
2510
2566
|
'seen_comment_ids': set(),
|
|
2511
2567
|
'pinned_comment_ids': set(),
|
|
2568
|
+
'current_depth': 1,
|
|
2512
2569
|
}
|
|
2513
2570
|
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
max_depth = int_or_none(get_single_config_arg('max_comment_depth'))
|
|
2517
|
-
if max_depth:
|
|
2518
|
-
self._downloader.deprecated_feature('[youtube] max_comment_depth extractor argument is deprecated. '
|
|
2519
|
-
'Set max replies in the max-comments extractor argument instead')
|
|
2520
|
-
if max_depth == 1 and parent:
|
|
2521
|
-
return
|
|
2571
|
+
_max_comments, max_parents, max_replies, max_replies_per_thread, max_depth, *_ = (
|
|
2572
|
+
int_or_none(p, default=sys.maxsize) for p in self._configuration_arg('max_comments') + [''] * 5)
|
|
2522
2573
|
|
|
2523
|
-
|
|
2524
|
-
|
|
2574
|
+
if max_depth < tracker['current_depth']:
|
|
2575
|
+
return
|
|
2525
2576
|
|
|
2526
2577
|
continuation = self._extract_continuation(root_continuation_data)
|
|
2527
2578
|
|
|
@@ -2550,6 +2601,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2550
2601
|
note_prefix = ' Downloading comment API JSON reply thread %d %s' % (
|
|
2551
2602
|
tracker['current_page_thread'], comment_prog_str)
|
|
2552
2603
|
else:
|
|
2604
|
+
# TODO: `parent` is only truthy in this code path with YT's legacy (non-threaded) comment view
|
|
2553
2605
|
note_prefix = '{}Downloading comment{} API JSON page {} {}'.format(
|
|
2554
2606
|
' ' if parent else '', ' replies' if parent else '',
|
|
2555
2607
|
page_num, comment_prog_str)
|
|
@@ -2566,6 +2618,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
2566
2618
|
ep='next', ytcfg=ytcfg, headers=headers, note=note_prefix,
|
|
2567
2619
|
check_get_keys=check_get_keys)
|
|
2568
2620
|
except ExtractorError as e:
|
|
2621
|
+
# TODO: This code path is not reached since eb5bdbfa70126c7d5355cc0954b63720522e462c
|
|
2569
2622
|
# Ignore incomplete data error for replies if retries didn't work.
|
|
2570
2623
|
# This is to allow any other parent comments and comment threads to be downloaded.
|
|
2571
2624
|
# See: https://github.com/yt-dlp/yt-dlp/issues/4669
|
|
@@ -3307,6 +3360,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
3307
3360
|
def process_https_formats():
|
|
3308
3361
|
proto = 'https'
|
|
3309
3362
|
https_fmts = []
|
|
3363
|
+
skip_player_js = 'js' in self._configuration_arg('player_skip')
|
|
3364
|
+
|
|
3310
3365
|
for fmt_stream in streaming_formats:
|
|
3311
3366
|
if fmt_stream.get('targetDurationSec'):
|
|
3312
3367
|
continue
|
|
@@ -3344,13 +3399,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
3344
3399
|
sc = urllib.parse.parse_qs(fmt_stream.get('signatureCipher'))
|
|
3345
3400
|
fmt_url = url_or_none(try_get(sc, lambda x: x['url'][0]))
|
|
3346
3401
|
encrypted_sig = try_get(sc, lambda x: x['s'][0])
|
|
3347
|
-
if not all((sc, fmt_url, player_url, encrypted_sig)):
|
|
3348
|
-
msg = f'Some {client_name} client https formats have been skipped as they are missing a
|
|
3402
|
+
if not all((sc, fmt_url, skip_player_js or player_url, encrypted_sig)):
|
|
3403
|
+
msg = f'Some {client_name} client https formats have been skipped as they are missing a URL. '
|
|
3349
3404
|
if client_name in ('web', 'web_safari'):
|
|
3350
3405
|
msg += 'YouTube is forcing SABR streaming for this client. '
|
|
3351
3406
|
else:
|
|
3352
3407
|
msg += (
|
|
3353
|
-
f'YouTube may have enabled the SABR-only
|
|
3408
|
+
f'YouTube may have enabled the SABR-only streaming experiment for '
|
|
3354
3409
|
f'{"your account" if self.is_authenticated else "the current session"}. '
|
|
3355
3410
|
)
|
|
3356
3411
|
msg += 'See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details'
|
|
@@ -3366,6 +3421,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
3366
3421
|
# signature
|
|
3367
3422
|
# Attempt to load sig spec from cache
|
|
3368
3423
|
if encrypted_sig:
|
|
3424
|
+
if skip_player_js:
|
|
3425
|
+
continue
|
|
3369
3426
|
spec_cache_id = self._sig_spec_cache_id(player_url, len(encrypted_sig))
|
|
3370
3427
|
spec = self._load_sig_spec_from_cache(spec_cache_id)
|
|
3371
3428
|
if spec:
|
|
@@ -3379,6 +3436,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
3379
3436
|
# n challenge
|
|
3380
3437
|
query = parse_qs(fmt_url)
|
|
3381
3438
|
if query.get('n'):
|
|
3439
|
+
if skip_player_js:
|
|
3440
|
+
continue
|
|
3382
3441
|
n_challenge = query['n'][0]
|
|
3383
3442
|
if n_challenge in self._player_cache:
|
|
3384
3443
|
fmt_url = update_url_query(fmt_url, {'n': self._player_cache[n_challenge]})
|
yt_dlp/version.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Autogenerated by devscripts/update-version.py
|
|
2
2
|
|
|
3
|
-
__version__ = '2025.12.
|
|
3
|
+
__version__ = '2025.12.29.233040'
|
|
4
4
|
|
|
5
|
-
RELEASE_GIT_HEAD = '
|
|
5
|
+
RELEASE_GIT_HEAD = 'd22436e5dc7c6808d931e27cbb967b1b2a33c17c'
|
|
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 = '2025.12.
|
|
15
|
+
_pkg_version = '2025.12.29.233040dev'
|
|
@@ -2339,11 +2339,15 @@ youtube
|
|
|
2339
2339
|
YouTube's side)
|
|
2340
2340
|
- max_comments: Limit the amount of comments to gather.
|
|
2341
2341
|
Comma-separated list of integers representing
|
|
2342
|
-
max-comments,max-parents,max-replies,max-replies-per-thread.
|
|
2343
|
-
is all,all,all,all
|
|
2344
|
-
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2342
|
+
max-comments,max-parents,max-replies,max-replies-per-thread,max-depth.
|
|
2343
|
+
Default is all,all,all,all,all
|
|
2344
|
+
- A max-depth value of 1 will discard all replies, regardless of
|
|
2345
|
+
the max-replies or max-replies-per-thread values given
|
|
2346
|
+
- E.g. all,all,1000,10,2 will get a maximum of 1000 replies total,
|
|
2347
|
+
with up to 10 replies per thread, and only 2 levels of depth
|
|
2348
|
+
(i.e. top-level comments plus their immediate replies).
|
|
2349
|
+
1000,all,100 will get a maximum of 1000 comments, with a maximum
|
|
2350
|
+
of 100 replies total
|
|
2347
2351
|
- formats: Change the types of formats to return. dashy (convert HTTP
|
|
2348
2352
|
to DASH), duplicate (identical content but different URLs or
|
|
2349
2353
|
protocol; includes dashy), incomplete (cannot be downloaded
|
|
@@ -2758,13 +2758,18 @@ choose comment sorting mode (on YouTube\[aq]s side)
|
|
|
2758
2758
|
.IP \[bu] 2
|
|
2759
2759
|
\f[V]max_comments\f[R]: Limit the amount of comments to gather.
|
|
2760
2760
|
Comma-separated list of integers representing
|
|
2761
|
-
\f[V]max-comments,max-parents,max-replies,max-replies-per-thread\f[R].
|
|
2762
|
-
Default is \f[V]all,all,all,all\f[R]
|
|
2761
|
+
\f[V]max-comments,max-parents,max-replies,max-replies-per-thread,max-depth\f[R].
|
|
2762
|
+
Default is \f[V]all,all,all,all,all\f[R]
|
|
2763
2763
|
.RS 2
|
|
2764
2764
|
.IP \[bu] 2
|
|
2765
|
+
A \f[V]max-depth\f[R] value of \f[V]1\f[R] will discard all replies,
|
|
2766
|
+
regardless of the \f[V]max-replies\f[R] or
|
|
2767
|
+
\f[V]max-replies-per-thread\f[R] values given
|
|
2768
|
+
.IP \[bu] 2
|
|
2765
2769
|
E.g.
|
|
2766
|
-
\f[V]all,all,1000,10\f[R] will get a maximum of 1000 replies total,
|
|
2767
|
-
up to 10 replies per thread.
|
|
2770
|
+
\f[V]all,all,1000,10,2\f[R] will get a maximum of 1000 replies total,
|
|
2771
|
+
with up to 10 replies per thread, and only 2 levels of depth (i.e.
|
|
2772
|
+
top-level comments plus their immediate replies).
|
|
2768
2773
|
\f[V]1000,all,100\f[R] will get a maximum of 1000 comments, with a
|
|
2769
2774
|
maximum of 100 replies total
|
|
2770
2775
|
.RE
|
{yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: yt-dlp
|
|
3
|
-
Version: 2025.12.
|
|
3
|
+
Version: 2025.12.29.233040.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
|
|
@@ -1928,8 +1928,9 @@ The following extractors use this feature:
|
|
|
1928
1928
|
* `player_js_variant`: The player javascript variant to use for n/sig deciphering. The known variants are: `main`, `tcc`, `tce`, `es5`, `es6`, `tv`, `tv_es6`, `phone`, `tablet`. The default is `main`, and the others are for debugging purposes. You can use `actual` to go with what is prescribed by the site
|
|
1929
1929
|
* `player_js_version`: The player javascript version to use for n/sig deciphering, in the format of `signature_timestamp@hash` (e.g. `20348@0004de42`). The default is to use what is prescribed by the site, and can be selected with `actual`
|
|
1930
1930
|
* `comment_sort`: `top` or `new` (default) - choose comment sorting mode (on YouTube's side)
|
|
1931
|
-
* `max_comments`: Limit the amount of comments to gather. Comma-separated list of integers representing `max-comments,max-parents,max-replies,max-replies-per-thread`. Default is `all,all,all,all`
|
|
1932
|
-
*
|
|
1931
|
+
* `max_comments`: Limit the amount of comments to gather. Comma-separated list of integers representing `max-comments,max-parents,max-replies,max-replies-per-thread,max-depth`. Default is `all,all,all,all,all`
|
|
1932
|
+
* A `max-depth` value of `1` will discard all replies, regardless of the `max-replies` or `max-replies-per-thread` values given
|
|
1933
|
+
* E.g. `all,all,1000,10,2` will get a maximum of 1000 replies total, with up to 10 replies per thread, and only 2 levels of depth (i.e. top-level comments plus their immediate replies). `1000,all,100` will get a maximum of 1000 comments, with a maximum of 100 replies total
|
|
1933
1934
|
* `formats`: Change the types of formats to return. `dashy` (convert HTTP to DASH), `duplicate` (identical content but different URLs or protocol; includes `dashy`), `incomplete` (cannot be downloaded completely - live dash and post-live m3u8), `missing_pot` (include formats that require a PO Token but are missing one)
|
|
1934
1935
|
* `innertube_host`: Innertube API host to use for all API requests; e.g. `studio.youtube.com`, `youtubei.googleapis.com`. Note that cookies exported from one subdomain will not work on others
|
|
1935
1936
|
* `innertube_key`: Innertube API key to use for all API requests. By default, no API key is used
|
|
@@ -11,7 +11,7 @@ yt_dlp/options.py,sha256=72Qipr6jhFUO4gUPTIJsqYeHujnZi1L1GYx1Vn5qtiM,100390
|
|
|
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=
|
|
14
|
+
yt_dlp/version.py,sha256=wDYRUMT_zumtcfgpBv8NwMcW6QWrtS7QQag9OYmtWyM,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
|
|
@@ -341,7 +341,7 @@ yt_dlp/extractor/gazeta.py,sha256=TPAyAUT6wPWrPABDdy8BEBPqriPhJzV5CfEfzo2JSZ8,19
|
|
|
341
341
|
yt_dlp/extractor/gbnews.py,sha256=I8btFYZMP8IHM72NxbQ4bcLRCUisjL9DBXv6lSn3BHk,4514
|
|
342
342
|
yt_dlp/extractor/gdcvault.py,sha256=XjqbEYm0emjlE-iP8aXmWjZ17D0dV6Bdv51idUGQaQw,8542
|
|
343
343
|
yt_dlp/extractor/gedidigital.py,sha256=XGeRNC7LmNIBe4tLVgeGQTYyykcgHjFu_BFi_0lAS4s,8521
|
|
344
|
-
yt_dlp/extractor/generic.py,sha256=
|
|
344
|
+
yt_dlp/extractor/generic.py,sha256=FqFg2G4TeLNrtR-0O8TeZMAF4HAKfrBmjnbExwraA3w,58980
|
|
345
345
|
yt_dlp/extractor/genericembeds.py,sha256=6vVNdeCccZ5JcdZxsLSAHPfhG1kjXOAelHWCXax8LHY,4613
|
|
346
346
|
yt_dlp/extractor/genius.py,sha256=BgRpIRyVrjqZ9b4SvrRTIkQgtzE6L5kke7l5OW3AMv8,6103
|
|
347
347
|
yt_dlp/extractor/germanupa.py,sha256=FMmWu0zhSbbGdrTa86r1AtvqG-MtR3dYsmCn6YdVBo4,4051
|
|
@@ -662,7 +662,7 @@ yt_dlp/extractor/phoenix.py,sha256=RimZJ_CZ2u8CXWzWzsRxyz8j2h1pX8aoPEcxcCg2elQ,3
|
|
|
662
662
|
yt_dlp/extractor/photobucket.py,sha256=OZRZ1ke878NTqNneGp9a0yeIA-_llUy7WDOE2AexKWw,1698
|
|
663
663
|
yt_dlp/extractor/pialive.py,sha256=ZeLC8rpWYJEHDul5YYRGZcCJ3VfaDLZ1bilD50Rtxv0,5522
|
|
664
664
|
yt_dlp/extractor/piapro.py,sha256=QCSnxf60IA1lDV28W1RKQyywcfaaLzH35z--SEMbZwc,4302
|
|
665
|
-
yt_dlp/extractor/picarto.py,sha256=
|
|
665
|
+
yt_dlp/extractor/picarto.py,sha256=L9rRki5u6_UKST9zQ20h9PrVhxsmPlw7wMXRJzQ1ss0,5295
|
|
666
666
|
yt_dlp/extractor/piksel.py,sha256=GIhsNtq7l1zm5vsegeOsZ-DPT8vV0eFVCj0T3Wx4M1o,7206
|
|
667
667
|
yt_dlp/extractor/pinkbike.py,sha256=J1XybWVHfXfNnzz4qPralPMd7hFLe1r6XliPxM3uJCM,3351
|
|
668
668
|
yt_dlp/extractor/pinterest.py,sha256=454P1Mvxej66jOsGgUYSveIC_kMZCnSUOvOz4jdDr44,10545
|
|
@@ -1059,14 +1059,14 @@ yt_dlp/extractor/zingmp3.py,sha256=KHD-f-1vUPy18Xk-_F_H_LfFR9N7-bONFYWeNRvJ1Z4,2
|
|
|
1059
1059
|
yt_dlp/extractor/zoom.py,sha256=DW5TmRR4GWWWloSysqYqN-R5jvDkLTMdsOzsyIWcltk,7090
|
|
1060
1060
|
yt_dlp/extractor/zype.py,sha256=e3_07aMl65x-ziI5Ge_Ph_lCV4q67DnqeRq2PjIKZj4,5507
|
|
1061
1061
|
yt_dlp/extractor/youtube/__init__.py,sha256=3F72z6WHXlv41giIdmmVY7Fws-bAnkiWz8Eh3A19004,1454
|
|
1062
|
-
yt_dlp/extractor/youtube/_base.py,sha256=
|
|
1062
|
+
yt_dlp/extractor/youtube/_base.py,sha256=HlC-OeuoGS8gJhiErGJ8My_wpjYL5iCJnQpgWjrpYXI,55551
|
|
1063
1063
|
yt_dlp/extractor/youtube/_clip.py,sha256=__EJUrb6iUCIURupsaa-ixn51q4esfok09znrpvdD88,3073
|
|
1064
1064
|
yt_dlp/extractor/youtube/_mistakes.py,sha256=bLrxlAYqdR0mTuCLoMmJHh15BHuhxfHXeQFTVBRX9Lk,2142
|
|
1065
1065
|
yt_dlp/extractor/youtube/_notifications.py,sha256=1nhavzW0e2QWFAWHkfbTU4sSXNp4vUbGFygYNSgbxBE,4585
|
|
1066
1066
|
yt_dlp/extractor/youtube/_redirect.py,sha256=WWWnGEkfSGBXpZFi_bWY4XcHZ8PDeK7UsndDaTYYhQg,9005
|
|
1067
1067
|
yt_dlp/extractor/youtube/_search.py,sha256=E9raTPGjUD6mm81WBpT4AsaxyiTBHdNssgzeHwVeNOE,6552
|
|
1068
1068
|
yt_dlp/extractor/youtube/_tab.py,sha256=MiQGWZdHENOz8Ac-OAuAgqMWJ6gC-PZKJWPDG80QY6E,115490
|
|
1069
|
-
yt_dlp/extractor/youtube/_video.py,sha256=
|
|
1069
|
+
yt_dlp/extractor/youtube/_video.py,sha256=gsgpDffY8iV4p8ipF0KWyiWUTKO2zXCWv29O5mAo-Ec,212382
|
|
1070
1070
|
yt_dlp/extractor/youtube/jsc/__init__.py,sha256=HaVFP8ikrLaE-ClAh39-S28WCF4S2KTRaSu7QvA28E8,289
|
|
1071
1071
|
yt_dlp/extractor/youtube/jsc/_director.py,sha256=92pB-KVSs6plmE5R8gpjkZL9aeoWNR0XTnGOBXMy9go,13167
|
|
1072
1072
|
yt_dlp/extractor/youtube/jsc/_registry.py,sha256=Vg9GkHKHKKPeRfUQ-XSw01mfx_2Xyodh0SJpwjawYCA,102
|
|
@@ -1122,13 +1122,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
|
|
|
1122
1122
|
yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
|
|
1123
1123
|
yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
|
|
1124
1124
|
yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
|
|
1125
|
-
yt_dlp-2025.12.
|
|
1126
|
-
yt_dlp-2025.12.
|
|
1127
|
-
yt_dlp-2025.12.
|
|
1128
|
-
yt_dlp-2025.12.
|
|
1129
|
-
yt_dlp-2025.12.
|
|
1130
|
-
yt_dlp-2025.12.
|
|
1131
|
-
yt_dlp-2025.12.
|
|
1132
|
-
yt_dlp-2025.12.
|
|
1133
|
-
yt_dlp-2025.12.
|
|
1134
|
-
yt_dlp-2025.12.
|
|
1125
|
+
yt_dlp-2025.12.29.233040.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
|
|
1126
|
+
yt_dlp-2025.12.29.233040.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=cPx4ZehhabGCBTYTosfKHInDIeDasDSR2Xtxtl-xo58,165135
|
|
1127
|
+
yt_dlp-2025.12.29.233040.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
|
|
1128
|
+
yt_dlp-2025.12.29.233040.dev0.data/data/share/man/man1/yt-dlp.1,sha256=yyBAVJTtg0xPpkUsET4pkWywEepOaZ5Pap5UnleI85M,159690
|
|
1129
|
+
yt_dlp-2025.12.29.233040.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
|
|
1130
|
+
yt_dlp-2025.12.29.233040.dev0.dist-info/METADATA,sha256=bJp7Q2yX-pJAMGAucvtPrzJUNg1N1d5aSOHio7MORjc,180513
|
|
1131
|
+
yt_dlp-2025.12.29.233040.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
1132
|
+
yt_dlp-2025.12.29.233040.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
|
|
1133
|
+
yt_dlp-2025.12.29.233040.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
|
|
1134
|
+
yt_dlp-2025.12.29.233040.dev0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{yt_dlp-2025.12.26.233056.dev0.dist-info → yt_dlp-2025.12.29.233040.dev0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|