Model Capture π₯
Save your whole loader stack once, delete it forever
- model
- clip
- vae
- model_negative
- sampler_settings
- report
A model in ComfyUI is rarely just a file. krea2 is a UNET plus a CLIP plus a VAE; z_image_turbo adds a ModelSamplingAuraFlow with its own shift; Ideogram adds a second unconditional model and a CFG override on top; old checkpoints carry CLIP and VAE inside. Every one of those is a mini-graph of loader and patch nodes, and swapping models means rewiring that stack and remembering which settings belonged to which - every single time. Model Capture is the one-time cost that ends that ritual: you wire a loader stack you already have working into this node, give it a name, and it stores the whole assembly in a library. Then you delete the loaders and call the model by name forever after, via the pack's Model Select node.
The mechanism is the impressive part, because it's not a list of known loader types - it hardcodes no node types at all. Capture walks its own inputs upstream through the queued prompt and stores that slice of the graph as the model's recipe; classes are looked up in ComfyUI's NODE_CLASS_MAPPINGS (the one registry that holds builtin and third-party, V1 and V3), so a model that ships tomorrow with its own custom loader works with no code change - as long as it was captured once. It also loads nothing: the inputs are declared lazy and never requested, so capturing a 40 GB assembly costs no VRAM and no time. You run it, it reports what it found, and nothing heavy ever touches the card.
The inputs that matter:
model_id- the stable id that becomes the label in Model Select's dropdown. Choose once; renaming later is done from the Manage dialog so presets follow.mode-previewfirst, always. Preview reports what it captured and writes nothing.registersaves the bundle, replacing this id's recipe while keeping its presets, families and notes.model- the finished MODEL after every patch; wire the last node of the chain.clipandvaeoptional (Capture notices when they share a loader node and Model Select makes one call for all three);model_negativefor the Ideogram-style second model.families- comma-separated family tags (e.g.flow-1024). Presets saved as SHARED for a family show up for every model in it, so one good recipe serves five finetunes without being copied.notes- free text shown in Model Select's info panel: what this model likes, its cfg range, its quirks.
Output is a single report - what it captured, what it refused, and why.
Installing
Ships in Kinburg-Nodes: ComfyUI Manager β search "Kinburg-Nodes", or clone into custom_nodes and restart. No extra dependencies for capture itself - it's graph introspection.
Gotchas
Capture is deliberately honest about what it won't store: anything needing execution context (hidden inputs), list in/out, subgraph expansion, or an output node gets refused by name and reason. Those assemblies stay in the graph - and that's what Model Select's model_override / clip_override / vae_override inputs are for, so you're never locked out. And a typo in families doesn't error - it just silently stops shared presets from appearing. Use the οΌ family picker instead of typing.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model_id | STRING | Stable id for this model β the label in Model Select's dropdown and the key its presets hang off. Choose it once; renaming later is done from the Manage dialog so the presets follow. | |
| mode | COMBO | preview | 'preview' reports what it captured and writes NOTHING (run this first). 'register' saves the bundle to the library, replacing this id's recipe while keeping its presets, families and notes. |
| modelopt | MODEL | The finished MODEL of this assembly β after every patch (shift, CFG override, β¦). Wire the last node of the chain. | |
| clipopt | CLIP | The CLIP for this model. For an old checkpoint that carries its own, wire it from the same loader β Capture notices they share a node and Model Select will make one call for all three. | |
| vaeopt | VAE | The VAE for this model (from its own loader, or from the checkpoint). | |
| model_negativeopt | MODEL | Optional second MODEL for the unconditional pass β for checkpoints shipped as a pair (Ideogram). Comes out of Model Select on its own output, ready for Chimera's 'model_negative'. | |
| familiesopt | STRING | Comma-separated families this model belongs to, e.g. 'flow-1024'. Presets saved as SHARED for a family show up for every model in it β that's how one 'good 12-step recipe' serves five models without being copied five times. Use the 'οΌ family' picker below to add one that already exists: a typo here doesn't error, it just quietly stops shared presets from showing up. | |
| notesopt | STRING | Free notes shown in Model Select's info β what this model likes: cfg range, scheduler, quirks. | |
| sampler_settingsopt | KINBURG_SAMPLER_CFG | Optional: a Sampler Settings chain to store as this model's FIRST preset, in the same run that registers it. Needs 'preset_name'. Later presets β the ones with a measured score and time β go through Settings Save instead. | |
| preset_nameopt | STRING | Name for the preset made from 'sampler_settings'. Empty = register the model only. Becomes the model's default preset when it is the only one. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| report | STRING | β |