SeedVR2 Video Path Upscaler (v2.5.24)
Upscale a real video file without turning it into a VRAM bomb
- video
- dit
- vae
- auto_settings
- video
- audio
Most ComfyUI video nodes cheat: they unload the whole clip into memory as one big IMAGE tensor and process it in a single pass. That's exactly how SeedVR2 earned its OOM reputation - video was the "you'll need a datacenter GPU" direction for months, while the same model quietly became the default image upscaler. The SeedVR2 Video Path Upscaler is this add-on's answer. It takes a native ComfyUI VIDEO, streams it through the model in bounded chunks, and hands back a file-backed video. The complete frame sequence never becomes an IMAGE tensor in your workflow at all.
How it works
Instead of loading the clip, it decodes frames lazily with PyAV, processes them chunk_size frames at a time (default 21), writes each finished chunk to an H.264 intermediate, and carries a few context frames (chunk_overlap, default 2) from the previous chunk so temporal seams don't show. Those context frames are stripped from the output, so duration stays exactly the same. Once the clip is done it muxes the source audio back in.
Because the model is genuinely temporally aware - the 4n+1 batch pattern isn't cargo cult, the model needs those frame counts for temporal consistency - it sidesteps the shimmer you get from a per-frame image upscaler on fine repeating texture. That's the whole reason to use SeedVR2 on video rather than any good image upscaler applied 24 times a second.
The inputs that matter
- video - a native
VIDEO, normally from core Load Video. File-backed and decoded only as needed. - dit / vae - model configurations from the main package's loaders, or from the sibling Auto Configurator in this pack.
- batch_size - frames processed together. Follows 4n+1: 1, 5, 9, 13, 17, 21… Default 5. Higher = better temporal consistency and speed, more VRAM.
- chunk_size - max source frames held in RAM at once (default 21). Set 0 to disable chunking and process the complete active video in one pass.
- resolution - short-edge target in pixels, aspect ratio preserved. max_resolution caps either dimension (0 = no limit) for extreme aspect ratios.
- color_correction -
labis the default and the recommended one;noneleaves the model's output uncorrected.
You can ignore most optional inputs, but temporary_video_crf (H.264 quality of the intermediate, default 18, lower is better) and offload_device (cpu default, for intermediate tensors between phases) matter if you're tuning. Connect auto_settings from the Auto Configurator and it overrides the corresponding controls above.
Outputs
- video - a file-backed upscaled H.264 video with the source audio embedded when present. Connects directly to core Save Video or any native-video save node.
- audio - the full, unchunked audio for the active source window as a separate AUDIO value, handy for alternate muxing or replacing the track.
Installing it
Same pack, same story: this is a companion add-on to the main numz/ComfyUI-SeedVR2_VideoUpscaler package - install that first, then:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-SeedVR2_VideoPathUpscaler.git
Install its requirements into your ComfyUI venv (.venv/bin/python -m pip install -r custom_nodes/ComfyUI-SeedVR2_VideoPathUpscaler/requirements.txt), restart. ComfyUI Manager finds it under the same pack title. Models auto-download to ComfyUI/models/SEEDVR2 on first use.
Gotchas
- chunk_overlap must be smaller than chunk_size - the node raises a clear error otherwise.
- Alpha isn't preserved. The H.264 intermediate is RGB only; if you need transparency, the main package's tensor upscaler is the path.
- Quant still matters. The standing community advice: FP16 if it fits - GGUF damages skin texture and FP8 can introduce tiling on some content, so don't judge SeedVR2 on a quant it wasn't meant for.
- Budget the compute. Even memory-bounded, video upscaling is expensive; community numbers put 720p→4K at roughly twelve minutes on a rented 48 GB L40S. Test a short clip with
enable_debugon before committing a long video. - PyAV (
av) does the file work here. ComfyUI bundles it so you're fine in the GUI, but the requirements.txt oddly omits it - if you ever run the pack's CLI standalone, you may need topip install avyourself.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | Native file-backed VIDEO, normally from Load Video or MiniMax H3 Full-Chain Latent Video Adapter. Frames are decoded only as needed, so the full clip does not become a ComfyUI IMAGE tensor. | |
| dit | SEEDVR2_DIT | DiT model configuration from a SeedVR2 model loader or Auto Configurator. | |
| vae | SEEDVR2_VAE | VAE model configuration from a SeedVR2 model loader or Auto Configurator. | |
| seed | INT | 420–4294967295 | Random seed for reproducible generation (default: 42). The same seed and inputs produce the same output. |
| resolution | INT | 108016–16384 | Target resolution for the shortest edge in pixels (default: 1080). The input aspect ratio is preserved automatically. |
| max_resolution | INT | 00–16384 | Maximum resolution of either output dimension (default: 0, no limit). Useful for limiting VRAM use with extreme aspect ratios. |
| batch_size | INT | 51–16384 | Frames processed together by SeedVR2 (default: 5). Use the 4n+1 pattern: 1, 5, 9, 13, 17, 21, ... Higher values generally improve temporal consistency and speed but use more VRAM. |
| chunk_size | INT | 210–4096 | Maximum source frames decoded and held in RAM at once. Set to 0 to disable file chunking and process the complete active video at once. |
| color_correction | COMBO | lab | Correct output color shifts to resemble the source (default: lab). LAB is recommended; choose none to preserve the model output unchanged. |
| chunk_overlapopt | INT | 20–32 | Raw context frames carried from the previous file chunk (default: 2). These context frames are removed from the output, so duration is unchanged. |
| uniform_batch_sizeopt | BOOLEAN | false | Pad the final model batch to batch_size (default: False). This adds compute but can prevent artifacts from a very small final batch. |
| temporal_overlapopt | INT | 00–16 | Overlapping frames between consecutive model batches (default: 0). Values from 1 to 4 can improve consistency across batch boundaries. |
| prepend_framesopt | INT | 00–32 | Frames mirrored before the beginning of the video (default: 0). This can reduce start-of-video artifacts; added frames are removed from the result. |
| input_noise_scaleopt | FLOAT | 0.0000–1 | Noise added to source frames before encoding (default: 0, disabled). Small values can help with some input artifacts. |
| latent_noise_scaleopt | FLOAT | 0.0000–1 | Noise added in latent space during diffusion (default: 0, disabled). This can soften details when input noise is not sufficient. |
| offload_deviceopt | COMBO | cpu | Device for intermediate tensors between processing phases (default: cpu). Use none to retain tensors on the inference GPU for maximum speed and VRAM use. |
| temporary_video_crfopt | INT | 180–51 | H.264 quality of the file-backed intermediate; lower is higher quality. |
| enable_debugopt | BOOLEAN | false | Enable detailed memory, timing, and processing logs. Useful when diagnosing errors or tuning performance. |
| auto_settingsopt | SEEDVR2_AUTO_SETTINGS | Optional runtime settings from SeedVR2 Video Path Auto Configurator. When connected, the configurator overrides the corresponding controls above. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | File-backed upscaled video with source audio preserved when present. |
| audio | AUDIO | Full unchunked audio from the active source video window. |