Glide Join
Glide Join turns H3's few seconds at a time into an actual scene
- images
- audio
- images
- audio
- frame_count
H3 gives you a few seconds per clip. That's fine for a single shot; it's useless for a scene. The ComfyUI-CGlide answer is to anchor the tail of the previous clip with H3 Studio's CONTINUE FROM slot - so the model picks up the motion and sound where the last clip ended - and then let Glide Join assemble the continuation onto the source. This is the node that turns a pile of 4-second clips into one continuous take.
The wiring is deliberately boring. H3 Studio hands you overlap_frames and source_video; you run them across to this node, decode the continuation's frames with VAE Decode, and feed those to images. Then Glide Join's output goes to Glide Video. Change the window in the node and the join follows, because the window length is typed in one place.
The inputs that matter
source_video- the clip this continues from. Wire H3 Studio'ssource_videooutput, don't hand-type a path.images- the continuation's decoded frames, untrimmed. The anchored head must still be on them; if you crop it off before this node, the join has nothing to line up.overlap_frames- how many frames are anchored from the source (default 22). Keep it in sync with what H3 Studio actually anchored.seam_mode- the one you'll actually think about.early_cutkeeps the continuation's version of the overlap and colour-matches it against the source: one continuous model trajectory, so motion carries best.early_scurveis the same join ramped overseam_blend_framesfor when the speed change at the cut is visible.hard_cutkeeps the source's own frames and drops the re-rendered head.match_levels(on by default) - the model re-renders the overlap in its own colour, so this fits gain and offset per frame against the source and holds the last fit afterwards. Leave it on.match_tail(on by default) - H3 rounds its audio grid up, so every clip ships about 8ms more sound than picture. That grows at every join; this truncates the audio to exactly frames/fps.
Outputs are images, audio, and frame_count. The audio comes from VAEDecodeAudio, cut to match the picture and appended to the source's own track.
Where people get burned: the chroma badge
There's a small badge on the continuation waveform - green for 4:4:4 and 4:2:2, orange for 4:2:0. It's not decoration. The author chased a recurring frame correspondence was off by -2 for a while before finding the cause: he was chaining from an AV1 file, and AV1 is 4:2:0 - three quarters of the colour is gone before the model ever reads those frames. A weaker guide makes a less exact anchor. Rendered as H.264 4:4:4 (or ProRes, 4:2:2), the correction line vanished.
So the rule: don't chain from a 4:2:0 file. That's why Glide Video's 4:4:4 and lossless presets exist - they're not just for grading. If you're wondering why a join keeps coming back slightly out of sync, check the badge before you touch seam settings. Note this only applies to the guide path; a look-reference video carries no timing, so the same 4:2:0 file that makes a bad guide is a perfectly fine reference.
Two design decisions worth knowing. The window is locked to the tail of the clip on purpose - a window from the middle produces material that follows from the middle, and splicing that after the last frame skips everything between, which reads as a hard cut no seam mode can fix. And colour drift down a chain is real but small when the window is a true tail; if you see a step at the join, suspect motion before you suspect colour.
Install
Same as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/CGlide/ComfyUI-CGlide
Restart ComfyUI. It needs no extra Python packages beyond PyAV and torchaudio (both usually already present with ComfyUI), and the pack relies on a reasonably current ComfyUI - update it before you blame the node.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| source_video | STRING | The clip this one continues from. Wire H3 Studio's source_video output. | |
| images | IMAGE | The continuation's decoded frames, untrimmed - the anchored head must still be on them. | |
| overlap_frames | INT | 220–4096 | Frames anchored from the source. Wire H3 Studio's trim_frames output so it always matches what was actually anchored. |
| seam_mode | COMBO | early_cut | early_cut: keep the continuation's overlap and colour it against the source - one continuous model trajectory, so motion carries better. early_scurve: the same join ramped over a few frames, for when the speed change is visible. hard_cut: keep the source's own frames instead and drop the re-rendered head. |
| seam_blend_frames | INT | 61–64 | Ramp length for early_scurve. Ignored otherwise. |
| match_levels | BOOLEAN | true | Fit the continuation's gain and offset onto the source, frame by frame across the overlap and held after it. Frame correspondence is checked first, and reported if it was out. |
| audioopt | AUDIO | The continuation's audio, untrimmed. Cut to match the picture and appended to the source's own track. | |
| fpsopt | FLOAT | 24.0001–240 | Must match what you feed Glide Video. |
| match_tailopt | BOOLEAN | true | Truncate the audio to exactly frames/fps. H3 rounds its audio grid up, so every clip ships about 8ms more sound than picture and that grows at every join. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| frame_count | INT | — |