Node Editor Basics

Node Editor Basics

Five editing surfaces are built on one shared shell, so the core gestures are the same wherever you are. Learn them once here; each editor’s own page then covers only what it adds.

EditorWhat it edits
RulesScoring and autofire rules
LightshowLight shows driving LED layouts
SoundSynth patches, the mix, and clip selection
DMDDot-matrix display shows
TestingRecorded sessions, read back as test scenarios

Rules, Lightshow, and Sound present a node graph as soon as you open them. The Testing page sits on the same shell — the same drawer, the same toolbar, the same rebindable shortcuts — but never shows a node graph of its own. The DMD editor’s Stage and Timeline are DOM panels too, not a graph, but opening one of its effects drops you into a real node graph built on the same canvas and the same add-node palette as the other three. Read the canvas gestures below as covering Rules, Lightshow, Sound, and an open DMD effect, and everything else as shared by all five.

The canvas

Every editor is a full-viewport node canvas with a floating toolbar card over one corner. Nodes are boxes joined by wires; each node shows a category glyph, a title, and — colored by kind — its typed input and output ports.

  • Pan — drag an empty part of the canvas.
  • Zoom — mouse wheel (clamped to a comfortable range).
  • Move a node — drag it. Moving a node only rearranges the diagram; it never changes what the node does.

Adding nodes

Editors that let you build a graph offer a palette — a grid of square, glyph-over-label tiles, one per addable node kind, grouped by category. Click a tile to drop it on the canvas, drag a tile onto the canvas to drop it exactly where you release it, or right-click empty canvas for the same choices from a context menu. Hover a tile and its description appears in the box underneath the grid; with nothing hovered, that box shows the selected node’s own description instead. The palette is generated from the engine, so any node kind the engine gains appears automatically — and because every node already carries its own always-visible category glyph and label, there’s no separate legend to check it against.

The palette has a filter box. Type to narrow the visible kinds, then press a digit 1–9 to add the Nth kind still showing — so “type a few letters, press 1” is usually the fastest way to place a node without reaching for the mouse. The digits act on what’s visible, so the same digit means different things before and after you filter.

Every editor with a palette reaches it the same way now: it lives in a drawer section titled Add node, docked along the canvas’s left edge, rather than floating in a different spot per editor. If the active scope restricts what you can add there, the rest drop out of the grid entirely instead of sitting there greyed out — a quiet Show unavailable toggle at the foot of the palette brings them back, each still disabled and labeled with why. The drawer keeps your filter and expander state as you move between scopes.

Wires are type-checked: a connection only completes between compatible ports, and the drag highlights valid targets. If a wire “won’t take,” the two ports are incompatible — the editor accepts exactly the connections the engine would compile and rejects the rest.

Browsing assets

Rules, Lightshow, Sound, and DMD also dock an Asset browser section in the drawer — a view of the asset catalog scoped to only the families that editor can actually use: Lightshow sees lightshow clips, Sound sees audio, synth, clip, playlist, and trigger assets, and DMD sees images. Rules docks the section too, but has nothing of its own to browse and says so rather than listing assets it can’t act on. Testing has no Asset browser at all.

Selecting and inspecting a node

  • Click a node to select it. Selection fills the Details section of the rail beside the canvas, listing the node’s fields as label → value rows (multi-value fields render as chips, and a node’s related record — its rule, channel, or patch — appears as a tinted card). Collapse it with the header toggle; the choice is remembered.
  • Hover a node to pop a tooltip with its glyph, title, type, and a one-line summary.

The rail is not a read-out. Every parameter the engine publishes for the selected node is editable right there, in the row that shows it — a scoring rule’s trigger and points, a light node’s params, a synth param, a DMD element’s placement. Each field settles on its own, a moment after you stop typing, so a value applies as you work without a Save step; if the engine refuses one, the refusal lands on that field rather than as one opaque banner for the whole node. Rows shown inside a neighbour card stay read-only, because an edit there would be ambiguous about which node it meant.

Simple values (numbers, text, toggles, dropdowns) edit in place; richer ones (colors, palettes, asset references, expressions) open an overlay editor from the row. A number field can be driven by gesture as well as typing: press it and drag up or down to walk the value, hold Shift for a ten-times coarser step, and press Escape mid-drag to abandon the change. A plain click still puts the caret in the field. It is the same gesture, at the same sensitivity, as the object editor’s inspector.

The rules editor adds an editable Source tab to the same section, described on its page.

Finding a node

Press / to open a find box and filter as you type, with a live count of how many nodes match. What a match does depends on the editor: the rules editor hides everything that doesn’t match (keeping a matched rule’s linked device and tag visible so the edges still read), while the lightshow and sound editors leave the graph intact and instead select and center the canvas on the first match.

Copying nodes

Ctrl/Cmd+C copies the selected node, Ctrl/Cmd+V pastes it into the scope you’re currently in, and Ctrl/Cmd+D duplicates in one step.

The clipboard is shared across editors and tabs — copy a node in one editor and it’s available to paste in another window, or in a different editor entirely. A paste only lands if the target editor actually has that node kind; if it doesn’t, the paste is refused with a message naming where the node came from, rather than pasting something the engine can’t compile.

The context menu

Right-click opens a menu at the cursor. What’s on it depends on where you click — a node versus empty canvas — and on the editor, but the behavior is shared: rows can be actions, submenus (marked “▸”), or headers, and the menu closes when you click away, scroll, or press Escape.

Editing values

When you run an editing or creation command, the editor opens a form dialog — a centered panel with labeled fields and Cancel / Save buttons. Forms validate on submit: a required field left empty reports “<label> is required” and blocks saving. Enter submits; Escape, the backdrop, or the ✕ cancels with no change. Destructive actions (like deleting) use a confirmation dialog with a red confirm button. Simple params on a node (numbers, sliders, toggles, dropdowns) are often editable inline on the node card; richer values (colors, palettes, asset references, expressions) open an overlay editor.

Navigating nested scopes

Some nodes encapsulate a sub-graph — for example, a synth voice in the sound editor contains its own DSP patch. Where an editor nests scopes, the navigation model is symmetric:

  • Drill in — double-click the encapsulating node to descend into its inner scope; the canvas repaints to the child graph.
  • Drill out — press Escape, or double-click empty canvas, to pop back up one level.
  • A breadcrumb bar shows the path from the root to where you are (for example Sources › bassSynth). Click an earlier crumb to jump straight back to it.

Navigating never changes anything — drilling in and back out is lossless. Today the sound editor is the editor that uses nested scopes (to open a synth patch).

Sharing where you are

The address bar tracks where you are — the open show, the drilled-in synth, the rules view and selection, the device an editor is focused on — so a reload lands you back in place, and the URL is a permalink you can hand to someone else. The toolbar’s ⚯ Copy link button puts a link to exactly what you’re looking at on the clipboard; if the clipboard is blocked, the editor shows the URL so you can copy it by hand rather than failing silently.

The “?” help hotspots

Some section headers carry a small circular "?" button. Click it to open the relevant documentation page in a new tab — the same pages you’re reading now.

The global status bar

Every harness page — the three node editors, the object editor, and the table view — carries a persistent status bar along the bottom:

  • A Diagnostics chip on the left reads the outstanding count (and · Needs placement when devices still need a home). Click it to expand an outstanding-items dock that lists each diagnostic and page worklist; clicking a row jumps to the item that raised it. Each row is labeled on two axes — a severity glyph (▲ error, ⚠ warning, ℹ info) and a small subsystem-type chip (LIGHT, GEOM, RULES, SOUND, ENGINE, PHYSICS, or GENERAL) — so you can tell at a glance which part of the table a diagnostic comes from.
  • A ✉ Feedback entry on the right opens a feedback/contact form. (You can also reach it from Settings ▸ Send feedback, and hide the chip from Settings if you prefer the menu.)

Because the bar is app-global, diagnostics stay visible no matter which editor you’re in — or even with every editor closed.

Keyboard & mouse reference

ActionGesture
PanDrag empty canvas
ZoomMouse wheel
Move nodeDrag node
Select nodeClick node
Inspect nodeHover (tooltip) / click (Details rail)
Context menuRight-click (node or canvas)
Drill inDouble-click an encapsulating node
Drill outEscape or double-click empty canvas
Add the Nth palette entry1–9
Find nodes/
Delete node(s)Delete / Backspace
Rename nodeF2
Copy / paste / duplicateCtrl/Cmd+C / +V / +D
Audition (sound editor only)Space
UndoCtrl/Cmd+Z
RedoCtrl/Cmd+Shift+Z or Ctrl+Y
Save / ExportCtrl/Cmd+S
Close menu / dialogEscape

One set of keys, five surfaces — the same key means the same command everywhere. What differs is which commands each surface has:

SurfaceNot available
Rules, Lightshow—
Sound— (and it alone adds Space to audition)
DMD/ to find — its panels are not a searchable graph
TestingEverything that edits: delete, rename, copy, paste, duplicate, undo, redo, and the palette digits. A recording is a record of what happened, so there is nothing to change

Space to audition re-fires on each press rather than repeating while you hold it.

Rebinding the shortcuts

Every key above can be changed, from Keyboard shortcuts in the ⚙ settings. Click a key chip to replace it, + to add a second binding, ✕ to remove one; Escape while a chip is armed backs out.

They are one set across all five editors on purpose — rebinding Delete rebinds it in rules, lightshow, sound, DMD, and testing at once, because these are one product’s shortcuts rather than five independent ones. Tabs across the top of the widget let you check availability per editor: the same keys are listed under every tab, and a row greys out on a tab where that editor has no such command. That is the question the tabs answer — “why did Delete do nothing on the Testing page” — not “what is the key here”.

The palette digits are an ordered row: the first key you bind adds the first visible palette entry, the second the second, and so on. Because it is positional rather than about the character, it works on layouts (French AZERTY, for one) where the digits need Shift, and the numpad digits work too.

Binding one key to two commands is warned rather than refused, and the widget names which one actually fires.

Keyboard shortcuts never fire while you’re typing in a field, so editing text is safe — including the digits, so a number typed into the palette filter stays a number.