Блог

Домашняя музыка в 2026 году

· Иван Головенчик

Домашний музыкальный стриминг: своя фонотека вместо подписки
Домашний музыкальный стриминг: своя фонотека вместо подписки

Предисловие

Когда-то давно, домашняя музыкальная коллекция выглядела примерно так: папка Музыка, внутри нее Музыка новая, потом Новое (1), В машину mp3, Разное зарубежное, и т.д. Несколько сотен mp3 и Winamp, который, если повезёт, отображал исполнителей вместо Unknown Artist в лучшем случае у половины библиотеки. История прослушивания? Предложка? Радио по треку? Выбор настроения? Не, не слышали. Только рандом и послед, только хардкор.

Стриминги эту проблему решили. Музыка, которая всегда с тобой, находишь что угодно, можешь сохранить альбом, выбрать настроение, каждый день открываешь что-то новое, можешь попеть караоке. Удобно настолько, что сама идея снова хранить музыку дома долго казалась шагом назад. Только со временем ты приходишь к одному очень важному пониманию: “твоя” музыка на стримингах тебе не принадлежит. Любое событие: будь то закончившийся контракт с исполнителем, смена фокуса у площадки, региональные ограничения или неоплаченная подписка, и твой плейтист превращается в тыкву. Прямо сейчас попробуй пролистать в своём плейлисте в самое начало, и увидишь, что часть треков попросту больше не доступна. А в 2026 году появилась и новая проблема: добрая половина медиатеки теперь сгенерированна с помощью ИИ. Засилье нейромузыки произошло так незаметно и лавинообразно, что нам еще предстоит разобраться, что с этим делать. Пытливый ум сразу слышит характерный нейрослоп.

В очередной раз не найдя старый трек у себя в плейлисте, я решил посмотреть, во что за последние годы превратился open source вокруг домашней музыки. Спойлер: папочка с ноунейм mp3 файлами сильно эволюционировала.

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

В библиотеке сейчас почти 2 тысячи треков, и занимают они смешные 25 ГБ.

Я не аудиофил и не охотник за FLAC, 320kb\sec 48Khz считаю достаточным для ежедневного прослушивания.

Вся конструкция крутится на мини-ПК с Intel N100 и старом внешнем USB-диске.

Основных компонентов четыре:

Navidrome + SoulSync + AudioMuse-AI + ListenBrainz.

И каждый закрывает ровно ту дыру, из-за которой раньше домашняя фонотека проигрывала Spotify.

Что я вообще хотел получить

Каталог на десятки миллионов треков дома мне не нужен. Соревноваться с гигантами музыкальной индустрии размером библиотеки довольно странная затея.

Хотелось сохранить главное удобство:

  • открыть телефон и сразу слушать музыку;
  • хранить плейлисты, лайки и историю;
  • нормально видеть альбомы, исполнителей, текста песен и обложки;
  • добавлять музыку без ручного перекладывания файлов;
  • иметь что-то похожее на Spotify Radio;
  • получать рекомендации новой музыки;
  • при этом сама фонотека должна остаться обычными файлами на моём диске.

За годы использования стримингов в коллекции постоянно что-то менялось. Какой-то релиз исчез, какая-то версия трека стала недоступна, исполнитель прервал свой контракт. Это - нормальная особенность каталога, которым управляешь не ты.

С локальной библиотекой всё гораздо скучнее: Файл лежит на диске десятилетиями. И мне эта скука нравится.

Как всё устроено

Схема стека: одна общая папка с музыкой, вокруг неё Navidrome, SoulSync и AudioMuse-AI

Важное архитектурное решение здесь совершенно не технологичное.

Музыкальная библиотека - это одна обычная папка.

SoulSync работает с файлами в ней, Navidrome читает эту же папку, AudioMuse-AI анализирует её содержимое.

Я сначала начал думать про промежуточные каталоги, синхронизацию и прочие интересные способы добавить себе работы, но потом остановился. Одна папка прекрасно работает.

Веб-интерфейс Navidrome: библиотека альбомов с обложками

В центре всего стоит Navidrome.

Navidrome - это open source музыкальный сервер. Он индексирует локальную библиотеку и поверх неё даёт всё то, чего ждёшь от современного музыкального сервиса: исполнителей, альбомы, поиск, плейлисты, избранное, рейтинги, историю прослушиваний и веб-интерфейс. Есть Subsonic-совместимый API, поэтому к серверу подключается куча мобильных и настольных клиентов.

Но тут есть важный нюанс: сам Navidrome довольно принципиально относится к библиотеке: источником правды для него служат теги внутри файлов. У вас может быть идеально разложенная структура каталогов, но если в тегах вместо исполнителя написано Unknown Artist, ровно это Navidrome и покажет.

И здесь появляется следующий участник.

SoulSync: сервис, который следит за порядком

Интерфейс SoulSync в работе: обработка записей, метаданные и обложки

SoulSync я воспринимаю как администратора моей музыкальной библиотеки.

Если Navidrome музыку показывает, то SoulSync занимается тем, чтобы внутри библиотеки всё было прилично. Он умеет приводить в порядок метаданные, раскладывать файлы, работать с обложками, искать проблемы с качеством, находить пробелы в информации и запускать целые цепочки обработки новых записей. Есть, например, довольно приятная мелочь: автоматизации, которых из коробки приличное количество. Например, автоматическое получение синхронизированных текстов песен. Добавил запись в библиотеку, дальше система сама проходит нужные шаги, после чего в совместимом плеере текст может идти вместе с музыкой построчно, всё как мы любим.

Добавление музыки

SoulSync умеет подключать несколько типов внешних источников и выбирать между ними в рамках одного конвейера. Есть интеграции с веб-источниками, трекерами, поисковыми и индексирующими сервисами и P2P-клиентами.

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

С технической стороны важнее другое: SoulSync умеет принять запрос на конкретную композицию, проверить - нет ли этого файла в библиотеке, пройти доступные источники, проверить найденный из источников файл, привести его к нужному виду собрав информацию из интернета, положить прямо в музыкальную библиотеку и сообщить в Navidrome, что пора пересканировать библиотеку.

То есть ручная схема:

нашёл → скачал → переименовал → поправил теги → нашёл обложку → переложил

превращается в удобный и неприрывный процесс.

Моя любимая функция SoulSync: wishlist

Допустим, у меня есть список песен из старого стриминга. Можно выгрузить его в CSV, TXT, M3U, или даже вставить ссылку на любимый плейлист из Spotify, а дальше система сама сверит с Navidrome наличие треков в локальной библиотеке и покажет список отсутствующих записей. Эти позиции попадают в wishlist SoulSync и обрабатываются его обычным конвейером с правилами качества и проверками.

В моей миграции получилось так:

  • в исходном списке было 1578 уникальных треков;
  • после первичной сверки отсутствовали 373;
  • автоматическая обработка закрыла 354 позиции;
  • осталось 19 редких ремиксов и локальных исполнителей.

Мне особенно нравится последняя цифра. Система прошла почти всю мою многолетнюю коллекцию и споткнулась только о тот музыкальный андеграунд, про существование которого иногда забываю даже я сам. Причем, SoulSync даже сам плейлист положит в Navidrome.

Главный недостаток домашней музыки: радио по треку

Вот тут долгое время и находилась настоящая пропасть между папкой с музыкой и Spotify. Пусть у меня идеально оформлены 2000 композиций. Что дальше? Spotify знает, что поставить после конкретной песни. Можно ткнуть в трек, запустить радио и следующие полчаса вообще ничего не выбирать. Локальная же библиотека обычно знает только названия файлов, исполнителей и жанры.

Жанр Drum and Bass мало помогает, когда хочется найти композицию, которая звучит похоже именно на эту или попадает в конкретное настроение (сосредоточиться, проснуться, расслабиться). И тут в конструкцию заезжает AudioMuse-AI.

AudioMuse-AI: даём домашней библиотеке уши

Интерфейс AudioMuse-AI: анализ звучания треков и подбор похожих композиций

AudioMuse-AI анализирует сам звук.

Внутри используются Essentia и CLAP. Для каждого трека система вычисляет набор признаков, по которым музыку потом можно сравнивать. Если совсем по-человечески, получается что-то вроде числового слепка звучания песни или душа трека.

Система наинает смотреть глубже простых тегов Artist, Album, Genre и отвечать на гораздо более интересный вопрос:

какие треки в моей библиотеке действительно похожи на этот?

AudioMuse подключается к Navidrome через плагин Sonic Similarity. После анализа библиотеки, совместимый клиент может запросить похожие композиции, а сервер соберёт микс уже по аудиопризнакам. И вот здесь домашняя библиотека внезапно начинает вести себя очень похоже на нормальный стриминг.

Сколько все это потребляет

Всю обработку у меня тянет Intel N100.

Для комфортной конфигурации я выделил под весь стек 6ГБ ОЗУ. Но столько может потребоваться только для обработки длинных треков, а в остальном, в спокойном режиме, потребление висит на уровне 2-3Гб ОЗУ. Скорость обрабоки нейросетью на моём железе около двух треков в минуту. Первая библиотека примерно из 1300 композиций обсчитывалась ночью около 10-11 часов. Звучит долго, но это разовая операция. Новые записи потом анализируются отдельно.

Symfonium: клиент, который превращает всё в нормальный музыкальный сервис

Symfonium на телефоне: экран воспроизведения домашней фонотеки

С серверной частью можно возиться сколько угодно, но в повседневной жизни вся система для меня упирается в один вопрос: насколько приятно просто достать телефон и включить музыку.

Здесь я в итоге остановился на Symfonium.

Снаружи это - очень аккуратный и отзывчивый музыкальный плеер, по ощущениям очень близкий к Spotify или Я-Музыке. Альбомы, исполнители, поиск, очередь, обложки, нормальный экран воспроизведения. Можно вообще не задумываться, что музыка в этот момент едет с собственного Navidrome. Symfonium официально поддерживает Navidrome и другие Subsonic/OpenSubsonic-серверы. При этом если полезть в настройки, там внезапно обнаруживается целый музыкальный комбайн. Можно довольно глубоко менять поведение очереди, интерфейс, обработку звука, кэширование, офлайн-режим и кучу мелочей, до которых в обычном стриминге вас просто не допустят. В актуальной 15-й версии разработчик ещё и серьёзно переработал аудиодвижок, добавив отдельные настройки вывода, DSP и Hi-Res-функции.

Для моей схемы самое интересное называется Smart Queue.

Можно включить трек и попросить Symfonium продолжать очередь похожей музыкой. В обычном режиме он умеет строить её только по артистам, жанрам и другим правилам, а с поддержкой sonic similarity может обращаться за реальной звуковой похожестью к серверу, в котором AudioMuse AI уже заботливо всё подготовил.

И тут замыкается вся цепочка:

Symfonium → Navidrome → плагин AudioMuse-AI → похожие треки

То есть я нажимаю условное «радио» на телефоне, Navidrome спрашивает AudioMuse-AI, что в моей библиотеке звучит похоже на текущую песню, получает список и отдаёт его обратно в плеер. В итоге вся довольно замороченная конструкция из моделей, эмбеддингов и серверных плагинов выглядит как одна привычная кнопка в красивом музыкальном приложении.

Вот примерно в этот момент домашняя библиотека окончательно перестаёт ощущаться папкой с файлами.

А как находить музыку, которой у меня ещё нет?

Это вторая большая проблема локальной коллекции по сравнению со стримингами.

Рекомендации внутри библиотеки мы сделали. Но если слушать только то, что уже лежит на диске, музыкальный мир будет довольно ограничен и быстро исчерпан. Здесь пригодился ListenBrainz. Если пользовались Last.fm, принцип должен быть вам знаком.

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

Есть Weekly Exploration и Weekly Jams. Они пересчитываются раз в неделю на основе накопленной истории. Имейте ввиду: чтобы все заработало, сначала сервису нужно понять, что именно вы слушаете. Разумно закладывать 2-4 недели нормального использования и получается довольно хитрая петля:

слушаю свою музыку

ListenBrainz изучает вкус

предлагает новую

понравившееся добавляется в домашнюю библиотеку

AudioMuse анализирует

новая музыка участвует в локальном радио

Вот после этого конструкция начинает ощущаться законченной.

Как это выглядит в повседневной жизни

Самое приятное, что после всей настройки я почти перестал думать об инфраструктуре. На телефоне у меня обычный музыкальный клиент.

Хочу послушать музыку:

трек → Navidrome → AudioMuse → похожие композиции

Послушал музыку:

Navidrome → ListenBrainz → история предпочтений

Добавилась новая запись:

SoulSync → метаданные и обработка → библиотека → Navidrome → AudioMuse

Внутри живёт несколько контейнеров, PostgreSQL, Redis, воркер анализа, плагины и фоновые задания, а снаружи просто кнопка Play.

Мне кажется, это хороший признак нормально собранной системы.

На каком железе это живёт

Моя конфигурация:

  • Intel N100;
  • 4 ядра для LXC контейнера;
  • 6 ГБ RAM;
  • 16 ГБ системного пространства;
  • внешний USB-HDD под саму музыку;
  • Proxmox;
  • Debian 13 внутри unprivileged LXC;
  • Docker уже внутри контейнера.

Navidrome сам по себе очень лёгкий, запустится даже на Raspberry-pi. Основной потребитель ресурсов здесь - AudioMuse-AI во время анализа. Если распознавание речи вам не нужно, требования можно попробовать уменьшить, но и качество анализа тоже может пострадать. В моей конфигурации меньше 4 ГБ оказалось плохой идеей.

Базовое разворачивание

Я собирал всё в одном LXC-контейнере, но это совершенно необязательное условие. На обычном Linux-хосте с Docker схема будет примерно той же.

Каталоги у меня разделены на конфиги сервисов и саму медиатеку:

/opt/docker/music/
    navidrome/
    soulsync/
    audiomuse/
/music-data/
    media/music/

Ключевая идея:

SoulSync  --->  /music-data/media/music  --->  Navidrome
                         |
                         +----> AudioMuse-AI

Navidrome получает библиотеку только для чтения, сервис, который обслуживает файлы (SoulSync), может в неё писать. Это сильно уменьшает количество способов случайно устроить rm -rf.

Наружу публикуется только Navidrome

Из всего стека, снаружи мне нужен только музыкальный сервер.

Поэтому, через reverse proxy опубликован только Navidrome. SoulSync, AudioMuse-AI и остальные административные интерфейсы остаются в локалке и не доступны из внешней сети. Для внешней точки входа у меня HTTPS, нормальный сертификат и защиты.

Что получилось в итоге

Сейчас у меня:

  • 1855 треков;
  • свой музыкальный сервер;
  • мобильный клиент;
  • плейлисты и рейтинги;
  • автоматическая работа с метаданными;
  • обложки и тексты;
  • локальный анализ звучания;
  • радио по треку;
  • рекомендации новой музыки через ListenBrainz.

Всё это работает на очень энергоэффективном N100.

И самое интересное здесь даже не стоимость: мне нравится, что музыкальная коллекция снова стала чем-то осязаемым. Я могу посмотреть, что именно в ней лежит, перенести её на другой сервер, сделать собственный анализ, поменять рекомендательную систему, исправить конкретный трек, через год прикрутить модель получше, но сердцем библиотеки всегда останутся понятные mp3 файлы. Кажется, именно этого мне и не хватало.

Если захотите повторить

Минимальное ядро я бы собирал в таком порядке:

  1. Navidrome и существующая легальная фонотека.
  2. SoulSync для организации библиотеки, метаданных и автоматизаций.
  3. AudioMuse-AI плюс плагин Sonic Similarity.
  4. Мобильный клиент с поддержкой современного Subsonic API (похожие треки).
  5. ListenBrainz для скробблинга и внешних рекомендаций.
  6. Уже потом дополнительные источники, автоматизация импорта и всё остальное.

Так гораздо проще понять, какой компонент за что отвечает.

← Все статьи