b4light / R&D

b4:Nap

Автоматизация светового шоу

Аудиоанализ · Компьютерное зрение · OSC · MA2 · Resolume

«Ленивый. Глючный. Свободный.»
Проблема

Светооператору нужно
слишком много рук

👀

Следить за артистом

FollowSpot вручную — надо вести прожектор за движущимся человеком

🎵

Синхронизация с музыкой

Строб, цвет, эффекты — всё должно биться в такт, а BPM меняется

🔄

Переключение сцен

Десятки сцен за выступление, каждая со своим светом

🤖

Неизвестные треки

Диджей вставил флешку — не знаешь, что играет, не можешь подготовиться

Решение

Всё, что умеет световик,
но не устаёт

👁️

Видит

Камера → распознавание лиц, поз, движения. FollowSpot автоматически.

Vision Engine
🎧

Слышит

BPM, kick, snare, спектр в реальном времени. Свет бьётся в такт.

Audio Engine
🧠

Думает

Нейросеть решает: кого подсветить, когда сменить сцену, какой эффект.

Decision Engine
┌────────────┐ ┌────────────┐ Audio │ │ Vision │ BPM · Kick │ │ Face · Pose └─────┬──────┘ └─────┬──────┘ └───────┬───────┘ ┌────────────────┐ │ Decision │ │ Engine │ └───────┬────────┘ ┌────────────────┐ │ OSC → MA2 │ │ OSC → Res │ │ MIDI → LED │ └────────────────┘
Архитектура

Как это собрано

b4:Nap architecture
Движок 1/3

01 Audio Engine

Анализ музыки в реальном времени. Всё локально, без интернета.

ПараметрЗадержкаНазначение
BPM~2-4 тактаСинхронизация света
Kick (50-100 Hz)<10 msБас-импульсы, стробы
Snare (150-250 Hz)<10 msАкценты, вспышки
Hi-hat (5k-10k Hz)<10 msМелкие эффекты
RMS Energy<5 msОбщая яркость
Onset (дропы)<20 msПереключение сцен

Распознавание треков

При интернете — AudD/ACRCloud. Без него — анализ BPM и спектра, достаточно для синхронного света.

BPM без базы
Движок 2/3

02 Vision Engine

Камера → OpenCV + MediaPipe. Полный офлайн.

🙂

Face Detection

Находит лица в кадре. Координаты → FollowSpot.

MediaPipe
🧍

Pose Detection

Плечи, руки, корпус. Точное наведение луча.

MediaPipe
🏃

Motion Tracking

Куда движется артист — свет следует за ним.

Optical Flow

Пример выхода

{
  "faces": [{ "x": 0.45, "y": 0.32, "confidence": 0.95 }],
  "pose": { "shoulder_x": 0.44, "shoulder_y": 0.28 },
  "motion": { "intensity": 0.7, "direction": "left" },
  "crowd": { "density": 0.3 }
}
Движок 3/3

03 Decision Engine

Ядро b4:Nap. Аудио + Видео → OSC.

Follow Beat

Свет строго по BPM. Kick → бас-вспышка. Onset → смена сцены.

Beat Sync

Follow Artist

Лицо/тело в кадре → прожектор за ним. Руки оператора свободны.

Auto Follow

React to Crowd

Активность толпы → ярче/темнее, свет в активную зону.

Adaptive

Glitch Mode

Намеренные глюки: случайные цвета, сбитый ритм, неожиданные комбинации.

✨ Фича
if (audio.kick > 0.8 && vision.faces[0].x < 0.3) { osc.send('/gma/cmd/assign Left_Beam At Effect "Flash"'); osc.send('/gma/cmd/assign LED_Strip At Color "Red"'); }
Интеграция

OSC — единый язык

Все устройства говорят на одном протоколе

ПолучательПорт
MA2 / MA onPC8000
Resolume Arena7000
TouchDesigner10000

Команды MA2

/gma/cmd/assign Led_Strip At 75
/gma/cmd/go Seq 3 Cue 2
/gma/cmd/assign Beams At Color "Blue"
/gma/cmd/assign Effect 1 / speed 128
/gma/cmd/assign Follow At Pan 45 Tilt 30

Команды Resolume

/composition/layers/1/video/position/play
/composition/layers/1/clips/2/connect
/composition/columns/3/connect
/composition/tempo/bpm
Управление

MIDI Engine

Управление светом через MIDI — для LED-контроллеров, старых пультов и секвенсоров

ФункцияMIDIНазначение
Kick FlashNote On C4Бас-импульс света
Snare AccentNote On D4Акцент по snare
ЯркостьNote On + velocityГромкость → яркость
ЦветCC 20+nВыбор цвета
Смена сценыNote On G4Переключение сцены
Control ChangeCC 0-127Любые параметры

Транспорт

Сырые MIDI-байты по UDP → loopMIDI на целевой машине (Windows).

UDP :8001

Конфигурация

midi:
  host: 127.0.0.1
  port: 8001
  channel: 1
  base_note: 60
Режимы

5 режимов работы

🌀

Manual

Только анализ. Команды не шлются.

Репетиции
🎵

Beat Sync

Синхронизация по BPM. Без камеры.

DJ-сет
🤖

Auto

Полная автоматизация. Аудио + видео.

Live

Glitch

Случайные комбинации. Глюки как фича.

Эксперимент
😴

Sleep

Минимум активности. Ждёт.

Пауза
🔄

Override

Любой фейдер на MA2 перекрывает OSC.

Safety First
Безопасность

Надёжность прежде всего

🛡️

Fail-safe

При потере связи MA2 в последнем состоянии. Никаких чёрных экранов.

Manual Override

Любой фейдер на MA2 перекрывает OSC. Оператор всегда главный.

🔪

Kill Switch

Клавиша на MA2 отключает приём OSC. Мгновенно.

Latency Budget

От входа аудио до OSC-команды ≤ 50 мс. Ниже порога восприятия.

b4:Napассистент, а не замена
План

Дорожная карта

ФазаЧто делаемСтатус
P0Анализ BPM + OSC → MA2⏳ Запланировано
P1Камера + распознавание лиц⏳ Запланировано
P2Web UI для мониторинга⏳ Запланировано
P3FollowSpot по артисту⏳ Запланировано
P4Интеграция Resolume💡 Идея
P4aMIDI Engine✅ Добавлено
P5Глюк-режим💡 Идея
P6Show-файлы MA2💡 Идея
P7Распознавание треков (AudD)💡 Идея
Начинаем с P0: BPM → свет в такт
b4light

b4:Nap

Ленивый. Глючный. Свободный.

Когда свет настраивается сам —
у оператора появляется время на кофе.

b4:Nap · v0.3 · 2026