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.

Simple and Node Graph layers are powered by a graph under the hood. Simple layers use preset graphs; the Node Graph layer lets you edit that graph directly.

To start from an existing Simple layer, right-click the layer and choose Extract to Node Graph. That adds a new Node Graph layer next to it, named after the original with "(Graph)" added, with a copy of the preset graph, and hides the original.

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 effect.

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. Shape generators, Parametric Curve, and Camera Projection sample a scalar at every point, and Colorize evaluates its Color input per point too. That's how an oscillator becomes a waveform shape. Nodes like Duplicator, Dotter, Brightness, and Output read one value per frame.

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:

  • Double-click empty space, or right-click it and choose New Node, to open the node creation menu. The new node lands where you clicked. Press Tab to open the menu with the node landing at the center of the view.
  • 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 or Alt-click it. To clear every wire from a pin at once, right-click the pin.

Hover a port row to read its live value in a tooltip beside the node. Connected inputs show the value arriving from upstream, in that port's own units, and outputs show values even on nodes that aren't wired to the Output yet. Frame ports show a live preview of the frame instead, including nodes the Output doesn't reach, like the inactive side of a Frame Switch.

Hover an input's label for a short description of what it does. Right-click the label or value to reset, copy, or paste it, or to link it to a macro under Macros. A wired input can't take a macro, since the wire drives it.

Press N to drop a note at the cursor, ready to type. Notes are free-floating text on the canvas: double-click to edit one, drag its bottom-right corner to re-flow the text, and clear the text to remove it. Notes save with the project, so a patch you share arrives annotated.

  • Space + drag pans the view.
  • CmdCtrlCmd/Ctrl + scroll zooms.

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.

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, or a count that keeps rising
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
RandomRepeatable random steps from a position signal like BPM Beat Position, or stepped by a trigger
CounterCounts up or down on every beat or trigger, with clamp, loop, or zigzag limits
Audio InputLive audio capture as loudness, spectrum, or waveform
DMX InputReads one DMX channel over Art-Net or sACN as a normalized signal
OSC InputReads a numeric OSC argument from any address as a patchable signal
MIDI InputReads a MIDI CC or note value as a normalized signal
Laser IndexOutputs the current laser's index and count for per-laser variation
TimecodeTimeline position and elapsed time
BPMCurrent tempo, beat position, and 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
LineA single straight line with length, angle, and pivot
Spectrum BarsBars whose heights follow the Level input. Patch in a Spectrum-mode Audio Input for a spectrum analyzer
3D shapesCube, Pyramid, Octahedron, Sphere, and Cylinder. Add Camera Projection to see them in perspective
Parametric CurveBuilds a frame from per-point X, Y, Z, and color signals
FileLoads ILDA, SVG, or image files as laser frames
Video InputConverts NDI, Syphon, or Spout video to vector laser output
TextVector text rendering with reveal animation
DrawHand-drawn paths with the Pencil, Pen, or Line tool
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
Trim PathKeeps the Start to End part of the frame's path. Animate End to draw it out
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
Frame SwitchCuts, fades, wipes, or morphs from one frame to another
OutputFinal node. Scales, positions, and rotates the complete output

Math

Arithmetic, trigonometry, coordinate conversion, and color construction.

NodeDescription
Arithmetic nodesAdd, Subtract, Multiply, Divide, Power, Min, Max, Mod, Clamp, Sin, Cos, Abs, each its own node
Multiply AddRemaps a signal: output = value x multiply + add
Scalar SwitchPicks A below 0.5, otherwise B
MixLinear blend between two scalars: A + t × (B − A)
Map RangeRemaps a value from one range to another, with clamp, loop, and zigzag options
From PolarConverts radius, angle, and elevation to X/Y/Z coordinates
To PolarConverts X/Y/Z coordinates to radius, angle, and elevation
ColorBuilds a Color signal from HSL, HSV, or RGB
To Channels (RGB)Splits a Color signal back into R, G, B scalars