RTX VSR Long Video
NVIDIA Hardware Upscaling for Footage That Won't Fit in RAM
- video
- video_path
- report
- video
"Upscaling" is three different jobs wearing one word. NVIDIA's RTX Video Super Resolution is the pixels-only one: it interpolates and cleans, it does not invent. Community testing lands on the same verdict every time - closer to a very good Lanczos than to a diffusion model, more "natural" than SeedVR2 on already-clean sources, and it will not add pores, lashes or fabric weave. On a clip you generated at 480p and just want bigger and sharper, that's exactly right. On a genuinely degraded 240p source it isn't the tool; go get SeedVR2 or FlashVSR.
So why a second pack when the official Comfy-Org/Nvidia_RTX_Nodes_ComfyUI nodes exist? The word "long". The official node runs a real-time pass over video that has to be materialized as frames - feed it a two-minute 1080p clip and you're holding tens of gigabytes of decoded RGB. This pack exists to make the same NVIDIA SDK effect survive video that doesn't fit in RAM.
How it works
It's a disk-backed pipeline, in the boring-and-correct sense. The node reads your source with FFmpeg as a raw RGB24 stream, feeds frames to NVIDIA's nvvfx SDK VideoSuperRes effect in batches, encodes each batch to a temporary .mkv segment on disk, and concatenates those segments into one MP4 at the end. Only one chunk - frames_per_chunk worth, 48 by default - is ever in RAM: roughly 300MB at 1080p instead of the whole timeline.
Two details worth knowing. Audio comes along for the ride (stream-copied, with an AAC fallback if the source codec won't sit in an MP4), and the final MP4 is never re-encoded. Dimensions for upscale modes round to a multiple of 8, which the SDK wants, capped at 8192px per axis.
If your input is a file-backed Load Video, the node reads that file directly. Anything trimmed, cropped, or generated elsewhere gets exported to a temp MP4 via save_to() first, so your trim is honored rather than ignored.
The inputs that matter
Most runs are: wire video, set scale, set quality, hit queue.
- video - the
VIDEOoutput from Load Video. Generated video works too, staged to disk first. - scale - 1.0x to 4.0x. Ignored entirely for DEBLUR/DENOISE quality modes, which keep the input resolution.
- quality - 19 choices, and picking the family is the whole game.
HIGHBITRATE_*for clean sources,STREAMING_*for compressed web video,DEBLUR_*/DENOISE_*for restoration without upscaling. DefaultHIGHBITRATE_HIGH. - strength - 0 to 1, how hard the effect hits. Back off if it looks over-sharpened.
- preprocess + preprocess_strength - the trick people miss. A second VSR effect at the original resolution, before the main pass. Deblur-then-VSR is the two-pass recipe the community settled on for AI-generated footage; try it before shopping for another upscaler.
- frames_per_chunk - 4 to 240, default 48. Smaller means less peak RAM and more temp files; go 16–24 if memory is tight.
- encoder -
h264_nvenc(default),hevc_nvenc, orlibx264. No automatic fallback; you pick it.
Three outputs: video_path (the written MP4, in ComfyUI/output/NVIDIA_RTX_VSR_Long_Video/), report - a one-liner like 1204 frames, 3840x2160, 1204 processed, 26 segments, 91.3s, useful for knowing where the time went - and video, a native file-backed VIDEO you can wire onward into a Save node. It's an output node with a built-in preview, too.
Installing it
Via ComfyUI Manager, search the pack title. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/tritant/ComfyUI_NVIDIA_RTX_VSR_Long_Video.git
cd ComfyUI_NVIDIA_RTX_VSR_Long_Video
python -m pip install -r requirements.txt
That pulls nvidia-vfx>=0.2.0.0, imageio-ffmpeg, and numpy, and needs an RTX GPU on a working CUDA/PyTorch ComfyUI install. No model files - the VSR models ship with the SDK.
Where it bites
nvidia-vfx fails to install and the node shows (IMPORT FAILED). Welcome to the pack's signature problem, and it isn't the pack's fault - pip struggles to build it from the default index. Install it by hand:
python -m pip install -U --no-build-isolation nvidia-vfx --index-url https://pypi.nvidia.com
On Windows portable, run that as python_embeded\python.exe -m pip install ... from the ComfyUI root. People hit this with the official RTX nodes too, and this is the fix that works.
"No FFmpeg executable supporting 'h264_nvenc' was found." The bundled imageio-ffmpeg binary often lacks NVENC. The node checks your system ffmpeg on PATH first and refuses to quietly swap your codec - so put a full NVENC-enabled FFmpeg on PATH, or explicitly pick libx264 (CPU, slower).
You asked for 4x and it refuses to start. h264_nvenc tops out at 4096px per axis, so 4x on 1080p lands at 7680x4320 and needs hevc_nvenc (8192 max on 40-series). The node checks before frame one, which is the polite version of that failure.
Nothing is cached, and Queue Prompt always reruns. IS_CHANGED returns nan deliberately so a re-queue really re-processes - a strength tweak on an hour of footage is an hour of recompute. Dial it in on a short clip. Also: SDR 8-bit only, so no 10-bit or HDR, and HEVC preview playback is up to your browser.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | Connect the VIDEO output from Load Video (or another native VIDEO node). | |
| scale | FLOAT | 2.001–4 | Output size multiplier (1.0–4.0) for VSR upscale modes. Ignored when quality is DEBLUR or DENOISE, which preserve the input resolution. |
| quality | COMBO | HIGHBITRATE_HIGH | NVIDIA VFX effect to apply. HIGHBITRATE modes target clean video; STREAMING modes enhance compressed sources; DEBLUR/DENOISE restore the image without upscaling. |
| strength | FLOAT | 1.000–1 | NVIDIA effect intensity: 0 = minimum, 1 = maximum. Applies to the selected quality mode. |
| preprocess | COMBO | none | Optional extra first pass at the original resolution: Deblur or Denoise before the main VSR pass. 'none' disables it. |
| preprocess_strength | FLOAT | 1.000–1 | Intensity of the optional Deblur/Denoise first pass. Only used when preprocess is not 'none'. |
| frames_per_chunk | INT | 484–240 | Frames processed per temporary disk segment. Smaller values reduce peak RAM but create more temporary files during processing. |
| encoder | COMBO | Video encoder for temporary segments. H.264 NVENC is limited to 4096 pixels per axis; choose HEVC NVENC for larger output (up to 8192 on RTX 40). libx264 uses CPU. No automatic codec fallback. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| report | STRING | — |
| video | VIDEO | — |