Nodes/ComfyUI-DaSiWa-Nodes/RTX Upscaler & Refiner
ComfyUI Node

RTX Upscaler & Refiner

NVIDIA's RTX Video SDK as a 3-pass node

By darksidewalker·Created 7 months ago·Updated about 15 hours ago· 173
RTX Upscaler & Refiner
  • images
  • images
◄denoisefalse►
◄denoise_qualityUltra►
◄deblurfalse►
◄deblur_qualityUltra►
◄upscaleVSR►
◄upscale_qualityUltra►
◄resize_typeScale►
◄scale2.00►
◄megapixels2.00►
◄width1920►
◄height1080►
◄divisible_by8►
◄ratio_preset16:9►
◄resize_methodCenter Crop (Fill)►
◄device_id0►
◄empty_cachefalse►
◄use_mmapfalse►
◄auto_unload_modelstrue►
◄chunkingtrue►
◄lossless_fp16true►
◄chunk_frames16►
◄image_encoding8-bit RGB►
◄denoise_strength1.00►
◄deblur_strength1.00►
◄upscale_strength1.00►
◄preserve_alphafalse►
◄channel_integrity_checkfalse►
◄hdr_enabledfalse►
◄hdr_contrast100►
◄hdr_saturation100►
◄hdr_middle_gray50►
◄hdr_luminance650►
◄hdr_debandingtrue►

This node wraps NVIDIA's RTX Video SDK - the same tech behind RTX Video Super Resolution in the NVIDIA app and browser - into a 3-pass ComfyUI node: Denoise, Deblur, and Upscale, run frame by frame so VRAM stays flat no matter how long your clip is. If you've tried a bare RTX VSR node before and come away unimpressed, that's a known result, not user error, and it's exactly why this node doesn't stop at Upscale alone.

Why the multi-pass design, specifically

RTX VSR-only nodes have a reputation problem in the ComfyUI community: run VSR by itself and it can look like it's barely doing anything compared to the same SDK's output inside the NVIDIA app. The reason, once someone dug into the underlying nvidia-vfx module, is that a meaningful chunk of what the native app's "VSR" actually looks like is deblur layered on top of the upscale, not the upscale alone. This node treats Denoise and Deblur as their own independent passes you run before the Upscale pass, which is the two-step method that gets you results people expect from "RTX upscaling" instead of a flat resize with a marketing name on it.

How it works

Three stages, each toggleable independently and each processed frame-by-frame to keep memory use predictable on video batches:

  1. Refine - denoise and deblur are separate booleans, each with its own _quality tier (Low/Medium/High/Ultra). Turn on Deblur if your source is soft or AI-generated and looks smeared; turn on Denoise if it's grainy.
  2. Upscale - upscale picks the mode: Off, VSR (the standard RTX super-resolution path), or High Bitrate (tuned for cleaner source video rather than restoring detail). upscale_quality is the same four-tier scale.
  3. Resize - resize_type (Scale/Manual/Keep Ratio/Preset Ratio/Same Size) decides how the target dimensions are derived, backed by scale (1–4x), megapixels, width/height, divisible_by, and ratio_preset depending on which mode you pick. resize_method chooses Center Crop or Letterbox when the source aspect doesn't match the target.

device_id picks which GPU runs the SDK if you have more than one NVIDIA card in the box.

The inputs and outputs that matter

Beyond the toggles above: images in, single images output - this is a mid-pipeline node, not a saver, so chain it into your Video Combine or Save node afterward.

How to install it

This is the one node in the pack with a real hardware requirement. Per the README: NVIDIA RTX GPU with drivers 530+. Windows users may additionally need the NVIDIA Broadcast SDK; Linux generally works out of the box once the pip package is installed.

ComfyUI Manager - search DaSiWa-Nodes, install, restart.

Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/darksidewalker/ComfyUI-DaSiWa-Nodes
pip install -r ComfyUI-DaSiWa-Nodes/requirements.txt

The RTX implementation itself is credited to Deno2026/comfyui-deno-custom-nodes - worth knowing if you've seen a similar "Deno RTX" node floating around; this is a different pack building on the same underlying approach, alongside Comfy-Org's own official RTX nodes package. Several implementations of the same NVIDIA SDK exist; don't be surprised if workflows online reference a different one.

Common issues & troubleshooting

Upscale looks like it did almost nothing. This is the exact community complaint above - bare VSR can be underwhelming. Turn on deblur (Medium or higher) before judging the Upscale pass; the combination is where the quality actually shows up.

It errors or silently no-ops on non-NVIDIA hardware. The RTX Video SDK is NVIDIA-only by definition - there's no CPU or AMD/Intel fallback for this specific node, unlike DaSiWa's Torch Resize, which is deliberately hardware-agnostic.

Older driver, weird behavior or install failure. Confirm you're at 530+ first; this is the single most common gate for any RTX-SDK-based tool, and it's worth checking before assuming the node itself is broken.

CategoryDaSiWa/Video

Inputs (34)

NameTypeDefaultDescription
imagesIMAGEIMAGE batch of still images or decoded video frames, not a VIDEO object. No audio, FPS or timestamps are passed through. Frame order/count stay unchanged; RGB output unless preserve_alpha is enabled.
denoiseBOOLEANfalseEnable NVIDIA RTX Denoise pass to clean up image grain and noise.
denoise_qualityCOMBOUltraDenoise SDK tier: Low favors speed, Medium is the middle tier, High favors quality, Ultra is the highest tier. Active only when denoise is on; actual cost/results depend on source, GPU and SDK.
deblurBOOLEANfalseEnable NVIDIA RTX Deblur pass to reduce motion or focus blur.
deblur_qualityCOMBOUltraDeblur SDK tier: Low favors speed, Medium is the middle tier, High favors quality, Ultra is the highest tier. Active only when deblur is on; no guaranteed detail recovery.
upscaleCOMBOVSRUpscale mode: - Off: Skip upscale and keep source dimensions; resize controls are ignored. - VSR: Standard reconstruction for typical compressed sources. - High Bitrate: SDK high-bitrate reconstruction for clean/high-bitrate sources. - Streaming Medium / Streaming Ultra: SDK streaming quality presets when available; ignore upscale_quality. These do not stream VIDEO input/output or reduce full IMAGE batch storage.
upscale_qualityCOMBOUltraVSR / High Bitrate SDK tier: Low favors speed, Medium is the middle tier, High favors quality, Ultra is the highest tier. Ignored for Off and Streaming Medium / Streaming Ultra (preset defines the tier).
resize_typeCOMBOScaleActive only when upscale is not Off. Same Size: exact source dimensions (ignores alignment). Scale: multiply width/height by scale. Keep Ratio: target megapixels and source aspect. Preset Ratio: target megapixels and ratio_preset. Manual: width/height. Other resize modes align by divisible_by; megapixels/aspect can be approximate.
scaleFLOAT2.001–4Multiplier for resolution (used by 'Scale' type). 2.0 = 4x the total pixels.
megapixelsFLOAT2.000.01–64Target total area in millions of pixels (used by Ratio types).
widthINT192064–8192Target width in pixels, active only for Manual with upscale enabled; divisible_by may adjust it.
heightINT108064–8192Target height in pixels, active only for Manual with upscale enabled; divisible_by may adjust it.
divisible_byCOMBO8For Scale, Keep Ratio, Preset Ratio and Manual with upscale enabled, align dimensions to the selected pixel multiple. 8 matches typical RTX sizes; 16, 32, 64 and 128 select progressively coarser pixel grids and may change requested dimensions. Use larger multiples only if a downstream model requires them. Ignored for Same Size or when upscale is Off.
ratio_presetCOMBO16:9Width:height shape, active only for Preset Ratio with upscale enabled: 1:1 square, 4:3 classic, 3:2 photo, 16:9 widescreen, 21:9 ultrawide. Alignment can slightly approximate the ratio.
resize_methodCOMBOCenter Crop (Fill)When upscale is enabled and source/target aspect differs: Center Crop (Fill) removes centered edges to fill the frame; Letterbox (Fit) retains the whole image and adds black padding. No effect for matching aspects or upscale Off.
device_idINT00–8CUDA device index for NVIDIA RTX computation (0 is the first GPU). Must identify a supported NVIDIA device; output placement follows the allocator/input device, not necessarily this compute device.
empty_cacheoptBOOLEANfalseRun a lightweight GC + empty_cache before allocation; also calls model_management.soft_empty_cache() on the selected device (does not unload models).
use_mmapoptBOOLEANfalseOFF (default): never use disk; fail clearly if neither budgeted VRAM nor available RAM can hold the complete output. **WARN:** enable this ONLY for very long video batches that genuinely exceed available RAM; when on, disk is used as the last tier of the VRAM -> RAM -> disk chain and a multi-giB .mmap temp file is written to your temp drive for the whole run.
auto_unload_modelsoptBOOLEANtrueReclaim targeted GPU memory under pressure. Before RAM output allocation, reclaim native execution caches and model pins, then re-check. Never reset the running executor or globally offload GPU models into RAM. Native cache eviction requires ComfyUI RAM-pressure cache support.
chunkingoptBOOLEANtrueProcess frames in bounded internal chunks; output remains one standard IMAGE batch.
lossless_fp16optBOOLEANtrueUse FP16 for output storage only when every FP32 pixel round-trips exactly; otherwise keep FP32. May provide no saving for typical VSR output.
chunk_framesoptINT161–1024Maximum frames per internal processing chunk when chunking is on; also used by the optional FP16 storage check. Does not limit complete input/output batch allocation.
image_encodingoptCOMBO8-bit RGB8-bit RGB: default SDK encoding. 10-bit RGB (RGB10A2): packed 10-bit SDR SDK processing when supported, unpacked to FP32. Not HDR, restored source detail, or smaller IMAGE storage.
denoise_strengthoptFLOAT1.000–1Denoise SDK strength from 0 to 1; 1.0 retains the SDK default. Active only when the denoise stage is enabled; changing it does not enable a skipped stage.
deblur_strengthoptFLOAT1.000–1Deblur SDK strength from 0 to 1; 1.0 retains the SDK default. Active only when the deblur stage is enabled; changing it does not enable a skipped stage.
upscale_strengthoptFLOAT1.000–1Upscale SDK strength from 0 to 1; 1.0 retains the SDK default. Active only when the upscale stage is enabled; changing it does not enable a skipped stage.
preserve_alphaoptBOOLEANfalseKeep input alpha separately, applying the same crop/letterbox/resize; no SDK filtering.
channel_integrity_checkoptBOOLEANfalseSampled NaN/Inf and channel-collapse diagnosis before clamp. Heuristic: legitimate color changes can trigger it.
hdr_enabledoptBOOLEANfalseFinal TrueHDR pass: normalized BT.2020/PQ HDR10 values, NOT SDR. IMAGE carries no HDR metadata; use a verified HDR encoder.
hdr_contrastoptINT1000–200TrueHDR contrast control (0-200, default 100); affects light/dark separation. Active only with hdr_enabled.
hdr_saturationoptINT1000–200TrueHDR color saturation control (0-200, default 100); affects color intensity. Active only with hdr_enabled.
hdr_middle_grayoptINT5010–100TrueHDR middle-gray control (10-100, default 50); sets the midtone brightness reference, not peak luminance. Active only with hdr_enabled.
hdr_luminanceoptINT650400–2000TrueHDR target peak luminance in nits (400-2000, default 650); choose for the HDR display/export target. Active only with hdr_enabled.
hdr_debandingoptBOOLEANtrueOn: enable TrueHDR DL-Debander to reduce visible banding; Off: disable it. Active only with hdr_enabled; on is the NVIDIA default.

Outputs (1)

NameTypeDescription
imagesIMAGE—