From 56ecd6cb1b461bd3622c669936050fa7e4d83542 Mon Sep 17 00:00:00 2001 From: Astounds Date: Fri, 27 Mar 2026 19:22:12 -0500 Subject: fix: use YouTube-provided thumbnail URLs instead of hardcoded hq720.jpg Videos without hq720.jpg thumbnails caused mass 404 errors. Now preserves the actual thumbnail URL from YouTube's API response, falls back to hqdefault.jpg only when no thumbnail is provided. Also picks highest quality thumbnail from API (thumbnails[-1]) and adds progressive fallback for subscription/download functions. --- youtube/channel.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'youtube/channel.py') diff --git a/youtube/channel.py b/youtube/channel.py index 72fac07..55c1124 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -406,12 +406,12 @@ def post_process_channel_info(info): info['avatar'] = util.prefix_url(info['avatar']) info['channel_url'] = util.prefix_url(info['channel_url']) for item in info['items']: - # For playlists, use first_video_id for thumbnail, not playlist id - if item.get('type') == 'playlist' and item.get('first_video_id'): - item['thumbnail'] = "https://i.ytimg.com/vi/{}/hq720.jpg".format(item['first_video_id']) - elif item.get('type') == 'video': - item['thumbnail'] = "https://i.ytimg.com/vi/{}/hq720.jpg".format(item['id']) - # For channels and other types, keep existing thumbnail + # Only set thumbnail if YouTube didn't provide one + if not item.get('thumbnail'): + if item.get('type') == 'playlist' and item.get('first_video_id'): + item['thumbnail'] = "https://i.ytimg.com/vi/{}/hqdefault.jpg".format(item['first_video_id']) + elif item.get('type') == 'video' and item.get('id'): + item['thumbnail'] = "https://i.ytimg.com/vi/{}/hqdefault.jpg".format(item['id']) util.prefix_urls(item) util.add_extra_html_info(item) if info['current_tab'] == 'about': -- cgit v1.2.3