Post 134

Nodes Show Their Work

Every node now wears its live output on its body. Numbers read out as they change, colours show the colour, shape nodes draw the shape they are emitting, and texture nodes preview their own pixels. The patch stops being a diagram of what should be happening and starts being a readout of what is.

Wire Time into a Circle’s radius, hit play, and watch the canvas do exactly what you asked. Then ask yourself a simple question: what number is actually coming out of that Time node right now?

Until this release the honest answer was that you had no idea. The graph told you a Time node existed and that a wire left it. Everything after that was faith. If the circle was not pulsing, the fault could be the Time node, the Sin node, the multiply you added to scale it, or the radius pin you thought you connected and did not. Four suspects, no witnesses, and the only interrogation technique available was deleting things until the problem went away.

Nodes now show their work.

The Lux node editor with seven nodes, each showing its live output on its body: a Time node reading 1.017, a Sin node reading 0.850, a SolidColor node previewing a magenta texture, an HSL node showing a cyan swatch, a LinearSpread node drawing a sparkline, and a Circle node drawing the cyan circle it is emitting

That is the whole feature in one frame. The Time node is reading 1.017 seconds. The Sin node it feeds reads 0.850, which is what sine does to 1.017, and you can confirm that yourself without leaving the canvas. That is the entire point.

Each kind shows itself

A number reads out as a number. A colour shows you the colour, with its hex next to it, so an HSL node you have been nudging blindly for ten minutes finally admits what it has been making.

Shape nodes are the ones people tend to enjoy. A Circle node draws the circle - the real one, at the real proportions, in the real colour its fill pin is being fed. It is not an icon of a circle. It is the node’s actual output, replayed at thumbnail size, so if the fill is wrong you see it is wrong, on the node, without routing anything to the output window to check.

Texture nodes do the same thing with their own pixels, read back off the GPU. Build a chain of eight filters and you get eight legible previews of what each one did, instead of eight identical grey boxes reading “tex 41”. Finding which filter in a stack ate your image used to be a bisection exercise. Now it is looking.

Spreads draw a sparkline of their values, which is the fastest way to notice that the spread you thought had a nice ramp in it is in fact perfectly flat. And an output that is not emitting anything shows a hollow ring, so a dead chain tells you exactly which node went quiet rather than making you guess from the absence of pixels at the far end.

The part that is not free

Putting live pixels on every node body, every frame, is a cost, and an editor that drops frames while you are performing is worse than one that tells you less. So the viewers are on a budget.

Thumbnails refresh a few at a time, round-robin, so a patch with sixty texture nodes cannot spend the frame reading textures back off the GPU. Every viewer still updates; they just take turns, and at a quarter of a second for the full sweep nobody has ever noticed a preview the size of a postage stamp being one tick behind.

Texture thumbnails get shrunk before they travel, rather than after. A thumbnail is forty pixels across, so hauling a full 1080p render off the GPU to paint one is about eight megabytes spent to fill a space that can hold nine kilobytes of detail. The texture is now scaled down on the GPU first, where scaling is free, and only the pixels the cell can actually show make the trip. Four viewers on a live render used to cost two gigabytes a second between them. They now cost about as much as a favicon.

Shape thumbnails have a ceiling too. Below a certain complexity the thumbnail shows you the shape; above it, the node shows a count instead. This is less of a compromise than it sounds, because a layer with five hundred shapes in it, squeezed into a cell the size of a fingernail, is not a preview. It is a smudge. It was a smudge that cost a fifth of the frame budget to draw, which is a remarkable amount of work to do in order to tell you nothing.

Zoom far enough out and the viewers switch off entirely, on the grounds that you are looking at the shape of the patch, not reading it.

Why it matters

The thing that makes an instrument an instrument is that it answers you. You do something, it responds, and the loop between the two is short enough that you stop thinking about the mechanism and start thinking about the music.

A node graph where the values are invisible breaks that loop at the first surprise. You are no longer building; you are auditing. Every node that shows its output is a node you never have to open, probe, or reason about, because it is already telling you.

Wire Time into a Circle’s radius now, and the graph will tell you what it is doing while it does it.

← All posts