Nodes/ComfyUI-Easy-Media/RTX Video Super Resolution
ComfyUI Node

RTX Video Super Resolution

Upscale video without ever building a tensor

By yolain·Created 5 months ago·Updated 5 days ago· 224
RTX Video Super Resolution
  • video
  • VIDEO
◄resize_type▾►
◄qualityULTRA►
◄codech264►
◄presetP7►
◄bitrate_mbps16►
◄device0►
◄preserve_audiotrue►

Your GPU has been upscaling video in real time for years: it's what your browser does when a 1080p stream hits a 4K monitor, on tensor cores that would otherwise sit idle. This node hands that same hardware path to ComfyUI. The interesting part is what it doesn't do.

Most video nodes turn a video into an IMAGE batch: decode every frame on the CPU, hand you a [frames, H, W, C] tensor, make you re-encode at the end. That round trip eats your VRAM and your patience. This one skips it - frames stay on the GPU from decode to encode and never become a tensor.

Worth naming the job, because "upscale" covers three unrelated things. This is more pixels: NVIDIA's super-resolution is closer to a very good Lanczos than to anything generative. It won't add pores or fabric weave, and it cannot invent a face - on an already-clean source that's a feature. On destroyed 256px mush you want SeedVR2 or FlashVSR instead. Different category entirely.

It's brand new - Easy-Media v1.3.3, 25 September 2026 - with no community writeup yet.

How it works

Decode with NVDEC, upscale with the RTX VSR effect, encode with NVENC. The node asks the incoming VIDEO for its backing file and feeds that to PyNvVideoCodec's threaded decoder - device-memory output, frames arriving in batches straight onto the GPU. Each one goes through nvidia-vfx's VideoSuperRes effect at your chosen quality level, comes back as a CUDA surface, gets converted to NV12 in a few torch kernels, and goes to NVENC directly. No host copies in the loop.

Two details there explain the output. B-frames are off, because a raw elementary stream has no container timestamps for FFmpeg to recover display order from. And the frame rate is muxed back as an exact rational - 30000/1001, not 29.97 - so NTSC footage doesn't drift.

The inputs that actually matter

video is the only required wire. The rest:

resize_type is a dynamic combo, so the widgets under it change with the mode: scale by multiplier gives you one scale field (1.0–4.0, default 2.0); target dimensions gives you width and height (default 1920×1080). Values round to a multiple of 8, which NV12 needs anyway, and it refuses to go past 8192 per side.

quality is LOW / MEDIUM / HIGH / ULTRA, the four levels NVIDIA's VSR effect exposes. ULTRA is the default - drop down if you're pushing a long clip through and want the card back.

bitrate_mbps (default 16) is the real quality dial after the upscale. Comfortable for 1080p, thin for 4K - push it up, the field goes to 200.

codec defaults to h264; pick hevc for the same look in a smaller file. preset is the NVENC preset, P1 (fastest) to P7 (slowest, best), defaulting to P7. device is the CUDA index for decode, VSR and encode alike. preserve_audio re-muxes the source audio as aac 192k, leaving the VSR video stream bit for bit untouched.

One output: VIDEO, into a save node - the pack ships easy saveVideo, or use anything else that takes a VIDEO.

Installing it

Via ComfyUI Manager, search the pack title ComfyUI-Easy-Media (publisher yolain, also the author of ComfyUI-Easy-Use, hence the easy prefix). Or clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media

The README's one insistently capitalised request is to install FFmpeg system-wide first, and here it isn't optional: FFmpeg muxes the NVENC stream and ffprobe reads the source frame rate. The pack declares no Python dependencies, which is why this node's two extra libraries are on you:

# Linux/macOS, in whatever Python runs ComfyUI
python -m pip install -U --no-build-isolation nvidia-vfx --index-url https://pypi.nvidia.com
python -m pip install PyNvVideoCodec

On Windows portable, run those from the portable root with python_embeded\python.exe. You also need CUDA PyTorch and an RTX-class card - VSR is a tensor-core feature, not generic CUDA.

Troubleshooting

The dependency install is the failure everyone hits. nvidia-vfx lives on NVIDIA's package index, not PyPI, and installs through ComfyUI Manager routinely fail there. The --no-build-isolation --index-url line above, run manually in the right interpreter, is what fixes it.

Missing deps don't break startup here. Useful and unusual: the module imports lazily enough that a missing nvidia-vfx won't take the pack down with an IMPORT FAILED. The node appears, you queue, and then you're told which package is missing.

torch.cuda.is_available() is false is its own message and means ComfyUI is on a CPU or ROCm build; no pip install fixes that. Keep device inside your GPU count too, or the node throws rather than silently falling back.

Non-file inputs cost you one encode. If the upstream node hands over an in-memory VIDEO rather than a file, this one serializes it to a temp MP4 before VSR starts - it still streams from there, but you've paid an extra generation. And if decoding just fails, remux to plain H.264; NVDEC won't touch some older containers.

CategoryEasyUse/Video

Inputs (8)

NameTypeDefaultDescription
videoVIDEO—
resize_typeCOMBOScale by multiplier or render to exact target dimensions.
qualityCOMBOULTRA4 options: LOW, MEDIUM, HIGH, ULTRA
codecCOMBOh2643 options: h264, hevc, av1
presetCOMBOP77 options: P1, P2, P3, P4, P5, P6, +1
bitrate_mbpsFLOAT161–200NVENC target bitrate in Mbit/s.
deviceINT00–15CUDA device index used by NVDEC, VSR and NVENC.
preserve_audioBOOLEANtrueRe-mux the source audio after VSR without re-encoding the processed video stream.

Outputs (1)

NameTypeDescription
VIDEOVIDEO—