Skip to content

Frames & sub-workflows

Two nodes on the canvas never execute: the ▦ group frame and the ✎ note. Frames organize a graph; a frame that links to a saved graph also becomes a wiring shortcut.


Select nodes and group them, or drop an empty frame from the palette and drag nodes into it.

ControlEffect
double-click titlerename
drag cornersresize (min 180 × 120)
cycle color — gold · teal · terracotta · blue · gray
⊟ / ⊞collapse / expand
drag the framemembers travel with it

Membership is a tag on the member node, not just geometry. Dragging a node so its center lands inside a frame adopts it into the innermost containing frame; dragging it out releases it. Tagged members always move with the frame even if they overhang its bounds. Collapsing hides the members and leaves a compact title bar; the wiring stays intact. Ungrouping dissolves the frame, leaves the members in place, and drops any wires that touched the frame shell.

A plain group frame has no handles — it is purely visual.


Right-click a selection of two or more nodes → ⌗ save selection as sub-workflow.

What happens:

  1. A new graph of kind subgraph is created, named <graph> · sub.
  2. The selected nodes and the wires between them are copied into it, along with the workflow’s params so {{param:…}} still resolves.
  3. Back on the parent canvas, the selection is wrapped in a linked frame carrying the new graphId.
  4. The originals stay put and stay live — they keep running in place, now tagged as members of that frame.

Wires that crossed the selection boundary are not copied; they remain only in the parent graph, and the run log tells you how many.

Linked frames show and a sub-workflow tag in their title bar, plus two extra buttons: ⌗ open (or double-click) navigates to the sub-workflow tab, and re-syncs the frame’s members and internal wires from it. Structure and params follow the source; local layout of surviving members is kept; boundary wires survive as long as their member node still exists.

Subgraphs appear in the palette’s workflows tab — click to open, drag onto a canvas to embed as another linked frame.


Unlike plain frames, a linked frame has input and output handles, and wiring to it skips the usual node-pair validation. Edges are resolved onto real members just before the run:

EdgeResolves to
node → framebroadcast to every entry member
frame → nodefan-in from every exit member
frame → framezipped by y-order, so N×M never explodes into a cartesian product
  • Entry members are members no other member feeds.
  • Exit members are members that feed no other member.
  • Both are ordered top-to-bottom, then left-to-right.
  • A frame wire with no member on one side is silently dropped.

Boundary problems surface before the run starts, as frame warnings in loose ends:

sub-workflow "Review" has no member nodes
sub-workflow "Review" has inbound wires but no entry member
sub-workflow "Review" has outbound wires but no exit member

Muted and bypassed frames are not checked.


A sticky for annotating the canvas. Double-click to edit, cycles the same five colors, drag the corners to resize (min 140 × 80).

Notes never execute, never wire, and are skipped by the runner entirely. Every bundled example ships with one explaining what it teaches.