Automation and Performance Capture
Motif’s automation system lets creators add expressive, time-varying control to their adaptive scores — and capture live performances of those controls.
Automation Lanes
Section titled “Automation Lanes”An automation lane is a list of timed value points for a specific target parameter. Create lanes with createLane(id, name, param, target) where param is the automatable parameter (volume, pan, filterCutoff, reverbSend, delaySend, intensity) and target identifies what the lane is attached to (a clip layer, scene layer, or cue section). Use addPoint(lane, point) to add keyframes and the interpolation engine to get values at any time.
Each point has a timeMs offset, a normalized value (0—1), and an optional curve type (linear, exponential, step, smooth) controlling interpolation to the next point.
Macros
Section titled “Macros”Macros are high-level parameters (intensity, tension, brightness, space) that drive multiple automation targets at once. Game state or performer input changes macro values, which cascade to mapped parameters via evaluateMacros(state, mappings, targetId?). Create mappings with createMacroMapping(id, macro, param, weight, opts?) where weight (0—1) controls how much a macro movement affects the target parameter. Mappings can be inverted so that macro-up drives param-down.
Section Envelopes
Section titled “Section Envelopes”Envelopes shape dynamics at the entry or exit of a cue section. Six shapes are available: fade-in, fade-out, swell (quadratic curve), duck (dip and recover), filter-rise (smooth opening), and filter-fall (smooth closing). Each envelope has a duration, a depth (0—1), and a position (entry or exit). Create them with createEnvelope(id, targetId, shape, durationMs, position, depth?) and evaluate with evaluateEnvelope(envelope, offsetMs). They add structural dynamics without manually placing automation points.
Capture
Section titled “Capture”Live capture records automation values in real time:
- Create a capture:
createCapture(id, name, source) - Record points:
recordPoint(capture, timeMs, value) - Finalize:
finalizeCapture(capture, laneId?)— sorts points by time and optionally links to a lane - Apply:
applyCaptureToLaneormergeCaptureIntoLane - Optimize:
thinCapture(capture, tolerance)reduces point density
The Performance-to-Cue Pipeline
Section titled “The Performance-to-Cue Pipeline”- Set up automation lanes for key parameters
- Configure macros for high-level game-state control
- Perform live — adjust macros, trigger scenes, capture the result
- Apply captures to lanes — the performance becomes editable automation
- Add section envelopes — shape intro/outro dynamics
- Snapshot in Library — preserve this version before further editing
- Branch if needed — try a different approach without losing the original
This pipeline transforms live musical gestures into structured, deterministic automation data that exports cleanly to the runtime pack.