🧩 H3 Relay · Join AV
The Concat Node You're Not Supposed to Wire Up
- images
- audio
- images_acc
- audio_acc
- images
- audio
- report
Here's a node whose own tooltip tells you not to use it. 🧩 H3 Relay · Join AV ships inside ComfyUI-H3-Latent-Relay and is deliberately hidden from the node menu - you won't find it by searching, and that's the design.
So why read on? Because you'll meet it two ways: as the thing deciding whether your multi-segment H3 film stitches cleanly, and as the answer to "why can't I just use the batch node?"
The short version
ComfyUI's own batch node is forgiving: hand it a small image and a big one and it will quietly stretch or pad the small one to fit. Fine for a demo, a trap for a film: you get a warped seam and no error explaining it. Join AV is the opposite - it checks frames match exactly and raises if they don't. Their framing, not mine: better not to stitch than to stitch wrong.
The other reason it exists as a node at all is structural. When the pack's Finite Run node expands a long run into one graph, the host only executes nodes from the registry, so tensor-level concat has to be a real node. The concat itself is torch.cat with checking on top.
What it does, mechanically
Two required inputs - images and audio - plus optional images_acc and audio_acc for what came before. Give it the accumulated stream plus this segment's trimmed output and you get one longer stream back.
For pictures it compares everything after the frame axis; mismatch means an error with both shapes printed, match means a torch.cat along frames. For audio it checks sample rate, then batch and channels, then concatenates along time. A different sample rate is an error, not a resample.
Three outputs: images, audio, report. The report is what you want when something looks wrong; it prints the running ledger, e.g. accumulated 170 + this segment 170 = 340 frames, with the audio sample count and rate alongside.
Note what isn't checked: audio length against picture length. A segment whose audio outruns its video almost always means someone wired VAEDecodeAudio straight to the save instead of through the pack's Trim AV node - and since Trim AV is what both trims head frames and hands trim_frames down the line, that seam drifts ~0.9 s per join and accumulates. The Chain-side merge checks for it before stitching; Join AV can't see it.
Where you should actually be
Skip this node. Two supported routes produce a finished film from several H3 segments, and neither involves wiring Join AV by hand:
- Finite Run - one submit, N segments, and its expanded graph already wires Join AV internally. Take
imagesandaudiointoCreateVideo→SaveVideo. - Chain's 🧩 button - the auto-run controller's "stitch into one", merging on the file path: video stream-copied packet by packet, audio realigned per segment, four assertions afterwards. Nothing stays resident.
That last word is the argument. Join AV accumulates by repeated torch.cat, so the whole film sits in memory once - total, not peak - and each new segment copies everything accumulated so far, O(N²) work. By the pack's own math, 37 segments lands at 16.2 GiB: a guaranteed OOM on a 12 GB card. The file route has no such ceiling.
If you genuinely want to wire it by hand
It's still registered - expanded graphs, saved workflows and /prompt payloads all reach it. The frontend just hides it behind a dev flag: enable Comfy.DevMode in settings and 🧩 appears in the menu. Then images and audio come from Trim AV, images_acc / audio_acc from the previous Join AV, and the first segment leaves the accumulators unconnected (it passes through untouched). Expect ~12 MB of latent sidecar per segment in output/relay_kit/<run_id>/, and frame counts that add up exactly - three 192-frame segments at a 22-frame window give 170 + 170 + 170 = 510.
Install, and the usual first-run snag
Nothing is special-cased for this node. ComfyUI Manager → search h3-latent-relay, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ZenHG/ComfyUI-H3-Latent-Relay.git
Restart the backend (not just the tab), and you need ComfyUI ≥ 0.35.0 with MiniMax-H3 support - continuation silently no-ops on older hosts. The pack is MIT, with no third-party node-pack dependency; the optional Latent Upscale composer from LBH-123-AI is irrelevant here.
The one thing that will bite you: "I enabled DevMode and still don't see it." Refresh the page properly. The ComfyUI frontend is a single-page app, so a stale tab keeps running the old extension bundle even after a full restart. Hard refresh before you go debugging the install.
Honestly, wiring this by hand for a real film is rebuilding the seam Finite Run or Chain builds for you, minus the memory ceiling.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | 【内部节点勿手接】⏩ Finite Run 自动接线;手动连拼接 Trim AV 画面。 | |
| audio | AUDIO | 【内部节点勿手接】⏩ Finite Run 自动接线;手动连拼接 Trim AV 音频。 | |
| images_accopt | IMAGE | 【累计画面】上一段拼到现在的画面。 首段不接;第 2 段起接上一个 Join AV 的 images 输出。 | |
| audio_accopt | AUDIO | 【累计音频】上一段拼到现在的音频,与累计画面成对使用。 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| report | STRING | — |