Node Graph

The node graph is a visual programming canvas where you wire nodes together to build laser visuals from scratch. Think of it as patching a modular synth, but for lasers.

The Modulaser node graph editor with sources, effects, and outputs connected on the canvas
Sources, effects, and outputs connected on the canvas.

Every layer in Modulaser is powered by a graph under the hood. Simple layers use preset graphs; the Node Graph layer lets you edit that graph directly.

To convert an existing Simple layer, right-click the layer and choose Convert to Node Graph.

Effects use node graphs too. Open an effect's graph editor when you want to change how an output-group effect works or publish custom controls for the FX board.

Three Signal Types

Wires carry one of three signals. The editor color-codes them so you always know what's flowing through a wire.

Scalar (yellow): a single value, or a value that varies per point in the frame. Oscillators, noise, math, and channel splitters all produce scalars. When a frame node samples a scalar input, it evaluates at every point. That's how an oscillator becomes a waveform shape.

Frame (pink): a collection of laser points that form paths. Shape generators, file loaders, and video inputs produce frames. Effect nodes like Camera Projection, Colorize, and Duplicator take a frame in and pass a transformed frame out.

Color (red): a packed RGB color, or a per-point color that varies along the frame. The Color node produces one and feeds the Colorize node directly. The To Channels (RGB) node splits a Color back into three scalars when you need to drive other signals from a hue.

You can only connect matching types: yellow to yellow, pink to pink, red to red. When you drag a wire to empty space, the creation menu filters to compatible nodes only.

Building a Patch

Every graph ends at an Output node. Work backwards from there: what shape do you want, how should it move, what color should it be?

A typical patch might look like:

  1. A shape node (Circle, Polygon, Star, etc.) generates the base geometry.
  2. A Colorize node applies color, driven by a Color node converting HSL to RGB.
  3. An Oscillator or Phasor modulates a parameter (scale, rotation, hue) to add motion.
  4. The Output node positions and scales the final result.

The power is in the wiring. The same oscillator that drives position can also drive color. A single Phasor can rotate a shape, cycle its hue, and phase-offset across multiple lasers, all at once.

Adding and Connecting Nodes

A few ways to add a node:

  • Right-click empty space, press Tab, or double-click empty space to open the node creation menu. The new node lands at the cursor.
  • Drag a pin to empty space to open a filtered menu showing only compatible nodes. The wire auto-connects.
  • Double-click a wire to insert a new node inline between two connected nodes.

To disconnect a wire, right-click it.

  • Space + drag pans the view.
  • Scroll to zoom.

Editing Selections

  • CmdCtrlCmd/Ctrl + C / CmdCtrlCmd/Ctrl + X / CmdCtrlCmd/Ctrl + V: copy, cut, paste.
  • CmdCtrlCmd/Ctrl + D: duplicate.
  • Backspace or Delete: delete. The Output node is protected.
  • Hold Alt and drag a modulation routing to clone it onto another target.

See Keyboard Shortcuts for the full list.

Node Reference

Generators

Signal sources that produce values over time or across a frame.

NodeDescription
OscillatorPeriodic waveform generator with sine, triangle, square, and saw shapes
PhasorFree-running or BPM-synced ramp from 0 to 1
NoisePerlin noise generator for organic, non-repeating motion
EnvelopeTriggered shape with editable keyframes for one-shot animation
SequencerStep-based pattern that cycles through keyframe values
Audio InputLive audio capture as loudness, spectrum, or waveform
Laser IndexOutputs the current laser's index and count for per-laser variation
TimecodeTimeline position and elapsed time
BPMCurrent tempo plus beat and bar phase ramps from the global BPM clock

Frame

Nodes that produce, transform, and combine laser frames.

NodeDescription
CircleEllipse with independent X/Y scale
SquareRectangle with optional rounded corners
PolygonRegular polygon with variable side count
StarStar shape with adjustable point count and depth
WaveHorizontal wave with phase, shape, and cycle controls
RoseRhodonea curve (rose pattern) with N/D petal ratio
RosetteRose-like curve with adjustable petals and braid weave
SpirographHypotrochoid curve with adjustable outer and inner radii
SpiralSpiral with configurable turns and exponent
Waveform TunnelSpiral with built-in wave displacement for tunnel effects
Parametric CurveBuilds a frame from per-point X, Y, Z, and color signals
FileLoads ILDA, SVG, or OBJ files as laser frames
Video InputConverts NDI or Syphon video to vector laser output
TextVector text rendering with reveal animation
Camera Projection3D perspective projection with pan, tilt, roll, and translation
DuplicatorCopies a frame with progressive rotation, scale, and shift
DotterConverts paths to evenly-spaced dots with corner detection
ColorizeApplies a Color signal to a frame with optional endpoint fading
Laser ChaseSequential brightness sweep across multiple lasers
BrightnessUniformly scales the brightness of every point in a frame
MergeCombines two frames into one
OutputFinal node. Scales, positions, and rotates the complete output

Math

Arithmetic, trigonometry, coordinate conversion, and color construction.

NodeDescription
ArithmeticAdd, Subtract, Multiply, Divide, Power, Min, Max, Mod, Clamp, Sin, Cos, Abs
Multiply AddRemaps a signal: output = value x multiply + add
MixLinear blend between two scalars: A + t × (B − A)
From PolarConverts angle and radius to X/Y coordinates
To PolarConverts X/Y coordinates to angle and radius
ColorBuilds a Color signal from HSL, HSV, or RGB
To Channels (RGB)Splits a Color signal back into R, G, B scalars