Nodes/MediaMixer/Video Merge
ComfyUI Node

Video Merge

Stitch two clips into one longer video

By DoctorDiffusion·Created 2 years ago·Updated 2 years ago· 41
Video Merge
  • Video_A
  • Video_B
  • IMAGE

Video Merge does exactly one thing, and it does it in the place you need it: it takes two batches of frames and joins them end to end into a single longer batch. That's the whole node. If you've ever generated a five-second clip, extended it into a second five-second clip, and then needed to glue the two together inside ComfyUI without exporting, re-importing, and firing up a video editor - this is the node that saves you the round trip.

It's the anchor of DoctorDiffusion's MediaMixer pack, a small suite of video utility nodes. Nothing fancy, no models, no magic. Just the plumbing that makes multi-clip video workflows bearable.

The mental model: a video is a stack of frames

Here's the thing that trips up beginners. In ComfyUI there's no "video" type floating between nodes - a video is just a batch of IMAGE tensors, a stack of frames the sampler spat out in order. Once you internalize that, Video Merge is obvious: it concatenates two frame stacks along the frame dimension. Clip A's frames, then clip B's frames, one continuous sequence out the other side.

The README is refreshingly blunt about the intended use: plug your original render into Video_A, plug your continuation into Video_B, and out comes the combined, extended video. That's the video-extension loop in a nutshell - generate a base clip, use a frame selector to grab its last frame, feed that into an image-to-video pass (LTX-Video, CogVideoX, Wan, whatever you're running), then Merge the two halves back into one.

Inputs and outputs

There are only two inputs and one output, so there's not much to get wrong:

  • Video_A (IMAGE) - the first clip. Its frames land at the front.
  • Video_B (IMAGE) - the second clip. Its frames get appended after A's.

The single IMAGE output is the merged frame batch. It behaves like any other frame batch, so you wire it straight into a Video Combine node (from VideoHelperSuite) to mux it down to an actual mp4, or into another Video Merge if you're chaining three-plus clips into something long.

Order matters - A comes first, B comes second - so if your extended footage shows up before your original, swap the two inputs. That's usually the "bug."

Installing it

Two ways, same as the rest of MediaMixer. In ComfyUI Manager, search MediaMixer, install, restart. Or from a terminal:

cd ComfyUI/custom_nodes
git clone https://github.com/DoctorDiffusion/ComfyUI-MediaMixer.git
cd ComfyUI-MediaMixer
pip install -r requirements.txt

then restart ComfyUI. The pack's one real dependency is yt_dlp (for the YouTube node), which Video Merge itself doesn't touch - so even if that install hiccups, Merge still works.

Where people actually get burned

The failure isn't in the node, it's in the frames you hand it. Two things bite:

Mismatched dimensions. Concatenating frame stacks only works cleanly when both clips share the same width and height. If clip B came out of a different resolution than clip A, you'll get an error rather than a graceful stitch. Resize B to match A first.

The visible seam. This one's inherent to the extend-and-merge workflow, not to Merge. When you generate a continuation from the last frame of clip A, the second half almost always comes out slightly softer, and models love to quietly shift details - eye color, face shape - across the cut. People who chain clips this way hit it constantly; the usual mitigations are upscaling the handoff frame before the second generation and leaning on prompt weighting to preserve appearance. Merge faithfully joins whatever you give it, so the fix lives upstream.

And to be clear about scope: Video Merge joins frames. It doesn't handle audio and it doesn't blend or crossfade the boundary - it's a hard cut from A's last frame to B's first. For a seamless join you're relying on the frames themselves lining up, which is exactly why the frame-selector nodes in this pack exist.

Category🎬🔀MediaMixer

Inputs (2)

NameTypeDefaultDescription
Video_AIMAGE
Video_BIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE