Node Editor
Wire a graph of nodes that Spectralite compiles into one GPU program per fixture pixel.
An effect in Spectralite is a graph. You place nodes on a canvas and draw wires between their sockets, and Spectralite compiles the whole graph into a single GPU program. That program runs once for every pixel a fixture exposes, computing the color (and any movement parameters) for that one point in your rig. Nothing in the running effect is interpreted node by node at playback time; the graph collapses into one compiled kernel before it ever renders.
The word "effect" here means a node graph. That is different from the layer stack that stacks and blends effects over time. If you came here looking for how layers combine, opacity, or the show timeline, read Effects and layers and the Timeline panel instead. This section is about the graph you wire inside one effect. For the editing surface itself (canvas navigation, adding nodes, grouping), see the Node Editor panel.
How the graph becomes light
Data flows left to right. Each node reads values on its input sockets, computes something, and exposes the result on its output sockets. Wires carry a value from one node's output to another node's input.
Every graph ends at exactly one Output node, the single sink. The Output node takes a Color and writes it to the fixture. A graph with no Output node compiles to a no-op and lights nothing, so the Output node is always your destination. Any node that has no path to the Output node is dropped during compilation and does nothing, which means a node only affects the result once it is wired, directly or through others, into Output.
A typical position-driven effect reads the fixture's location, shapes a value from it, turns that value into brightness, tints it with a color, and sends the result to Output:
Pixel Position -> shape (wave / SDF / math) -> brightness (0 to 1) -> Multiply with Color -> OutputSpectralite compiles one shader that serves every color output mode. You wire the graph once; the engine renders it correctly whether a fixture is driven by raw channels or by device-independent color. You never build a separate graph per mode.
The one wiring rule
A wire connects two sockets of the same data type. Type matching is strict: a Number output only connects to a Number input, a Color output only to a Color input, and so on. There is no implicit conversion and no automatic splatting, so you cannot feed a Number into a Vector socket or a Vector into a Color socket by wishing it.
When you do need to cross types, you do it on purpose with a conversion node. To build a Vector from three Numbers, use Combine Vector. To pull one axis back out, use Split Vector. To turn a Boolean into a Number, use Boolean to Number. The Conversion and Color categories hold these bridges. The full type list and every conversion path lives in Data types.
Sockets and wires are tinted by their data type, so the editor shows you at a glance what fits where. Drag from one socket toward another and Spectralite only completes the wire when the target socket carries the same type.
How to read a node
A node shows its label at the top and its category color on its frame. Input sockets sit on the left edge, output sockets on the right. When an input socket has no wire, the node shows an editable field for that input so you can type a fixed default value directly on the node; wire something into that socket and the wire takes over from the default.
Where the categories live
Nodes are grouped into categories. The grid below is the map; each category page lists every node in it with its sockets and a description. If you are new to the editor, start with Input (where values enter the graph), the math categories (Arithmetic, Comparison), and Color (how you build and convert the color that reaches Output). From there, Wave and SDF open up position-driven and animated effects.
Input
Where values enter the graph: constants, time, fixture position, audio, video, and hand tracking
Output
The single graph sink that writes color and parameters to the fixture
Math and logic
Arithmetic
Add, subtract, multiply, divide, and per-type mixing
Comparison
Clamps, thresholds, gates, and comparators
Trigonometry
Sine, cosine, tangent, their inverses, and hyperbolics
Logarithmic
Exponential and logarithm functions
Rounding
Floor, ceil, round, truncate, and fractional part
Vector
Dot and cross products, length, distance, reflect, combine and split
Animation and generators
Wave
Periodic oscillators driven by phase in turns: Oscillate, triangle, square, sawtooth, pulse, and more
Generator
Prebuilt animated patterns, noise fields, fractals, Voronoi cells, and dither
Curve
Easing and remap curves
Random
Deterministic hashing to pseudo-random values
Physics
Spring and step-sequence motion helpers
Color
Space and shapes
Spatial
Position-based falloffs, containment tests, polar coordinates, and per-position phase offsets
SDF Primitives
Signed distance to shapes in 3D (sphere, box, torus) and in 2D (circle, hexagon, star)
SDF Tools
Combine and warp shapes, then convert them to brightness masks
Utility
Utility
Mixed math helpers plus the Repeat loop boundary nodes
UI
Editor-only organization: Comment and Group. Not compiled
Exact node counts per category appear at the top of each category page and stay current as nodes are added.