Media Pocket

Самостоятельно размещаемый Telegram-загрузчик видео, аудио и коллекций с доступом по приглашениям.

На этой странице

Media Pocket превращает Telegram в личный вход для медиа. Пользователь отправляет ссылку, несколько ссылок или файл; бот определяет источник, ставит работу в очередь, показывает прогресс и возвращает готовое видео, аудио, документ или альбом. Экземпляр размещается на своём сервере, а пользоваться им могут только администраторы и приглашённые пользователи.

Ссылки, файлы и коллекции

Бот работает с видео YouTube, социальными публикациями TikTok, Instagram, X, Threads и Pinterest, аудиоисточниками и прямыми HTTP(S)-ссылками на медиа. Для остальных адресов доступно разрешение через yt-dlp, если тот поддерживает источник. Поддержка конкретного сервиса зависит от его текущих ограничений и доступных учётных данных.

Обычная ссылка запускает загрузку без отдельной карточки выбора. Аудиоисточники остаются аудио; для YouTube пользователь сохраняет режим видео, аудио или «всегда спрашивать». Если адрес содержит плейлист, бот сначала предлагает выбрать текущий ролик или всю коллекцию. Видео с пригодными таймкодами в описании можно разделить на треки: аудио загружается один раз, нарезается по границам и отправляется группами с названиями и метаданными.

Несколько ссылок, альбомы, плейлисты и файлы, загруженные прямо в Telegram, проходят через тот же контур заданий. Результат отправляется отдельно от технического статуса и дополнительных действий. Для неудачной загрузки остаётся карточка с понятной причиной и возможностью повторить запрос, а не traceback внешнего провайдера.

Состояние и фоновые процессы

Интерактивный бот и worker — разные процессы одного модульного приложения. PostgreSQL хранит каноническое состояние; создание активного задания и записи transactional outbox выполняется атомарно. Publisher переносит идентификаторы заданий в Redis Streams, workers получают работу через consumer group, а отдельный поток событий возвращает прогресс. Общий каталог артефактов соединяет получение файла с его доставкой в Telegram.

Worker не создаёт Telegram-клиент: он определяет провайдера, получает и обрабатывает медиа, записывает результат. Бот отвечает за сообщения, callback-действия и доставку. Такая граница позволяет масштабировать фоновые процессы отдельно и не удерживать один Telegram-обработчик на всё время скачивания.

Сохранённое состояние не означает бесконечное автоматическое продолжение. README отдельно оговаривает, что при запуске бота активные фоновые задания отменяются, а очередь очищается. Неопределённый результат доставки также нельзя молча отправлять повторно: архитектура предусматривает явное действие повторной попытки. Размер файлов, параллелизм, сроки обработки и хранение завершённых артефактов ограничиваются настройками.

Подготовка для Telegram

Media Pocket предпочитает подходящий исходный формат вместо обязательного перекодирования. Для встроенного проигрывания это H.264/AAC-видео и совместимое аудио M4A/AAC или MP3. Подходящие потоки переупаковываются без повторного кодирования; FFmpeg преобразует несовместимую часть или весь файл только там, где это требуется. Режим отправки файлом по возможности сохраняет скачанный оригинал.

Для тяжёлой прямой ссылки бот может предложить исходник или компактную версию, оценив длительность, битрейт и разрешение. В компактном режиме FFmpeg читает HTTP-поток непосредственно во время кодирования: полный оригинал не приходится сначала сохранять как промежуточный файл. Загруженные пользователем аудио и видео нормализуются тем же конвейером; обычные документы остаются файлами.

Доступ и учётные данные

Перед первым запуском администратор создаётся из командной строки. Он выдаёт одноразовые приглашения, коды с ограничением числа активаций или срока действия. Проверка доступа распространяется на личные и групповые сообщения, inline-режим и callback-действия; чужой пользователь не должен подтверждать, отменять или повторять чужую работу.

Для источников с браузерной аутентификацией используются cookies. Необязательная интеграция с Media Cookie Broker обновляет отдельные cookie-файлы; сам брокер развёртывается отдельно, а его адрес, учётные данные и сетевой доступ настраивает оператор. Прямое аудио Spotify требует действующей Premium-сессии и отдельного помощника на базе librespot; ошибка этого пути не подменяет запрошенную запись поисковым результатом.

Токен бота, cookies, Spotify-сессии и дампы базы остаются секретами развёртывания. PostgreSQL, Redis, локальный Telegram Bot API и вспомогательные сервисы не должны быть доступны из интернета. Invite-only доступ не делает безопасной утечку серверных учётных данных.

Развёртывание и границы проекта

Штатная схема использует Linux, Docker Compose, Python 3.14, PostgreSQL, Redis, локальный Telegram Bot API и FFmpeg. Миграции выполняются отдельной ролью; число workers задаётся независимо от бота. Обновление требует проверки выбранной ревизии, резервной копии канонической базы и совместимости миграций: откат исходников сам по себе не откатывает схему и данные.

Это ранние самостоятельно размещаемые выпуски 0.1.x. Media Pocket не обходит ограничения доступа провайдера: удалённый, закрытый или регионально ограниченный материал может остаться недоступным даже с корректными cookies. Состав поддерживаемых источников и требования внешних сервисов меняются; актуальная установка, настройки и ограничения описаны в README открытых исходников.