aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* docs: remove duplicate FreeTube entry in READMEHEADv0.4.2masterAstounds7 hours1-1/+0
|
* bump to v0.4.2Astounds7 hours1-1/+1
|
* fix error handling, null URLs in templates, and Radio playlist supportAstounds7 hours7-46/+86
| | | | | | | | | | | - Global error handler: friendly messages for 429, 502, 403, 400 instead of raw tracebacks. Filter FetchError from Flask logger. - Fix None URLs in templates: protect href/src in common_elements, playlist, watch, and comments templates against None values. - Radio playlists (RD...): redirect /playlist?list=RD... to /watch?v=...&list=RD... since YouTube only supports them in player. - Wrap player client fallbacks (ios, tv_embedded) in try/catch so a failed fallback doesn't crash the whole page.
* remove yt-dlp, fix captions PO Token issue, fix 429 retry logicAstounds7 hours9-697/+84
| | | | | | | | | | - Remove yt-dlp entirely (modules, routes, settings, dependency) Was blocking page loads by running synchronously in gevent - Fix captions: use Android client caption URLs (no PO Token needed) instead of web timedtext URLs that YouTube now blocks - Fix 429 retry: fail immediately without Tor (same IP = pointless retry) Was causing ~27s delays with exponential backoff - Accept ytdlp_enabled as legacy setting to avoid warning on startup
* fix: use YouTube-provided thumbnail URLs instead of hardcoded hq720.jpgAstounds9 hours10-61/+81
| | | | | | | | 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.
* bump to v0.4.1v0.4.1Astounds5 days1-1/+1
|
* feat: improve 429 handling with Tor support and clean CIAstounds5 days3-25/+9
| | | | | | - Retry with new Tor identity on 429 - Improve error logging - Remove .build.yml and .drone.yml
* Release v0.4.0 - HD Thumbnails, YouTube 2024+ Support, and yt-dlp Integrationv0.4.0Astounds5 days25-241/+939
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* yt-dlpAstounds6 days13-18/+1097
|
* Bump version to v0.3.2v0.3.2Jesus2025-03-081-1/+1
|
* Refactor extract_info in watch.py to improve client flexibilityJesus2025-03-081-28/+38
| | | | | Introduce primary_client, fallback_client, and last_resort_client variables for better configurability. Replace hardcoded 'android_vr' with primary_client in fetch_player_response call.
* fix: prevent error when closing avMerge if not a functionJesus2025-03-081-1/+2
|
* Add styles error in playerJesus2025-03-081-0/+26
|
* Fix NoneType inside comments.pyJesus2025-03-082-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | Bug: Traceback (most recent call last): File "/home/rusian/yt-local/youtube/comments.py", line 180, in video_comments post_process_comments_info(comments_info) File "/home/rusian/yt-local/youtube/comments.py", line 81, in post_process_comments_info comment['author'] = strip_non_ascii(comment['author']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rusian/yt-local/youtube/util.py", line 843, in strip_non_ascii stripped = (c for c in string if 0 < ord(c) < 127) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'NoneType' object is not iterable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "src/gevent/greenlet.py", line 900, in gevent._gevent_cgreenlet.Greenlet.run File "/home/rusian/yt-local/youtube/comments.py", line 195, in video_comments comments_info['error'] = 'YouTube blocked the request. IP address: %s' % e.ip ^^^^ AttributeError: 'TypeError' object has no attribute 'ip' 2025-03-08T01:25:47Z <Greenlet at 0x7f251e5279c0: video_comments('hcm55lU9knw', 0, lc='')> failed with AttributeError
* Bump version to v0.3.1v0.3.1Jesus2025-03-081-1/+1
|
* Improve buffer management for different platformsJesus2025-03-081-2/+28
| | | | | | | - Introduced `BUFFER_CONFIG` to define buffer sizes for various systems (webOS, Samsung Tizen, Android TV, desktop). - Added `detectSystem()` function to determine the platform based on `navigator.userAgent`. - Updated `Stream` constructor to use platform-specific buffer sizes dynamically. - Added console log for debugging detected system and applied buffer size.
* version v0.3.0v0.3.0Jesus2025-03-081-1/+1
|
* Renew plyr UI and simplify elementsJesus2025-03-081-0/+38
|
* update logic plyr-start.jsAstound2025-03-031-1/+16
|
* version 0.2.21v0.2.21Astound2025-03-022-18/+9
|
* update dependenciesAstound2025-03-012-33/+17
|
* Refactoring get_app_versionAstound2025-03-011-29/+19
|
* minor fix deprecation warningAstound2025-03-012-2/+2
| | | | | | tests/test_util.py: 14 warnings /home/runner/work/yt-local/youtube-local/youtube/util.py:321: DeprecationWarning: HTTPResponse.getheader() is deprecated and will be removed in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default). response.getheader('Content-Encoding', default='identity'))
* version 0.2.20v0.2.20Astound2025-02-281-1/+1
|
* Remove gather_googlevideo_domains settingAstound2025-02-282-14/+10
| | | | | | | | | | | This was an old experiment to collect googlevideo domains to see if there was a pattern that could correlate to IP address to look for workarounds for 403 errors Can bug out if enabled and if failed to get any vidoe urls, so remove since it is obsolete and some people are enabling it See #218
* Remove params to fetch_player_responseAstound2025-02-281-1/+0
|
* Increase playlist count to 1000 by default if cannot get video countAstound2025-02-281-1/+1
| | | | | | | This way, buttons will still appear even if there is a failure to read playlist metadata Fixes #220# Please enter the commit message for your changes. Lines starting
* channel.py: Catch FetchErrorAstound2025-02-281-1/+1
| | | | | | Should catch this error to fail gracefully See #227
* util: use visitorData for api requestAstound2025-02-282-27/+94
| | | | watch: use android_vr client to get player data
* version 0.2.19v0.2.19Jesus2024-10-111-1/+1
|
* Revert "Refactoring code and reuse INNERTUBE_CLIENTS"Jesus2024-10-112-135/+110
| | | | This reverts commit 8af98968dd4325d5686bfed109aa4ed18b17edbc.
* workflows: update git sync actionsAstound2024-08-051-2/+2
|
* Add sync to c.fridu.us and sourcehutAstound2024-08-051-0/+40
|
* Add CIAstound2024-07-151-0/+23
|
* v0.2.18v0.2.18Astound2024-07-091-1/+1
|
* Fix cvesAstound2024-07-092-6/+6
| | | | | | CVE-2024-34064 CVE-2024-34069 CVE-2024-37891
* Switch to android test suite client by defaultJesus2024-06-111-0/+23
| | | | | | | Invidious' solution to the destruction of the android client: https://github.com/iv-org/invidious/pull/4650 Fixes #207
* Release v0.2.170.2.17Astound2024-04-291-1/+1
|
* set ios clientAstound2024-04-271-16/+16
|
* update version 0.2.160.2.16Astound2024-04-211-1/+1
|
* update client paramsAstound2024-04-211-1/+1
|
* Refactoring code and reuse INNERTUBE_CLIENTSAstound2024-04-212-114/+110
|
* updateAstound2024-04-211-2/+2
| | | | update android_music client
* updateAstound2024-04-211-2/+2
| | | | update android client
* version 0.2.150.2.15Astound2024-04-081-1/+1
|
* normalize cssAstound2024-04-081-2/+2
|
* fix color dark themeAstound2024-04-082-7/+8
|
* v0.2.140.2.14Astound2024-04-071-1/+1
|
* css normalizeAstound2024-04-072-8/+8
|
* update styles to modernAstound2024-04-075-21/+27
|