Merge SeedVR2 Latents
Stitch the SeedVR2 chunks back into one video latent
- latents
- latent
The other half of ComfyUI's SeedVR2 video-chunking pair. Split SeedVR2 Latent carves a video latent into temporal pieces small enough to sample within VRAM; Merge SeedVR2 Latents turns the sampled chunks back into one full-length latent - and, if you set an overlap, crossfades the joins so you don't get a seam every N frames.
Why the crossfade matters
When a model samples each chunk in isolation, nothing forces the last frame of one chunk to agree with the first frame of the next. The result is exactly the frame-to-frame disagreement that makes per-chunk video look broken. Merge smooths it with a Hann-window blend over the overlap: flat shoulders on the outer thirds, a cosine fade through the middle, so each chunk hands off to the next gradually instead of cutting. It's a small thing, and it's the difference between "upscaled video" and "upscaled video with a visible heartbeat." If you've hit the "patterned wallpaper shimmers every few frames" failure that plagues video upscaling, this is the node designed to stop it at the chunk boundaries.
The inputs are a wire-and-forget pair
latents is the LIST that Split's latents output produced, in order. temporal_overlap wants the temporal_overlap INT output from Split, which is why the field is forced as a connected input - the node is explicitly telling you not to hand-type this. 0 means plain concatenation, no crossfade, which is correct only when you split with no overlap.
One output: latent, the recombined full-length latent, ready for VAE decode and the rest of your upscale pipeline.
The validation it does for you
Before stitching anything, Merge checks every chunk matches the first in batch, channels, height and width, and that only the final chunk may be shorter in time. Get that wrong and it raises a clear error instead of silently producing garbage. The crossfade is also bounded: if your last chunk is a runt shorter than the configured overlap, the fade shrinks to what actually exists, so you don't get the tail overwritten.
Ships with ComfyUI core since July 2026, same PR as Split; nothing to install.
How to break it (so you don't)
Realistically the only way to get into trouble is to separate it from its partner: feed it chunks that were sampled at different resolutions (you'll get a shape-mismatch error naming the offender), or retype the overlap instead of wiring it. If the output shows hard seams, check that the temporal_overlap actually reached Merge - with 0 it will happily concatenate and leave every boundary visible. Wire Split's output straight into Merge's input and the seams are the model's problem, not yours.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| latents | LATENT | The sampled temporal chunks in sequence order. | |
| temporal_overlap | INT | 00–16384 | The temporal_overlap output of Split SeedVR2 Latent. 0 = plain concatenation. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | The recombined full-length latent. |