Концепция
Назначение
Проект нужен для простого self-hosted скачивания медиа:
- вставить ссылку
- посмотреть доступные варианты
- подготовить файл
- скачать его со своего сервера
Это главная идея проекта. Он не пытается быть большим медиа-комбайном.
Какую Проблему Он Решает
Публичные сайты для скачивания удобны, но это обычно означает:
- ваши URL проходят через чужую инфраструктуру
- доступность сервиса вы не контролируете
- поведение интерфейса может измениться без предупреждения
- приватность и надёжность непредсказуемы
Media Downloader переносит этот сценарий в вашу собственную установку.
Текущая Форма Продукта
Сейчас проект лучше понимать так:
- одностраничный веб-интерфейс
- Rust API, который валидирует URL и подготавливает файлы
- слой извлечения и скачивания на базе
yt-dlp - опциональное развёртывание через Docker + Caddy
Принципы Дизайна
1. Простой основной сценарий
Текущий frontend намеренно сфокусирован на одном пути:
- вставить URL
- извлечь информацию
- выбрать формат
- подготовить файл
- скачать явным действием
2. Явное скачивание
UI больше не открывает подготовленный файл автоматически. Проект теперь предпочитает отдельную понятную кнопку скачивания, потому что это удобнее и не приводит к странному поведению браузера.
3. Тонкий backend и практичная модель extractor-ов
Backend намеренно остаётся прямолинейным:
- Axum routes
- выбор extractor-а
- запуск
yt-dlp - отдача временных файлов через
/downloads
Задача не в академической чистоте, а в рабочем сервисе, который можно поддерживать.
Проверка Реальностью
Некоторые вещи, которые часто подразумевают в таких проектах, здесь пока отсутствуют:
- нет системы аутентификации
- нет настоящего rate limiter в коде
- нет фонового планировщика очистки файлов
- нет websocket-прогресса
- нет UI-потока для плейлистов
Это возможные будущие улучшения, но не текущий контракт проекта.
Куда Проект Может Расти
Разумные следующие шаги от текущей архитектуры:
- более точные backend-ошибки и HTTP status codes
- автоматический запуск очистки временных файлов
- прямой preview для медиа, где это уместно
- лучшее покрытие extractor-ов тестами
- ещё более подробная эксплуатационная документация