Subgraphs
Fold a group of nodes into one node you can dive into, reuse, and share.
A subgraph folds a selection of nodes into a single node on the canvas. The work still happens exactly as before, and the result is a reusable building block you can drop in again.
Collapsing a selection
Select the nodes to group, then press Cmd+G. They collapse into one subgraph node, wired up automatically: wires that came into the selection become input pins, wires that went out become output pins. Nothing is left dangling. The collapse is one undoable step, so Cmd+Z gives the loose nodes back.
Cmd+G reads what you have selected. With parameter rows selected on a single node it groups those rows into a named section on the node body instead, which is the same thing the parameter right-click menu's Group… does. See Parameter widgets. Collapsing to a subgraph is what it does with nodes selected, which is the usual case; Collapse to Subgraph on the node right-click menu never means anything else.
Name it for what it does. Glow, Crowd Setup, Audio-reactive Tint.
Diving in and back out
Double-click a subgraph to open the collapsed nodes on their own canvas. Edit them freely, then step back out to the parent graph.
Two terminal nodes mark the edges. An In node feeds the parent's inputs into the inner graph, and an Out node collects the results that become the subgraph's outputs. Only what you connect to an Out node leaves the subgraph, so the terminals are how you decide what the node exposes. Add more pins to either to surface more inputs or outputs.
Subgraphs nest 16 deep. Going past that, or wiring a subgraph so it contains itself directly or through another, is refused with the offending path named.
Edit in a window
Diving in swaps the whole canvas for the inner graph. Edit in Window, on the subgraph node's right-click menu, opens it in a floating editor instead: the inner nodes appear in a separate window you can move and resize, with the main graph still visible behind it. Use it when the subgraph reacts to upstream changes you need to watch live. The window shows that instance's own live results as the main composition cooks, so it is a view of what is really happening rather than a second copy running on its own.
The floating editor is a working canvas, not a preview. Tab opens the node palette over it and places into that graph, Cmd+F searches it, Cmd+A selects all, and Backspace deletes the selected nodes or wire. Everything you do there has its own undo history, scoped to that window. The one thing it will not do is dive again: a subgraph inside a floating editor has to be opened from the main canvas.
Editing the parent graph while you are inside a subgraph works too, and the In nodes pick the change up rather than serving a frozen copy of how the parent looked when you dived.
Surfacing controls
A control inside a subgraph can be exposed so it appears as an editable widget on the subgraph node's face, with no diving in. In nodes are what carry it: rename an In node by its title to name the exposed input, and an exposed control inherits the inner parameter's widget, default and range, so it behaves like a native control.
Expose the two or three settings that matter and leave the rest inside.
Saving a subgraph for reuse
Save a subgraph to the asset library to reuse it across projects. Saved subgraphs become .dna subgraph assets and show up in the Assets panel alongside images, videos, and other assets.
From the Assets panel, drag a subgraph onto the canvas to drop in a fresh copy, or search and browse by folder, name, or tag.
Each copy you place is its own instance, so changing one leaves the others alone. Subgraphs made in the project, and copies you embed, are written into the project file itself, so a .dna handed to someone else opens correctly on their machine. Ones still living in the asset library are referenced by id rather than embedded.
A subgraph can run its own timeline. Put a Timeline node inside and set its parent_mode to Independent, and the frame range, speed and frame rate fields wake up so the inside plays at its own tempo. The default, Match Parent, inherits everything.