LUMA
Node Reference

Signal Nodes

Mathematical operations, waveform generation, and signal timing/shape manipulation nodes.

Signal Nodes

Signal processing nodes perform mathematical operations, generate waveforms, and manipulate signal timing and shape.


Math

FieldValue
Type IDmath
CategorySignal Processing
DescriptionElement-wise binary math operations with broadcasting.

Inputs

PortTypeRequired
aSignalYes
bSignalYes

Outputs

PortType
outSignal

Parameters

NameTypeDefaultDescription
operationstring--One of the operations listed below

Available Operations

OperationFormulaDescription
adda + bAddition
subtracta - bSubtraction
multiplya * bMultiplication
dividea / bDivision
maxmax(a, b)Element-wise maximum
minmin(a, b)Element-wise minimum
abs_diff|a - b|Absolute difference
abs|a|Absolute value (only uses input a)
moduloa % bModulo
circular_distancemin(|a-b|, 1-|a-b|)Shortest distance on a [0,1] ring

Behavior

  • Full broadcasting: output shape is max(a, b) per dimension (N, T, C).
  • circular_distance is useful for angular/cyclic patterns where 0.0 and 1.0 are adjacent.

Round

FieldValue
Type IDround
CategorySignal Processing
DescriptionRounding operations.

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal

Parameters

NameTypeDefaultDescription
operationstring--One of: floor, ceil, round

Behavior

  • floor: rounds toward negative infinity.
  • ceil: rounds toward positive infinity.
  • round: rounds to nearest integer (half rounds away from zero).

Threshold

FieldValue
Type IDthreshold
CategorySignal Processing
DescriptionBinary threshold (step function).

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal

Parameters

NameTypeDefaultDescription
thresholdfloat0.5Threshold value

Behavior

  • Output is 1.0 if input >= threshold, else 0.0.
  • Useful for converting continuous envelopes into binary triggers.

Normalize

FieldValue
Type IDnormalize
CategorySignal Processing
DescriptionMin-max normalization to [0, 1].

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal

Parameters

None.

Behavior

  • Formula: (value - min) / (max - min).
  • If all values are equal (max == min), outputs 0.0 to avoid division by zero.
  • Min and max are computed across all dimensions of the input signal.

Falloff

FieldValue
Type IDfalloff
CategorySignal Processing
DescriptionNon-linear attenuation with adjustable width and curve shape.

Inputs

PortTypeRequired
inSignal (values 0-1)Yes

Outputs

PortType
outSignal

Parameters

NameTypeDefaultDescription
widthfloat1.0Controls spread of the falloff
curvefloat0.0Shape: -1=snappy/sharp, 0=linear, +1=gentle/swell

Behavior

  • Processing pipeline: clamp to [0, 1], scale by width, apply shape curve (exponential).
  • Essential for creating sharp vs. soft spatial transitions in chase patterns.
  • A narrow width with a snappy curve creates a tight "spotlight" effect; wide width with a gentle curve creates a broad wash.

Invert

FieldValue
Type IDinvert
CategorySignal Processing
DescriptionReflects values around the midpoint of the observed range.

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal

Parameters

None.

Behavior

  • Formula: reflected = 2 * midpoint - value, where midpoint is (min + max) / 2.
  • Result is clamped to [min, max] of the input range.
  • For a signal in the 0.0-1.0 range, this is equivalent to 1.0 - value.

Scalar

FieldValue
Type IDscalar
CategorySignal Processing
DescriptionConstant scalar value.

Inputs

None.

Outputs

PortType
outSignal (N=1, T=1, C=1)

Parameters

NameTypeDefaultDescription
valuefloat1.0The constant value

Behavior

  • Broadcasts to any shape when connected to nodes that expect larger signals.

Ramp

FieldValue
Type IDramp
CategorySignal Processing
DescriptionLinear beat counter from 0 to total beats.

Inputs

PortTypeRequired
gridBeatGridYes

Outputs

PortType
outSignal (N=1, T=SIMULATION_RATE x duration, C=1)

Parameters

None.

Behavior

  • Formula: beat_count = (current_time - start_time) * (BPM / 60).
  • Output is monotonically increasing over the pattern duration.
  • Commonly used with modulo and math(subtract) to create repeating spatial chases.

Ramp Between

FieldValue
Type IDramp_between
CategorySignal Processing
DescriptionLinear interpolation from start value to end value over the pattern duration.

Inputs

PortTypeRequired
gridBeatGridYes
startSignalYes
endSignalYes

Outputs

PortType
outSignal (N=1, T=SIMULATION_RATE x duration, C=1)

Parameters

None.

Behavior

  • Formula: output = start + (end - start) * (beats / total_beats).
  • At the first beat, output equals start; at the last beat, output equals end.
  • Useful for creating gradual transitions (e.g., increasing intensity, shifting color over a section).

Modulo

FieldValue
Type IDmodulo
CategorySignal Processing
DescriptionModulo operation (positive remainder).

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal

Parameters

NameTypeDefaultDescription
divisorfloat1.0The divisor for the modulo operation

Behavior

  • Uses Euclidean mod: ((value % divisor) + divisor) % divisor (always positive).
  • With divisor=1.0, wraps any value into the [0, 1) range.
  • Essential for creating repeating patterns from monotonically increasing ramps.

Sine Wave

FieldValue
Type IDsine_wave
CategoryGenerator
DescriptionBeat-synced sinusoidal oscillator.

Inputs

PortTypeRequired
gridBeatGridYes

Outputs

PortType
outSignal (N=1, T=sim, C=1)

Parameters

NameTypeDefaultDescription
subdivisionfloat1.0Cycles per beat (1 = one full cycle per beat, 0.5 = every 2 beats, 2 = twice per beat)
phase_degfloat0Phase offset in degrees
amplitudefloat1.0Output amplitude
offsetfloat0.0DC offset added to output

Behavior

  • Derives frequency from the beat grid: freq_hz = subdivision * (bpm / 60).
  • Formula: output = offset + amplitude * sin(2 * pi * freq_hz * t + phase_rad).
  • Output range (with defaults): [-1.0, 1.0].
  • Useful for beat-synced LFO effects (e.g., breathing at 0.25 = every 4 beats, color cycling at 0.5 = every 2 beats).

Remap

FieldValue
Type IDremap
CategorySignal Processing
DescriptionLinear range remapping (like Arduino's map() function).

Inputs

PortTypeRequired
inSignalYes

Outputs

PortType
outSignal (same N and T as input, C=1)

Parameters

NameTypeDefaultDescription
in_minfloat-1.0Input range minimum
in_maxfloat1.0Input range maximum
out_minfloat0.0Output range minimum
out_maxfloat180.0Output range maximum
clampboolfalseWhether to clamp output to [out_min, out_max]

Behavior

  • Formula: output = out_min + (input - in_min) / (in_max - in_min) * (out_max - out_min).
  • When clamp is false, values outside the input range will extrapolate beyond the output range.
  • Useful for converting signal ranges (e.g., sine wave [-1, 1] to pan angle [0, 360]).

Noise

FieldValue
Type IDnoise
CategorySignal Processing
Description3D fractal Perlin-like value noise with octaves.

Inputs

PortTypeRequired
timeSignalYes
xSignalYes
ySignalYes

Outputs

PortType
outSignal (N=max(x.N, y.N), T=max inputs, C=1)

Parameters

NameTypeDefaultDescription
scalefloat--Spatial/temporal frequency multiplier
octavesint (1-8)--Fractal detail layers
amplitudefloat--Output scale
offsetfloat--Output offset

Behavior

  • Uses smoothstep-interpolated value noise with fractal octave composition.
  • Each octave doubles frequency and halves amplitude (standard fBm).
  • The 3D input (time, x, y) allows spatially and temporally varying noise.
  • Useful for organic, non-repeating effects like flickering, turbulence, or natural movement.

Time Delay

FieldValue
Type IDtime_delay
CategorySignal Processing
DescriptionPer-fixture time offset with interpolation.

Inputs

PortTypeRequired
inSignalYes
delaySignalNo (per-N delay values)

Outputs

PortType
outSignal

Parameters

None.

Behavior

  • For each fixture n: sample_time = current_time - delay[n].
  • Creates chase effects when combined with spatial attributes (e.g., get_attribute(normalized_index) as delay values).
  • Linear interpolation between samples for smooth sub-frame offsets.

Orbit

FieldValue
Type IDorbit
CategorySignal Processing
DescriptionElliptical 3D circular motion (for moving light targets).

Inputs

PortTypeRequired
gridBeatGridYes
phaseSignalNo (per-N phase offsets)

Outputs

PortType
xSignal (N=phase.N or 1, T=256, C=1)
ySignal (N=phase.N or 1, T=256, C=1)
zSignal (N=phase.N or 1, T=256, C=1)

Parameters

NameTypeDefaultDescription
center_xfloat--Center point X coordinate
center_yfloat--Center point Y coordinate
center_zfloat--Center point Z coordinate
radius_xfloat--Ellipse radius along X axis
radius_zfloat--Ellipse radius along Z axis
speedfloat--Rotations per beat cycle
tilt_degfloat--Plane tilt angle in degrees

Behavior

  • Full 3D orbit with tilt applied to the orbital plane.
  • The phase input enables per-fixture offset for staggered orbits (e.g., fixtures tracing the same circle but at different positions).
  • Produces three separate coordinate outputs for use with look_at_position or apply_position.

Random Position

FieldValue
Type IDrandom_position
CategorySignal Processing
DescriptionRandom 3D point in bounding box, held until trigger changes.

Inputs

PortTypeRequired
triggerSignalYes

Outputs

PortType
xSignal (N=1, T=trigger.T, C=1)
ySignal (N=1, T=trigger.T, C=1)
zSignal (N=1, T=trigger.T, C=1)

Parameters

NameTypeDefaultDescription
min_xfloat--Bounding box minimum X
max_xfloat--Bounding box maximum X
min_yfloat--Bounding box minimum Y
max_yfloat--Bounding box maximum Y
min_zfloat--Bounding box minimum Z
max_zfloat--Bounding box maximum Z

Behavior

  • Hash-seeded randomness ensures deterministic output per trigger value.
  • Position is held constant until the trigger signal changes value (e.g., on a beat pulse).
  • Useful for making moving lights jump to random positions on each beat.

Smooth Movement

FieldValue
Type IDsmooth_movement
CategorySignal Processing
DescriptionRate-limited pan/tilt movement simulating physical motor speed.

Inputs

PortTypeRequired
pan_inSignalYes
tilt_inSignalYes

Outputs

PortType
panSignal
tiltSignal

Parameters

NameTypeDefaultDescription
pan_max_deg_per_sfloat360Maximum pan speed in degrees per second
tilt_max_deg_per_sfloat180Maximum tilt speed in degrees per second

Behavior

  • Clamps the delta per time step to the maximum speed.
  • Prevents unrealistic instant movement that would not be physically achievable by real fixtures.
  • Place between position-generating nodes and apply_position for realistic motion.

On this page