SeedVR2 Video Upscaler
The all-in-one detail upscaler
- images
- block_swap_config
- image
SeedVR2 is the upscaler you reach for when you want real detail added to an image - pores, lashes, fabric weave - without the model reinventing the subject the way SUPIR does. It's ByteDance's one-step video restoration model, released Apache 2.0 (so it's fine in commercial pipelines), and it's been the community's default "add detail" upscaler for about a year. Despite the "Video Upscaler" name, most people run it on single images, because a 3x image upscale runs on a 6GB card while the video path really wants a rented datacenter GPU.
This particular node is the original all-in-one version: model choice, resolution, batch size, and memory settings all live in one box. Newer releases of the pack split that job across separate loader and upscaler nodes for finer control, but if you found this one, it still does the whole thing end to end - feed it frames, get upscaled frames back. Simpler to wire, less to think about.
What it is and how it works
Under the hood SeedVR2 is a one-step diffusion restoration model with window attention that adapts to your input resolution. "One-step" is the important part: it's fast enough to sit inside a normal generation workflow instead of being a separate overnight job. It preserves what's already in the picture and rebuilds fine detail on top, which is exactly why it took over restoration work involving real faces - it adds detail without swapping identities.
Where it beats the old tile-based upscalers is that it's often both faster and better than something like Ultimate SD Upscale, which is not the usual trade. Where it's the wrong tool: genuinely damaged sources (heavy compression, blur) where you want repair, not preservation - that's still SUPIR's job.
The inputs that matter
- images - your input frames as an image batch. A single image is fine.
- model - pick your weights. You get 3B (faster, lighter on VRAM) and 7B (higher quality, hungrier), each in FP16 or FP8, plus two 7B "sharp" variants for extra detail. FP16 is the clean one; FP8 is smaller but can stamp faint tiling grids into the image, so reach for FP16 if it fits. The sharp models push detail harder but can tip plasticky on faces - great for landscapes, careful with portraits. Weights auto-download from HuggingFace on first use into
ComfyUI/models/SEEDVR2, so the first run is slow, then cached. - new_resolution - target for the shortest edge (default
1072), aspect ratio preserved. This is your "how big" dial. - batch_size - default
5, and it has a hard rule: it must follow the 4n+1 formula - 1, 5, 9, 13, 17, 21… The model needs that shape for its temporal consistency math. Use1for a single still; for video, bigger batches are actually faster per frame and more coherent, but cost more VRAM.
seed (default 100) just makes results reproducible - same seed, same input, same output.
Fitting it on your GPU
Two inputs handle memory pressure:
- preserve_vram - a toggle that trims peak VRAM at the cost of some speed. Flip it on if you're close to the edge.
- block_swap_config - the optional BlockSwap input. Connect a block-swap config and it streams transformer blocks between GPU and CPU during inference, which is what lets big models run on small cards. This is the heavy lever for genuine low-VRAM setups. (Note: BlockSwap is meaningless on Apple Silicon Macs, where CPU and GPU already share memory.)
The output is a single image batch, normalized for ComfyUI and matching your input's RGB/RGBA format - wire it into Save Image.
Install and the honest caveats
Install through ComfyUI Manager (search "ComfyUI-SeedVR2_VideoUpscaler," install, restart) or clone it manually: cd ComfyUI && git clone https://github.com/numz/ComfyUI-SeedVR2_VideoUpscaler.git custom_nodes/seedvr2_videoupscaler, install its requirements.txt with your ComfyUI Python, and restart. It expects Python 3.12+ and PyTorch 2.0+.
The three things that catch people: it was famous for OOM errors early on - if you hit one, turn on preserve_vram and connect a block_swap_config before you go reducing resolution or batch size. It lifts contrast, sometimes enough that the output reads as more obviously AI-generated than the input, so compare before/after. And on close-up faces it can turn skin plasticky or scaly - the community's bluntest verdict was "human to lizard upscaler." Give recognizable faces their own pass with ADetailer or inpainting rather than trusting one run on a portrait. Judge SeedVR2 on an FP16 model on a clean source and it earns the hype; judge it on a heavy quant of a damaged face and you'll wonder what everyone's on about.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| model | COMBO | seedvr2_ema_3b_fp8_e4m3fn.safetensors | 6 options: seedvr2_ema_3b_fp16.safetensors, seedvr2_ema_3b_fp8_e4m3fn.safetensors, seedvr2_ema_7b_fp16.safetensors, seedvr2_ema_7b_fp8_e4m3fn.safetensors, seedvr2_ema_7b_sharp_fp16.safetensors, seedvr2_ema_7b_sharp_fp8_e4m3fn.safetensors |
| seed | INT | 1000–4294967295 | Random seed for generation reproducibility |
| new_resolution | INT | 107216–4320 | Target new resolution for upscaled video |
| batch_size | INT | 51–2048 | Number of frames to process per batch (recommend 4n+1 format) |
| preserve_vram | BOOLEAN | false | — |
| block_swap_configopt | block_swap_config | Optional BlockSwap configuration for low VRAM mode |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |