APNext H3 Scenes Join
Ten scene clips, one video file
- images
- audio
- replace_audio
- images
- audio
- frame_count
- scene_count
Here's the annoying thing about batch workflows in ComfyUI: when the H3 Crossover or Scenes Writer hands you a scenes list, the video node on the other end runs once per element - and if you put a Save Video after it, you get one video file per scene. Ten scenes, ten files, and then you get to figure out how to stitch them in an editor. APNext H3 Scenes Join is the fix: drop it between the per-scene VAE Decode and a single Create Video → Save Video, and one queue run writes one continuous video.
It does the mechanical stitching work nobody wants to do by hand. The per-scene IMAGE batches are concatenated in order into one frame batch; the per-scene AUDIO tracks (from VAE Decode Audio) are joined in the same order, with sample rate and channel count unified to the first scene's. Out the other side you get one images batch and one audio track ready for Create Video.
The inputs that matter
images- the per-scene frame batches. Wire theVAE Decodeoutput that runs once per scene into this socket (it's a list input; ComfyUI collects them).crossfade_frames- 0 is a hard cut; N overlaps the last N frames of one scene with the first N of the next and blends them. It shortens the total by N frames per cut and trims the audio to match, so A/V stays aligned. This is where "one video" turns into "a video that actually cuts like a video."size_mismatch- what to do when scenes come back at different resolutions: resize strays to the first scene's resolution, or error out. "Error" sounds harsh but it's the honest option - silently resizing mid-cut is how you get that soft, wrong-looking clip.audio(optional) - the per-scene audio list, if your scenes have sound.replace_audio(optional) - swap the joined per-scene audio for a single track of your own. This is the Music Video Writer's finishing move: the whole video plays against the original song instead of whatever the model hallucinated per clip.
Outputs: images, audio, frame_count, and scene_count - the last two are handy for feeding frame math or a filename.
Wiring it up
[per-scene VAE Decode] ─IMAGE list─► [H3 Scenes Join] ─images/audio─► [Create Video] ─► [Save Video]
[per-scene VAE Decode Audio] ─AUDIO list─┘
The pack ships h3_scenes_batch.json and h3_crossover_batch.json with exactly this wired in, so the fastest path is: drag one of those onto the canvas and see it in action.
Installing and gotchas
Same pack as everything H3: ComfyUI Manager → search comfyui_dagthomas, or git clone https://github.com/dagthomas/comfyui_dagthomas into custom_nodes + pip install -r requirements.txt, then restart. Node lives under APNext → H3.
Two things trip people up. First, this joins rendered clips - you need a VAE Decode per scene feeding images, not the writer's prompt list. Second, scene-to-scene continuity (scene N's last frames flowing into scene N+1) is not what this node does; it hard-stiches. For true continuity across joins, that's what the Contex Loop route (via H3 Scenes → Contex Loop Plan) or the Continue Writer is for.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Per-scene frame batches (connect the VAE Decode output that runs once per scene). | |
| crossfade_frames | INT | 00–120 | 0 = hard cuts. N = overlap the last N frames of a scene with the first N of the next and blend them (shortens the total by N frames per cut). |
| size_mismatch | COMBO | resize to first scene | What to do if scenes come out at different resolutions. |
| audioopt | AUDIO | Per-scene audio (the VAE Decode Audio output). Joined in the same order; sample rates are unified to the first scene's. | |
| replace_audioopt | AUDIO | Use this track as the whole video's soundtrack instead of the joined per-scene audio - e.g. the original song from the H3 Music Video Writer. Connect ONE audio here (not a per-scene list). |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| frame_count | INT | — |
| scene_count | INT | — |