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
CategorySignal Processing
DescriptionContinuous sinusoidal oscillator.

Inputs

None.

Outputs

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

Parameters

NameTypeDefaultDescription
frequency_hzfloat0.25Oscillation frequency in Hz
phase_degfloat0Phase offset in degrees
amplitudefloat1.0Output amplitude
offsetfloat0.0DC offset added to output

Behavior

  • Formula: output = offset + amplitude * sin(2 * pi * frequency * t + phase_rad).
  • Output range (with defaults): [-1.0, 1.0].
  • Useful for slow LFO effects (e.g., breathing, swaying) at low frequencies.

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