Give yt-dlp a JavaScript runtime to avoid YouTube's bot checks

Downloads failed with "Sign in to confirm you're not a bot" even with
cookies and a working proxy. yt-dlp was also warning that no JavaScript
runtime was available: YouTube's player challenges now require one, and
without it extraction degrades into exactly those bot checks.

The image already ships Node, so yt-dlp is pointed at it via
--js-runtimes, but only after confirming the installed build understands
the flag — an older binary would otherwise fail on an unknown option.
Startup logs which runtime was picked and warns when there is none.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Leonid Pershin
2026-09-09 00:34:42 +03:00
co-authored by Claude Opus 5
parent 71dc3f2da8
commit 2ee907626e
5 changed files with 64 additions and 6 deletions
+19
View File
@@ -276,6 +276,25 @@ YTDLP_PROXY=socks5h://127.0.0.1:1080
Прямые ссылки и интернет-радио ffmpeg скачивает сам, и там прокси применяется только для схем
`http://` и `https://`.
## «Sign in to confirm you're not a bot»
Три причины, по которым YouTube так отвечает, в порядке частоты:
1. **Нет JS-рантайма.** Современный yt-dlp обязан исполнять JavaScript плеера YouTube; без этого
извлечение деградирует и запросы выглядят как ботовые. В образе уже есть Node, и бот включает
его флагом `--js-runtimes node` (`YTDLP_JS_RUNTIME`). При старте в логе видно, что рантайм
подхвачен: `"jsRuntime":"node"`. Если там `null` — рантайм не определился, будет отдельное
предупреждение.
2. **Нет или протухли cookies** — см. раздел ниже. Проверить файл прямо в контейнере:
```bash
docker compose exec mbot yt-dlp --cookies /data/cookies.txt --simulate https://www.youtube.com/watch?v=dQw4w9WgXcQ
```
3. **Подозрительный IP.** Выходные узлы Psiphon и прочих публичных прокси YouTube знает и
проверяет чаще. Здесь помогают именно cookies; экспортировать их лучше из браузера,
работающего через тот же прокси, чтобы сессия не выглядела прыгающей между странами.
## Учётка YouTube (cookies)
Логин и пароль для YouTube yt-dlp не поддерживает — единственный рабочий способ авторизоваться