Files
navidrome-music-sync/README.md
T

73 lines
6.0 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+)** версию.
- **Мультисервисный поиск & Предпрослушивание**:
- Параллельный поиск по **Яндекс Музыке**, **SoundCloud**, **YouTube** и **Apple Music**.
- Сквозное ранжирование по точности совпадения: лучшие совпадения сразу со всех платформ показываются вверху.
- Определение цензуры: бейджи `🔞 18+ Explicit` (без цензуры) и `⚠️ Clean` (зацензуренная версия).
- Встроенный аудиоплеер предпрослушивания с возможностью перемотки на лету (**HTTP Range 206**).
- Прямое скачивание в браузер или добавление в очередь сервера в 1 клик.
- **🌊 Моя Волна (Smart Wave V1)**:
- Автономный генератор персональных рекомендаций на основе профиля вкусов (звёздочки, скробблы, топ артистов из `navidrome.db`).
- Скользящий буфер на 25 треков в `/music/AI Recommendations/Моя Волна/` (~180 МБ).
- **Авто-ротация**: если трек лайкнут в Navidrome — переносится в основную библиотеку навсегда; если лежит более 7 дней без лайка — автоматически удаляется.
- Автоматическая генерация умного плейлиста `Моя Волна.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 /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` — История и статистика загруженной музыки.