2026-06-09 19:20:07 -07:00
2026-06-09 13:39:00 -07:00
2026-06-09 13:39:00 -07:00
2026-06-09 19:20:07 -07:00

Loom Wire Nodes

The purpose of a wire loom (also known as a wire sleeve) is to organize, bundle, and protect wires. It can declutter your workflow, but also makes subgraphs more useful for creating custom interfaces.

What are the advantages of these over Set/Get Nodes? There is a lot of overlap but it simplifies some things better.

Status

It's completely functional but needs some optimization.

Nodes 2.0 has bugs that make using loom nodes a little harder, for example if you try to move a node by clicking and dragging the arrow icon, Nodes 2.0 will toggle node collapse, something that doesn't happen to the original node system. I may create a workaround for that issue.

Detailed Description

Let's say we want to organize our nodes such that we have a bunch related to our prompts, image resolution, batch, and seed control. Another group for model related settings. And finally nodes for sampling. You would end up with something like this:

sorted

If you tried to make that into subgraphs you would end up with this:

without-wire-loom

If you use looms your graph will look like this:

sorted-loomed

And if convert your groups into subgraphs and connect up the widgets you can end up with this:

with-wire-loom

To take that a step further you could use the same prompt subgraph to go through multiple model/sampler subgraphs:

loom-iso-example

The basic nodes are:

  • Loom In - inserts any kind of wire into the loom.
  • Loom Out - gets any kind of wire in the loom.
  • Loom Join - joins two looms, the second loom will override conflicting wires.
  • Loom Split - a beauty node, that allows wires to go out in multiple directions.

There are type specific nodes that prepend the type to the label to avoid name collisions, like nodes for the IMAGE type is named Loom Image In and Loom Image Out, and if a label is not provided it will automatically use "IMAGE" and if a label is provided like "image2" it will stored/retreived in the loom as "IMAGE_image2". The supported types are MODEL, CLIP, VAE, CONDITIONING, IMAGE, AUDIO, LATENT, SAMPLER, SIGMAS, NOISE.

Simple Tutorial

I recommend starting off by placing Loom Split nodes and linking them together (tip: holding alt-key and click dragging automatically clones a node):

tutorial-1

And then collapse the Loom Split nodes by hitting their upper-left arrows, and adjusting them to create straight lines (tip: enabling snap mode makes that easier):

tutorial-2

Now you can drag node input and output slots onto the loom and it will automatically create an appropriate loom nodes collapsed. For example Load Image and Preview Image can be attached and you can run them and they should just work.

tutorial-3

This will work for MODEL, CLIP, VAE, CONDITIONING, IMAGE, AUDIO, LATENT, SAMPLER, SIGMAS, NOISE, for other kinds of slots and widgets it defaults to a generic loom node requiring labels.

If you needed to add a second image, you would need to uncollapse the nodes and change their labels:

tutorial-4

In regard to labels, if you rename the widgets (a right click menu option) of Int primitive nodes or Float primitive nodes, it will automatically take the widget name as the label when first attaching them to the loom (note: it doesn't update after it's been attached). So for example renaming a Float nodes widget to cfg:

tutorial-5

Attaching the Float node would then automatically set renamed widget as it's label when first created. Also nodes with widgets like the CFG Guider node for example, will automatically take the widget label when connected to the loom:

tutorial-6

Lens Example, that allows you to select turbo with a boolean widget

lens-prompt lens-model lens-sampler-subgraph
S
Description
No description provided
Readme
132 KiB
Languages
JavaScript 80.6%
Python 17.7%
CSS 1.7%