Issue: YouTube media format extraction fails in VRChat whenever yt-dlp's YouTube
web
player client is broken, even in scenarios when it would've been plausible to extract and play media formats with yt-dlp's default player client list - including
android_vr
player client outside of the VRChat app when using the same upstream yt-dlp version.
This has also led to several users promoting less safe third-party yt-dlp.exe replacements on ask.vrchat.com and on social media, where these unsafe versions may be able to play YouTube videos in VRChat with its default
android_vr
client when VRChat's downstream yt-dlp cannot.
Steps to reproduce:
  1. Obtain / downgrade to VRChat's yt-dlp 2026.02.04 and replace yt-dlp.exe with it in
    %UserProfile%\AppData\LocalLow\VRChat\VRChat\Tools
    . Mark the executable as read-only to prevent VRChat client from upgrading it, or invent a time machine to travel back in time to 2026-03-12 when VRChat had this yt-dlp version live where no update was available.
  2. Run
    .\yt-dlp.exe --version
    in the VRChat tools directory. Make sure it's
    2026.02.04
    .
  3. Visit a world such as Coze Isle by Shinyflvres and attempt to play a non-age restricted YouTube video (https://www.youtube.com/watch?v=kEAC8eeQWcg) - notice this fails with both AVPro and Unity Video in the world due to missing media formats (a
    web
    client).
  4. Run
    .\yt-dlp.exe --version
    (VRChat). Make sure it's
    2026.02.04
    again.
  5. Try
    .\yt-dlp.exe -F https://www.youtube.com/watch?v=kEAC8eeQWcg
    . This should succeed to extract
    android_vr
    formats, while giving errors on sig solving from
    web
    . (If only 360p25 format
    -f=18
    , try rerunning the command.)
Next, try the upstream yt-dlp 2026.02.04 version:
  1. Obtain upstream yt-dlp 2026.02.04. This uses
    player_client=android_vr,web,web_safari
    by default (only
    android_vr
    is functional in this version).
  2. Try
    .\yt-dlp.exe -F --extractor-args "youtube:player_client=android_vr" https://www.youtube.com/watch?v=kEAC8eeQWcg
    . This should succeed.
  3. Attempt to download a video with
    android_vr
    using upstream yt-dlp 2026.02.04:
    .\yt-dlp.exe -f=299 --extractor-args "youtube:player_client=android_vr" https://www.youtube.com/watch?v=kEAC8eeQWcg
    . This should also succeed to download a 1080p video with
    android_vr
    . (If not, at least
    -f=18
    will be downloaded.)
Next, try VRChat's downstream yt-dlp 2026.03.03 that's live in VRChat on Windows right now. This yt-dlp version has a working
web
client (due to forced
player_js_version=20514@9f4cc5e4
), but no changes to
android_vr
.
  1. Make sure
    .\yt-dlp.exe --version
    in the VRChat tools directory says
    2026.03.03
    .
  2. Visit Coze Isle again and play the above video. This should currently succeed.
Observation: VRChat updated from yt-dlp 2026.02.04 (yt-dlp-ejs 0.4.0) to yt-dlp 2026.03.03 (yt-dlp-ejs 0.5.0), which does not change
android_vr
but temporarily fixed
web
. As a result, video playback started working within VRChat again in AVPro and Unity Video on Windows.
Possible cause:
--extractor-args "youtube:player_client=web"
from a legacy bug report from year 2024: https://feedback.vrchat.com/bug-reports/p/yt-dlp-argument-change-required-to-restore-1080p-yt