Ни одного сэмпла. Ни одного плагина. Ни одной 3D-модели. Звук синтезируется формулами, картинка вычисляется на видеокарте. И то и другое растёт из одной сетки времени — поэтому они не могут разойтись.
Это не иллюстрация. Ровно эти строки лежат в core.py и порождают и звук, и видео.
До минор, прогрессия i–VII–VI–VII, 120 ударов в минуту. Вертикальный кадр 1080×1920 — под ленту, а не под монитор.
Полный цикл на домашней RTX 3060 занимает 128 секунд: 76 секунд рендер, 16 проверка, остальное — публикация.
Каждый запуск даёт новый трек. Тональность, гармония, темп, рисунок арпеджио и цвет выбираются из числа-семени. Один и тот же номер всегда воспроизводит один и тот же трек.
Всё началось с чужого видео — про Эрика Прайдза. Ролик изрядно преувеличивал: нет, Прайдз не изобрёл мелодик-техно, этот жанр вырастили итальянцы Tale of Us и их лейбл Afterlife.
Но одно было правдой. Как автор аудиовизуальных шоу Прайдз действительно идёт впереди всех. С 2011 года он делает серию EPIC — Eric Prydz In Concert. В 2018-м появился HOLO, в 2019-м — Holosphere: прозрачная сфера восьми метров, 2.4 миллиона светодиодов, пять тонн, диджей внутри. Отыграла ровно один раз — между уик-эндами Tomorrowland сцена под ней обрушилась.
А в 2024-м на Coachella он вышел b2b с Anyma — это Маттео Миллери, половина Tale of Us, сооснователь Afterlife, тот самый, что потом занял Sphere в Лас-Вегасе.
Путь туда лежит через миллионы долларов оборудования. Вопрос был простой: а есть ли другой путь?
Обычно визуал анализирует звук: слушает громкость, ловит биты, реагирует. Получается «почти попадает».
Здесь наоборот. Есть одна сетка времени — таблица событий в долях такта. Из неё выводятся и сэмплы, и кадры. Визуал никогда не слышит музыку. Попадание идеальное не потому, что подогнали, а потому что иначе быть не может.
# 120 BPM выбран не случайно: при 30 кадрах в секунду # такт занимает ровно 60 кадров SEC_PER_BAR = 2.0 assert abs(DUR * FPS - N_FRAMES) < 1e-6 # иначе шов на стыке
Проверка: корреляция между громкостью звука и яркостью кадра по тактам — 0.71. При том, что между ними нет ни одной строчки связи. Обе кривые независимо выведены из одной таблицы.
Аранжировка на 96 тактов генерируется из плана секций. Бочка — синусоида с падением частоты со 155 до 44 герц. Бас в три слоя: чистый саб, пила с октавными скачками, «риз» из двух расстроенных пил. Пад — семь расстроенных голосов на каждую ноту аккорда. Реверберация — свёртка с затухающим шумом.
В видеокарту не загружено ни одной вершины. Каждый пиксель сам идёт лучом сквозь поле расстояний и ищет поверхность. Форма перетекает между двумя минимальными поверхностями: плотным гироидом в дропах и открытым Schwarz-P в брейкдауне. Мягкие тени, ambient occlusion, свечение, хроматическая аберрация.
Выбрать семя, отрендерить, проверить, опубликовать, записать в реестр. По расписанию, без человека.
Готовый файл декодируется обратно и измеряется. Не прошло по яркости, динамике или пиковому уровню — в карантин, а не в публикацию.
GATE = {
# картинка
"max_black_frames": 3, "min_mean_luma": 8.0,
"max_blown_pct": 0.05,
# звук
"min_audio_rms": 0.03, "max_audio_peak": 0.99,
"min_dynamic_range_db": 6.0,
}
Принцип простой: проверять только по измеримым сигналам. Не по тому, что программа сама о себе сообщила.
Я не программист звука и не 3D-художник. Инженер-строитель, который последние годы занимается инфраструктурой и автоматизацией.
Весь этот код написан в диалоге с искусственным интеллектом. Я объяснял, что хочу услышать и увидеть, спорил, проверял цифрами и переделывал.
И вот что зацепило по-настоящему. Это не «нейросеть сгенерировала видео» — здесь ни один пиксель не сгенерирован нейросетью.
Здесь ИИ выступил инженером, который знает цифровую обработку сигналов и шейдеры. А я — заказчиком, который знает, чего хочет, и умеет проверить результат.