Lesson 4.3: The Visual Dataflow Mental Model (TouchDesigner & Blender)
Warning
⚠️ Draft Lesson: This lesson is currently a working draft and is undergoing practical review. Technical labs, workflows, and diagrams may be expanded and refined in upcoming revisions.
For decades, lighting consoles operated on a rigid spreadsheet mental model: you patch fixtures to numerical channels, type values into a keypad, and store static snapshots in sequential cue rows.
In the creative computer graphics, visual effects, and real-time generative art worlds, this spreadsheet paradigm was abandoned long ago. Applications like TouchDesigner, Blender (Shader & Geometry Nodes), Nuke, and Unreal Engine (Blueprints) revolutionized digital creation by adopting Visual Dataflow Programming: representing systems not as static tables, but as dynamic signal processing graphs where data flows visually through modular blocks.
Unilighter brings this visual dataflow paradigm directly into DMX512 stage lighting.
In this lesson, we explore the mental model of procedural node graphs, examine socket data types and signal routing, and discover why procedural generation keeps live stage lighting feeling organic, reactive, and alive.
1. From Linear Cues to Procedural Dataflow
To understand why node graphs are transformative for live stage lighting, compare the traditional spreadsheet model with visual dataflow:
| Characteristic | The Spreadsheet Model (Legacy Consoles) | The Visual Dataflow Model (Unilighter) |
|---|---|---|
| Mental Model | Sequential rows in an Excel spreadsheet. | Audio synthesizer signal chain or visual shader tree. |
| Parameter Behavior | Static values stored in memory registers; interpolated linearly between cues. | Continuous mathematical signals flowing through modifier nodes in real time. |
| Interactivity | Re-record cues or manually ride physical faders. | Re-route wires, modulate speeds, or wire live audio inputs directly into optical parameters. |
| Visual Variety | Chases repeat identically every cycle; quickly feels robotic and predictable. | Procedural math (LFOs + Noise) produces organic, evolving patterns that never repeat identically. |
Traditional Console Pipeline (Static Storage):
[ Keypad Entry ] ──> [ Channel Register ] ──> [ Cue Memory ] ──> [ DMX Output ]
Unilighter Node Pipeline (Continuous Dataflow):
[ Input Signal ] ──(Wire)──> [ Mathematical Modifier ] ──(Wire)──> [ Physical Luminaire ]
(Audio / LFO) (Map Range / Math / Gate) (Dimmer / Pan / Color)
In a node graph, you do not "program" a static state; you design a living system.
2. Directed Acyclic Graph (DAG) Execution
Unilighter’s node engine operates as a Directed Acyclic Graph (DAG):
[ Oscillator Node ] ──> [ Math Node (Map Range) ] ──> [ Device Node: Spot 1 ]
(Generates -1 to +1) (Scales to 20% - 80%) (Receives Smooth Dimmer)
Key Principles of the Dataflow Engine:
- Left-to-Right Directionality: Signals originate in Input Nodes on the left, pass through Process Nodes in the center, and terminate in Output Nodes on the right.
- Real-Time Evaluation: The entire graph evaluates in lockstep with the console's frame clock (streaming updates at \(40+\) frames per second). If an oscillator value changes by \(0.001\), the output DMX channel updates immediately.
- Live Hot-Patching: In Unilighter, you can create nodes, connect wires, or sever signal paths while the show is running live on stage. The DMX engine recalculates dependencies instantly without dropping frames, stuttering, or requiring a software restart.
3. The Canvas Anatomy & Socket Data Types
Opening Unilighter's Node Graphs screen (/#/nodes) reveals the visual wiring workspace:

Color-Coded Socket Data Types
To prevent routing incompatible signals (such as trying to wire an audio frequency spectrum directly into an XY motor crosshair), Unilighter color-codes every socket and wire by its underlying mathematical data type:
| Data Type | Value Range | Typical Stage Applications |
|---|---|---|
| Number (Scalar) | Normalized 0.0 to 1.0 (or raw 0-255) |
Fixture intensity, oscillator frequency, strobe rates, math factors. |
| Vector (2D) | Coordinate tuple (X, Y) |
Pan and Tilt mechanical angles, moving head target coordinates. |
| Color | Unified RGB / HSL color structure | Passing chromatic data downstream. Decoupled from whether the physical light uses RGB, RGBAW, CMY dichroics, or a motorized gel wheel. |
| Trigger (Boolean) | Discrete pulses (true / false) |
Opening dynamic gates, advancing step counters, firing momentary resets. |
| Spectrum (Array) | Multi-band numerical frequency array | Raw FFT audio data passed from audio capture into frequency meters for kick/snare isolation. |
4. Pure Mathematics vs. Hardcoded Loops
Why does a traditional console step chase look repetitive after two minutes, while a procedural node graph looks fascinating for forty minutes?
The Trap of Static Presets
When an operator programs a standard 4-step chase (Red → Blue → Amber → Green), the audience's brain recognizes the exact repetition within three cycles. The visual becomes predictable background wallpaper.
The Power of Procedural Perturbation
In a node graph, you can easily combine simple mathematical primitives:
- Take a primary Sine Wave oscillator running at \(0.1\,\text{Hz}\) to sweep moving heads smoothly from side to side.
- Add a subtle Perlin Noise oscillator running at \(0.35\,\text{Hz}\) into the signal using an
AddMath node. - The resulting motion remains smooth and graceful, but the exact turning points and angles never repeat identically. The beams flow through the room like smoke or living creatures rather than industrial factory robots.
5. Hands-On Lab: Building Your First Node Chain
Follow these steps to construct and verify a live procedural ambient breathing chain in Unilighter:
Step 1: Create a New Graph
- Navigate to Node Graphs (
/#/nodes). - Click Add Graph and name it
Ambient Wash Breathing. - An empty node canvas opens.
Step 2: Add the Signal Generator (Input)
- Right-click on the canvas (or click Add Node) and select Input → Oscillator (
OscillatorNode). - Set the waveform shape to
Sine. - Set the frequency mode to
Hzand dial the speed to0.2Hz (one full breathing cycle every 5 seconds).
Step 3: Scale the Signal (Process)
A raw sine wave oscillates between \(-1.0\) and \(+1.0\). A fixture dimmer requires a valid range between \(0.0\) and \(1.0\). Furthermore, we do not want the lights to turn completely off at the bottom of the breath:
- Add a Process → Math (
MathNode). - In the operation dropdown, select
Map Range. - Configure the mapping parameters:
From Min:-1.0From Max:+1.0To Min:0.20(minimum baseline glow of 20%)To Max:0.85(maximum peak intensity of 85%)
- Connect the
Valueoutput socket of the Oscillator to theInput Asocket of the Math node.
Step 4: Route to Hardware (Output)
- Add an Output → Device (
DeviceNode). - In the fixture dropdown, select your stage wash fixtures (or select a target tag group like
#washes). - Connect the
Resultoutput socket of the Math node to theDimmerinput socket of the Device node. - Toggle the graph's master switch to Enabled.
Step 5: Observe Live Execution
Look at your stage fixtures (or open the Live Visualizer): the wash lights immediately begin breathing between \(20\%\) and \(85\%\) intensity in a smooth, continuous sine wave.
You have created your first autonomous procedural lighting pipeline!
📝 Self-Assessment Quiz
Test your understanding of visual dataflow concepts and node graph architecture:
- Scenario A: A lighting designer needs to make an overhead moving spot sweep continuously from stage left to stage right and back. Instead of recording twenty individual cue steps, the designer connects an
OscillatorNodeoutputting a Sine wave into aMathNode(Map Range), which connects to thePansocket of aDeviceNode. What is the primary operational advantage of this procedural dataflow approach?- A) It prevents the DMX interface from drawing AC mains current from the venue electrical breaker panel.
- B) It produces perfectly smooth, continuous mathematical motor movement that updates in real time without cluttering cue lists with hundreds of static tracking steps.
- C) It doubles the physical baud rate of the RS-485 serial transmission line beyond the 250 kbit/s DMX512 ceiling.
- D) It automatically flips the fixture's internal binary DIP switches into sound-active standalone strobe mode.
Correct Answer: B Why this is correct: Visual dataflow generates continuous mathematical parameter streams at console frame rates, providing fluid, repeatable motion trajectories without requiring endless cue rows. Why other options are incorrect: DMX interfaces consume minimal low-voltage DC power and do not alter venue AC breaker loads (A); DMX baud rate is locked to 250 kbit/s by the RS-485 standard (C); and DIP switches are physical manual switches on fixture hardware (D).
- Scenario B: In Unilighter’s visual node canvas, what is the significance of color-coded sockets and wires?
- A) They reflect the aesthetic paint finish applied to the aluminum chassis of physical DMX opto-splitters.
- B) They indicate whether the fixture is currently drawing electrical current from an odd or even phase leg.
- C) They define distinct underlying mathematical data types (such as Scalars, 2D Vectors, Colors, and Boolean Triggers), preventing incompatible signal routing.
- D) They represent the thermal operating temperature of the computer's graphics processing unit (GPU).
Correct Answer: C Why this is correct: Socket color-coding enforces type safety in the visual dataflow graph, distinguishing numbers (
0.0–1.0), vectors(X, Y), color tuples, and boolean triggers to ensure logical signal flow. Why other options are incorrect: Socket colors are software UI data types, unrelated to physical splitter paint (A), 3-phase electrical legs (B), or computer hardware temperatures (D).
- Scenario C: While a live concert is underway, an operator notices that a background color chase graph is cycling too quickly. Can the operator change node parameters or rewire connections on the canvas while the show is live?
- A) No, altering a node connection while active immediately corrupts the show file and crashes the DMX output engine.
- B) No, because DMX512 transmission protocols prohibit altering memory registers while frames are being streamed.
- C) Yes, Unilighter’s graph engine supports live hot-patching, recalculating dependency paths in real time without dropping DMX frames.
- D) Only if all physical DMX cables are temporarily unplugged from the console before saving the graph.
Correct Answer: C Why this is correct: Unilighter’s dataflow architecture evaluates graphs continuously on every frame tick, allowing operators to adjust speeds, re-route wires, and tune parameters live without interrupting DMX output. Why other options are incorrect: Unilighter does not crash or corrupt show files on live edits (A); DMX512 streams whatever values the software outputs each frame regardless of software internals (B); and unplugging DMX cables (D) drops show communication entirely.