RH DLSS5 Frame Interpolation
DLSS frame generation in ComfyUI — 24 fps becomes 48 because NVIDIA invents new frames, not blended ones
- video
- image
- images
- video
- status
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_audioon.
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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| videoopt | VIDEO | Optional video (e.g. LoadVideo). Source frame rate and audio come from this input. | |
| imageopt | IMAGE | Optional image batch (e.g. LoadImage). Each batch entry is one frame in temporal order; images_fps sets the assumed source frame rate. | |
| multiplieropt | COMBO | 2x | Output frame rate multiplier. 2x generates one frame per source interval; 3x/4x cascade additional 2x passes (3x resamples the 4x grid). The runtime currently supports one generated frame per evaluation (MultiFrameCountMax 1). |
| motionopt | COMBO | auto | Motion vectors guiding interpolation. auto = hardware NVOFA optical flow when available, else OpenCV DIS; nvof = hardware NVOFA only; dis = OpenCV DIS. Generated frames are skipped across scene cuts. |
| scene_change_thresholdopt | FLOAT | 0.240.01–1 | Mean luminance change above which temporal history resets (scene cut detection). Higher = fewer resets. |
| keep_audioopt | COMBO | on | Keep the original audio in the VIDEO output when the environment supports it. |
| images_fpsopt | FLOAT | 24.0001–240 | Source frame rate used when the input is an IMAGE batch (VIDEO inputs use their own frame rate). Fractional rates like 23.976 are kept exact. |
| runtime_diropt | STRING | Optional 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_prefixopt | STRING | Linux only: WINEPREFIX for the worker. Empty keeps the environment default. The prefix needs DXVK + vkd3d-proton + DXVK-NVAPI for NVIDIA NGX. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| video | VIDEO | — |
| status | STRING | — |