From ba0324544900a91fccc13a372092968892705e60 Mon Sep 17 00:00:00 2001 From: Mattias Tall Date: Tue, 26 May 2026 10:19:00 +0200 Subject: [PATCH] Fix EJS: install yt-dlp[default] and enable --js-runtimes node MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit yt-dlp's EJS (External JavaScript Solver) needs two things: 1. The solver scripts — only bundled with yt-dlp[default], not bare yt-dlp 2. An explicit --js-runtimes flag — Node.js is not the default (Deno is) Both are now set: pip installs the [default] extras, and /etc/yt-dlp.conf sets --js-runtimes node globally so every yt-dlp call uses it. Co-Authored-By: Claude Sonnet 4.6 --- backend/Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 8e019f7..19693b0 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -5,15 +5,15 @@ WORKDIR /app RUN apt-get update && apt-get install -y ffmpeg gosu && 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 - -# nodeenv downloads a pre-built Node.js binary via pip — no apt repos needed. -# yt-dlp needs 'node' in PATH to solve YouTube's n-challenge (JS obfuscation). -RUN pip install --no-cache-dir nodeenv && \ +# yt-dlp[default] includes the EJS challenge solver scripts required by YouTube. +# nodeenv installs Node.js (v22+ required); --js-runtimes node tells yt-dlp to use it. +RUN pip install --no-cache-dir -r backend/requirements.txt && \ + pip install --no-cache-dir -U "yt-dlp[default]" && \ + pip install --no-cache-dir nodeenv && \ nodeenv --prebuilt /opt/node && \ ln -sf /opt/node/bin/node /usr/local/bin/node -RUN echo "--cache-dir /data/yt-dlp-cache" > /etc/yt-dlp.conf +RUN printf -- '--cache-dir /data/yt-dlp-cache\n--js-runtimes node\n' > /etc/yt-dlp.conf COPY backend/ ./backend/