Antigravity e5afeb06cc feat: Phase 3 AI Radio (DJ Host & interleaved playlist) and Like/Dislike/Delete actions
- Add Like button: promotes wave track to permanent library and refills buffer
- Add Dislike button: blacklists track in SQLite disliked_tracks, removes audio, refills buffer
- Add Delete button in history table for library file removal
- Add AI Radio module: wttr.in weather, Qwen 2.5 host monologues, speech synthesis, ID3 tags
- Generate interleaved 'AI Радио.m3u8' alongside clean 'Моя Волна.m3u8'
- Update Web UI with Radio DJ card, voice selection, and track actions
2026-10-12 16:34:46 +03:00

🎵 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 — История и статистика загруженной музыки.
S
Description
Multi-source music importer & downloader for Navidrome (Yandex Music, Spotify, Apple Music, YouTube Music)
Readme
234 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 67.7%
JavaScript 13.4%
CSS 9.5%
HTML 9.1%
Dockerfile 0.3%