Live
Live performance
The Live tab turns Grafer into a non-linear, event-driven conductor. Cells are wired into a rhizome — a graph of weighted edges — and during performance the conductor walks the rhizome cell by cell, picking the next cell by weighted random or by external OSC trigger. Live performers see the score swap on their tablets as cells advance. External hardware (sensors, foot pedals, conductor apps, robotics) can drive transitions via OSC over WiFi or Ethernet.
The Rhizome
Open the Live page (V tab) and pick cells from the score panel on the left to put them on the rhizome canvas. Drag between cells to wire weighted edges — the percent label on each edge shows its share of the outgoing decision. Double-click a cell to set it as the conductor's starting point. Loop forever in the transport bar lets the conductor restart from the start cell when it hits a dead-end — useful for indeterminate-duration pieces.
Edge weights are relative: weights of 3 vs 1 vs 1 produce a 60% / 20% / 20% split. With one outgoing edge, any positive weight is 100% — the percent only matters when the cell has alternatives.
Conductor Controls & Recording
The transport bar has Play, Pause, Skip, and Stop. Pause is a soft pause — the current cell finishes naturally and the conductor holds at the next boundary until you resume. Skip is immediate: kills the current cell's MIDI and advances now. MIDI output is optional — the conductor still runs silently if you only need to drive performers / hardware.
Every cell entry is recorded with its enter / exit timestamps and the decision that led to it (weighted random, OSC mapping, edge trigger, jump, skip, restart). After Stop, click Export JSON in the bottom strip to download the full performance trace.
Live Performer View
Open a Live performance session from the Live page — you'll get a six-character code that performers type into their tablets at /perform (or follow the share-link). Each performer claims a voice by name — "Cello", "Violin 1", etc. — and that claim survives every cell change. As the conductor advances, each performer's score swaps to whichever cell is currently playing, with their voice highlighted. A "LIVE · Now playing <Cell Name>" strip flashes on cell change so the performer notices the transition without staring at the bar header.
When a cell doesn't include a performer's voice, they see a tacet screen until the next cell that reintroduces it.
OSC Input — Driving the Conductor
Click Listen on the OSC input panel — the server allocates a UDP port (default 7400, multi-tenant range up to 7463) and prints the host:port for your hardware to target. Each user gets their own port; ports persist for ~5 minutes after disconnect so a refresh doesn't re-aim your hardware.
Three layers of triggers, in priority order at each cell boundary:
| Layer | What it does |
|---|---|
| Score-level mappings | Address → action: next / skip / pause / resume / stop / go-to-cell. Highest priority — meant as transport overrides. |
| Edge triggerAddress | Per-edge OSC address that overrides weighted random for that edge specifically. |
| Weighted random | Default fallback — picks the next cell by edge weight as usual. |
The Recent packets monitor in the panel shows decoded incoming OSC live so you can verify your hardware is firing.
In-Cell Reactive Nodes
Score-level OSC mappings fire at cell boundaries. For instant mid-cell reactions — layering a chord on top of a drone, triggering a percussion hit on a sensor — use the LIVE category nodes inside the cell graph itself.
| Node | Role |
|---|---|
| OSC In | Listens for an OSC address while the cell is playing. Outputs a trigger port that fires on every matching packet. |
| Chord Out | When triggered, plays a chord (pitches + velocity + duration + channel) on a MIDI channel of your choice. The pitches are evaluated once at cell start — wire from any pitch source (pitch.static, pc.tone-row, spectral.harmonics, etc.) for richer chord vocabularies. |
Use a different MIDI channel from the cell's main voices to avoid stepping on currently sounding notes. Reactive paths layer on top of the cell's regular MIDI playback — the schedule isn't disturbed.
Hardware Integration (ESP32 / Arduino)
Wiring an ESP32 or Arduino to send / receive OSC from Grafer is a few lines of code with the CNMAT OSC library. The Hardware integration guide covers network setup, library install, and includes four ready-to-run example sketches:
| Sketch | Purpose |
|---|---|
| esp32_send_osc | Single-button pedal — short press fires /grafer/next, long press fires /grafer/skip. |
| esp32_receive_osc | LED + motor reactions to incoming OSC from score.osc-send nodes. |
| esp32_bidirectional | Three buttons + a potentiometer + two outputs — the realistic foot-controller skeleton. |
| arduino_uno_ethernet | Wired alternative for when WiFi is too noisy. |
The same panel that allocates the OSC port has a Hardware setup ↗ link that opens the guide directly.
Try it on your own material.
Create a free account14 days of Composer Pro, no card needed. Every account opens with the Examples folder.