Update yt-dlp to 2026.02.21 to resolve YouTube playback issues
WubTheCaptain
A new upstream release yt-dlp 2026.02.21 uses ejs 0.5.0, which fixes YouTube sig extraction in main variant of player. (yt-dlp/ejs commit 1b648c3 by ToddyTheNoobDud)
VRChat's yt-dlp 2026.02.04 fork uses an older ejs 0.4.0 which may cause "Sign in to confirm you're not a bot" errors for some users when attempting to play YouTube videos in VRChat. Current yt-dlp version:
PS C:\Users\linda.LINDALAP\AppData\LocalLow\VRChat\VRChat\Tools> .\yt-dlp.exe --version
2026.02.04
Full upstream changelogs diff between VRChat's yt-dlp and upstream yt-dlp are there:
I recommend updating to the latest yt-dlp version (updating to yt-dlp 2026.02.21 pulls/includes the new yt-dlp-ejs 0.5.0 version).
Resolves (hopefully): https://feedback.vrchat.com/bug-reports/p/video-player-error-4
Log In
WubTheCaptain
This can be marked as complete, since VRChat updated to yt-dlp 2026.03.03 today.
PS C:\Users\linda.LINDALAP\AppData\LocalLow\VRChat\VRChat\Tools> .\yt-dlp.exe --version
2026.03.03
However, there are outstanding issues with yt-dlp 2026.03.03, so I've made another feature request: Update to yt-dlp 2026.03.13 / yt-dlp-ejs 0.7.0 to improve YouTube playback compatibility
WubTheCaptain
yt-dlp-ejs 0.6.0 has been released, and yt-dlp/ejs#51 has been closed as complete. I'm waiting for a new yt-dlp release with a dependency on it.
WubTheCaptain
It's yt-dlp 2026.03.13 (with yt-dlp-ejs 0.7.0).
Ericbazinga
It'd be really helpful if VRchat acknowledged when video players were currently broken the same way they acknowledge upstream providers dropping the ball. Just like a discord announcement or something.
Just like
"Hey, we're getting lots of reports about video players not working, we're aware of this! We're waiting on a fix from the yt-dlp team and will keep you updated!"
"yt-dlp has been updated and video players should now work again!"
peq42
asking vrchat devs to update/support things is like asking water to not be wet
WubTheCaptain
peq42 In my personal opinion there hasn't been too many good reasons to update yt-dlp to 2026.02.21 or 2026.03.03 - and honestly I wish I could retract and close this feature request here on my own, but I don't have that capability/permission as a reporter. (At the moment this feature request topic is serving as a feature tracker for the next yt-dlp stable release and my upcoming new request to update.)
It gets technical for reasoning from here, read on if that interests you. Sorry if the following is hard to follow, it's mostly of interest to developers.
Unless VRChat has changed the
player_client
configuration default value (I haven't checked) in their downstream fork, YouTube video data extraction in yt-dlp 2026.02.04 uses android_vr
player by default (which doesn't require a JS runtime and yt-dlp-ejs support).Actually I checked today, VRChat's yt-dlp 2026.02.04 has
android_vr
formats available, but it's occassionally affected by the same yt-dlp/yt-dlp#16150 issue of having only a pre-muxed 360p25 format (-f=18
) available, and other times that's returning 1080p formats normally (fixed in yt-dlp nightly 2026.03.10.233607).YouTube's "made for kids" videos cannot be downloaded with
android_vr
; in this "made for kids" video scenario a regular yt-dlp would add a web_embedded
fallback since yt-dlp 2026.01.31 (commit bb1c057), including in yt-dlp 2026.02.04 (unchanged).web_embedded
requires a JS runtime (and yt-dlp-ejs) - and the default player_js_variant
in yt-dlp 2026.02.04 isn't main
- it's tv
. main
is generally only of interest for debugging purposes. (See README.md
.) The yt-dlp/ejs commit 1b648c3 linked in OP fixing the main
variant would only be used in very specific scenarios, as a fallback, or not at all in VRChat - and would've only been mainly of interest for age-restricted or "made for kids" YouTube videos anyway, or if ´android_vr` is unable to access a video.Thus, asking VRChat to update to yt-dlp-ejs 0.5.0 (yt-dlp 2026.02.21) is like asking to update for functionality that's likely never used in VRChat. In hindsight that's probably not a high priority task or any reason to update to 2026.02.21.
(1/3)
WubTheCaptain
Why VRChat's yt-dlp 2026.02.04 sees
android_vr
formats but can't use them in video players, I don't know. Upstream yt-dlp 2026.02.04 can download android_vr
formats without a JS runtime; I tested -f=18
(360p) and -f=299
(1080p).Let me tell you next why it's not a great time at this time for VRChat to update to yt-dlp 2026.03.03 either.
web_embedded
fallback is also broken in yt-dlp 2026.03.03, for two reasons:- It relies on a working JS runtime (unsolved, yt-dlp/ejs#51) or a temporary bandaid player_js_versiondowngrade to20514@9f4cc5e4(fixed in yt-dlp 2026.03.03; issue in upstream yt-dlp 2026.02.04; issue in VRChat's yt-dlp 2026.02.04);
- Since approximately 2026-03-05, YouTube started requiring a HTTP Referer header that isn't youtube.com for embedded videos, else web_embeddedreturnsThis video is unavailable. Error code: 152 - 18 Watch video on YouTube. (Fixed in yt-dlp nightly 2026.03.10.233607, yt-dlp/yt-dlp#16177)
I assume the importance for YouTube video playback in general in VRChat is
player_client
- this defaults to android_vr,web,web_safari
in upstream yt-dlp 2026.02.04, or android_vr
if there's no JS runtime available, with the beforementioned web_embedded
fallback added for age-restricted / "made for kids" videos with a JS runtime.VRChat's yt-dlp JS runtime is custom, it's called
vrcrustyscript
. Not much is known about this publicly (the source code for vrcrustyscript
and VRChat's yt-dlp isn't available), but like yt-dlp 2026.02.04 without arguments, it's trying to use player_js_version=actual
, which in this case results in player_js_version=18d29a11
with player_js_variant=tv
- the same issue that yt-dlp 2026.02.04 is affected by, and which yt-dlp 2026.03.03 works around by forcing a downgrade to player_js_version=20514@9f4cc5e4
. Ideally there would not be any bandaids like downgrading at all, but in my opinion instead the root cause should be solved (yt-dlp/ejs#51).web
and web_safari
are also unusable without downgrading to player_js_version=20514@9f4cc5e4
(fixed in yt-dlp 2026.03.03) or solving yt-dlp/ejs#51 (unsolved). Aside from the long-standing issue web
may also additionally serve SABR formats at times (yt-dlp/yt-dlp#12482), which yt-dlp doesn't support yet (you may see 360p25 f=18
formats only), but that's why android_vr
is the default in upstream yt-dlp, not web
.(2/3)
WubTheCaptain
android_vr
client has also been temporarily downgraded in yt-dlp nightly 2026.03.10.233607 to avoid YouTube's serving only 360p25 videos by downgrading the HTTP user-agent version number to appear as an older Android client (commit ff459e5). But again, I am not sure why android_vr
formats may not be played in VRChat, even if they are available and downloadable with upstream yt-dlp 2026.02.04 using android_vr
- I hope it's not because of an old VRChat feature request (https://feedback.vrchat.com/bug-reports/p/yt-dlp-argument-change-required-to-restore-1080p-yt) for AVPro calling code in the VRChat client.For all these reasons, I wish people would wait patiently - and if you're going to report a YouTube playback issue in VRChat, please at least do your best to include output logs, a world name and a video URL, or search existing issues. It's more often not video players, VRChat, or Unity breaking things for you. It's YouTube making architectural changes that are incompatible with yt-dlp.
The best you can do now is wait for a new stable yt-dlp release - or if you're a developer, contribute to the upstream yt-dlp project (namely yt-dlp/ejs#51 and implementing SABR playback support in yt-dlp/yt-dlp#13515 when YouTube's A/B testing decides non-SABR formats are unavailable for you).
I might just go make that "update yt-dlp to 2026.03.03" / "downgrade to
player_js_version=20514@9f4cc5e4
" feature request so you can hopefully go watch non-age restricted YouTube videos in VRChat, until YouTube removes support for the player_js_version=20514@9f4cc5e4
downgrade bandaid, and even that version is flawed and can't play age-restricted / "made for kids" videos due to a broken web_embedded
client (again, fixed in nightly). Then it's up to VRChat Team if they want to update to that bandaid downgraded player temporarily or wait out the nightlies to become more stable where age restricted / "made for kids" YouTube videos will be (hopefully) playable.(3/3)
WubTheCaptain
yt-dlp 2026.03.03 has also been released upstream with a temporary bandaid fix, but may be buggy at this time (#16128, #16131, #16132).
yt-dlp 2026.02.21 may also be broken at this time and fail solving challenges to playback videos since a few days ago, so this feature request could be closed ("wontfix").
Unresolved upstream issue at the time of writing this to create a new superseding feature request: Recent players failing on all variants · Issue #51 · yt-dlp/ejs · GitHub
WubTheCaptain
yt-dlp nightly changes:
- [ie/youtube] Fix web_embeddedplayer client (#16177) - 14 minutes ago https://github.com/yt-dlp/yt-dlp/commit/f2bd3202c0ffa3f0c0069c44ca53b625dca568bc
- [ie/youtube] Fix android_vrplayer client (#16168) - 1 hour ago https://github.com/yt-dlp/yt-dlp/commit/ff459e5fc04b1a061212672626b7bfa23ff3cdcd
android_vr
fix may be of particular interest, as it's the default and first player_client
in yt-dlp (android_vr,web,web_safari
).The yt-dlp-ejs issue is still unresolved, but if yt-dlp comes up with a new release before then, it may be worth trying to update yt-dlp.
WubTheCaptain
yt-dlp nightly 2026.03.10.233607 was also released.
DarkSwordsman
At least while this gets fixed, users can use VRCVideoCacher for PC to temporarily solve the issue.
WubTheCaptain
DarkSwordsman VRChat strongly recommends against replacing yt-dlp for safety reasons. https://ask.vrchat.com/t/video-players-having-issues/34472/13
DarkSwordsman
WubTheCaptain Then it's more urgent for them to fix it :P
peq42
DarkSwordsman or use linux, as it works with 0 issues for me and all my linux friends :)
WubTheCaptain
Supersedes a former feature request: Update yt-dlp to 2026.02.04 to resolve YouTube playback issues (implemented)