Два варианта:
- Напрямую из консоли
- Через поднятие web UI в docker-compose
Как работает импорт ЯМ:
- Парсит метаданные ваших лайкнутых треков
- Качает .mp3/.flac/etc из YoutubeMusic/ЯМ
- Качает синхронизированные .lrc из LRCLIB
- Качает обложку альбома из ЯМ
- Складывает все в целевую папку navidrome
Как работает импорт SoundCloud:
- Парсит метаданные ваших лайкнутых треков и плейлистов
- Качает .mp3/.flac/etc из YoutubeMusic посредством yt-dlp
- Качает синхронизированные .lrc из LRCLIB
- Качает обложку альбома из ЯМ
- Складывает все в целевую папку navidrome
В идеале после запуска скрипта запускаете full-scan в navidrome и слушаете всю свою библиотеку с треками без блюра/цензуры.
- Установленный python
- Токен для получения метадаты с ЯМ. Инструкция по получению тут
- Установленный FFmpeg
- Установленный zapret или VPN
Установить необходимые зависимости:
pip install -r requirements.txtДля запуска в корне проекта должен лежать .env файл со следующими конфигами:
YANDEX_MUSIC_TOKEN– Токен яндекс музыке. Способ получения описан вышеYTDLP_DOWNLOAD_DIR– Временная директория, где будут храниться промежуточные файлы YoutubeMusicYM_DOWNLOAD_DIR- Временная директория, где будут храниться промежуточные файлы с ЯМыYM_NAVIDROME_DATA– Постоянная директория, где скрипт хранит промежуточные данные о миграции треков из ЯМ вNAVIDROME_FOLDER– Целевая директория, откуда navidrome читает музыку/альбомы/артистовYANDEX_MUSIC_PERIOD_BETWEEN_REQUESTS- Период между запросами в ЯМ, дабы избежать блокировки rate limit
Для команды redownload-playlist (перекачка треков из плейлиста Navidrome):
NAVIDROME_URL– URL сервера Navidrome (напр. https://navidrome.example.com)NAVIDROME_USER– Логин пользователя NavidromeNAVIDROME_PASSWORD– Пароль пользователя Navidrome. Если пароль содержит#,&, запятые и др. спецсимволы — обязательно возьмите значение в кавычки:NAVIDROME_PASSWORD="2uY#hG,#^Tw&;_4"
- Запустить выгрузку с ЯМ в navidrome
python -m main ym-import- Попробовать обработать неуспешные повторно (с большим шансом ничего не даст, т.к. трек либо не найден, либо недоступен для скачивания и т.п.)
python -m main retry-failed- Список неуспешно обработанных треков
python -m main list-failed- Получение количества успешно загруженных треков:
python -m main count-successful- Импорт всего лайкнутого/сохраненного (с публичным доступом) с SoundCloud:
python -m main soundcloud-import <your_nickname>- Перекачать треки из плейлиста Navidrome (напр.
_REDOWNLOAD) заново с ЯМ:
python -m main redownload-playlist
# или указать другой плейлист:
python -m main redownload-playlist --playlist _REDOWNLOAD
# тест на одном треке:
python -m main redownload-playlist --limit 1- Запуск webui:
python -m main webПро возможные клиенты для подключения к navidrome с телефона/пк тут
- YoutubeMusic, использующийся как главный источник, имеет свое ограничение на кол-во запросов в час. По умолчанию это 300.
В случае, если в процессе обработки вылетело исключение в формате
The current session has been rate-limited by YouTube- перезапустите через час. Ранее обработанные треки не будут пуллиться по-новой.- Детали тут
- Процессинг происходит в одном потоке и местами с задержками, дабы избежать блокировки/ограничений, так что запаситесь пивом и чипсами.
Да, условно еще одна обертка над yt-dlp. Да, использовал ИИ при написании. И что вы мне сделаете, я в другом городе.