| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Major Features:
- HD video thumbnails (hq720.jpg) with automatic fallback to lower qualities
- HD channel avatars (240x240 instead of 88x88)
- YouTube 2024+ lockupViewModel support for channel playlists
- youtubei/v1/browse API integration for channel playlist tabs
- yt-dlp integration for multi-language audio and subtitles
Bug Fixes:
- Fixed undefined `abort` import in playlist.py
- Fixed undefined functions in proto.py (encode_varint, bytes_to_hex, succinct_encode)
- Fixed missing `traceback` import in proto_debug.py
- Fixed blurry playlist thumbnails using default.jpg instead of HD versions
- Fixed channel playlists page using deprecated pbj=1 format
Improvements:
- Automatic thumbnail fallback system (hq720 → sddefault → hqdefault → mqdefault → default)
- JavaScript thumbnail_fallback() handler for 404 errors
- Better thumbnail quality across all pages (watch, channel, playlist, subscriptions)
- Consistent HD avatar display for all channel items
- Settings system automatically adds new settings without breaking user config
Files Modified:
- youtube/watch.py - HD thumbnails for related videos and playlist items
- youtube/channel.py - HD thumbnails for channel playlists, youtubei API integration
- youtube/playlist.py - HD thumbnails, fixed abort import
- youtube/util.py - HD thumbnail URLs, avatar HD upgrade, prefix_url improvements
- youtube/comments.py - HD video thumbnail
- youtube/subscriptions.py - HD thumbnails, fixed abort import
- youtube/yt_data_extract/common.py - lockupViewModel support, extract_lockup_view_model_info()
- youtube/yt_data_extract/everything_else.py - HD playlist thumbnails
- youtube/proto.py - Fixed undefined function references
- youtube/proto_debug.py - Added traceback import
- youtube/static/js/common.js - thumbnail_fallback() handler
- youtube/templates/*.html - Added onerror handlers for thumbnail fallback
- youtube/version.py - Bump to v0.4.0
Technical Details:
- All thumbnail URLs now use hq720.jpg (1280x720) when available
- Fallback handled client-side via JavaScript onerror handler
- Server-side avatar upgrade via regex in util.prefix_url()
- lockupViewModel parser extracts contentType, metadata, and first_video_id
- Channel playlist tabs now use youtubei/v1/browse instead of deprecated pbj=1
- Settings version system ensures backward compatibility
|
| | |
|
| | |
|
| |
|
|
| |
YouTube now displays 2K comments instead of 2359, for instance
|
| |
|
|
|
| |
Also add an option to the internal playlist ctoken function
for filtering out shorts, to be used in future anti-shorts features
|
| |
|
|
| |
YouTube created a new key 'commentCount' in addition to 'headerText'
|
| |
|
|
|
|
|
|
|
| |
Cause is that some pages have the onResponseReceivedEndpoints key
at the top level with useless stuff in it, and the extract_items
function was searching in that instead of the 'contents' key.
Change to use if blocks instead of elif blocks in the
extract_items function.
|
| |
|
|
| |
See comment in code
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Use multi_get and multi_deep_get for tag differences
Replace the duration check with conservative_update
|
| | |
|
| |
|
|
|
|
| |
Add check for extracting duration for shorts
Make short duration extraction stricter
Fix handling shorts with no views
|
| |
|
|
|
|
|
| |
Add channel tabs to the channel template and script
Update continuation token to request different tabs
Add support for 'reelItemRenderer' format required to extract shorts
|
| |
|
|
|
| |
This one is used when there is no corresponding YouTube video
for the track
|
| |
|
|
| |
Closes #160
|
| |
|
|
|
|
|
|
|
|
| |
Does not work for videos that require decryption because
decryption is not working (giving 403) for some reason.
Related invidious issue for decryption not working:
https://github.com/iv-org/invidious/issues/3245
Partial fix for #146
|
| |
|
|
|
|
| |
Huge thanks to @michaelweiser
Different sortings still don't work for videos and playlists
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
use 'deep_get' for storyboard
|
| |
|
|
|
|
|
|
|
|
| |
The base url will be randomly missing.
Take one of the listed captions urls which already
has the &lang and automatic specifiers. Then remove these
specifiers.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| | |
|
| |
|
|
| |
Ref: https://blog.youtube/news-and-events/update-to-youtube/
|
| |
|
|
| |
This reverts commit a0c3ca0159136d17eefa129176ae1904110238b8.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Allows for ranked preferences for h264, av1, and vp9 codecs in
settings, along with equal preferences which are tiebroken using
smaller file size.
For each quality, gives av-merge a list of video sources
and audio sources sorted based on preference & file size. It
will pick the first one that the browser supports.
Closes #84
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds support for AV1-encoded videos, which includes any videos
above 1080p. These weren't getting included because they did
not have a quality entry in the format table at the top of
watch_extraction.py. So get the quality from the quality
labels of the format if it's not there.
Because YouTube often includes BOTH AV1 and H.264 (AVC) for each
quality, after these are included, there will be way too many
quality options and the code needs to choose which one to use.
The choice is somewhat hard: AV1 is encoded in fewer bytes than
H.264 and is patent-free, however, it has less hardware support,
so might be more difficult to play. For instance, on my system,
AV1 does not work on 1080p, but H.264 does. Adds a setting about
which to prefer, set to H.264 as the default.
Also adds support for the lower quality mp4 audio quality, which
now gets used at 144p to save network bandwidth. For similar
reasons, this was not getting included because it did not
have an audio_bitrate entry in the table. Prefer bitrate
instead for the quality.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
This reverts commit d56df02e7b1eba86baf511289208295b1f6c5a50.
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
| |
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
YouTube reverted the changes they made that prompted f9f5d5ba.
In case they change their minds again, this adds support for both
formats.
The liberal_update and conservative_update functions needed to be
modified to handle the cases of empty lists, so that
a successfully extracted 'music_list': [{'Author':...},...] will
not be overwritten by 'music_list': [] in the calls to
liberal_dict_update.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
|
|
|
|
|
| |
watch_comment api periodically gives the error "Top level
comments mweb servlet is turned down."
The continuation items for the new api are in a different
arrangement in the json, so changes were necessary to the
extract_items function.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
|
| |
From
https://github.com/yt-dlp/yt-dlp/issues/574#issuecomment-887171136
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
|
|
|
| |
Also moves some microformat extraction from
_extract_watch_info_mobile to extract_watch_info where it belongs.
_extract_watch_info_mobile is really only for stuff visible on the
page, and thus specialized for either mobile or desktop.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| | |
|
| |
|
|
|
|
|
|
| |
Full digits no longer available
Closes #64
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
| |
Variable name changed from likeCount to voteCount
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
| |
Information from additional_info was being overrided with None.
Signed-off-by: Jesús <heckyel@hyperbola.info>
|
| |
|
|
|
|
| |
So that the link is not interpretted as a relative link
Signed-off-by: Jesús <heckyel@hyperbola.info>
|