Files
navidrome-music-sync/README.md
T

81 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎵 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)**:
- Автономный генератор персональных рекомендаций на основе профиля вкусов (звёздочки, скробблы, топ артистов из `navidrome.db`).
- **Контекстный LLM-реранкер**: локальная Ollama (`qwen2.5:1.5b` с `keep_alive: 0`, 0 МБ RAM в простое) анализирует расширенный пул кандидатов и отбирает треки под время суток (*утро / день / вечер / ночь*) или выбранное настроение (*Энергия*, *Чилл*, *Андеграунд*).
- Скользящий буфер на 25 треков в `/music/AI Recommendations/Моя Волна/` (~180 МБ).
- **Авто-ротация**: если трек лайкнут в Navidrome — переносится в основную библиотеку навсегда; если лежит более 7 дней без лайка — автоматически удаляется.
- **Фоновое расписание**: автоматическая ротация и пополнение буфера каждые 6 часов.
- Автоматическая генерация умного плейлиста `Моя Волна.nsp` и `Моя Волна.m3u8` для всех Subsonic клиентов.
- **Интеграция с Navidrome**:
- Организация каталога по стандарту: `/music/{Artist}/{Album}/{Track_Number} - {Title}.mp3`.
- Автоматическое скачивание построчных караоке-текстов (`.lrc`).
- Уведомление Navidrome через Subsonic API (`startScan`) сразу после завершения загрузки.
- **Веб-интерфейс & REST API**:
- Адаптивный темный Web UI с прогресс-баром задач, переключателем настроения Волны и историей загрузок.
- Фоновый асинхронный воркер без блокировки интерфейса.
- Дедупликация (не скачивает повторно треки, которые уже есть в библиотеке).
---
## 🛠️ Установка и запуск
### 1. Конфигурация (.env)
Скопируйте пример конфигурации и укажите токен Яндекс Музыки:
```bash
cp .env.example .env
```
### 2. Запуск через Docker Compose
```bash
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` — Запуск задачи на скачивание по ссылке:
```json
{ "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` — Ротация буфера (перенос лайкнутых в библиотеку, очистка устаревших).
- `GET /api/tasks` — Список активных задач и прогресс выполнения.
- `GET /api/history` — История и статистика загруженной музыки.