Как собрать свою музыкальную библиотеку без лишних хлопот
Репозиторий был удален
Но вы можете попробовать восстановить данные из глобального архива.
Знакомая ситуация: вы составили идеальный плейлист в Spotify, но понимаете, что в любой момент треки могут стать недоступными из-за лицензионных ограничений или проблем с аккаунтом. Облачные сервисы удобны, пока они работают. Но когда хочется иметь файлы под рукой — на плеере, в машине или домашнем медиасервере — начинаются танцы с бубном.
Я наткнулся на проект Spooty, который решает эту проблему элегантно и, что немаловажно, полностью в self-hosted режиме.
Что это такое
Spooty — это инструмент для тех, кто предпочитает хранить музыку у себя. По сути, это мостик между вашими предпочтениями в Spotify и реальными аудиофайлами. Работает он хитро: проект не взламывает защиту Spotify и не пытается скачивать потоки напрямую с их серверов. Вместо этого он забирает метаданные трека (название, артист, альбом) через официальный API, а затем ищет и скачивает аудио с YouTube.
В итоге вы получаете аккуратно разложенные по папкам файлы с правильными тегами и обложками. Проект написан на NestJS и Angular, упакован в Docker и готов к работе «из коробки».
Что умеет Spooty
Главное преимущество здесь не в простом скачивании одного трека, а в автоматизации процесса.
Подписка на обновления
Это самая крутая фишка. Вы можете «подписаться» на плейлист или страницу артиста. Как только там появляется новая песня, Spooty замечает это и автоматически вытягивает её в ваше хранилище. Это превращает инструмент из простой «качалки» в полноценный менеджер библиотеки.
Гибкость форматов
Если вы аудиофил, вам не навязывают mp3. В настройках можно выбрать flac, opus, m4a или даже wav. Качество тоже настраивается — от стандартных 128 kbps до максимального битрейта, который сможет отдать YouTube.
Работа с очередями
Внутри используется Redis, поэтому если вы решите «слить» дискографию группы из 20 альбомов, сервер не упадет. Задачи выстраиваются в очередь и обрабатываются постепенно. Можно даже ограничить количество скачиваний в минуту, чтобы не ловить лишние подозрения от Google.
Как это устроено внутри
Архитектура проекта довольно стандартная для современного веба: TypeScript на обоих концах. Backend на NestJS управляет логикой поиска и скачивания, а Frontend на Angular дает приятный интерфейс, где не нужно возиться с консолью после первичной настройки.
Интересный момент связан с обходом ограничений YouTube. Разработчик предусмотрел использование cookies.txt. Это позволяет приложению «прикидываться» залогиненным пользователем, что критично, если вы качаете много или живете в регионе, где YouTube капризничает.
Запуск и настройка
Проще всего завести Spooty через Docker Compose. Вам понадобятся две вещи: аккаунт разработчика Spotify (создается за пару минут) и пара ключей API.
Пример конфига выглядит так:
services:
spooty:
image: raiper34/spooty:latest
container_name: spooty
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- /your/music/folder:/spooty/backend/downloads
- /your/config/cookies.txt:/spooty/config/cookies.txt
environment:
- SPOTIFY_CLIENT_ID=ваш_id
- SPOTIFY_CLIENT_SECRET=ваш_secret
После запуска интерфейс будет доступен на 3000 порту. Там нужно будет авторизоваться через Spotify, и можно начинать кормить сервис ссылками.
Кому это пригодится
Проект явно не для всех. Если вам хватает стриминга и вы не боитесь, что завтра ваш любимый альбом пропадет из доступа — Spooty вам не нужен.
Но он станет спасением для:
- Владельцев локальных медиасерверов вроде Jellyfin или Plex.
- Тех, кто слушает музыку в офлайне (в самолетах или походах).
- Коллекционеров, которые хотят иметь физическую копию редких релизов.
Из минусов я бы отметил необходимость ручной возни с куками YouTube, если планируете качать терабайтами. Но для личного использования это небольшая цена за автоматизацию.
Spooty — крепкий инструмент, который делает ровно то, что обещает. Без лишнего пафоса и сложных настроек. Если давно хотели «забэкапить» свои плейлисты, это отличный повод потратить 15 минут на настройку контейнера.
