yt-dlp 2025.12.30.233018.dev0__py3-none-any.whl → 2025.12.31.233056.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.
@@ -1661,7 +1661,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
1661
1661
  },
1662
1662
  'params': {'skip_download': True},
1663
1663
  }, {
1664
- # Threaded comments with 4 levels of depth
1664
+ # Comment subthreads with 4 levels of depth
1665
1665
  'url': 'https://www.youtube.com/watch?v=f6HNySwZV4c',
1666
1666
  'info_dict': {
1667
1667
  'id': 'f6HNySwZV4c',
@@ -1675,6 +1675,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
1675
1675
  'channel': 'cole-dlp-test-acc',
1676
1676
  'channel_id': 'UCiu-3thuViMebBjw_5nWYrA',
1677
1677
  'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA',
1678
+ 'channel_follower_count': int,
1678
1679
  'view_count': int,
1679
1680
  'like_count': int,
1680
1681
  'age_limit': 0,
@@ -1689,12 +1690,41 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
1689
1690
  'playable_in_embed': True,
1690
1691
  'availability': 'public',
1691
1692
  'live_status': 'not_live',
1692
- 'comment_count': 15,
1693
+ 'comment_count': 15, # XXX: minimum
1693
1694
  },
1694
1695
  'params': {
1695
1696
  'skip_download': True,
1696
1697
  'getcomments': True,
1697
1698
  },
1699
+ }, {
1700
+ # Comments: `subThreads` containing `commentThreadRenderer`s AND `continuationItemRenderer`
1701
+ 'url': 'https://www.youtube.com/watch?v=3dHQb2Nhma0',
1702
+ 'info_dict': {
1703
+ 'id': '3dHQb2Nhma0',
1704
+ 'ext': 'mp4',
1705
+ 'title': 'Tɪtle',
1706
+ 'description': '',
1707
+ 'media_type': 'video',
1708
+ 'uploader': 'abcdefg',
1709
+ 'uploader_id': '@abcdefg-d5t2c',
1710
+ 'uploader_url': 'https://www.youtube.com/@abcdefg-d5t2c',
1711
+ 'channel': 'abcdefg',
1712
+ 'channel_id': 'UCayEJzV8XSSJkPdA7OAsbew',
1713
+ 'channel_url': 'https://www.youtube.com/channel/UCayEJzV8XSSJkPdA7OAsbew',
1714
+ 'view_count': int,
1715
+ 'like_count': int,
1716
+ 'age_limit': 0,
1717
+ 'duration': 12,
1718
+ 'thumbnail': 'https://i.ytimg.com/vi/3dHQb2Nhma0/maxresdefault.jpg',
1719
+ 'categories': ['People & Blogs'],
1720
+ 'tags': [],
1721
+ 'timestamp': 1767158812,
1722
+ 'upload_date': '20251231',
1723
+ 'playable_in_embed': True,
1724
+ 'availability': 'unlisted',
1725
+ 'live_status': 'not_live',
1726
+ 'comment_count': 9, # XXX: minimum
1727
+ },
1698
1728
  }]
1699
1729
  _WEBPAGE_TESTS = [{
1700
1730
  # <object>
@@ -2532,19 +2562,19 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
2532
2562
  comment_thread_renderer, lambda x: x['replies']['commentRepliesRenderer'], dict)
2533
2563
 
2534
2564
  if comment_replies_renderer:
2535
- subthreads = traverse_obj(comment_replies_renderer, (
2536
- 'subThreads', lambda _, v: v['commentThreadRenderer']))
2565
+ subthreads = traverse_obj(comment_replies_renderer, ('subThreads', ..., {dict}))
2537
2566
  # Recursively extract from `commentThreadRenderer`s in `subThreads`
2538
- if subthreads:
2539
- for entry in extract_thread(subthreads, entity_payloads, comment_id, thread_depth + 1):
2567
+ if threads := traverse_obj(subthreads, lambda _, v: v['commentThreadRenderer']):
2568
+ for entry in extract_thread(threads, entity_payloads, comment_id, thread_depth + 1):
2540
2569
  if entry:
2541
2570
  yield entry
2542
- # All of the subThreads' `continuationItemRenderer`s were within the nested
2543
- # `commentThreadRenderer`s and are now exhausted, so avoid unnecessary recursion below
2544
- continue
2571
+ if not traverse_obj(subthreads, lambda _, v: v['continuationItemRenderer']):
2572
+ # All of the subThreads' `continuationItemRenderer`s were within the nested
2573
+ # `commentThreadRenderer`s and are now exhausted, so avoid unnecessary recursion below
2574
+ continue
2545
2575
 
2546
2576
  tracker['current_page_thread'] += 1
2547
- # Recursively extract from `continuationItemRenderer`s in `subThreads`
2577
+ # Recursively extract from `continuationItemRenderer` in `subThreads`
2548
2578
  comment_entries_iter = self._comment_entries(
2549
2579
  comment_replies_renderer, ytcfg, video_id,
2550
2580
  parent=comment_id, tracker=tracker, depth=thread_depth + 1)
yt_dlp/version.py CHANGED
@@ -1,8 +1,8 @@
1
1
  # Autogenerated by devscripts/update-version.py
2
2
 
3
- __version__ = '2025.12.30.233018'
3
+ __version__ = '2025.12.31.233056'
4
4
 
5
- RELEASE_GIT_HEAD = 'ab3ff2d5dd220aa35805dadb6fae66ae9a0e2553'
5
+ RELEASE_GIT_HEAD = '76c31a7a216a3894884381c7775f838b811fde06'
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.30.233018dev'
15
+ _pkg_version = '2025.12.31.233056dev'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yt-dlp
3
- Version: 2025.12.30.233018.dev0
3
+ Version: 2025.12.31.233056.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
@@ -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=XfWqEg3gEtV8qJDkRw3dQUa0K7-1wnTgokooqXv4tYM,360
14
+ yt_dlp/version.py,sha256=T_SfrGUV3Qyl7cBJcYbl25C1iFvzYV_837bWwtDcALc,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
@@ -1065,7 +1065,7 @@ yt_dlp/extractor/youtube/_notifications.py,sha256=1nhavzW0e2QWFAWHkfbTU4sSXNp4vU
1065
1065
  yt_dlp/extractor/youtube/_redirect.py,sha256=WWWnGEkfSGBXpZFi_bWY4XcHZ8PDeK7UsndDaTYYhQg,9005
1066
1066
  yt_dlp/extractor/youtube/_search.py,sha256=E9raTPGjUD6mm81WBpT4AsaxyiTBHdNssgzeHwVeNOE,6552
1067
1067
  yt_dlp/extractor/youtube/_tab.py,sha256=MiQGWZdHENOz8Ac-OAuAgqMWJ6gC-PZKJWPDG80QY6E,115490
1068
- yt_dlp/extractor/youtube/_video.py,sha256=TuKbGOdWVwFS1w-trTnBMapLOim3-8jfD7AcbBV1LCY,212253
1068
+ yt_dlp/extractor/youtube/_video.py,sha256=afy1fe-DFq6xkFHrZKDUzYPyCM50oboMDwTzWOR7Njs,213632
1069
1069
  yt_dlp/extractor/youtube/jsc/__init__.py,sha256=HaVFP8ikrLaE-ClAh39-S28WCF4S2KTRaSu7QvA28E8,289
1070
1070
  yt_dlp/extractor/youtube/jsc/_director.py,sha256=92pB-KVSs6plmE5R8gpjkZL9aeoWNR0XTnGOBXMy9go,13167
1071
1071
  yt_dlp/extractor/youtube/jsc/_registry.py,sha256=Vg9GkHKHKKPeRfUQ-XSw01mfx_2Xyodh0SJpwjawYCA,102
@@ -1121,13 +1121,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
1121
1121
  yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
1122
1122
  yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
1123
1123
  yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
1124
- yt_dlp-2025.12.30.233018.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1125
- yt_dlp-2025.12.30.233018.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=cPx4ZehhabGCBTYTosfKHInDIeDasDSR2Xtxtl-xo58,165135
1126
- yt_dlp-2025.12.30.233018.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
1127
- yt_dlp-2025.12.30.233018.dev0.data/data/share/man/man1/yt-dlp.1,sha256=yyBAVJTtg0xPpkUsET4pkWywEepOaZ5Pap5UnleI85M,159690
1128
- yt_dlp-2025.12.30.233018.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1129
- yt_dlp-2025.12.30.233018.dev0.dist-info/METADATA,sha256=K10Jf0lot224X1w-Mtv0WVJoE8kC_ZrqX9KBJ_65HGk,180513
1130
- yt_dlp-2025.12.30.233018.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1131
- yt_dlp-2025.12.30.233018.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1132
- yt_dlp-2025.12.30.233018.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1133
- yt_dlp-2025.12.30.233018.dev0.dist-info/RECORD,,
1124
+ yt_dlp-2025.12.31.233056.dev0.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
1125
+ yt_dlp-2025.12.31.233056.dev0.data/data/share/doc/yt_dlp/README.txt,sha256=cPx4ZehhabGCBTYTosfKHInDIeDasDSR2Xtxtl-xo58,165135
1126
+ yt_dlp-2025.12.31.233056.dev0.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=v2WQvWvk4qKpp2-97z2ULb5Msj5dgzU6nMkS-FwSmbM,51488
1127
+ yt_dlp-2025.12.31.233056.dev0.data/data/share/man/man1/yt-dlp.1,sha256=yyBAVJTtg0xPpkUsET4pkWywEepOaZ5Pap5UnleI85M,159690
1128
+ yt_dlp-2025.12.31.233056.dev0.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
1129
+ yt_dlp-2025.12.31.233056.dev0.dist-info/METADATA,sha256=G1ttyUJFaGDWquZUcSwQSP37E88jFurO0lKvc6XHTXI,180513
1130
+ yt_dlp-2025.12.31.233056.dev0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1131
+ yt_dlp-2025.12.31.233056.dev0.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
1132
+ yt_dlp-2025.12.31.233056.dev0.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
1133
+ yt_dlp-2025.12.31.233056.dev0.dist-info/RECORD,,