ComfyUI Node

H3 Concat A/V

Stitch two stages into one take, and hide the focus snap between them

By jlucasmcrell·Created 21 days ago·Updated 2 days ago· 31
H3 Concat A/V
  • images_a
  • audio_a
  • images_b
  • audio_b
  • images
  • audio
match_bmatch_to_a

The two-stage episode render produces two finished segments: stage A (ref2va, establishing the scene and characters) and stage B (fl2va, the continuation chain). H3ConcatAV is the node that welds them into one file - video and audio, seam matched. It's the last stop before SaveVideo, and it exists because naively concatenating the two segments leaves a visible scar.

The scar is real and it's a property of the checkpoints, not a bug. Stage A renders on ref2va, whose soft reference conditioning pulls the image toward the refs' texture - a softer, more consumer-camcorder look. Stage B renders on fl2va, which is crisper with higher micro-contrast. Measured on an actual take, the seam between them was a +119..174% Laplacian sharpness step plus +5% luma. That's a visible focus snap mid-take, like the camera racked focus at exactly the moment you tried to hide a cut. Steps parity can't fix it, because you can't equalize two different checkpoints.

How it works

In: images_a and audio_a (required), images_b and audio_b (optional). Out: images and audio, the concatenated take. Leave images_b unconnected - or mute the stage B group - and it passes stage A through unchanged for a single-shot render.

The match_b switch (default match_to_a) is the clever part. When on, it measures the seam and matches segment B's texture down to segment A's: an auto-tuned gaussian (sigma searched until B's Laplacian lands on A's) plus a luma affine, done in float tensors before any encode. Matching downward is the correct direction - stage A's softer look is the intended aesthetic of the piece, so B gets blurred to meet it, not A sharpened to meet B. It skips itself when the seam is already within 15%, so you don't pay a blur pass on a clean join.

Install

Part of the H3 Multishot pack:

cd ComfyUI/custom_nodes
git clone https://github.com/jlucasmcrell/ComfyUI-H3-Multishot

or ComfyUI-Manager → H3 Multishot. Restart; ComfyUI v0.30.0+.

Two things to know before you queue. First, the stage B input is optional by design - the shipped workflow treats "no stage B" as "single shot," which is a nice escape hatch for testing. Second, if you're feeding this node from the two-pass upscale path, remember the resolution guard: both segments must be the same size, which is exactly why the pack ships H3IntScale to keep the round trip on-grid. Mismatched dimensions are the most common reason a ConcatAV run refuses to join.

Categoryvideo/minimax

Inputs (5)

NameTypeDefaultDescription
images_aIMAGE
audio_aAUDIO
images_boptIMAGEStage B. Leave unconnected, or MUTE the stage B group, for a single-shot render - stage A then passes through unchanged.
audio_boptAUDIO
match_boptCOMBOmatch_to_aMatch segment B's sharpness/tone to segment A at the seam (the two stages render on different checkpoints with different texture character).

Outputs (2)

NameTypeDescription
imagesIMAGE
audioAUDIO