Utilities for music discography folders (stats, BBCode, normalize).
Project description
trackerhelper
Набор утилит для работы с музыкальной дискографией, разложенной по папкам (например, Albums/* и Singles/*):
dr.ps1— автоматизирует запуск foobar2000 и измерение Dynamic Range (DR) для каждого релиза, сохраняя DR-логи в отдельную папку.trackerhelper— CLI-утилита для сканирования дискографии, подсчёта длительности и генерации BBCode-шаблонов; умеет подхватывать DR-отчёты*_dr.txtи (опционально) загружатьcover.jpgна FastPic.synthetic_dataset.py— фикстуры для режима--test(проверка форматирования без реальных файлов и ffprobe).
Требования
dr.ps1 (Windows)
⚠️ Обязательно включи автосохранение DR-логов в foobar2000, иначе
dr.ps1не сможет дождаться файла лога.
- Windows 10/11
- PowerShell 5+ (или PowerShell 7+)
- Установленный foobar2000 (обычный или portable)
- Установленный компонент DR Meter в foobar2000
- Включённая опция автоматической записи лога DR (иначе лог не появится)
Если DR Meter сохраняет логи в другое место (глобальную папку),
dr.ps1их не увидит, потому что ищет лог внутри staging-папки релиза.
trackerhelper (Windows / Linux / macOS)
- Python 3.10+
ffprobeиз состава ffmpeg (должен быть доступен вPATH)requests(опционально, нужен для загрузки обложек на FastPic в командеrelease)
Проверка:
ffprobe -version
Рекомендуемая структура папок
Пример:
DiscographyRoot/
Albums/
Album Name - 2019/
01 - Track.flac
02 - Track.flac
Another Album - 2021/
...
Singles/
Single Name - 2020/
...
Подсказки:
- Группа определяется первым сегментом относительного пути (например
Albums/Singles). Другие группы тоже поддерживаются и будут выведены отдельными заголовками. - Релизом считается любая папка, в которой найден хотя бы один поддерживаемый аудиофайл.
- Год в имени папки релиза можно задавать как
Название - 2024илиНазвание – 2024— он будет использован в BBCode.
Установка
pip install trackerhelper
Опционально, для загрузки обложек:
pip install trackerhelper[cover]
Разработка из репозитория:
git clone https://github.com/pryid/trackerhelper
cd trackerhelper
pip install -e .
На Windows, если PowerShell запрещает запуск скриптов, можно разрешить для текущего пользователя:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Использование
1) Автосбор DR-логов через foobar2000 (dr.ps1)
Базовый запуск
.\dr.ps1 -Root "D:\Music\Artist"
По умолчанию скрипт:
- ищет релизы в
Root\Albums\*иRoot\Singles\*(если такие группы есть), - иначе считает релизами папки
Root\*, - копирует каждый релиз в локальный staging (чтобы записать лог даже если источник read-only, например SMB),
- запускает foobar2000 с context menu командой
Measure Dynamic Range, - ждёт появления лога
foo_dr*.txt|logвнутри staging, - копирует лог в папку отчётов.
Где будут отчёты
Если не задан -OutDir, отчёты сохраняются в:
%USERPROFILE%\Music\DR
Имя файла: <имя_релиза>_dr.txt (имя релиза берётся из имени папки; недопустимые символы заменяются на _).
Если foobar2000 portable / не в стандартном месте
.\dr.ps1 -Root "D:\Music\Artist" -FoobarPath "D:\Apps\foobar2000\foobar2000.exe"
Часто используемые параметры
-Root(обязательный) — корневая папка дискографии.-FoobarPath— путь кfoobar2000.exe(если автопоиск не нашёл).-CommandName— точное имя команды из контекстного меню foobar (по умолчанию"Measure Dynamic Range").-Groups— группы релизов (по умолчаниюAlbums,Singles).-Ext— расширения аудио (список).-TimeoutSec— максимальное ожидание лога на релиз (по умолчанию 1800 сек).-LogNameRegex— регулярка для имени лога (по умолчанию^foo_dr.*\.(txt|log)$).-OutDir— куда сохранять итоговые*_dr.txt.-StageRoot— где держать временные копии релизов (локально).-KeepStage— не удалять staging (удобно для диагностики).-ShowFoobar— показывать окно foobar (иначе запускается minimized).
Пример для источника read-only (SMB)
.\dr.ps1 -Root "\\NAS\Music\Artist" -OutDir "D:\Reports\DR"
2) Подсчёт длительности/параметров + генерация BBCode (trackerhelper)
Базовый запуск (группированный вывод)
trackerhelper stats "/path/to/DiscographyRoot"
Вывод по каждому релизу содержит:
- длительность
- количество треков (по файлам, у которых удалось прочитать duration)
- bit depth и sample rate (если ffprobe вернул значения)
В конце печатается суммарная строка Total: ....
Включить треки, лежащие прямо в корне
По умолчанию корень не считается релизом, чтобы не смешивать файлы. Если нужно — добавь --include-root:
trackerhelper stats "/path/to/DiscographyRoot" --include-root
Добавить расширение (повторяемый параметр)
trackerhelper stats "/path/to/DiscographyRoot" --ext .ape --ext .tak
Нормализация имён папок релизов
По умолчанию выполняется "сухой" прогон (без переименований):
trackerhelper normalize "/path/to/DiscographyRoot"
Чтобы применить изменения:
trackerhelper normalize "/path/to/DiscographyRoot" --apply
Форматы:
- один релиз:
Artist - Album (Year) - несколько релизов:
Year - Artist - Album
Важно: в команде normalize данные берутся из тегов аудиофайлов (album/artist), а год — из имени папки. Если теги/год отсутствуют, папка будет пропущена.
Генерация BBCode-шаблона дискографии
trackerhelper release "/path/to/DiscographyRoot"
Отключить загрузку обложек на FastPic:
trackerhelper release "/path/to/DiscographyRoot" --no-cover
Файл будет записан в текущую рабочую директорию как:
<имя_корневой_папки>.txt
В шаблоне остаются плейсхолдеры ROOT_COVER_URL, GENRE, Service, ЛЕЙБЛ, YEAR — заполни их вручную.
Подстановка DR-отчётов в BBCode
Если у тебя уже есть *_dr.txt (например, собранные dr.ps1), укажи папку с логами:
trackerhelper release "/path/to/DiscographyRoot" --dr "C:\Users\<you>\Music\DR"
Скрипт пытается сопоставить DR-файл с папкой релиза по имени (несколько вариантов имён + нормализация пробелов/дефисов). Если отчёт не найден — в BBCode остаётся info.
Автоподстановка обложек через FastPic (опционально)
Если в папке релиза лежит cover.jpg (регистр неважен), и установлен пакет requests, то в команде release утилита загрузит обложку на FastPic и подставит прямую ссылку в BBCode. Если обложка не найдена или загрузка не удалась — остаётся COVER_URL.
3) Режим проверки форматирования без ffprobe/ФС (--test)
trackerhelper stats "/any/path" --test
trackerhelper release "/any/path" --test
4) Поиск дублей релизов по аудио-отпечаткам (trackerhelper dedupe)
trackerhelper dedupe --roots Albums Singles
Опции:
--move-to DIR— переместить найденные релизы в указанную папку--delete— удалить найденные релизы (опасно)
--test использует данные из synthetic_dataset.py и позволяет быстро проверить, как выглядит консольный вывод и BBCode, не имея реальных файлов.
Troubleshooting
dr.ps1: лог не появляется
Чаще всего причина одна из двух:
- в DR Meter не включено автосохранение логов;
- DR Meter сохраняет логи не в папку релиза (а в другое место).
Для диагностики:
.\dr.ps1 -Root "D:\Music\Artist" -LogNameRegex ".*\.(txt|log)$" -KeepStage
После этого проверь, какие файлы создаются в staging-папке.
dr.ps1: “не нашёл foobar2000.exe”
Передай путь вручную:
.\dr.ps1 -Root "D:\Music\Artist" -FoobarPath "D:\Apps\foobar2000\foobar2000.exe"
trackerhelper: Error: ffprobe not found
Установи ffmpeg и добавь его в PATH, чтобы команда ffprobe запускалась из терминала.
trackerhelper: bit depth / sample rate = unknown или mixed
Это нормально:
- некоторые форматы/файлы не содержат нужных полей, или ffprobe их не возвращает;
- внутри релиза могут быть разные параметры →
mixed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trackerhelper-0.2.3.tar.gz.
File metadata
- Download URL: trackerhelper-0.2.3.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d090c4d6775aaaba3ca4a62247dd255c1d05442907ebdb6cee53f5f5feb6556
|
|
| MD5 |
b18a64d01658934281ec278827f7fc85
|
|
| BLAKE2b-256 |
f020665e7a6af054d6d738724ed57b380f06875fc038a078d737eb62e74f26ec
|
Provenance
The following attestation bundles were made for trackerhelper-0.2.3.tar.gz:
Publisher:
publish.yml on pryid/trackerhelper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackerhelper-0.2.3.tar.gz -
Subject digest:
8d090c4d6775aaaba3ca4a62247dd255c1d05442907ebdb6cee53f5f5feb6556 - Sigstore transparency entry: 814184058
- Sigstore integration time:
-
Permalink:
pryid/trackerhelper@673d84a6e3accaf945d439d2e0b15680088bacd5 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/pryid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@673d84a6e3accaf945d439d2e0b15680088bacd5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file trackerhelper-0.2.3-py3-none-any.whl.
File metadata
- Download URL: trackerhelper-0.2.3-py3-none-any.whl
- Upload date:
- Size: 28.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e01e7a9f29d771e2f9f7281c9bb074dbdda9403ae0df6f1bed41331cab005ad5
|
|
| MD5 |
1dcf378cc73ec00c77cbd91925dc137d
|
|
| BLAKE2b-256 |
b1e268033733ea2f44509044bc7c53300d423801f78250689fe9f3fee76e8bb6
|
Provenance
The following attestation bundles were made for trackerhelper-0.2.3-py3-none-any.whl:
Publisher:
publish.yml on pryid/trackerhelper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackerhelper-0.2.3-py3-none-any.whl -
Subject digest:
e01e7a9f29d771e2f9f7281c9bb074dbdda9403ae0df6f1bed41331cab005ad5 - Sigstore transparency entry: 814184062
- Sigstore integration time:
-
Permalink:
pryid/trackerhelper@673d84a6e3accaf945d439d2e0b15680088bacd5 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/pryid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@673d84a6e3accaf945d439d2e0b15680088bacd5 -
Trigger Event:
push
-
Statement type: