Nodes/ComfyUI-RH-DLSS5/RH DLSS5 Frame Interpolation
ComfyUI Node

RH DLSS5 Frame Interpolation

DLSS frame generation in ComfyUI — 24 fps becomes 48 because NVIDIA invents new frames, not blended ones

By RH-RunningHub·Created 21 days ago·Updated 3 days ago· 21
RH DLSS5 Frame Interpolation
  • video
  • image
  • audio
  • images
  • video
  • status
◄output_fps2x►
◄motionauto►
◄scene_change_threshold0.24►
◄keep_audioon►
◄runtime_dir►
◄wine_prefix►

Frame interpolation is a crowded field, and "DLSS frame interpolation" sounds like one more RIFE-style optical-flow job with a marketing badge. It isn't. This node drives NVIDIA's actual DLSS Frame Generation runtime (NGX DLSS-FG) - the tech that's been generating fake frames in games since the RTX 40 series - and the difference matters: RIFE blends and warps the pixels you have, while DLSS-FG generates brand-new intermediate frames from your source frames plus motion vectors. That's why fast-moving content that makes classic flow interpolation smear tends to hold up better here.

It's the sister node to RH_DLSS5Enhance in the same pack from RunningHub (the cloud ComfyUI platform - this is the tooling they built to run DLSS on their Linux GPU pool, open-sourced). Same personality: genuinely real NVIDIA runtime, no API, and all the NVIDIA/worker binaries are yours to source.

How it works

Frames stream to dlssg-worker.exe, a direct D3D12 NGX host (MIT-licensed, from the DLSS 5 Visual Enhancer lineage - not an NVIDIA binary), which evaluates each source interval and emits one generated frame. 2x is the sweet spot the author tuned for: every interval gets exactly one new frame. 3x and 4x cascade additional 2x passes and cost proportionally more time and memory.

Two implementation details worth knowing, because they're why this is nicer to use than it has any right to be:

  • Frame counts are honest. Interpolating needs a future frame, and the last interval has none, so T source frames at 2x yield exactly 2T−1 output frames at double the rate. 24 fps in, 48 fps out, no phantom duplicates.
  • It's a real stream, not a RAM bomb. On VIDEO input the output is encoded while interpolating, so memory stays bounded no matter how long the clip is (the author reports a 400-frame 1080p run holding ~20 GB where the pre-streaming version got OOM-killed). Audio is stream-copied from the source when you leave keep_audio on.

Scene cuts reset temporal history, so the node skips generating a frame across a cut instead of smearing the two shots together - that's what scene_change_threshold (default 0.24) tunes; higher means fewer resets.

Inputs and outputs

Feed it a video (frame rate and audio come from it) or an image batch in temporal order (then images_fps sets the assumed source rate - fractional rates like 23.976 stay exact). Set multiplier (2x/3x/4x) and let motion sit on auto: it'll use NVIDIA's hardware NVOFA optical flow when available and fall back to OpenCV DIS otherwise. Outputs are images (populated for IMAGE input), video → SaveVideo, and a status string summarizing guide engine, frame counts and fps.

Installing - same pack, plus one more folder

Install steps are shared with the Enhance node (clone the repo into custom_nodes, restart). Frame generation additionally needs four files in ComfyUI/models/dlss5/dlssg/: dlssg-worker.exe, nvngx.dll, _nvngx.dll, and the user-supplied nvngx_dlssg.dll (~7.5 MB NVIDIA snippet). Nothing is auto-downloaded; the README's runtime notes give the exact source for each.

The gotcha nobody's README-badge advertises

In this pack's code, the DLSS-G worker is always launched through Wine - there's no native in-process Windows path like the Enhance node's windows-bridge backend. On Linux that means the full Wine + DXVK 3.1 + vkd3d-proton + DXVK-NVAPI stack in your prefix, which the README walks through in excruciating (good) detail with a layered self-check. On a plain Windows box without Wine installed, the node errors out with "Wine was not found." So check that before you plan a big job. Video I/O also needs a recent ComfyUI build with LoadVideo/SaveVideo - on older builds the IMAGE path works but the video output comes back None.

If that's all acceptable, the payoff is the one thing classic interpolators keep fumbling: AI-generated motion that doesn't fall apart when something moves fast. Start at 2x, check a short clip for scene-cut behavior, and treat 3x/4x as the "I know what this costs" setting.

Categoryvideo

Inputs (9)

NameTypeDefaultDescription
output_fpsoptCOMBO2x1x = passthrough: the source is returned untouched (no interpolation, no re-encode; the VIDEO object is passed through as-is, motion/keep_audio options are ignored). Either a frame-rate multiplier (2x/3x/4x: DLSS generates one frame per interval, 3x/4x cascade 2x passes) or an exact target output frame rate. For a target rate the node cascades DLSS 2x passes into a dense CFR grid (2/4/8x source) and nearest-picks the target timeline, so e.g. a 24fps source at 60fps interpolates a 96fps grid and picks every ~1.6th frame (1-2-1-2 cadence, no duplicated frames). Target rates must exceed source fps and be at most 6x source; intermediate grid is at most 8x. No tail extension.
videooptVIDEOOptional video (e.g. LoadVideo). Source frame rate and audio come from this input.
imageoptIMAGEOptional image batch (e.g. LoadImage). Each batch entry is one frame in temporal order; batches are treated as a 24fps source.
motionoptCOMBOautoMotion vectors guiding interpolation. auto = hardware NVOFA optical flow when available, else OpenCV DIS; nvof = hardware NVOFA only; dis = OpenCV DIS. Scene cuts or disabled generation hold the previous frame in each interpolation slot.
scene_change_thresholdoptFLOAT0.240.01–1Mean luminance change above which temporal history resets (scene cut detection). Higher = fewer resets.
keep_audiooptCOMBOonKeep the original audio in the VIDEO output. Audio is stream-copied from the source file; when no source file is available it is re-encoded from the AUDIO input instead.
audiooptAUDIOOptional audio for the VIDEO output. With a VIDEO input it replaces the source audio while keep_audio is on; with an IMAGE input it is the only way to attach sound. Re-encoded to AAC when it cannot be stream-copied.
runtime_diroptSTRINGOptional override of the folder holding dlssg-worker.exe + nvngx.dll + _nvngx.dll + nvngx_dlssg.dll. Empty uses DLSS5_FG_RUNTIME_DIR, then <DLSS5 runtime>/dlssg, then the plugin's runtime/dlssg folder.
wine_prefixoptSTRINGLinux only: WINEPREFIX for the worker (ignored on Windows, where the worker runs natively). Empty uses DLSS5_WINEPREFIX, then ~/.wine; validated at run time (needs DXVK + DXVK-NVAPI installed in the prefix).

Outputs (3)

NameTypeDescription
imagesIMAGE—
videoVIDEO—
statusSTRING—