Add Node.js to Docker image; use web player client only

Node.js is required by yt-dlp to solve YouTube's n-challenge (format URL
deobfuscation). Without it the web client returns no video formats.

The tv and ios player clients were removed — both require GVS PO tokens
that we don't have, so they only produce warnings and block every request.
The web client with Node.js installed gives 30+ formats and works cleanly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mattias Tall
2026-05-26 09:57:02 +02:00
parent 98d986cd95
commit 3e439f2d3a
2 changed files with 3 additions and 3 deletions

View File

@@ -2,7 +2,7 @@ FROM python:3.12-slim
WORKDIR /app
RUN apt-get update && apt-get install -y ffmpeg gosu && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y ffmpeg gosu nodejs && rm -rf /var/lib/apt/lists/*
COPY backend/requirements.txt ./backend/requirements.txt
RUN pip install --no-cache-dir -r backend/requirements.txt && pip install --no-cache-dir -U yt-dlp

View File

@@ -216,7 +216,7 @@ def fetch_video_metadata(video_id: str) -> dict | None:
base_cmd = [
"yt-dlp", url,
"--dump-json", "--no-download", "--no-playlist",
"--extractor-args", "youtube:player_client=tv,ios,web",
"--extractor-args", "youtube:player_client=web",
]
stdout, stderr, code = _run([*base_cmd, *cookie_args], timeout=30)
if code != 0:
@@ -567,7 +567,7 @@ def start_download(
"--no-part", "--no-mtime",
"-o", output_template,
"--newline", "--progress", "--no-colors",
"--extractor-args", "youtube:player_client=tv,ios,web",
"--extractor-args", "youtube:player_client=web",
*_cookie_args(),
],
stdout=subprocess.PIPE,