From 923c0776e31f8b6ff85e2d471e691ea11352f245 Mon Sep 17 00:00:00 2001 From: Peter Meier Date: Mon, 22 Dec 2025 13:07:56 +0100 Subject: [PATCH] Add user-agent and extractor-args to bypass YouTube bot detection --- docker-compose.yml | 4 ++++ src/pages/api/download.ts | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 23bd048..e20f84e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,11 @@ services: - LOCALE=${LOCALE:-de} - LOGIN=${LOGIN:-true} - STREAM_ONLY=${STREAM_ONLY:-false} + - YT_DLP_COOKIES=${YT_DLP_COOKIES:-} + - YT_DLP_COOKIES_FROM_BROWSER=${YT_DLP_COOKIES_FROM_BROWSER:-} + - YT_DLP_JS_RUNTIME=${YT_DLP_JS_RUNTIME:-deno} volumes: - ./downloaded:/downloaded + - ./cookies:/cookies:ro restart: unless-stopped diff --git a/src/pages/api/download.ts b/src/pages/api/download.ts index 7ce3624..d6d6599 100644 --- a/src/pages/api/download.ts +++ b/src/pages/api/download.ts @@ -66,7 +66,12 @@ export const POST: APIRoute = async ({ request }) => { // Zuerst Video-Informationen abrufen, um den Dateinamen zu erhalten // getVideoInfo verwendet intern yt-dlp mit --dump-json // Deno wird beim eigentlichen Download verwendet - const videoInfoOptions: string[] = []; + const videoInfoOptions: string[] = [ + "--user-agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "--extractor-args", + "youtube:player_client=android,web", + ]; if (cookiesFile) { videoInfoOptions.push("--cookies", cookiesFile); } else if (cookiesFromBrowser) { @@ -111,6 +116,11 @@ export const POST: APIRoute = async ({ request }) => { "--no-playlist", "--js-runtimes", jsRuntime, + // Zusätzliche Optionen zur Umgehung der Bot-Erkennung + "--user-agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "--extractor-args", + "youtube:player_client=android,web", ]; // Cookie-Unterstützung hinzufügen @@ -216,6 +226,11 @@ export const POST: APIRoute = async ({ request }) => { "--no-playlist", "--js-runtimes", jsRuntime, + // Zusätzliche Optionen zur Umgehung der Bot-Erkennung + "--user-agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "--extractor-args", + "youtube:player_client=android,web", ]; // Cookie-Unterstützung hinzufügen