Description of problem: In order to adapt to recent YouTube changes that are causing (most) downloads to fail with 403 errors, yt-dlp is adding a dependency on the Deno javascript interpreter. This is not currently packaged in Fedora and its suggested install method is a curl | sh, which... eww. See: https://github.com/yt-dlp/yt-dlp/issues/14404 https://github.com/yt-dlp/yt-dlp/issues/14680#issuecomment-3425624789
Found in Copr https://copr.fedorainfracloud.org/coprs/samoht0/staticbuilds/
yt-dlp-ejs can be built with packaged nodejs-npm and yt-dlp can run with --js-runtimes node
yt-dlp-ejs can be built without installing any javascript interpreter and with included prebuilt yt.solver.lib.min.js yt.solver.core.min.js https://copr.fedorainfracloud.org/coprs/nucleo/yt-dlp-ejs/build/9796045/
> This is not currently packaged in Fedora and its suggested install method is a curl | sh, which... eww. It is also possible to download the binaries built in Github Actions from the project's releases or to use cargo binstall or to build from source (https://github.com/denoland/deno/blob/main/.github/CONTRIBUTING.md#building-from-source). Deno will likely not be easy to package properly but folks familiar with rust packaging are welcome to try. As for yt-dlp-ejs, if someone wants to package it in a Guidelines-compliant way (i.e., not just copying pre-built Javascript blobs, unless that's _really_ the only way), I can probably co-maintain the package. If we do have python3-yt-dlp-ejs packaged, I'd be willing to consider https://src.fedoraproject.org/rpms/yt-dlp/pull-request/30 which enables yt-dlp to use node by default. However, I'm not sure if that's a decision we want to make for users, since the whole point of defaulting to deno and requiring manual opt-in for other runtimes is to avoid running the javascript challenges without sandboxing.
We can pull a page out of waydroids page as they do not refill their can urls and users have to Copy them when setting up waydroid. Can can chose not to set end up and just pull in does (node) and leave the configuration to the end users, But unlike waydroid, the need to look up documentation is less subtle as instead of presenting a blank form whose answers can be easily found, yt-dlp starts without errors and blows up when end isn’t configured and a yt vid is downloaded, and troubleshooting may be a bit harder due to the Need to hunt down documentation and choosing between 3 possible Options (ejs:npm, ejs:GitHub or pip install yt-dip-ejs with The first 1 only working on a subset of js runtimes, and the need to actively check for updates if pip install is used). This may Confuse new users or people who aren’t tech literate, and official docs recommend using deno, which maybe counterintuitive to node Since official docs want a deno elf in the same folder/added to PATH Where else node can be globally installed via dnf and allows automatic updates
*waydroid do not prefill their urls
Until two days ago I could use version 2025.12.08 of yt-dlp in Fedora 43. It doesn't work today: yt-dlp https://www.youtube.com/watch?v=9RVT8_6xTis [youtube] Extracting URL: https://www.youtube.com/watch?v=9RVT8_6xTis [youtube] 9RVT8_6xTis: Downloading webpage WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one [youtube] 9RVT8_6xTis: Downloading android sdkless player API JSON [youtube] 9RVT8_6xTis: Downloading web safari player API JSON WARNING: [youtube] 9RVT8_6xTis: Some web_safari client https formats have been skipped as they are missing a url. YouTube is forcing SABR streaming for this client. See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details [youtube] 9RVT8_6xTis: Downloading m3u8 information WARNING: [youtube] 9RVT8_6xTis: Some web client https formats have been skipped as they are missing a url. YouTube is forcing SABR streaming for this client. See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details [info] 9RVT8_6xTis: Downloading 1 format(s): 248+251-1 ERROR: unable to download video data: HTTP Error 403: Forbidden Reviewing the developers' website, version yt-dlp 2026.01.29 was published today.
*** Bug 2440553 has been marked as a duplicate of this bug. ***
IMO things should "just work" without user having to install some additional software from outside Fedora. From upstream docs, I understand yt-dlp can use NodeJS as the JS engine, so why not try using the packaged nodejs? In parallel, I'm working on enabling the "impersonation" feature (https://github.com/yt-dlp/yt-dlp#impersonation). I have curl_cffi packaged locally, but curl-impersonate is a bit more difficult due to it being a patched curl fork.