4ed8e0c71a813404e8ac42a487c605412014e19a
- Integrate local Piper ONNX neural TTS engine (Dmitri, Irina, Denis, Ruslan) - Add GET /api/radio/preview-voice endpoint with cached pre-rendered samples - Add '▶ Прослушать голос' button in Web UI for 1-click preview before generating - Add automated filter to strip LLM refusals and fall back to clean radio phrasing
🎵 Navidrome Music Sync
Мультисервисный импортер и синхронизатор музыки для Navidrome.
Позволяет в один клик или по расписанию импортировать треки, альбомы и плейлисты из Яндекс Музыки, Spotify, Apple Music и YouTube Music напрямую в медиатеку Navidrome с сохранением оригинальных тегов, обложек в высоком разрешении и синхронизированных караоке-текстов (.lrc).
🚀 Возможности
- Прямой импорт из Яндекс Музыки (320 kbps):
- Скачивание отдельных треков, альбомов и плейлистов.
- Полная синхронизация личного плейлиста «Мне нравится» (880+ треков).
- Импорт из Spotify и Apple Music:
- Без необходимости платных подписок и зарубежных аккаунтов.
- Извлечение точных метаданных через официальные открытые каталоги и аудио-матчинг с YouTube Music CDN (Opus 160 / MP3 320k).
- Обход цензуры и региональных блокировок:
- Если трек в каталоге РФ заблокирован или зацензурен («запикан»), движок автоматически переключается на глобальные источники и скачивает полноценную Explicit (18+) версию.
- Мультисервисный поиск & Предпрослушивание:
- Параллельный поиск по Spotify (приоритетный источник), Яндекс Музыке, SoundCloud, YouTube и Apple Music.
- Приоритет Spotify: треки и альбомы со Spotify получают бонус релевантности и всегда выводятся первыми в выдаче.
- Сквозное ранжирование по точности совпадения: лучшие совпадения сразу со всех платформ показываются вверху.
- Определение цензуры: бейджи
🔞 18+ Explicit(без цензуры) и⚠️ Clean(зацензуренная версия). - Встроенный аудиоплеер предпрослушивания с возможностью перемотки на лету (HTTP Range 206).
- Прямое скачивание в браузер или добавление в очередь сервера в 1 клик.
- 🔐 Защита & Авторизация через Navidrome:
- Панель синхронизации защищена авторизацией. Для входа используются те же имя пользователя и пароль, что и в Navidrome.
- Сессионные токены HMAC (30 дней) для браузера и поддержка HTTP Basic Auth для API / автоматизации.
- 🌊 Моя Волна (Smart Wave V2 & V3):
- Автономный генератор персональных рекомендаций на основе профиля вкусов (звёздочки, скробблы, топ артистов из
navidrome.db). - Контекстный LLM-реранкер: локальная Ollama (
qwen2.5:1.5bсkeep_alive: 0, 0 МБ RAM в простое) анализирует расширенный пул кандидатов и отбирает треки под время суток (утро / день / вечер / ночь) или выбранное настроение (Энергия, Чилл, Андеграунд). - ⭐ Лайк («В коллекцию»): моментальный перенос трека в постоянную медиатеку
/music/{Artist}/{Album}/{Title}.mp3и мгновенное пополнение Волны свежим кандидатом. - 👎 Дизлайк: моментальное удаление файла и занесение исполнителя и трека в persistent черный список
disliked_tracks, исключающий его из всех будущих рекомендаций навсегда. - Скользящий буфер на 25 треков в
/music/AI Recommendations/Моя Волна/(~180 МБ). - Авто-ротация: если трек лайкнут в Navidrome — переносится в основную библиотеку навсегда; если лежит более 7 дней без лайка — автоматически удаляется.
- Фоновое расписание: автоматическая ротация и пополнение буфера каждые 6 часов.
- Автоматическая генерация умного плейлиста
Моя Волна.nspиМоя Волна.m3u8для всех Subsonic клиентов.
- Автономный генератор персональных рекомендаций на основе профиля вкусов (звёздочки, скробблы, топ артистов из
- 🎙️ AI Радио (AI DJ Host & AI Радио.m3u8):
- Персональный радиоэфир: виртуальный ведущий радиостанции приветствует слушателей по времени суток, объявляет погоду за окном в реальном времени (
wttr.in) и делает короткие живые подводки к трекам. - Нейросетевая генерация реплик диктора через
qwen2.5:1.5b(keep_alive: 0). - Нейросинтез речи с нулевой нагрузкой на GPU и сохранением MP3-реплик с ID3-тегами
AI Радио (DJ). - Отдельный интерливинг-плейлист
AI Радио.m3u8(реплики ведущего чередуются перед музыкальными треками каждые 2–3 песни), сохраняяМоя Волнаполностью чистой от разговоров. - Автоматическое уведомление Navidrome через Subsonic API (
startScan) для мгновенного появления радиоэфира в клиентах.
- Персональный радиоэфир: виртуальный ведущий радиостанции приветствует слушателей по времени суток, объявляет погоду за окном в реальном времени (
- Интеграция с Navidrome:
- Организация каталога по стандарту:
/music/{Artist}/{Album}/{Track_Number} - {Title}.mp3. - Автоматическое скачивание построчных караоке-текстов (
.lrc). - Уведомление Navidrome через Subsonic API (
startScan) сразу после завершения загрузки.
- Организация каталога по стандарту:
- Веб-интерфейс & REST API:
- Адаптивный темный Web UI с прогресс-баром задач, переключателем настроения Волны, карточкой AI Радио с выбором голоса ведущего, кнопками Лайк/Дизлайк и удалением треков.
- Фоновый асинхронный воркер без блокировки интерфейса.
- Дедупликация (не скачивает повторно треки, которые уже есть в библиотеке).
🛠️ Установка и запуск
1. Конфигурация (.env)
Скопируйте пример конфигурации и укажите токен Яндекс Музыки:
cp .env.example .env
2. Запуск через Docker Compose
docker compose up -d --build
Сервис доступен по адресу: http://127.0.0.1:8005 (или https://music.qpid.pro/sync/).
🔌 API Эндпоинты
GET /— Веб-интерфейс управления (требуется авторизация).GET /login/POST /login— Страница и эндпоинт авторизации (валидация через Navidrome).GET /logout/POST /logout— Завершение сессии.GET /api/search?q={query}— Сквозной поиск по всем платформам с ранжированием.GET /api/stream?url={url}— Аудио-стриминг для плеера с поддержкой Range-запросов и перемотки.GET /api/direct-download?url={url}— Прямая отдача файла в браузер.POST /api/download— Запуск задачи на скачивание по ссылке:{ "url": "https://music.yandex.ru/album/123/track/456" }POST /api/sync/yandex-likes— Запуск полной синхронизации понравившихся треков из Яндекс Музыки.GET /api/wave/status— Статус буфера «Моей Волны» и якорные артисты.POST /api/wave/generate— Генерация свежих рекомендаций и наполнение буфера Волны.POST /api/wave/rotate— Ротация буфера (перенос лайкнутых в библиотеку, очистка устаревших).POST /api/wave/like— Лайк трека в Волне (мгновенный перенос в постоянную библиотеку и докачка нового слота).POST /api/wave/dislike— Дизлайк трека в Волне (удаление, занесение в blacklist и докачка замены).DELETE /api/track?file_path={path}— Удаление любого трека с диска и из истории.GET /api/radio/status— Статус AI Радиовещания и количество реплик ведущего.POST /api/radio/generate— Генерация реплик ведущего и сборка плейлиста «AI Радио.m3u8».GET /api/tasks— Список активных задач и прогресс выполнения.GET /api/history— История и статистика загруженной музыки.
Description
Multi-source music importer & downloader for Navidrome (Yandex Music, Spotify, Apple Music, YouTube Music)
234 KiB
0 Stars
1 Watchers
0 Forks
Languages
Python
67.7%
JavaScript
13.4%
CSS
9.5%
HTML
9.1%
Dockerfile
0.3%