Loom Audio Out
Hand the sound back at the export stage
- loom
- LOOM
- AUDIO
- exists
If audio generation and processing live in different parts of your graph, Loom Audio Out is how they talk: the read node that pulls an AUDIO value back out of the loom stream wherever you need to play, save, or merge it.
Why you'd reach for it
Video and music workflows usually route audio through several stages - generate it here, normalize it there, merge it into the final render. Push the audio into the loom once at the generation stage, and every later stage starts with Loom Audio Out pulling the current version out. When one stage modifies the audio, it feeds the result back through Loom Audio In under the same label, and the export stage reads the updated version automatically. Same stream semantics as the image and latent nodes, just for a wire type people rarely organize.
It also keeps multiple audio streams from colliding: a voiceover label and a background label give you two distinct AUDIO keys in the same loom, so the merge stage can read both without either clobbering the other.
How it works
Standard loom lookup:
key = f"AUDIO_{label}" if label else "AUDIO"
if key not in loom:
return (loom, None, False)
return (loom, loom[key], loom[key] != None)
Reading doesn't remove the audio, so the same value can be read at several stages.
The outputs that matter
- AUDIO: the audio under that label, or
Noneif absent. - exists (BOOLEAN):
Truewhen the key exists. Your early-warning light for "the export is about to save silence." - LOOM: the loom, passed through unchanged.
Inputs are loom (LOOM, required) and label (string), matching the Loom Audio In that stored it.
Installing
Part of c4f-wire-loom. ComfyUI Manager → search "c4f-wire-loom" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Codes4Fun/c4f-wire-loom
No extra deps - the pack itself ships no audio libraries; it just routes whatever AUDIO objects your existing ComfyUI produces.
Where it bites
The classic silence-at-export bug traces straight back here: the export stage's Loom Audio Out runs on a loom that never received audio because the Loom Audio In sits after it in the stream, or the label doesn't match. exists = False catches both - if you see it, check label spelling and node order. One audio-specific note: audio stages can be expensive, so a stage that reads audio it doesn't change is wasted work; read late and re-insert immediately. Nodes 2.0's arrow-drag collapse quirk applies pack-wide, with the workaround shipped.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| loom | LOOM | — | |
| labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| LOOM | LOOM | — |
| AUDIO | AUDIO | — |
| exists | BOOLEAN | — |