Reusable subgraphs

A subgraph groups a chunk of your graph into one node. Reusing it across projects is where the shipped routes and the intended one part company.

A subgraph built with Collapse to Subgraph (Cmd+G) lives inside the project you built it in. There is no action anywhere that writes it out to the asset library, so it does not become a shared building block.

Two of the four ways a subgraph can be stored are only ever reached by loading a subgraph file someone else produced. A subgraph you collapse yourself is held in memory or embedded in the project, and the writer that would persist it to the library never fires. The storage mode is decided by where the subgraph came from, and nothing in the app lets you pick or even see which one you have.

What does travel between projects

Save Selection as Node…, on the right-click menu with at least one node selected, compiles the selection into a portable node type in your user library. It is a different thing from a subgraph, and it is the route that works: the result appears in the palette and in the Asset Browser like any other node, in any project.

Subgraph files loaded from disk behave the way the library model intends. Each placement is a reference resolved by id at cook, so improving the definition updates every instance. The built-in library graphs are the exception: dropping one deep-copies it into the project, and later changes to the original never reach the copy.

Exposed controls

To surface an inner control on the subgraph's face, place an In node inside it and wire it to the parameter you want. That inner port becomes an input pin on the outside, and its value is stored per placement, so ten copies each hold their own and each can be keyframed without touching the others. Editing it re-cooks the affected part of the graph, exactly as changing it on the inner node would.

A single component can be surfaced on its own: wire an In node to the x of a position and you get one number on the outside.

A surfaced control arrives with the inner parameter's own widget. Its type, its default, its minimum, maximum and step, and its dropdown choices are all read from the inner input the In node drives, so an inner 0 to 1 dial surfaces as a 0 to 1 slider rather than an unbounded number, and a promoted component carries the range of the vector it came from. That resolution follows the wire through nested subgraphs, so a control promoted twice still arrives with its real range rather than a bare number. A slider only appears where both a minimum and a maximum are known; a parameter declaring one bound or none surfaces as a plain field.

Placing them

Saved subgraphs appear in the Asset Browser under Subgraphs and are found by name in its search box. They carry no thumbnail, so you are reading names. Drag one onto the canvas to place an instance. There is no drop-onto-a-socket gesture for any asset, so wire it up afterwards.

Subgraphs can nest 16 deep.

See also