After twenty variations the good one from ten minutes ago is unfindable — iteration history is a flat scroll, or nothing at all.
Generation Tree
Every variant remembers where it came from
After twenty variations, the good one from ten minutes ago is unfindable — iteration history is a flat scroll, or nothing at all. Generation Tree renders the work's real topology: every variant hangs off its parent, branches stay comparable, and any node restores its full state — prompt, seed, settings — in one click. The chat fork, applied to the medium where branching is the actual shape of the work.
Metaphor
Family Tree
Interaction
Branching Nodes, Click-to-Restore, Side-by-Side Compare
Use case
Image Iteration, Design Exploration, Variant Management
Failure mode
Lost Lineage
Control mechanisms
Lineage Graph · Node Thumbnails · Branch Labels · Restore-Full-State · Two-Node Compare
Reference examples
ComfyUI node graph · Midjourney vary & remix lineage · Figma branching
Interactive Example
The live side-by-side is the comparison.
This prototype already contains the contrast between chat and the pattern response. It stands as the primary comparison surface for this page.
The lineage already exists. The scroll simply never draws it.
The chat column stacks seven generations by clock time. Three creative directions — warmer, cooler, more trees — sit interleaved among them, so the warm one with more trees has no address: the fourth? the fifth? Scroll back far enough to find the thumbnail and the seed and settings that made it are gone.
Each generation gets an address on the graph: a parent, an edge naming its single change (+warmer, square crop, denser sky), and a state that restores exactly rather than approximately — prompt, seed #31007, warmth 74, crop wide. Two cmp checkboxes turn a squint into a settings diff, and abandoned branches stay dim on the map instead of gone.
None of this is new information. A vary job already records the job it came from; the graph is thrown away by the renderer, not by the model. What the move costs is curation — an unpruned map is as unfindable as the scroll it replaced — which is why the demo caps the canvas at twelve nodes and hangs a × on every leaf.
Order of arrival is the weakest possible index for work whose real structure is descent.
DOPE Lens
How this pattern improves AI interaction quality.
Observability
The lineage is the interface: which variant came from which, and where each branch was abandoned, is visible at a glance
Directability
Any node is a restart point — click to restore its full state and branch from there, no retyping the past
Predictability
Restoring a node reproduces its exact state — parent, prompt, seed, settings — not an approximation from memory
Explainability
Each edge names what changed between parent and child, so the path to the good variant reads as a decision log
Fit
Where it earns its place.
when
Iteration produces many variants across diverging directions and the good ones must stay findable and restorable.
when
Single-shot generation with no iteration to track.
In the wild
Where this pattern already ships.
The pattern is shipping but still maturing across products. Entries below show how different teams have approached it; expect variation as the space settles.

ComfyUI · Node graph
Comfy Org
The generation pipeline as an explicit graph — lineage is the interface. Power-tool register: it shows the topology the pattern wants, at the cost of approachability.
Visit Comfy Org ↗

Midjourney · Vary & remix lineage
Midjourney
Every vary/remix job links back to its parent job — the lineage exists in the data and job history, but no tree view renders it navigable.
Visit Midjourney ↗

Figma · Branching
Figma
Named branches off a main file with review-and-merge — design iteration as a tree, though per-file rather than per-generation.
Visit Figma ↗
Research Frame
Why this pattern exists, and where it breaks.
Render generations as a tree: every variant hangs off its parent, branches stay comparable, and any node restores its full state in one click.
Chat scrollback is a single line while visual iteration branches — the topology of the work does not fit the container.
Unbounded trees become their own navigation problem — prune, collapse, and name branches, or the map ends up as unfindable as the scroll it replaced.
Common questions
What people ask about this pattern.
When should I use the Generation Tree pattern?
+
Iteration produces many variants across diverging directions and the good ones must stay findable and restorable.
When should I avoid the Generation Tree pattern?
+
Single-shot generation with no iteration to track.
What problem does Generation Tree solve?
+
After twenty variations the good one from ten minutes ago is unfindable — iteration history is a flat scroll, or nothing at all.
Why is chat the wrong fit for this?
+
Chat scrollback is a single line while visual iteration branches — the topology of the work does not fit the container.
Related Patterns
Curated connections, not just neighbors.
Hand-picked relationships — what this pattern pairs with in practice, what it replaces, what it builds on, and what builds on it.
Alternative to
Output-Level Undo
Output-Level Undo walks back one linear history with Cmd+Z; Generation Tree keeps every branch and restores any node.
Extends
Conversation Branches
The chat fork, applied to visual artifacts — where branching is the actual shape of the work.