Skip to main content

Концепция

Назначение

Проект нужен для простого self-hosted скачивания медиа:

  • вставить ссылку
  • посмотреть доступные варианты
  • подготовить файл
  • скачать его со своего сервера

Это главная идея проекта. Он не пытается быть большим медиа-комбайном.

Какую Проблему Он Решает

Публичные сайты для скачивания удобны, но это обычно означает:

  • ваши URL проходят через чужую инфраструктуру
  • доступность сервиса вы не контролируете
  • поведение интерфейса может измениться без предупреждения
  • приватность и надёжность непредсказуемы

Media Downloader переносит этот сценарий в вашу собственную установку.

Текущая Форма Продукта

Сейчас проект лучше понимать так:

  • одностраничный веб-интерфейс
  • Rust API, который валидирует URL и подготавливает файлы
  • слой извлечения и скачивания на базе yt-dlp
  • опциональное развёртывание через Docker + Caddy

Принципы Дизайна

1. Простой основной сценарий

Текущий frontend намеренно сфокусирован на одном пути:

  1. вставить URL
  2. извлечь информацию
  3. выбрать формат
  4. подготовить файл
  5. скачать явным действием

2. Явное скачивание

UI больше не открывает подготовленный файл автоматически. Проект теперь предпочитает отдельную понятную кнопку скачивания, потому что это удобнее и не приводит к странному поведению браузера.

3. Тонкий backend и практичная модель extractor-ов

Backend намеренно остаётся прямолинейным:

  • Axum routes
  • выбор extractor-а
  • запуск yt-dlp
  • отдача временных файлов через /downloads

Задача не в академической чистоте, а в рабочем сервисе, который можно поддерживать.

Проверка Реальностью

Некоторые вещи, которые часто подразумевают в таких проектах, здесь пока отсутствуют:

  • нет системы аутентификации
  • нет настоящего rate limiter в коде
  • нет фонового планировщика очистки файлов
  • нет websocket-прогресса
  • нет UI-потока для плейлистов

Это возможные будущие улучшения, но не текущий контракт проекта.

Куда Проект Может Расти

Разумные следующие шаги от текущей архитектуры:

  • более точные backend-ошибки и HTTP status codes
  • автоматический запуск очистки временных файлов
  • прямой preview для медиа, где это уместно
  • лучшее покрытие extractor-ов тестами
  • ещё более подробная эксплуатационная документация