DLSS5 Color Enhancement
Grade the neural render before it ever leaves the CLI
- pro_controls
What this node actually is
It's a grading panel - exposure, contrast, highlights, shadows, whites, blacks, midtones, temperature, tint, hue shift, vibrance, saturation - except nothing graded comes out of it. There's no IMAGE anywhere on this node. It writes those twelve values into the same JSON settings block that the DLSS 5 Visual Enhancer CLI reads, turns on the CLI's coloring stage, and passes the whole thing along as a string.
So the grade happens inside the same native pass that does the neural reconstruction and the RTX upscale. One VE_CLI.exe invocation, one re-encode, no round-trip through a PNG. If you've stacked a neural upscale plus a LUT plus a re-encode and watched the banding pile up, that's what this avoids.
You reach for it when the render is technically good and tonally wrong. Same reason you'd open a grading panel in the app - this node is the ComfyUI face of that panel. Zeroes are neutral across the board, so a freshly dropped-in node with everything at default changes nothing but the stage flag.
How it works
Under the hood the node parses whatever pro_controls string arrives on its input (or builds a fresh preset object if nothing's wired), then injects lut_exposure, lut_contrast, lut_highlights, lut_shadows, lut_whites, lut_blacks, lut_midtones, lut_temperature, lut_tint, lut_hue, lut_vibrance, lut_saturation, and sets lut_mix to 100 so the stage is fully applied. Then it appends "coloring" to both image_enabled_stages and video_enabled_stages, because the CLI ignores settings for stages that aren't in the enabled list. That last bit is the whole mechanism - the values are inert unless the stage flag is set.
The inputs that matter
Everything in required is a slider, and most beginners only need four of them:
- Exposure - float, -3 to +3, the only float in the group. It's the broad brightness lever, and small moves go a long way.
- Contrast and Blacks - the pair that actually fixes a flat neural render. Contrast is global; Blacks lifts or crushes the floor, which is usually where "the AI pass washed it out" lives.
- Vibrance vs Saturation - saturation is blunt and global; vibrance is the one that spares skin. If you're enhancing people, reach for vibrance and leave saturation near 0.
Temperature, tint and hue shift all default to 0 and run -100/+100 (-180/+180 for hue). They're the strongest tools here and the easiest to overdo - ±10 on temperature is a visible, plausible shift.
Pro Controls is optional and, because the author declared it as a forced input, it's a socket only - you can't type into it. If you're looking for a text box on that input, it isn't missing, that's intentional. Wire pro_controls from DLSS5 Pro Controls into it, and this node's pro_controls output goes onward to DLSS5 Sharpening & Grain and then to the Enhance node's own Pro Controls input.
The chain is optional. With nothing plugged in, this node starts its own preset, so it also works standing alone in front of Enhance (Image) or Enhance (Video). That's genuinely useful when the only thing you want is a grade.
Install
If you already run the pack, you have this node - it ships in v1.3.0 onward under the DLSS5_v17 category. Fresh install:
cd ComfyUI/custom_nodes
git clone https://github.com/Strix-3D/ComfyUI-DLSS5-Enhancer-v15
Then the two Python deps (imageio-ffmpeg, scikit-image - that's the entire requirements.txt) and the ~700MB runtime that actually drives the render:
.\python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\ComfyUI-DLSS5-Enhancer-v15\requirements.txt
.\python_embeded\python.exe ComfyUI\custom_nodes\ComfyUI-DLSS5-Enhancer-v15\install.py
Restart. Windows-only, RTX 20-series or newer, because the CLI is a native NVIDIA renderer. Worth saying plainly: this node never calls VE_CLI.exe itself, so it will run fine before you've downloaded the runtime - the error shows up one node downstream, at Enhance.
Where people get burned
Grading then color-matching undoes the grade. If you run DLSS5 Color Matcher afterwards with the original image as reference, you're applying a statistics transfer back toward the source palette. Half your warm-up disappears. Either grade lightly and match lightly, or match first in spirit and grade after - pick one, don't do both at full strength. This is the classic post-processing mistake: colour-matching is deterministic and instant, so it's tempting to stack, and it's easy to cancel your own work.
A muted node contributes nothing, silently. Mute the control node and the settings just evaporate, no warning. If your grade "isn't applying", check for faded nodes before you check anything else.
The grade is baked before the sharpen. The CLI applies the enabled stages in its own fixed order, so this isn't a live adjustment layer. Iterate on the sliders, re-run, look again.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| Exposure | FLOAT | 0.00-3–3 | Adjusts overall brightness (-3 to +3). |
| Contrast | INT | 0-100–100 | — |
| Highlights | INT | 0-100–100 | — |
| Shadows | INT | 0-100–100 | — |
| Whites | INT | 0-100–100 | — |
| Blacks | INT | 0-100–100 | — |
| Midtones | INT | 0-100–100 | — |
| Temperature | INT | 0-100–100 | Adjusts color temperature (-100 to +100). |
| Tint | INT | 0-100–100 | — |
| Hue Shift | INT | 0-180–180 | Adjusts hue (-180 to +180). |
| Vibrance | INT | 0-100–100 | — |
| Saturation | INT | 0-100–100 | — |
| Pro Controlsopt | STRING | Input from DLSS5 Pro Controls. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pro_controls | STRING | — |