Loom Clip In
Keep the text encoder with the model it belongs to
- loom
- clip
- LOOM
The CLIP wire is the quiet companion to the MODEL wire - you almost never think about it until you swap checkpoints and your conditioning breaks because the clip and model drifted apart. Loom Clip In bundles a CLIP into a LOOM stream so the text encoder travels with the model it belongs to.
Why you'd reach for it
In a model-selection workflow - the kind the c4f-wire-loom README's LongCat demo builds - the checkpoint and its clip are loaded together and should stay together. Put both into the same loom under their own keys (MODEL and CLIP), and when a sampler subgraph pulls out the model, it pulls out the matching clip too. Swap the selected model and the whole pair swaps as one unit instead of you hunting down a dangling clip wire.
That's the real payoff: group the model, clip, and VAE in one "model" loom, and the sampler subgraph that consumes them has a single tidy input. The clip becomes an implementation detail of the model selection, exactly where it belongs.
How it works
Same typed dict insert as every loom node:
key = f"CLIP_{label}" if label else "CLIP"
new_loom[key] = clip
return (new_loom,)
Empty label → CLIP; a label like edit → CLIP_edit. The matching Loom Clip Out must use the same label. When you drag a CLIP slot onto a collapsed Loom Split hub, the frontend auto-creates the node and sets the label.
The inputs that matter
- clip (CLIP): the text encoder from a checkpoint loader, or from a dedicated CLIP loader.
- label (string): the key. Empty for the standard clip, named if your graph genuinely uses more than one.
- loom (LOOM, optional): the bundle to extend.
Output is a single LOOM. Feed it through Loom Split or Loom Join, and pull the clip back out with Loom Clip Out right where you encode your prompt.
Installing
Part of c4f-wire-loom. ComfyUI Manager → search "c4f-wire-loom" → install → restart, or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/Codes4Fun/c4f-wire-loom
No model downloads, no requirements file - it's pure Python plus a small JS frontend.
Where it bites
The stream semantics are the trap: clip only reaches subgraphs downstream of the Loom In. And if you're only using one clip, leave the label empty so it stays under the predictable CLIP key - naming it inconsistently is how you end up with Loom Clip Out returning exists = False and wondering why your conditioning silently didn't happen. As with every node in the pack, the Nodes 2.0 frontend has the arrow-drag collapse quirk; the pack ships a workaround for it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| loomopt | LOOM | — | |
| clipopt | CLIP | — | |
| labelopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LOOM | LOOM | — |