Split SeedVR2 Latent
How to make SeedVR2 video upscaling actually fit in VRAM
- latent
- latents
- temporal_overlap
SeedVR2 is the upscaler that took over the "add detail" job in 2026 - but the reputation it earned on video is a different story. Before these nodes existed, video upscaling was a "rent an L40S" affair: 720p to 4K took twelve minutes on a 48GB datacenter card, and on consumer GPUs the model was, in the community's own words, "famous for its OOM errors." SeedVR2TemporalChunk is the fix ComfyUI shipped in July 2026 for the consumer side of that problem: it splits the video latent into temporal chunks small enough to sample one at a time, and its sibling, SeedVR2TemporalMerge, stitches them back together.
How the splitting works
The mechanism is spatial tiling, except along time. The SeedVR2 video latent is a 5D tensor - batch × 16 channels × T latent frames × H × W - with 4x temporal downsampling, which is why pixel frame counts come in 4n+1 lengths (1, 5, 9, 13…). Chunk walks the T axis, carving out chunk_latent-frame pieces, optionally overlapping them, and hands you the pieces in sequence order.
Three inputs. latent is the VAE-encoded SeedVR2 latent you want to split. temporal_overlap (default 0) is how many latent frames adjacent chunks share - set it to something like 4–8 and the merge step will crossfade the seams; 0 means no shared frames, and you'll likely see hard boundaries at the join. chunking_mode is where the cleverness lives: manual exposes frames_per_chunk (default 21), which must be a 4n+1 number - 21, not 20, or it errors. auto ignores frames_per_chunk and predicts the biggest chunk that fits your free VRAM, using a memory law calibrated on an RTX 5090 with the 3B FP16 model plus a four-sigma safety margin so the OOM odds sit around 1e-5. If you're on the 7B or a different precision, auto's budget is approximate - it's tuned to the setup it was measured on.
The outputs that trip people up
latents is a list of LATENT chunks. Most ComfyUI latents are single tensors; this one is several, so don't reach for a single-tensor consumer and wonder where the rest went. Wire the list into both Apply SeedVR2 Conditioning and the sampler's latent input, then run the sampled chunks into Merge SeedVR2 Latents. The temporal_overlap output is an INT you feed straight into Merge - don't retype it, don't guess it.
Getting it and troubleshooting
It ships with ComfyUI core since mid-July 2026; nothing to install. The SeedVR2 checkpoint goes in ComfyUI/models/diffusion_models, and load it FP16 - the community's single most useful finding is that GGUF damages skin and FP8 leaves tiling grids, so judge the output on FP16 before you blame the chunking.
Two things to expect. If your clip fits in one chunk, the node passes the latent through untouched with an overlap of 0 - no harm, no benefit, and Merge will plain-concatenate it back, so don't chase an error that isn't there. And if you run 7B or a quantized variant, treat auto as a starting point rather than gospel; the calibration is for 3B FP16 on a 5090.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | The VAE-encoded SeedVR2 latent to split. | |
| temporal_overlap | INT | 00–16384 | Latent frames shared between adjacent chunks and crossfaded at merge; 0 = no overlap. |
| chunking_mode | COMBO | manual = use frames_per_chunk exactly; auto = predict the largest chunk that fits free VRAM. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latents | LATENT | The temporal chunks in sequence order. |
| temporal_overlap | INT | The effective latent-frame overlap between adjacent chunks, for Merge SeedVR2 Latents. |