Я.Д-Пылесос — утилита для скачивания с Яндекс.Диска, YouTube и Boosty на Linux ARM64 (QNAP NAS) и AMD64 (Fedora WS). Код написан полностью с использованием AI-Assisted Development (LLM). В проекте автор выступает в роли Product Owner / Project Manager / System Architect / QA Engineer. @serbambr
- Модульная архитектура (Мультивендорность): Логика провайдеров вынесена в модули (
apicloudyandex.py,apivideo.py, заглушкаapicloudmail.pyдля Mail.ru). Ядро не знает устройства облака — только стандартный интерфейс провайдера. Диспетчеризация по домену ссылки; домены без спец-логики идут через универсальную yt-dlp-обёртку. - Яндекс-пайплайн (трёхступенчатый): Инкрементальное сканирование диска (Mark and Sweep) -> Сверка с API (кэш дерева в SQLite) -> Многопоточное скачивание.
- YouTube-подсистема (yt-dlp): Каналы/плейлисты/одиночные видео; субтитры ru/en (включая автогенерацию) в .srt; вшивание обложки и метаданных; SponsorBlock (все категории); архив скачанного; антибан-паузы. JS-челленджи YouTube решаются через Node.js runtime, скрипт-решатель живёт в persistent-кэше на хосте (сеть для него не нужна).
- Boosty (через yt-dlp): Посты авторов (
boosty.to/<автор>/posts/<id>) по подписке — куки сессии вauth/boosty.to.txt; медиа-галереи постов (включая full_hd); антиколлизия имён ([id]в имени файла). Детали — в USAGE. - PO-токен (bgutil): Локальный провайдер Proof-of-Origin (Node, порт 4416) поднимается на время сессии и прогревается до старта yt-dlp. Защищает от bot-check; для age-gated контента форматы ограничены политикой SABR YouTube (актуальный потолок — 360p).
- Изоляция БД (BL-DB-Split): Каждая ссылка — своя БД SQLite (
db/<имя_контейнера>.db). Нет блокировок при параллельной работе; повреждённая БД уходит в карантин целиком (с -wal/-shm), процесс пересоздаёт её чистой. - VPN-слой (Xray-core, SSOT портов): При бане API/блокировке — туннель из
vpn/link*.txt(VLESS/Trojan/Hysteria, Reality). Единый источник портаPROXY_PORT(SOCKS 10808 / HTTP 10809). Ротация серверов при бане, Watchdog процесса, аудит-лог смены IP. - Анти-бан (двухуровневый): Ядро — адаптивные гауссовы паузы (AIMD),
Retry-After, ротация User-Agent, детекция тихого бана (HTML вместо JSON). YouTube — ступень А: серия 429 -> прерываемая пауза; паузы не помогают -> честная остановка сессии и уведомление. - Гомеостаз 3.0: Панель
--trace-status(ЦП, частота, Load, RAM хоста, I/O Latency, иноды). Перегрузка диска/CPU -> автоматическое снижение потоков. - Телеметрия (Опыт): Глобальная
db/telemetry.db: итоги сессий по провайдерам (запросы/баны/пики) + лента событий YouTube (429, age-gate). Автоочистка старше 30 дней. - Конфигурация через
.env(SSOT): Лимиты, таймауты, DNS, сенсоры, Docker. Все переменные валидируются на старте (_int_env) — мусор в конфиге даёт человекочитаемую ошибку, а не traceback. - Бережливость HDD (RAID-friendly): Многопоточная запись в изолированные
.partс атомарной склейкой (os.replace). Гомеостаз щадит массив; автоочистка обрывков старше часа. - Безопасность данных: MD5-проверка, Zero Trust к аргументам, карантин БД,
.pid-защита от дублей,--userконтейнера = пользователь NAS, auth/ 700, секреты не логируются (SecretFilter). - Менеджер ссылок +
--batch: Интерактивный CLI (source_links.txt, rw-монтирование, Tab-автодополнение). Пакетный режим уходит в фон по Ctrl+C, ведёт лог и отчёт по оставшимся. - Умные уведомления Telegram:
--notify-tgс переводом ошибок на человеческий язык и ретраями отправки. - Конвейер качества:
./check.sh— py_compile + ruff (CC<=9) + radon + vulture + shellcheck одним запуском.
| Команда | Действие |
|---|---|
--auth-status [ссылка] |
Проверка OAuth/куков (Яндекс), куков видео-провайдеров (YouTube, Boosty) |
--db-stats |
Статистика всех БД + телеметрия (по блокам на провайдера) |
--db-check |
integrity_check всех БД |
--vacuum |
VACUUM всех БД |
--vpn-test |
Тест всех VPN-серверов из пула (таблица с IP) |
--batch / --batch-auto |
Менеджер ссылок / автоматический пакетный режим (cron) |
--md5='имя' |
Проверка MD5 файла |
--build-queue |
Построить очередь без скачивания |
--refresh-cache |
Перестроить кэш дерева и выйти |
--force |
Игнорировать архив скачанного (существующие файлы не перезаписываются) |
--auth-enable/disable |
Включить/выключить OAuth для Яндекса |
-h |
Полный список флагов |
- Установка:
./install.sh(создаст структуру каталогов, шаблон .env, соберёт образ, создаст ярлык). Настройте.env(DNS_SERVERS, TZ и пр.). - Сборка образа вручную:
sudo docker build -t yadpylesos-slim -f Dockerfile.yadpylesos-slim . - Яндекс — одиночная ссылка: ./yadpylesos.sh 'test' 'https://disk.yandex.ru/d/...' '/path/to/destination/' 100 -v --threads=4 --trace-status --notify-tg
- YouTube — канал или плейлист: ./yadpylesos.sh 'mychannel' 'https://www.youtube.com/@name/videos' '/share/downloads/yt' 0 -v --notify-tg
- Boosty — пост: ./yadpylesos.sh 'mypost' 'https://boosty.to/<автор>/posts/' '/share/downloads/boosty' 0 -v
- Пакетный режим:
./yadpylesos.sh --batch(менеджер) или--batch-auto(cron). - Качество кода:
./check.sh.
Сборочные артефакты (Xray, EJS-решатель) поставляются в build_assets/ — сборка образа не зависит от CDN, недоступных из некоторых сетей (Fastly и т.п.). apt-слои образа используют зеркало Debian. Решатель JS-челленджей и PO-провайдер живут внутри контейнера/хост-кэша — в сессии скачивания внешние CDN не участвуют.
MIT