Nodes/comfyui-timesaver/TS DLSS Upscaler
ComfyUI Node

TS DLSS Upscaler

This node borrows your GPU's game upscaler for real frames

By AlexYez·Created 2 years ago·Updated a day ago· 11
TS DLSS Upscaler
  • images
  • images
upscaling_factor2× (Performance)
dlss_model_presetM
nr_styleDefault
nr_intensity1.00
local_tone_strength1.00
local_structure_strength1.00
skin_structure_strength2.00
automatic_masktrue
temporaltrue
source_curveSDR (sRGB / BT.709) — no conversion
dithertrue
download_if_missingtrue

The pitch is genuinely weird, and it works: TS DLSS Upscaler feeds your pictures and video frames through NVIDIA's DLSS - the neural-rendering tech games use - and hands back a bigger, cleaner IMAGE. IMAGE in, IMAGE out, nothing else to wire; it ships in the comfyui-timesaver pack (search "Timesaver" in the Manager). The fine print before you get excited: Windows and an NVIDIA RTX card, full stop.

Know which upscaling job this does before you judge it: the upscaling world splits into three, and this node only does one. It won't add pores, lashes, or fabric weave the way a generative upscaler like SeedVR2 does - no invented detail, no hallucinated faces. It's the "more pixels" job: a sharper, larger image reconstructed from what's already there, closer to a very smart Lanczos than to a diffusion model. The community reads NVIDIA's hardware path as more natural than generative upscalers on already-clean sources - same family. Reach for it when your source is sharp but small and you want it bigger fast, especially video, where its temporal trick beats a still-image upscaler run frame by frame.

How it works

DLSS is a temporal upscaler, and that's the whole story: for a batch of consecutive frames the node estimates motion vectors with DIS optical flow and hands them to the runtime, so detail carries forward instead of every frame deciding on its own. That is exactly what per-frame image upscalers get wrong on video - fine repeating texture starts to shimmer when consecutive frames can't agree. DLSS also resets its history at a hard cut rather than smearing the previous shot across it.

Here's the part people trip on: DLSS doesn't resize with a normal algorithm. The worker takes 8-bit RGBA, so the node rounds your float IMAGE down to it - with blue-noise dithering on by default, so smooth gradients reach the network as detail instead of visible steps. And the network only understands display-referred SDR: feed it log footage or linear EXR via the source_curve dropdown and it converts there, then converts back after with the same curve - size changes, colour doesn't.

The "DLSS 5" name is NVIDIA marketing, but the implementation is real and signed: on first run the node downloads NVIDIA's DLLs plus a ReShade and a RenoDX add-on (~481 MB, once) into models/DLSS and drives them through D3D12.

The inputs that matter

Honestly, most of them are fine at default - the node was tuned by someone who measured things. The ones you'll actually touch:

  • images - one picture or a whole batch of video frames. Both sides must be at least 64 pixels.
  • upscaling_factor - 2× (Performance) is default, and there's also 1.5×, 1.724×, and . Output is capped at 7680×4320; ask for more and it names the largest factor that fits instead of failing vaguely.
  • temporal - the one that bites. On (default) means "these are consecutive video frames, use motion vectors." For a batch of unrelated pictures, switch it off, or every picture drags the previous one's detail behind it. Ignored for a single image.
  • download_if_missing - this is your license agreement, not a convenience toggle. Off, the node downloads nothing and you place the NVIDIA/ReShade/RenoDX files under models/DLSS yourself. The pack hosts none of the runtime and isn't affiliated with NVIDIA.

The rest are the DLSS "neural rendering" knobs - nr_style (Default/Natural/Cinematic), nr_intensity, local_tone_strength, local_structure_strength, and skin_structure_strength, kept separate so faces don't turn plastic. 1× (DLAA) doesn't resize at all: the network re-renders at the same size - cleanest for footage already big enough. The single output is images, upscaled, same order, same channels, alpha carried through.

Installing it

Install the pack, not the node:

cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt

or just search Timesaver in ComfyUI Manager and restart. Windows portable users: run pip from python_embeded\python.exe or dependencies land in the wrong interpreter. Nothing else installs - the runtime is fetched on first use, not by pip.

Where people get burned

  • No RTX, no Windows? The node says so plainly instead of failing obscurely. DLSS runs through NVIDIA's signed D3D12 runtime and there is no other implementation of it. RTX 40/50 are officially supported; RTX 30 works on the experimental path and wants a current driver.
  • The "result is NOT DLSS-enhanced" warning means neural rendering silently fell back to a resize - update your NVIDIA driver.
  • First run downloads 481 MB. It's once, it has a progress bar, but don't mistake it for a hang.

If you have an RTX card and footage that just needs more pixels, this is the one to try before renting GPU hours for a generative video upscaler.

CategoryTS/Video

Inputs (13)

NameTypeDefaultDescription
imagesIMAGEOne picture or a batch of frames [B,H,W,C]. Both sides must be at least 64 pixels.
upscaling_factorCOMBO2× (Performance)DLSS mode. 1× is DLAA: no resize, the network re-renders at the same size. The output is capped at 7680×4320.
dlss_model_presetCOMBOMNetwork revision. M measured best; the worker confirms what it applied.
nr_styleCOMBODefaultNeural rendering look: Default, Natural or Cinematic.
nr_intensityFLOAT1.000–1How strongly neural rendering is applied.
local_tone_strengthFLOAT1.000–2Local contrast recovered by the network.
local_structure_strengthFLOAT1.000–2Local detail recovered by the network.
skin_structure_strengthFLOAT2.00-1–2Detail on skin, kept separate so faces do not turn plastic.
automatic_maskBOOLEANtrueLet the runtime decide where neural rendering is applied.
temporalBOOLEANtrueTreat the batch as consecutive video frames and feed motion vectors. Switch OFF for a batch of unrelated pictures. Ignored for a single image.
source_curveCOMBOSDR (sRGB / BT.709) — no conversionWhat the incoming values mean. The network only understands display-referred SDR, so log/HDR/linear pictures are converted before it and converted back after — exactly, by the same curve.
ditherBOOLEANtrueBlue-noise dither on the way down to the worker's 8 bits, so gradients reach the network as detail instead of steps.
download_if_missingBOOLEANtrueFetch the runtime into models/DLSS when it is not there (~481 MB, once). This is your agreement to download third-party components — NVIDIA (proprietary), ReShade (BSD-3), RenoDX — from the upstream project. This pack hosts none of them. Off, the node downloads nothing and you place the files yourself.

Outputs (1)

NameTypeDescription
imagesIMAGEThe upscaled batch, same order, same channel count.