# Qobuz Streamrip Tools Набор утилит для Windows для автоматизации работы со **Streamrip** и загрузками из **Qobuz**. Проект объединяет: - программу `QobuzWatchdog`, которая последовательно обрабатывает список ссылок через Streamrip и перезапускает зависший процесс; - очистку базы истории Streamrip; - приведение скачанных FLAC-файлов к CD-качеству; - группировку нескольких альбомов одного исполнителя в общую папку. > Используйте проект только для контента, который вы имеете право скачивать и обрабатывать, и в соответствии с условиями используемых сервисов. ## Структура проекта ```text qobuz-streamrip-tools/ ├── QobuzWatchdog/ │ ├── Properties/ │ ├── App.config │ ├── Program.cs │ └── QobuzWatchdog.csproj │ ├── scripts/ │ ├── Clear-StreamripDb.bat │ ├── Convert-FlacToCD.ps1 │ └── GroupAlbumsByArtist.ps1 │ ├── tools/ │ └── .gitkeep │ ├── downloads/ │ └── .gitkeep │ ├── data/ │ └── urls.txt │ ├── QobuzWatchdog.sln ├── README.md ├── LICENSE └── .gitignore ``` ## Общий рабочий процесс ```text data/urls.txt ↓ QobuzWatchdog ↓ Streamrip ↓ downloads/ ↓ Convert-FlacToCD.ps1 ↓ GroupAlbumsByArtist.ps1 ``` Все загрузки Streamrip направляются в папку `downloads` в корне проекта. `QobuzWatchdog` при каждом запуске проверяет `%APPDATA%\streamrip\config.toml` и устанавливает параметр `downloads.folder` в путь к локальной папке `downloads`. ## Скачать все зависимости: [Скачать (.zip)](https://cloud.kolbox.duckdns.org/seafhttp/f/f918d0ca3aac4b4195de/?op=view) ## Основная зависимость — Streamrip Streamrip: https://github.com/nathom/streamrip Для актуальной версии Streamrip необходим Python 3.10 или новее и `pip`. Установка: ```powershell pip3 install streamrip --upgrade ``` Проверка: ```powershell rip ``` Перед первым использованием необходимо настроить Streamrip и авторизацию Qobuz. Для Qobuz требуется подходящая подписка, позволяющая получать соответствующее качество аудио. ### Где ищется Streamrip `QobuzWatchdog` ищет `rip.exe` в следующем порядке: 1. `tools\rip.exe`; 2. системная переменная `PATH`. Если Streamrip установлен через `pip`, обычно достаточно, чтобы каталог Python `Scripts` был добавлен в `PATH`. ## FFmpeg Для `Convert-FlacToCD.ps1` необходимы: ```text ffmpeg.exe ffprobe.exe ``` Сборка FFmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z После распаковки файлы находятся в каталоге `bin`. Их можно положить непосредственно в: ```text tools/ ``` Скрипт ищет `ffmpeg.exe` и `ffprobe.exe`: 1. в `tools`; 2. затем в системном `PATH`. ## Зависимости по компонентам | Компонент | Streamrip | FFmpeg | FFprobe | PowerShell | .NET Framework | | ------------------------- |:---------:|:------:|:-------:|:----------:|:--------------:| | `QobuzWatchdog` | ✓ | — | — | — | 4.7.2 | | `Clear-StreamripDb.bat` | ✓ | — | — | — | — | | `Convert-FlacToCD.ps1` | — | ✓ | ✓ | 5.1+ | — | | `GroupAlbumsByArtist.ps1` | — | — | — | 5.1+ | — | ## QobuzWatchdog `QobuzWatchdog` читает ссылки из: ```text data/urls.txt ``` Каждая ссылка должна находиться на отдельной строке. Пример: ```text https://www.qobuz.com/... https://open.qobuz.com/... ``` Строки, начинающиеся с `#`, игнорируются. Программа хранит состояние в: ```text data/completed_urls.txt data/failed_urls.txt ``` Эти файлы создаются автоматически и не добавляются в Git. ### Что делает Watchdog Для каждой ссылки программа: 1. запускает `rip --no-progress --verbose url ""`; 2. отслеживает вывод процесса; 3. если Streamrip долго не выводит ничего, завершает дерево процесса; 4. повторяет попытку; 5. сохраняет успешно обработанные ссылки; 6. повторяет незавершённые ссылки в следующих проходах. Текущие параметры находятся в `Program.cs`: ```csharp private const int MaxRunsPerUrl = 10; private const int MaxRounds = 20; private const int IdleLimitSeconds = 60; private const int RestartDelaySeconds = 3; ``` ### Сборка QobuzWatchdog Проект рассчитан на: ```text .NET Framework 4.7.2 ``` Откройте: ```text QobuzWatchdog.sln ``` в Visual Studio и соберите конфигурацию `Release`. Каталоги `.vs`, `bin` и `obj` исключены из Git. ## Очистка базы Streamrip Запустите: ```text scripts\Clear-StreamripDb.bat ``` Скрипт удаляет: ```text %APPDATA%\streamrip\downloads.db %APPDATA%\streamrip\failed_downloads.db ``` Это сбрасывает историю скачанных и неудачно обработанных элементов Streamrip. ## Конвертация FLAC в CD-качество Запустите: ```powershell .\scripts\Convert-FlacToCD.ps1 ``` Скрипт автоматически обрабатывает: ```text downloads/ ``` Целевые параметры: ```text FLAC 16 бит 44,1 кГц 2 канала ``` Скрипт: - рекурсивно ищет FLAC; - пропускает уже подходящие файлы; - сохраняет метаданные и встроенные изображения; - создаёт временный файл; - проверяет результат через FFprobe; - только после успешной проверки заменяет исходник; - при ошибке пытается восстановить исходный файл. ## Группировка альбомов по исполнителям Запустите: ```powershell .\scripts\GroupAlbumsByArtist.ps1 ``` Скрипт работает с папкой `downloads`. Он ожидает названия альбомов в формате: ```text Исполнитель - Альбом ``` Если у одного исполнителя найдено два или больше альбомов: ```text downloads/ ├── Исполнитель/ │ ├── Исполнитель - Альбом 1/ │ └── Исполнитель - Альбом 2/ ``` Если альбом только один, его папка остаётся на первом уровне. ## Папка downloads Вся музыка находится в: ```text downloads/ ``` Содержимое этой папки исключено из Git: ```gitignore downloads/* !downloads/.gitkeep ``` ## Папка tools В `tools` можно положить локальные зависимости: ```text rip.exe ffmpeg.exe ffprobe.exe ``` Бинарные файлы из `tools` не добавляются в Git. ## PowerShell Скрипты рассчитаны на Windows PowerShell 5.1 или новее. Если Windows блокирует запуск локальных `.ps1`, проверьте текущую политику: ```powershell Get-ExecutionPolicy ``` При необходимости для текущего пользователя можно использовать: ```powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned ``` Меняйте политику выполнения только если понимаете последствия этой настройки. ## Лицензия Исходный код этого репозитория распространяется по лицензии MIT. Streamrip и FFmpeg являются отдельными проектами и распространяются на условиях собственных лицензий.