Skeba Combine Video Clips
Stitch chained H3 clips back into one video, and let it complain if they don't match
- accumulation
- video
- clip_count
Video chaining produces a problem nobody has in the single-clip world: you end up with several VIDEO objects and no clean way to make one film out of them. Skeba Combine Video Clips is that glue. It takes the accumulated VIDEO values a loop has been collecting - the ACCUMULATION input is the same one the Motion Context workflow's loop carries - and concatenates them into a single VIDEO output you can preview, save, or send downstream.
It's part of the ComfyUI-H3-Reference-Library pack (a.k.a. ComfyUI-Minimax-H3-Reference-Library), under Skeba AI Nodes - Utilities.
How it works
Under the hood it's built on ComfyUI's newer backend API (comfy_api's VideoFromComponents), so the node genuinely works with VIDEO objects rather than juggling raw tensors. The useful part is what it checks before it stitches:
- every clip must have the same frame rate
- every clip must have the same image dimensions
- every clip must have the same bit depth
- audio sample rates and channel layouts must match
- either every clip has audio or none do - no mixing silent and voiced clips
If any check fails, the node raises a clear error naming the offending clip number and the mismatch. It will not quietly produce a video that plays wrong. That's the right call for chained work: a resolution hiccup two clips in is exactly the kind of thing you want to catch at render, not in the edit.
One detail worth knowing: when it joins audio, it truncates each clip's audio to exactly sample_rate / frame_rate × frames - the precise duration that matches that clip's picture. That's the fix for the small H3 quirk where each clip carries roughly 8ms of extra audio because the model rounds its audio grid up. Left alone, that error accumulates at every join in a chain and your audio drifts forward. This node cancels it per clip.
Inputs are just accumulation (the loop's accumulated clips). Outputs are video (the joined VIDEO) and clip_count (how many clips went in - nice for sanity checks and filenames).
Why you'd reach for it
Anytime a workflow generates video in a loop and you want one deliverable out the other end. The obvious case is the SKEBA H3 Motion Context chain - each clip decoded separately, trimmed, and concatenated here - but it also applies to any batch workflow that produces multiple VIDEO objects you'd rather not hand-assemble in an external editor.
Installing it
ComfyUI Manager - search "Skeba" or "H3-Reference-Library" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/nikaskeba/ComfyUI-H3-Reference-Library
Restart ComfyUI. No extra Python dependencies and no model files. Because it leans on the newer comfy_api backend API, keep ComfyUI reasonably current - very old builds may not expose it.
Where people get burned
- The mismatch errors are features. If the node refuses to combine, it's telling you two clips don't agree on resolution or fps. With the latent path in Motion Context, a resolution change mid-chain is already refused upstream - but if you mixed decoded clips at different settings, this is where you find out.
- Mixed audio is a hard no. One silent clip among voiced ones aborts the join. Either give every clip audio or trim the silent one before it reaches the accumulation.
ACCUMULATIONis loop-specific. You can't just feed it twoVIDEOoutputs from random nodes; it expects the accumulated collection a loop node passes down. If you're not looping, you're probably reaching for the wrong node.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| accumulation | ACCUMULATION | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| clip_count | INT | — |