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.

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:
- A shape node (Circle, Polygon, Star, etc.) generates the base geometry.
- A Colorize node applies color, driven by a Color node converting HSL to RGB.
- An Oscillator or Phasor modulates a parameter (scale, rotation, hue) to add motion.
- 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.
Navigating the Graph
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.BackspaceorDelete: delete. The Output node is protected.- Hold
Altand 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.
| Node | Description |
|---|---|
| Oscillator | Periodic waveform generator with sine, triangle, square, and saw shapes |
| Phasor | Free-running or BPM-synced ramp from 0 to 1 |
| Noise | Perlin noise generator for organic, non-repeating motion |
| Envelope | Triggered shape with editable keyframes for one-shot animation |
| Sequencer | Step-based pattern that cycles through keyframe values |
| Audio Input | Live audio capture as loudness, spectrum, or waveform |
| Laser Index | Outputs the current laser's index and count for per-laser variation |
| Timecode | Timeline position and elapsed time |
| BPM | Current tempo plus beat and bar phase ramps from the global BPM clock |
Frame
Nodes that produce, transform, and combine laser frames.
| Node | Description |
|---|---|
| Circle | Ellipse with independent X/Y scale |
| Square | Rectangle with optional rounded corners |
| Polygon | Regular polygon with variable side count |
| Star | Star shape with adjustable point count and depth |
| Wave | Horizontal wave with phase, shape, and cycle controls |
| Rose | Rhodonea curve (rose pattern) with N/D petal ratio |
| Rosette | Rose-like curve with adjustable petals and braid weave |
| Spirograph | Hypotrochoid curve with adjustable outer and inner radii |
| Spiral | Spiral with configurable turns and exponent |
| Waveform Tunnel | Spiral with built-in wave displacement for tunnel effects |
| Parametric Curve | Builds a frame from per-point X, Y, Z, and color signals |
| File | Loads ILDA, SVG, or OBJ files as laser frames |
| Video Input | Converts NDI or Syphon video to vector laser output |
| Text | Vector text rendering with reveal animation |
| Camera Projection | 3D perspective projection with pan, tilt, roll, and translation |
| Duplicator | Copies a frame with progressive rotation, scale, and shift |
| Dotter | Converts paths to evenly-spaced dots with corner detection |
| Colorize | Applies a Color signal to a frame with optional endpoint fading |
| Laser Chase | Sequential brightness sweep across multiple lasers |
| Brightness | Uniformly scales the brightness of every point in a frame |
| Merge | Combines two frames into one |
| Output | Final node. Scales, positions, and rotates the complete output |
Math
Arithmetic, trigonometry, coordinate conversion, and color construction.
| Node | Description |
|---|---|
| Arithmetic | Add, Subtract, Multiply, Divide, Power, Min, Max, Mod, Clamp, Sin, Cos, Abs |
| Multiply Add | Remaps a signal: output = value x multiply + add |
| Mix | Linear blend between two scalars: A + t × (B − A) |
| From Polar | Converts angle and radius to X/Y coordinates |
| To Polar | Converts X/Y coordinates to angle and radius |
| Color | Builds a Color signal from HSL, HSV, or RGB |
| To Channels (RGB) | Splits a Color signal back into R, G, B scalars |