Node Reference
Recipes
Common pattern recipes showing how nodes compose into lighting effects.
Recipes
The following examples show how nodes are typically composed to create lighting effects. Each recipe includes a connection diagram and an explanation of the data flow.
Basic Beat Pulse
A beat envelope drives a gradient that fades between a color and black on each beat.
Data Flow
beat_clockoutputs the BeatGrid for the current context.beat_envelopereceives the grid and generates a scalar pulse (0 to 1) on each beat, shaped by the ADSR parameters.colorprovides a constant red RGBA signal, connected to the gradient'send_colorinput.gradientinterpolates between black (at value 0) and red (at value 1) using the beat envelope as the interpolation factor.selectresolves a tag expression to choose which fixtures are targeted.apply_colorwrites the color signal to the selected fixtures.
Key Parameters to Tweak
beat_envelope.subdivision-- change from 1.0 (quarter notes) to 0.5 (eighth notes) for faster pulses.beat_envelope.attack_curve-- set to -1.0 for snappy flashes, +1.0 for slow swells.gradient.end_color-- set to#000000for fade-to-black, or another color for a color-to-color transition.
Spatial Chase
A traveling wave of light moves across fixtures arranged in a line.
Data Flow
selectchooses the target fixtures (e.g., a row of wash lights).get_attribute(normalized_index)assigns each fixture a value from 0.0 to 1.0 based on its position in the selection order.beat_clockfeedsramp, which produces a monotonically increasing beat count (0, 1, 2, 3...).math(subtract)subtracts the ramp from each fixture's index. This creates a value that decreases over time per fixture -- effectively a traveling wave.modulo(1.0)wraps the result into the [0, 1) range, making the chase repeat every beat.falloffshapes the transition. A narrow width creates a tight moving dot; a wide width creates a broad sweep.gradientmaps the shaped scalar to a color.apply_colorwrites the result to the selected fixtures.
Key Parameters to Tweak
falloff.width-- controls how many fixtures are lit simultaneously. Lower = tighter chase.falloff.curve-- -1.0 for sharp edges, +1.0 for smooth fades.get_attribute.attribute-- tryangular_positionfor circular chases,rel_xfor left-to-right sweeps.
Music-Reactive Strobe
Isolates the kick drum from the audio and triggers full brightness on strong hits.
Data Flow
audio_inputprovides the full audio mix.stem_splitterseparates it into drums, bass, vocals, and other. Thedrums_outport is used.frequency_amplitudeanalyzes the drums stem in the 20-200 Hz range (kick drum frequencies), outputting an amplitude envelope.threshold(0.8)converts the continuous amplitude into a binary trigger: 1.0 when the kick is strong, 0.0 otherwise.selecttargets the desired fixtures.apply_dimmersets the dimmer to the binary signal -- full brightness on kick hits, off otherwise.
Variations
- Use
[2000, 8000]for hi-hat reactive effects. - Replace
thresholdwithfallofffor smoother amplitude-following behavior. - Connect to
apply_strobeinstead ofapply_dimmerto trigger strobe on kick hits.
Circular Chase
A rotating point of light sweeps around fixtures arranged in a circle.
Data Flow
select(circular)targets fixtures tagged ascircular(e.g., a ring truss).get_attribute(angular_position)uses PCA + RANSAC circle fitting to assign each fixture an angular position from 0.0 to 1.0 around the fitted circle. This works even for 3D arrangements.beat_clockfeedsramp, producing a monotonically increasing beat count.math(subtract)subtracts the ramp from each fixture's angular position, creating a rotating wave.modulo(1.0)wraps the result so the chase repeats every beat.falloff(width=0.3)shapes the beam width. At 0.3, roughly 30% of the circle is illuminated at any moment.apply_dimmerwrites the intensity to the selected fixtures.
Key Parameters to Tweak
falloff.width-- controls the arc length of the lit section. 0.1 = narrow beam, 0.5 = half the circle.falloff.curve-- -1.0 for hard edges, +1.0 for soft fading.- Use
angular_indexinstead ofangular_positionif the circle fit is unreliable (angular_index uses equal spacing by selection order).
Harmonic Color Wash
Colors follow the song's chord progression, creating a wash that shifts hue with the harmony.
Data Flow
audio_inputprovides the audio for the current pattern context.harmony_analysisextracts a 12-channel chroma distribution from pre-computed chord analysis. Each channel represents a pitch class (C through B), and the values represent relative strength at each time step.chroma_palettemaps the chroma distribution to an RGB color using a fixed pitch-to-color palette (C=Red, D=Orange, E=Yellow, G=Cyan, A=Blue, etc.). The output is a weighted blend of all 12 colors.selecttargets the desired fixtures.apply_colorwrites the harmonically-derived color to the selected fixtures.
Variations
- Add
spectral_shiftafterchroma_paletteto apply additional hue rotation based on the dominant pitch. - Connect
harmonic_tensiontoapply_dimmerto make the lighting intensity increase during dissonant passages. - Use
gradientinstead ofchroma_palettefor a simpler two-color mapping driven by tension.