From 8797b2989a959ee670fa20525658e4c7e313fc37 Mon Sep 17 00:00:00 2001 From: Mikhail Yevchenko Date: Wed, 1 Apr 2026 10:21:50 +0000 Subject: [PATCH] Add devcontainer configuration and initial documentation for yt-dlp proxy server --- .devcontainer/devcontainer.json | 12 +++++++++++ AGENTS.md | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 AGENTS.md diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..4ff9532 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,12 @@ +{ + "name": "Debian", + + "image": "mcr.microsoft.com/devcontainers/base:trixie", + + "runArgs": ["--add-host=ollama:host-gateway"], + + "containerEnv": { + "OLLAMA_HOST": "ollama:11434" + } + +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..142d03a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,36 @@ +# Пишем прокси для yt-dlp, чтобы видосы смотреть в браузере без рекламы + +## Введение + +Прокси-сервер для yt-dlp позволяет обойти рекламу и ограничения, связанные с просмотром видео на платформах, таких как YouTube. Этот инструмент может быть полезен для тех, кто хочет наслаждаться контентом без перерывов на рекламу или для тех, кто сталкивается с региональными ограничениями и прочей цензурой. + +## Задача + +Наша цель - создать простой прокси-сервер, который будет обрабатывать запросы вида http://localhost/www.youtube.com/watch&v=VIDEO_ID и возвращать страницу с HLS плеером. Как понятно из URL - в query будет передаваться URL видео, который нужно проксировать. + +Проксировать надо именно HLS поток, так как он позволяет минимизировать трафик и обеспечивает более плавное воспроизведение видео. Кроме того, HLS поддерживается большинством современных браузеров, что делает его идеальным выбором для нашего прокси-сервера. + +Сам прокси должен обрабатывать запросы вида http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID), где содержимоее Query String экранируется для использования query string и добавления к пути файлов HLS, таких как index.m3u8 и ts файлы. Например, запрос http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/index.m3u8 должен возвращать HLS плейлист для видео с указанным VIDEO_ID. + +Задача же прокси будет в том, чтобы на запрос http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/index.m3u8, проксировать запрос к yt-dlp, который будет скачивать HLS плейлист для видео с указанным VIDEO_ID и возвращать его клиенту. Аналогично, при запросе http://localhost/hls/www.youtube.com/watch(v=VIDEO_ID)/segment.ts, прокси должен проксировать запрос к yt-dlp для получения соответствующего сегмента видео и возвращать его клиенту. + +Очевдино надо будет временно кэшировать сессии yt-dlp на какой-то срок в избежание повторного парсинга страницы видео при каждом запросе к HLS плейлисту и сегментам. Это позволит значительно улучшить производительность и снизить нагрузку на сервер. + +## Реализация + +Для реализации прокси-сервера для yt-dlp можно использовать Python и библиотеку Flask для создания веб-сервера. Также потребуется библиотека yt-dlp для взаимодействия с YouTube и другими платформами и получения HLS потоков. + +### Правила реализации + +1. Минимальный MVP: реализуем только необходимое для HLS-проксирования одного URL видео на один запрос через `yt-dlp`. +2. Минимальный стек: только Python, Flask, `yt-dlp` и внешний плеер для HLS; без Node.js и без сложных фреймворков. +3. Один формат: поддерживаем только HLS (`.m3u8` + сегменты). +4. Одна платформа в MVP: сначала PornHub; расширение на другие платформы — только после стабилизации. +5. Простая маршрутизация: короткие и предсказуемые URL без лишней магии. +6. Кэш внешний. Только HTTP заголовки для управления кэшем, без сложных in-memory решений. TTL кэша — 365 дней. +7. Безопасность по минимуму, но обязательно: валидация входного URL, ограничение целевых доменов теми, которые поддерживаются yt-dlk, таймауты запросов. +8. Ошибки и логи — только практичный минимум: понятные HTTP-ошибки и базовое структурированное логирование. +9. Конфигурация только через переменные окружения: порт, TTL кэша, уровень логов и таймауты. +10. HTTPS не в приложении: TLS завершается внешним reverse proxy (Nginx/Caddy/Traefik), Flask работает за ним. +11. Тесты только на критичный путь: парсинг URL, кэш, проксирование плейлиста и сегмента, обработка ошибок. +12. Документация и лицензия: только `README.md`, `AGENTS.md` и лицензия MIT.