6
Total
2
Active
1
Bugs
0
Features
4
Done
67%
Progress
Development Progress
67%In Progress
2Unable to download videos from x.
Launch of core application with base functionality.
Completed
4Cause: The dedup logic keyed only on resolution (e.g., "360p"). The adaptive video-only format (itag 134, 360p) was processed first and blocked the combined format (itag 18, 360p with audio) from appearing. Fix: Changed the dedup key to include the audio type: resolution + '_av' or '_vo'. Added "(video only)" labels to video-only formats. Sorted combined formats first so users see the audio+video option at the top of the quality dropdown.
Cause: The page-scraped YouTube streaming URLs contain an n (throttle) parameter that requires JavaScript-based deciphering. Without transforming n, YouTube returns HTTP 403 on the actual video URL. The old streaming proxy (CURLOPT_WRITEFUNCTION) silently produced an empty response. Fix: Rewrote proxy_download() to download to a temp file first, then serve it via serve_file(). Added proper error reporting that surfaces the upstream HTTP status code (e.g., "HTTP 403") instead of silently failing.
Cause: The server has shell_exec in PHP's disable_functions. On PHP 8+, calling a disabled function throws an uncaught Error exception that the @ suppression operator doesn't catch. Line 66: @shell_exec('which ffmpeg 2>/dev/null') crashed the entire script. Fix: Added a can_exec() guard check before calling shell_exec, plus a try/catch (\Throwable) for safety. Also added @ to set_time_limit() as a precaution.
Cause: The IOS InnerTube client (clientName: IOS) is blocked by YouTube's bot detection when requests come from data center IPs. Fix: Switched primary YouTube client to ANDROID (clientName: ANDROID, version 19.30.36). This client returns direct, unthrottled streaming URLs and isn't currently blocked from the server's IP. Kept embedded player and IOS as fallback strategies.