Houdini's Node-Based Everything
Created on 2022-06-06T03:00:48-05:00
Was musing over the documentation for SideFX Houdini recently. In particular how the program represents every operation as a particular node. This kind of thing also appears in [Material Maker](https://materialmaker.org/), Rack, [Armor Paint](https://armorpaint.org/), [Natron](https://natrongithub.github.io/) and their commercial originals.
It's interesting to see the basic pattern:
- Generic plugin host that looks at plugin manifests, loads them or has them built in, shows a node and pin graph editor
- Topologically sort the graphs to create an order you can run them
- Shuttle big binary blobs between individual plugins
- Even input and output of data is ultimately controlled by a node
In a way this mirrors the "command pattern" but rather than doing a command once and throwing it away (or leaving it in an undo log for a short time) the command persists as an object to be tinkered with later on. Sometimes even features like outputting sound are owned by a node (such as VCV Rack) and the host framework is only concerned with graph editing and mediating access to node property editors.
One might wonder why this design is mostly used in very expensive studio software but rarely used in the realm of mortals (aside from clones of said studio software.) Even Apple threw away Soundtrack Pro which kept a persistent change log of edits to a particular sound over time.