Whether busking lighting for a live rock band where the drummer naturally ebbs and flows, triggering cues to a club DJ mixing tracks at fluctuating tempos, or executing precision theater cues against a fixed backing track, rhythmic cohesion is what separates amateur blinking lights from a professional light show. Unilighter features a unified, project-wide master clock architecture that keeps keyframe curves, step chases, procedural oscillators, and audio triggers tightly locked in musical sync.

![Unilighter Master Tempo Header - Real-time BPM display, live TAP tempo button, x2 / /2 tempo multipliers, and downbeat phase reset](https://unilighter.cc/info/docs/time-sync/header_bpm_tap_d25f32f5.png)

---

## 🎛️ Master Tempo Controls in the Header

Positioned persistently in the top navigation bar, the tempo block provides instant, zero-latency access to the show timebase:

### 1. Numeric BPM Display
Displays the current project tempo (e.g. `120 BPM`). Clicking the number opens a direct numerical input to type an exact tempo value (e.g. `128.5`).

### 2. TAP Tempo Button
The primary tool for live show busking. Tapping the button (or hitting a mapped keyboard shortcut / MIDI pad) continuously computes a rolling moving average of recent tap intervals. Within 3 to 4 taps, Unilighter locks smoothly onto the live tempo.

### 3. `x2` and `/2` Quick Multipliers
Instant half-time and double-time buttons. When a DJ transitions from a 70 BPM half-time hip-hop groove into a 140 BPM dubstep drop, clicking `x2` doubles the show speed instantly while keeping the existing downbeat phase intact.

### 4. Beat Reset Button (`⟲`)
Resynchronizes the master downbeat to the current exact millisecond without changing the tempo value. If a live drummer drops a beat or comes in off-phrase after a drum fill, a single hit on Beat Reset pulls all running animations back into step instantly.

---

## ⏱️ How Engine Subsystems Synchronize

### 1. Keyframe Animation Timelines
- **Beats vs. Seconds Mode**: Timelines support two distinct time modes: absolute Seconds or musical **Beats**.
- **Proportional Scaling**: In Beat mode, keyframes are placed on musical bars and subdivisions (`1.0`, `1.25`, `2.0`). When the master BPM changes, the timeline expands or contracts proportionally—your lighting cues remain locked to the music without manual re-keyframing.
- **Track Multipliers**: Each keyframe animation includes an independent multiplier from `/8` through `8x`, allowing rapid accents to run far above the project tempo while slow ambient color washes stretch across several beats.
- **Phase-Preserving Pause**: Pausing an animation freezes its exact beat offset, ensuring that resuming playback retains musical phase.

### 2. Step Chases
Each step's duration is defined in musical beat fractions (`1/1`, `1/2`, `1/4`, `1/8`, `1/16`). A 4-step chase set to `1/4` executes a complete cycle every musical bar.

### 3. Node Graph Oscillators & Wave Generators
In [Oscillator Nodes](https://unilighter.cc/info/for-ai/docs/node-graphs/oscillator.md), toggling **BPM Sync** binds wave oscillation frequencies directly to master tempo subdivisions, producing sweeping moving head ballyhoos and dimmer breathing effects that breathe in time with the song.

### 4. Autonomous Tempo Tracking with `BpmNode`
With a [BpmNode](https://unilighter.cc/info/for-ai/docs/node-graphs/bpm.md) patched to live audio FFT input, enabling **Control tempo** allows the console to track tempo changes completely automatically using spectral flux analysis. Unilighter's `changeBpmPreservePhase` engine ensures that live tempo drifts never cause running chases to glitch or jump backwards.

---

## 🎮 Tactile Hardware Mapping

Physical controllers can be bound to the master tempo system using [Assign Mode](https://unilighter.cc/info/for-ai/docs/bindings.md):

- **Tactile TAP Button**: Map a physical rubber drum pad or momentary button to **TAP** and another to **Beat Reset**.
- **Rotary BPM Encoder**: Assign an endless rotary dial to smoothly nudge or sweep BPM live during performance.

> [!NOTE]
> Unilighter's MIDI synchronization is strictly inbound from hardware controllers to the console.

Read more in the **[Animations Reference Manual](https://unilighter.cc/info/for-ai/docs/animations.md)** and the **[Assign Mode & Controller Mapping Guide](https://unilighter.cc/info/for-ai/docs/bindings.md)**.

