Skip to content

Repository files navigation

DJMAKER

DJMAKER — кроссплатформенная desktop-программа на Python/Flet для ведения музыкальной библиотеки.

Реализовано в текущем этапе

  • сканирование папок с музыкой;
  • нативный Drag&Drop аудиофайлов и папок в desktop-сборках с автоматической фильтрацией неподдерживаемых форматов;
  • SQLite-медиатека;
  • чтение технических параметров и тегов через Mutagen;
  • точные дубликаты по SHA-256;
  • редактор тегов по двойному клику по треку с сохранением изменений непосредственно в аудиофайл;
  • просмотр, замена и удаление встроенной JPEG/PNG-обложки для MP3/FLAC/M4A;
  • перенос/переименование файлов по шаблону;
  • фоновые worker-задачи для тяжёлых операций;
  • экран «Задачи» с прогрессом, остановкой, отменой и возобновлением долгих операций;
  • архитектура онлайн-провайдеров;
  • MusicBrainz как первый провайдер метаданных;
  • системная, светлая и тёмная тема интерфейса с сохранением выбора;
  • глобальный редактор цветовых ролей темы с отдельными Light/Dark override-значениями и live-preview;
  • цветовые схемы DJMAKER Blue, Violet, Emerald, Amber, Graphite, «Чистый графен» и «Строгий»;
  • автоматическая установка FFmpeg и собственного Essentia runtime;
  • пакетный многопоточный полный анализ через FFmpeg → Essentia: BPM, Key, Camelot, позиции долей, первая сильная доля и стабильность темпа; рассчитанные BPM/Key записываются в теги файлов;
  • визуальный редактор BPM-сетки с масштабом, прослушиванием от курсора, исправлением BPM/первой/сильной доли и линейными Warp-якорями;
  • встроенные обложки MP3/FLAC/M4A с локальным content-addressed кэшем;
  • компактный Waveform-анализ через FFmpeg с отображением формы волны в строке трека;
  • локальный preview-player: воспроизведение по клику на обложку и seek по клику на waveform;
  • плавное атомарное переключение preview-player между треками без промежуточного дрожания waveform;
  • оптимизированный SVG-waveform: широкие вертикальные полосы и частичное обновление прогресса без полной перерисовки медиатеки;
  • плавная центровка выбранного трека в медиатеке с сохранением lazy-rendering списка;
  • сохраняемый масштаб строк медиатеки 70–150% с шагом 10%, включая обложку, текст, теги и waveform;
  • трёхстрочное отображение трека: исполнитель/название с Key и BPM, технические badge-теги с альбомом и кликабельный путь;
  • компактное расположение Key/BPM сразу после названия без растягивания пустого промежутка на широких окнах;
  • двойной клик по пути открывает Explorer/Finder с выделением исходного файла;
  • двойной клик по остальной области строки трека открывает редактор тегов;
  • тематический поисковый блок медиатеки с debounce-поиском по исполнителю, названию, альбому, album artist, жанру, формату, Key/Camelot и пути;
  • точки расширения для нормализации и аудио-fingerprint.

Требования

  • Python 3.14+
  • Windows 10/11 или macOS

Установка

python -m venv .venv

Windows:

.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .
djmaker

macOS:

source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
djmaker

Также можно запустить:

python -m djmaker

Drag&Drop файлов и папок

Системный Drag&Drop из Explorer/Finder реализован через Flutter-extension flet-dropzone. Обычный python -m djmaker продолжает работать как раньше, но нативный внешний drop в таком режиме не активируется. Для проверки Drag&Drop сначала установите build-extra:

python -m pip install -e ".[desktop-build]"

Затем запускайте desktop debug-сборку из корня проекта:

Windows:

flet debug windows .

macOS:

flet debug macos .

В desktop-сборке можно перетаскивать одиночные файлы, группы файлов и папки. Папки обходятся рекурсивно. Форматы, не входящие в список поддерживаемых аудио-расширений DJMAKER, автоматически пропускаются и не передаются в Mutagen/FFmpeg/Essentia.

Тесты

python -m unittest discover -s tests -v

Переменные окружения

  • DJMAKER_DATA_DIR — переопределяет каталог данных приложения.
  • DJMAKER_MUSICBRAINZ_CONTACT — контакт для User-Agent MusicBrainz, например URL проекта или email.

Организация файлов

Шаблон по умолчанию:

{artist}/{album}/{track:02d} - {title}.{ext}

Поддерживаемые поля: artist, album, album_artist, title, year, track, disc, ext.

Исходный файл не удаляется отдельно: при организации используется перенос. При конфликте имени создаётся безопасный суффикс (1), (2) и т.д.

Следующие этапы

  • модуль нормализации с основной целью -11.5 LUFS;
  • аудио-fingerprint для смысловых/музыкальных дубликатов;
  • отдельные плагины Discogs, Beatport, Traxsource и DJ-пулов;
  • пакетная обработка тегов и файлов.

Обнуление медиатеки

В Настройки → Локальные данные доступно безопасное действие «Обнулить БД». Оно очищает индекс медиатеки, музыкальные папки, результаты анализа и ошибки сканирования только в SQLite. Исходные музыкальные файлы и их теги не изменяются. Во время активных фоновых задач обнуление заблокировано.

Поиск в медиатеке

Поле поиска оформлено без собственной внутренней рамки и использует внешний контейнер блока. При наличии текста справа внутри поля появляется крестик очистки; он мгновенно сбрасывает запрос и возвращает полный список медиатеки.

Редактор BPM-сетки

После полного анализа в строке трека становится доступна кнопка с иконкой сетки. Редактор показывает детальный waveform, найденные Essentia удары, доли, такты и музыкальные квадраты. Можно изменить BPM, первую и сильную долю, поставить курсор кликом, прослушать аудио с выбранной позиции и добавить Warp-якорь. Между двумя Warp-якорями сетка линейно растягивается; некорректный или обратный участок сохранить нельзя. Изменения хранятся в SQLite и не переписывают аудиофайл.

About

Analog mp3tag

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages