How a workflow becomes atoms

Importing is a carve: you choose a boundary inside someone's ComfyUI workflow, and everything follows from where it falls. Links wholly inside survive; links it cuts become the atom's inputs and outputs. This walks one real carve — ltx_i2v out of the full LTX pipeline — a stage at a time.

The eight links cut here are the same ones the composition explainer shows being wired back to ltx_models at generate time. One boundary, two directions.

Every link, classified

Relative to the selection, a link can only be one of three things. That is the whole of the carve.

  • Internal54 links

    both ends inside the carve

    stay as [id, slot] references

  • Dangling input8 links

    the source is outside

    __INPUT_<name>__ + boundary_inputs (type, node, class)

  • Dangling output2 links

    the destination is outside

    exit_slots, deduped by node:slot

Counts are the real ones for ltx_i2v as the library holds it today.

Carving ltx_i2v out of an LTX workflowModels groupnot selectedmodel_unetMODELclipCLIPvae_videoVAEvae_audioVAEvae_previewVAEupscale_modelLATENT_UPSCALE_MODELLoadImagenot selectedIMAGEIMAGESet/Get · bypassltx_i2v nodes39 nodes · 54 internal linksCLIPTextEncodeLTXVImgToVideoInplaceLTXVConcatAVLatentVAEDecodeTiledImageResizeKJv2…34 moreinternal links stay as [id, slot]SaveVideonot selected — so these become exit slotscarveltx_i2v.atom.mdthe emitted atom
1 / 7

The source

A ComfyUI workflow export — the UI-format JSON, exactly as the host saved it.

When a Save (API Format) export is supplied alongside it, that becomes the authoritative widget source, matched to the UI export by node id. The UI export still drives group membership and link topology, because only it has them.

Why the boundary is the whole decision

Both of the library's real failure modes come from a boundary nobody could see. A carve that cuts a model link without anyone noticing produces an atom that looks healthy and cannot compose — that is what boundary_inputs and the incomplete verdict exist to catch. A carve that drops a dependency on a part you did not select produces an atom that never declares what it needs.

Cutting along a native ComfyUI Subgraph avoids most of this: its declared boundary maps straight onto the atom's ports, with no bounding-box inference.

What else the carve decides

Editor-only nodes are dropped, a forceInput input is a link rather than a widget, and a node that writes text (SaveText) counts as an output. The capabilities an atom requires are inferred from what the carve cut, which is why ltx_i2v declares ltx_models.

The values the source workflow had for each open input are kept as the atom'ssuggested_defaults — and at generate time they beat the global defaults. A seed is deliberately never carried over.

A carve is not the only way an item is born. A session's chain, or an agent-made plan, can be promoted to a workflow (with its plan, since MIL-1016), and http andagent atoms have no graph to carve at all.

Source of truth for this page: packages/atom-converter(convertWorkflowToAtom, classifyWires, resolveRouting). The counts shown are the real ones for ltx_i2v as the library holds it today.