istepachev/AI-Super-DJ

Локальный навык и аудиодвижок: подбор музыки, плавные DJ-сеты в режиме Жилин + Mood, мастеринг и проверенный экспорт FLAC 24 bit/CUE.

Python

0

26 commits

updated Oct 20, 2026

See the code

README

AI Super DJ

Локальный AI-навык для улучшения музыки и создания сведённых FLAC-сетов. Один файл — обработанный мастер; несколько файлов или папка — подбор порядка, точки сведения, переходы и мастер полного сета. Записи остаются на компьютере.

По умолчанию: структурные кандидаты Cue, сетка битов/тактов, отдельные кривые баса, середины и верхов, мягкий вход средних частот. На подготовленной системе CUE-DETR добавляет предложения точек, Beat This! — сетку, Demucs — оценки вокала. Отчёт указывает, какие модели действительно работали. Ручные точки и защищённые участки сохраняются.

Основной переход — F с общей фазой SYNC: оба трека следуют одной кривой темпа и одной сетке ударов. Бас передаётся за четыре доли, середина — мягко за 8–16 долей, верха меняются на протяжении всего наложения. Сумма парных огибающих каждого диапазона не превышает единицу. Это уменьшает одновременное наложение двух плотных партий. Логика выбора.

При выборе автоматических точек измеряется наличие баса в исходниках около его передачи: новый трек должен иметь низкие частоты к моменту входа, а старый — держать их до этого. Короткие музыкальные сбивки допустимы. Это проверка энергии диапазона, а не распознавание каждой бочки.

По умолчанию выбирается насыщенная центральная часть: цель — 3–4 минуты чистой игры между наложениями, максимум 5 минут. Трек звучит минимум 2 минуты с учётом переходов; короткие исходники оставляют меньше чистой игры. Наложение обычно составляет 32 такта, при большом перепаде темпа — 16; длина автоматически уменьшается, если сетка или исходник не позволяют сохранить полезную часть. Малый недобор двухминутного минимума допускает короткую отмеченную в отчёте петлю из стабильных целых тактов. Большой недобор требует другого исходника или решения.

Опция «DJ Жилин» предпочитает наложения по 32 такта: средние частоты переходят почти на всей длине сведения, бас — примерно за четыре такта, высокие — мягко на всей длине. В переносимом профиле сохранены одобренные нормализованные огибающие native-сведения; личные исходники, точки и история в него не входят. Подключите профиль через zhilin_profile; без этой настройки используется широкий плавный переход. Общий SYNC, согласованные точки и защищённые участки сохраняются. Длительности источника, слышимого присутствия и чистой игры считаются отдельно.

Проверка ударных различает раннюю верхнюю атаку и более позднюю басовую часть бочки. Она входит в обычный SYNC. В режиме DJ Жилин, если анализ подтверждает такое расхождение, сборка автоматически получает свежие оценки ударных из уже выровненных дорожек: весь спектр ударных передаётся вместе с басом, а мелодическое сопровождение сохраняет длинные кривые. Для этого требуется настроенный локальный Demucs; установка одних инструкций навыка не устанавливает модель. Проверки охватывают распознанные атаки и не гарантируют совпадения каждого неизвестного транзиента. Проверка атак.

DJ Жилин — режим того же навыка ai-super-dj, а не отдельный навык. Он выбирается через make --style zhilin или настройку default_style: zhilin на рабочем месте. При такой настройке достаточно обычного запроса собрать сет. В свежей установке без этой настройки выбран обычный F/SYNC. Установка для друга и готовые запросы включают DJ Жилин явно и объясняют подготовку движков.

На настроенном рабочем месте make использует дату в начале имени, исключает уже использованные треки при выборе из папки и доставляет только FLAC и CUE в delivery_root. Отчёты остаются в private_output_root; история обновляется из CUE готовых сетов. Явно заданные треки сохраняются, --allow-repeats разрешает повторы по запросу.

После отдельной передачи ударных проверяется уже сумма дорожек. Для уверенно распознанного небольшого остаточного сдвига допустима ограниченная плавная поправка общего звука с повторной проверкой; остальной звук и длительность сохраняются. Недостаточное покрытие, неоднозначные атаки и превышение допустимой поправки останавливают эту проверку.

Для адаптивной середины учитывайте конкретные мелодии, голоса и поддержку ритма в участке сведения. При совместимости стремитесь к 32 тактам; конкурирующие партии могут потребовать 16 или 8. Различие нотных профилей само по себе не означает конфликт. План DJ Жилин поддерживает отдельные mid_handoff_bars и bass_handoff_beats на переходе; одобренная длина середины сохраняется при отдельной настройке баса. Правила и границы проверки описаны в references/adaptive-mids.md.

Использование

После подготовки движков:

superdj make "track.mp3" --output "../result"
superdj make "../music-folder" --output "../result"
superdj make "first.flac" "second.flac" --keep-order --style zhilin --output "../result"

Все переданные файлы входят в задачу без скрытой случайной выборки. --keep-order сохраняет порядок аргументов; для папки — сортировку имён. Готовый сет, переданный одним файлом, обрабатывается без пересведения. Исходники сохраняются; существующий мастер не перезаписывается.

Финал — проверенный FLAC 24 bit и отчёт. Для одного файла сохраняется частота источника; для сета общая частота равна максимальной среди входных файлов. Начальная цель мастера −14 LUFS, потолок −1.5 dBTP; при конфликте громкости и пиков сохраняется запас по пикам. Преобразование MP3 в FLAC само по себе не возвращает потерянные детали.

Подготовка

Нужны Python 3.12, FFmpeg/FFprobe, для изменения темпа — отдельный Rubber Band CLI. Установка навыка добавляет инструкции, а движки, модели и приватную конфигурацию нужно подготовить отдельно.

python -m pip install -e ".[test,repair]"
superdj setup --components ../superdj-work/checkouts

Полный нейросетевой вариант и приватная конфигурация для make описаны в настройке движков. Модели и checkouts хранятся вне репозитория. Установите совместимый PyTorch и загрузите модели перед обработкой. Облегчённый анализ доступен без нейросетей, но оценочные биты не считаются проверенными началами тактов.

Для Codex попросите $skill-installer установить навык ai-super-dj из корня этого репозитория, затем вызывайте $ai-super-dj. SKILL.md — инструкции агенту. Копируемый запрос подготовки создаёт собственные пути и историю на новом компьютере. Установка навыка не устанавливает движки автоматически.

Подробный процесс

Команды analyze, plan, render, run доступны для поэтапной работы; параметры показывает superdj --help. fixed сохраняет порядок, auto оценивает последовательность по гармонии, темпу и энергии. До 17 треков оптимизатор точно решает свою функцию стоимости, далее использует beam search с улучшениями. Это собственный алгоритм, а не реализация DJ.Studio Harmonize AI.

Автоматический порядок предпочитает более лёгкое и медленное начало, более быстрый и насыщенный финал. Для длинного сета развитие wave допускает подъём, спад и новый подъём к сильному финалу. Интенсивность и доля баса оцениваются отдельно от громкости файла; это измерительные приближения, а не оценка настроения человеком. План показывает цели темпа, интенсивности и баса по позициям. Фиксированный порядок и согласованные крайние треки сохраняются.

Плейлист — JSON-объект tracks с элементами { "id": "a", "path": "../music/a.flac" }. Защищённые участки задаются в protected_ranges парами исходных секунд. Приватный --transition-overrides задаёт соседние пары, cue_locks, длительность или технику. Рабочий процесс описывает проверки, движки — нейросети и исключения длительности. Для существующих монтажей есть расширенный адаптер.

Внешние компоненты и лицензии: THIRD_PARTY.md. audamcp выполняет выборочные исправления/EQ, Bitwize — финальный мастер, Rubber Band — изменение темпа, FFmpeg — кодеки и измерения. Только выполненные стадии попадают в цепочку обработки.

Проверка

Для эксперимента с логикой Harmonize добавлен отдельный подбор порядка BPM + Key и сравнение с порядком из DJ.Studio:

superdj harmonize --records ../work/records.json --work ../experiment --seed 42
superdj harmonize-compare --records ../experiment/analysis_snapshot.json --our-order ../experiment/harmonize_plan.json --other-order ../dj-export.m3u8 --work ../comparison

Для сравнения полного порядка с DJ.Studio используйте переносимый --preset djstudio-route-v2: основной маршрут Density учитывает плотность оставшегося пула, а отдельный маршрут Paired служит защитой. Оба получают одни исходники и явные ограничения. Защитный выбирается только при строго меньшем числе стыков вне нашей гармонической таблицы; при равенстве остаётся основной. Совпадения с эталоном и оценки разных моделей не участвуют в выборе. Обе последовательности и причина выбора сохраняются. Если подходящего полного пути нет, компромиссы остаются явно обозначенными. djstudio-route-v1 сохранён для повторения прежнего поведения.

Для следующего трека используйте harmonize-rank --preset djstudio-next-v1 с фактическим сыгранным префиксом. Совпадение соседей, цепочек из трёх/четырёх треков и локального Top3 показывает разные компромиссы. Единственный победитель по всем критериям не установлен. В проверках встречаются прежние источники; независимая проверка на совершенно новой музыке не заявляется. Профили содержат опубликованные числовые параметры, без личных треков и путей. Команды и условия.

Обычный музыкальный планировщик make, его развитие по интенсивности и режим сведения DJ Жилин выбираются отдельно. Эти профили порядка не включают DJ Жилин автоматически и не оценивают качество звучания.

Финальная проверка от 13 октября 2026 добавляет пять экспортов одного пула из 431 трека. Первые четыре проверены на заранее зафиксированных профилях и бюджетах, включая 32 свободных маршрута; новая защита маршрута оценена отдельно после этих результатов. Позднее полученный пятый бэкап проверен отдельно после фиксации защитного правила. Он также даёт одну пару повторных экспортов Mood/BPM 4; этого недостаточно для вывода о распределении случайного выбора. Предыдущая проверка содержит девять экспортов пула из 403 треков и поправку на ширину списка предложений. Старые показатели и регрессии сохраняются отдельно.

Дополнение: шестой бэкап, повтор Fuzzy/BPM 6 проверено после публикации неизменного алгоритма 0.17.0. Совокупный Top3 Next-v1 — 1619/2562 (63,19%). Повтор показал одинаковый контекст с разными следующими треками; один выбор DJ.Studio исключён нашей таблицей исходных тональностей, поэтому одним случайным индексом внутри нашего разрешённого списка это расхождение не объясняется. Общий корпус — 63 экспорта, 36 с известными условиями; новых источников и подгонки нет.

Результат — плейлисты M3U8 и таблица порядка. Поиск минимизирует неподходящие связи тональностей, затем стоимость BPM/key; Fuzzy дополнительно предпочитает менее рискованные связи. У Mood своя направленная таблица и дополнительные выразительные переходы. Поиск рассматривает полный путь, сохраняя все треки и фиксации. Для наборов до 100 блоков доступен поиск с проверкой оптимальности; ограниченный по времени результат обозначается отдельно. Прежний критерий сохранён для повторения экспериментов. Сравнение M3U/M3U8, CUE, DJS и JSON отделяет ошибки анализа от выбора порядка. Числовые тональности DJS читаются по проверенной карте с явным источником.

harmonize-learn --learner modes учится на реальных следующих треках с учётом оставшегося пула. Проверка отделяет целые группы исходников, включая все повторы порядка и режимов. Основной список — Top‑3 при четырёх и более оставшихся треках; буквальный список, равные оценки и последние маленькие пулы учитываются отдельно. Top‑7 сохранён для сравнения прежних экспериментов. С обученным профилем поиск держит до 32 альтернативных путей до конца сета, пересчитывая оставшийся пул в каждой ветви и нормируя оценки перед сложением. Исходный последовательный маршрут с проверкой малого остатка остаётся защитным кандидатом: новый путь принимается, если после одинаковой пересборки не ухудшает число несовместимых стыков. Исходные решения сохраняются отдельно от окончательного порядка. Сравнение считает также точные цепочки из трёх и четырёх треков; пропуски и обратный порядок не засчитываются. Это ограниченный поиск, а не доказательство глобального оптимума. В эксперименте BPM + Key энергия и вокал не участвуют; развитие звучания относится к обычному планировщику, переходы используют F/SYNC. Это собственная реализация, а не раскрытый код DJ.Studio. Правила и проверка.

Обучение Fuzzy/Mood подбирает модель по фактическому списку Top3 с гармоническим отсевом. Среди кандидатов — зависимость стоимости смены темпа от типа тонального перехода, положение BPM среди оставшихся треков, плотность соседних темпов и характеристики допустимых продолжений. Неподходящие демонстрации остаются в знаменателе проверки, даже при обучении только на допустимых вариантах. Эти возможности выбираются на отдельных группах исходников; готовый профиль может сохранить более простую модель. Старые профили продолжают работать. Если новый профиль улучшает Top3, но ухудшает требуемое сходство полного маршрута, рабочий профиль сохраняется, а новый предлагается как эксперимент для следующего теста. Допустимость по нашей таблице и предупреждение Solve в DJ.Studio — разные проверки; несохранённый приоритет BPM/тональности нельзя угадывать по названию режима.

Для примеров с явно указанным приоритетом добавлено экспериментальное обучение harmonize-learn --learner priority. Оно различает Mood/Fuzzy, Key/BPM и допуск темпа при выборе следующего трека и расчёте продолжения маршрута. Указание пользователя важнее имени бэкапа; неизвестные настройки остаются неизвестными. Обучение с заранее заданными параметрами на одном наборе допускается, но его результат обозначается как проверка на обучающих данных. Для нового профиля --priority 0 --bpm-tolerance 6 передаёт условие BPM 6; --priority 1 — Key. Старые профили и обычное сведение продолжают работать прежним способом. Исходные примеры, новые обучающие запуски, частные профили и отчёты хранятся вне публичного репозитория. В комплект входят только явно подготовленные переносимые параметры, анонимные условия обучения и обязательные оговорки проверки.

Тесты

python -m pytest -q

Настоящий рендер использует FFmpeg, FFprobe и Rubber Band в PATH или переменные SUPERDJ_FFMPEG, SUPERDJ_RUBBERBAND, SUPERDJ_TEST_FFMPEG, SUPERDJ_TEST_FFPROBE. Отсутствующие инструменты дают явные пропуски. Тесты создают сигналы; пользовательская музыка, плейлисты, веса внешних нейромоделей, личные пути и результаты прослушивания не публикуются. Лицензия собственного кода — MIT.

istepachev/AI-Super-DJ

Локальный навык и аудиодвижок: подбор музыки, плавные DJ-сеты в режиме Жилин + Mood, мастеринг и проверенный экспорт FLAC 24 bit/CUE.

Python

0

26 commits

updated Oct 20, 2026

See the code

README

AI Super DJ

Локальный AI-навык для улучшения музыки и создания сведённых FLAC-сетов. Один файл — обработанный мастер; несколько файлов или папка — подбор порядка, точки сведения, переходы и мастер полного сета. Записи остаются на компьютере.

По умолчанию: структурные кандидаты Cue, сетка битов/тактов, отдельные кривые баса, середины и верхов, мягкий вход средних частот. На подготовленной системе CUE-DETR добавляет предложения точек, Beat This! — сетку, Demucs — оценки вокала. Отчёт указывает, какие модели действительно работали. Ручные точки и защищённые участки сохраняются.

Основной переход — F с общей фазой SYNC: оба трека следуют одной кривой темпа и одной сетке ударов. Бас передаётся за четыре доли, середина — мягко за 8–16 долей, верха меняются на протяжении всего наложения. Сумма парных огибающих каждого диапазона не превышает единицу. Это уменьшает одновременное наложение двух плотных партий. Логика выбора.

При выборе автоматических точек измеряется наличие баса в исходниках около его передачи: новый трек должен иметь низкие частоты к моменту входа, а старый — держать их до этого. Короткие музыкальные сбивки допустимы. Это проверка энергии диапазона, а не распознавание каждой бочки.

По умолчанию выбирается насыщенная центральная часть: цель — 3–4 минуты чистой игры между наложениями, максимум 5 минут. Трек звучит минимум 2 минуты с учётом переходов; короткие исходники оставляют меньше чистой игры. Наложение обычно составляет 32 такта, при большом перепаде темпа — 16; длина автоматически уменьшается, если сетка или исходник не позволяют сохранить полезную часть. Малый недобор двухминутного минимума допускает короткую отмеченную в отчёте петлю из стабильных целых тактов. Большой недобор требует другого исходника или решения.

Опция «DJ Жилин» предпочитает наложения по 32 такта: средние частоты переходят почти на всей длине сведения, бас — примерно за четыре такта, высокие — мягко на всей длине. В переносимом профиле сохранены одобренные нормализованные огибающие native-сведения; личные исходники, точки и история в него не входят. Подключите профиль через zhilin_profile; без этой настройки используется широкий плавный переход. Общий SYNC, согласованные точки и защищённые участки сохраняются. Длительности источника, слышимого присутствия и чистой игры считаются отдельно.

Проверка ударных различает раннюю верхнюю атаку и более позднюю басовую часть бочки. Она входит в обычный SYNC. В режиме DJ Жилин, если анализ подтверждает такое расхождение, сборка автоматически получает свежие оценки ударных из уже выровненных дорожек: весь спектр ударных передаётся вместе с басом, а мелодическое сопровождение сохраняет длинные кривые. Для этого требуется настроенный локальный Demucs; установка одних инструкций навыка не устанавливает модель. Проверки охватывают распознанные атаки и не гарантируют совпадения каждого неизвестного транзиента. Проверка атак.

DJ Жилин — режим того же навыка ai-super-dj, а не отдельный навык. Он выбирается через make --style zhilin или настройку default_style: zhilin на рабочем месте. При такой настройке достаточно обычного запроса собрать сет. В свежей установке без этой настройки выбран обычный F/SYNC. Установка для друга и готовые запросы включают DJ Жилин явно и объясняют подготовку движков.

На настроенном рабочем месте make использует дату в начале имени, исключает уже использованные треки при выборе из папки и доставляет только FLAC и CUE в delivery_root. Отчёты остаются в private_output_root; история обновляется из CUE готовых сетов. Явно заданные треки сохраняются, --allow-repeats разрешает повторы по запросу.

После отдельной передачи ударных проверяется уже сумма дорожек. Для уверенно распознанного небольшого остаточного сдвига допустима ограниченная плавная поправка общего звука с повторной проверкой; остальной звук и длительность сохраняются. Недостаточное покрытие, неоднозначные атаки и превышение допустимой поправки останавливают эту проверку.

Для адаптивной середины учитывайте конкретные мелодии, голоса и поддержку ритма в участке сведения. При совместимости стремитесь к 32 тактам; конкурирующие партии могут потребовать 16 или 8. Различие нотных профилей само по себе не означает конфликт. План DJ Жилин поддерживает отдельные mid_handoff_bars и bass_handoff_beats на переходе; одобренная длина середины сохраняется при отдельной настройке баса. Правила и границы проверки описаны в references/adaptive-mids.md.

Использование

После подготовки движков:

superdj make "track.mp3" --output "../result"
superdj make "../music-folder" --output "../result"
superdj make "first.flac" "second.flac" --keep-order --style zhilin --output "../result"

Все переданные файлы входят в задачу без скрытой случайной выборки. --keep-order сохраняет порядок аргументов; для папки — сортировку имён. Готовый сет, переданный одним файлом, обрабатывается без пересведения. Исходники сохраняются; существующий мастер не перезаписывается.

Финал — проверенный FLAC 24 bit и отчёт. Для одного файла сохраняется частота источника; для сета общая частота равна максимальной среди входных файлов. Начальная цель мастера −14 LUFS, потолок −1.5 dBTP; при конфликте громкости и пиков сохраняется запас по пикам. Преобразование MP3 в FLAC само по себе не возвращает потерянные детали.

Подготовка

Нужны Python 3.12, FFmpeg/FFprobe, для изменения темпа — отдельный Rubber Band CLI. Установка навыка добавляет инструкции, а движки, модели и приватную конфигурацию нужно подготовить отдельно.

python -m pip install -e ".[test,repair]"
superdj setup --components ../superdj-work/checkouts

Полный нейросетевой вариант и приватная конфигурация для make описаны в настройке движков. Модели и checkouts хранятся вне репозитория. Установите совместимый PyTorch и загрузите модели перед обработкой. Облегчённый анализ доступен без нейросетей, но оценочные биты не считаются проверенными началами тактов.

Для Codex попросите $skill-installer установить навык ai-super-dj из корня этого репозитория, затем вызывайте $ai-super-dj. SKILL.md — инструкции агенту. Копируемый запрос подготовки создаёт собственные пути и историю на новом компьютере. Установка навыка не устанавливает движки автоматически.

Подробный процесс

Команды analyze, plan, render, run доступны для поэтапной работы; параметры показывает superdj --help. fixed сохраняет порядок, auto оценивает последовательность по гармонии, темпу и энергии. До 17 треков оптимизатор точно решает свою функцию стоимости, далее использует beam search с улучшениями. Это собственный алгоритм, а не реализация DJ.Studio Harmonize AI.

Автоматический порядок предпочитает более лёгкое и медленное начало, более быстрый и насыщенный финал. Для длинного сета развитие wave допускает подъём, спад и новый подъём к сильному финалу. Интенсивность и доля баса оцениваются отдельно от громкости файла; это измерительные приближения, а не оценка настроения человеком. План показывает цели темпа, интенсивности и баса по позициям. Фиксированный порядок и согласованные крайние треки сохраняются.

Плейлист — JSON-объект tracks с элементами { "id": "a", "path": "../music/a.flac" }. Защищённые участки задаются в protected_ranges парами исходных секунд. Приватный --transition-overrides задаёт соседние пары, cue_locks, длительность или технику. Рабочий процесс описывает проверки, движки — нейросети и исключения длительности. Для существующих монтажей есть расширенный адаптер.

Внешние компоненты и лицензии: THIRD_PARTY.md. audamcp выполняет выборочные исправления/EQ, Bitwize — финальный мастер, Rubber Band — изменение темпа, FFmpeg — кодеки и измерения. Только выполненные стадии попадают в цепочку обработки.

Проверка

Для эксперимента с логикой Harmonize добавлен отдельный подбор порядка BPM + Key и сравнение с порядком из DJ.Studio:

superdj harmonize --records ../work/records.json --work ../experiment --seed 42
superdj harmonize-compare --records ../experiment/analysis_snapshot.json --our-order ../experiment/harmonize_plan.json --other-order ../dj-export.m3u8 --work ../comparison

Для сравнения полного порядка с DJ.Studio используйте переносимый --preset djstudio-route-v2: основной маршрут Density учитывает плотность оставшегося пула, а отдельный маршрут Paired служит защитой. Оба получают одни исходники и явные ограничения. Защитный выбирается только при строго меньшем числе стыков вне нашей гармонической таблицы; при равенстве остаётся основной. Совпадения с эталоном и оценки разных моделей не участвуют в выборе. Обе последовательности и причина выбора сохраняются. Если подходящего полного пути нет, компромиссы остаются явно обозначенными. djstudio-route-v1 сохранён для повторения прежнего поведения.

Для следующего трека используйте harmonize-rank --preset djstudio-next-v1 с фактическим сыгранным префиксом. Совпадение соседей, цепочек из трёх/четырёх треков и локального Top3 показывает разные компромиссы. Единственный победитель по всем критериям не установлен. В проверках встречаются прежние источники; независимая проверка на совершенно новой музыке не заявляется. Профили содержат опубликованные числовые параметры, без личных треков и путей. Команды и условия.

Обычный музыкальный планировщик make, его развитие по интенсивности и режим сведения DJ Жилин выбираются отдельно. Эти профили порядка не включают DJ Жилин автоматически и не оценивают качество звучания.

Финальная проверка от 13 октября 2026 добавляет пять экспортов одного пула из 431 трека. Первые четыре проверены на заранее зафиксированных профилях и бюджетах, включая 32 свободных маршрута; новая защита маршрута оценена отдельно после этих результатов. Позднее полученный пятый бэкап проверен отдельно после фиксации защитного правила. Он также даёт одну пару повторных экспортов Mood/BPM 4; этого недостаточно для вывода о распределении случайного выбора. Предыдущая проверка содержит девять экспортов пула из 403 треков и поправку на ширину списка предложений. Старые показатели и регрессии сохраняются отдельно.

Дополнение: шестой бэкап, повтор Fuzzy/BPM 6 проверено после публикации неизменного алгоритма 0.17.0. Совокупный Top3 Next-v1 — 1619/2562 (63,19%). Повтор показал одинаковый контекст с разными следующими треками; один выбор DJ.Studio исключён нашей таблицей исходных тональностей, поэтому одним случайным индексом внутри нашего разрешённого списка это расхождение не объясняется. Общий корпус — 63 экспорта, 36 с известными условиями; новых источников и подгонки нет.

Результат — плейлисты M3U8 и таблица порядка. Поиск минимизирует неподходящие связи тональностей, затем стоимость BPM/key; Fuzzy дополнительно предпочитает менее рискованные связи. У Mood своя направленная таблица и дополнительные выразительные переходы. Поиск рассматривает полный путь, сохраняя все треки и фиксации. Для наборов до 100 блоков доступен поиск с проверкой оптимальности; ограниченный по времени результат обозначается отдельно. Прежний критерий сохранён для повторения экспериментов. Сравнение M3U/M3U8, CUE, DJS и JSON отделяет ошибки анализа от выбора порядка. Числовые тональности DJS читаются по проверенной карте с явным источником.

harmonize-learn --learner modes учится на реальных следующих треках с учётом оставшегося пула. Проверка отделяет целые группы исходников, включая все повторы порядка и режимов. Основной список — Top‑3 при четырёх и более оставшихся треках; буквальный список, равные оценки и последние маленькие пулы учитываются отдельно. Top‑7 сохранён для сравнения прежних экспериментов. С обученным профилем поиск держит до 32 альтернативных путей до конца сета, пересчитывая оставшийся пул в каждой ветви и нормируя оценки перед сложением. Исходный последовательный маршрут с проверкой малого остатка остаётся защитным кандидатом: новый путь принимается, если после одинаковой пересборки не ухудшает число несовместимых стыков. Исходные решения сохраняются отдельно от окончательного порядка. Сравнение считает также точные цепочки из трёх и четырёх треков; пропуски и обратный порядок не засчитываются. Это ограниченный поиск, а не доказательство глобального оптимума. В эксперименте BPM + Key энергия и вокал не участвуют; развитие звучания относится к обычному планировщику, переходы используют F/SYNC. Это собственная реализация, а не раскрытый код DJ.Studio. Правила и проверка.

Обучение Fuzzy/Mood подбирает модель по фактическому списку Top3 с гармоническим отсевом. Среди кандидатов — зависимость стоимости смены темпа от типа тонального перехода, положение BPM среди оставшихся треков, плотность соседних темпов и характеристики допустимых продолжений. Неподходящие демонстрации остаются в знаменателе проверки, даже при обучении только на допустимых вариантах. Эти возможности выбираются на отдельных группах исходников; готовый профиль может сохранить более простую модель. Старые профили продолжают работать. Если новый профиль улучшает Top3, но ухудшает требуемое сходство полного маршрута, рабочий профиль сохраняется, а новый предлагается как эксперимент для следующего теста. Допустимость по нашей таблице и предупреждение Solve в DJ.Studio — разные проверки; несохранённый приоритет BPM/тональности нельзя угадывать по названию режима.

Для примеров с явно указанным приоритетом добавлено экспериментальное обучение harmonize-learn --learner priority. Оно различает Mood/Fuzzy, Key/BPM и допуск темпа при выборе следующего трека и расчёте продолжения маршрута. Указание пользователя важнее имени бэкапа; неизвестные настройки остаются неизвестными. Обучение с заранее заданными параметрами на одном наборе допускается, но его результат обозначается как проверка на обучающих данных. Для нового профиля --priority 0 --bpm-tolerance 6 передаёт условие BPM 6; --priority 1 — Key. Старые профили и обычное сведение продолжают работать прежним способом. Исходные примеры, новые обучающие запуски, частные профили и отчёты хранятся вне публичного репозитория. В комплект входят только явно подготовленные переносимые параметры, анонимные условия обучения и обязательные оговорки проверки.

Тесты

python -m pytest -q

Настоящий рендер использует FFmpeg, FFprobe и Rubber Band в PATH или переменные SUPERDJ_FFMPEG, SUPERDJ_RUBBERBAND, SUPERDJ_TEST_FFMPEG, SUPERDJ_TEST_FFPROBE. Отсутствующие инструменты дают явные пропуски. Тесты создают сигналы; пользовательская музыка, плейлисты, веса внешних нейромоделей, личные пути и результаты прослушивания не публикуются. Лицензия собственного кода — MIT.