From bfc7eba03fe2d5785307878f31a087fcc353af74 Mon Sep 17 00:00:00 2001 From: xpltd Date: Sat, 21 Mar 2026 22:36:18 -0500 Subject: [PATCH] =?UTF-8?q?Demote=20extractor=5Fargs=20to=20troubleshootin?= =?UTF-8?q?g=20=E2=80=94=20yt-dlp=20defaults=20work=20out=20of=20the=20box?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 403 was a VPN IP issue, not a client selection issue. yt-dlp already picks the right player clients (android_vr + web_safari). Moved YTDLP__EXTRACTOR_ARGS out of 'Most Useful Settings' into a 'Troubleshooting: YouTube 403 Errors' section that explains the actual common causes (VPN IPs, private content) before the escape hatch. --- README.md | 20 ++++++-------------- docker-compose.yml | 3 --- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index e4f7db1..c4954ad 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,6 @@ These are the knobs most operators actually touch — all shown commented out in | `MEDIARIP__DOWNLOADS__MAX_CONCURRENT` | `3` | Increase for faster connections, decrease on low-spec hardware | | `MEDIARIP__PURGE__MAX_AGE_MINUTES` | `1440` | Raise for longer retention, or set `PURGE__ENABLED=false` to keep forever | | `MEDIARIP__ADMIN__PASSWORD_HASH` | _(empty)_ | Pre-set to skip the first-run wizard (useful for automated deployments) | -| `MEDIARIP__YTDLP__EXTRACTOR_ARGS` | `{}` | Tune YouTube player client if downloads 403 (see [yt-dlp Tuning](#yt-dlp-tuning)) | ### All Settings @@ -127,25 +126,18 @@ docker run --rm python:3.12-slim python -c \ # MEDIARIP__ADMIN__PASSWORD_HASH=$2b$12$...your.hash... ``` -### yt-dlp Tuning +### Troubleshooting: YouTube 403 Errors -If YouTube downloads fail with HTTP 403, try changing the player client: +YouTube downloads work out of the box — yt-dlp automatically selects the right player clients. If you do hit HTTP 403 errors, it's usually one of: + +1. **VPN/datacenter IP** — YouTube blocks many VPN exit IPs. Run the container on your direct internet connection instead. +2. **Private/age-restricted content** — Upload a `cookies.txt` from a logged-in browser session via the UI. +3. **YouTube-side changes** — As a last resort, you can override yt-dlp's player client selection: ```bash -# Environment variable MEDIARIP__YTDLP__EXTRACTOR_ARGS='{"youtube": {"player_client": ["web_safari"]}}' ``` -```yaml -# Or in config.yaml -ytdlp: - extractor_args: - youtube: - player_client: ["web_safari", "android_vr"] -``` - -You can also upload a `cookies.txt` from a logged-in browser session via the UI for authenticated downloads. - ## Custom Themes 1. Create a folder in your themes volume: `./themes/my-theme/` diff --git a/docker-compose.yml b/docker-compose.yml index 81052c6..99259f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,9 +31,6 @@ services: # ## Pre-set admin password (skip first-run wizard): # - MEDIARIP__ADMIN__PASSWORD_HASH=$2b$12$... - # - ## YouTube tuning — change player client if downloads fail: - # - MEDIARIP__YTDLP__EXTRACTOR_ARGS={"youtube":{"player_client":["web_safari"]}} restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]