๐ RGB Curves
The Power Tool of Color Grading, With Control Points You Type Instead of Drag
- image
- IMAGE
RGB Curves is the serious color-grading node in this pack - the one that lets you remap tones the way Photoshop's Curves does, with an S-curve for contrast, a lift to the blacks, or per-channel grades that shift the color balance without touching anything else. If you've outgrown the CSS Filters node and Levels isn't expressive enough, this is where grading actually happens.
What makes it slightly unusual is how you set the curve: instead of dragging a line, you type control points as a string - x,y;x,y;... in 0โ255 coordinates. That's a little odd in a visual tool, but it's also scriptable, which is genuinely useful: you can paste in a curve you've saved, tweak one point, and reuse it across workflows.
How it works
You give it a list of control points like 0,0;128,192;255,255 - the x is the input brightness, the y is the output brightness. The node parses that string, sorts points by x, and builds a 256-entry lookup table through the whole tonal range. The interpolation choice governs the curve shape between your points: linear gives straight segments, cubic fits a smooth spline (the default, and the one that looks like a real curves tool), and quadratic is a middle ground. The LUT is then applied to whichever channel you picked - RGB for luminance, or Red/Green/Blue individually for color grading.
Two niceties: strength (0โ2, default 1) scales how far the curve pulls away from identity, so you can dial a curve back instead of rebuilding it, and preserve_luminosity rescales so your grade changes color without wrecking overall brightness - the classic "grade without losing exposure" switch.
The inputs that matter
- curve_points - the whole effect. Format:
x,y;x,y;...with values 0โ255. The default0,0;64,64;128,128;192,192;255,255is a straight line (no change). - channel - RGB, Red, Green or Blue. Per-channel curves are how you shift color temperature: lift the Blue channel's low end for a cool shadow, or push Red's highs for warm highlights.
- interpolation - linear, cubic (default) or quadratic.
- strength (0โ2, default 1) - how strongly the curve applies; 0.5 is "half the curve".
- preserve_luminosity - on for color work where you want the exposure to stay put.
Output is the graded IMAGE.
Installing it
From ComfyUI-Image-Effects (Orion4D). ComfyUI Manager โ search "Image Effects", or:
cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/ComfyUI-Image-Effects
cd ComfyUI-Image-Effects
pip install -r requirements.txt
Restart, then find it under Add Node โ Image Effects. This node specifically needs SciPy for the spline interpolation - that's in the pack's requirements.
Gotchas
Pack-wide: only the first image of a batch is processed, CPU-bound. The real gotcha is the string syntax - a typo (a stray space, a comma where a semicolon goes) silently falls back to the default identity curve, which is the most confusing failure in the node: you'll swear nothing happened. If a curve "doesn't work," check your string. Also, keep your points sorted and within 0โ255; the parser is forgiving, but garbage in, identity out. For a classic look, the one curve to learn is a gentle S: 0,0;64,48;192,208;255,255 with cubic interpolation.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | โ | |
| channel | COMBO | RGB | 4 options: RGB, Red, Green, Blue |
| curve_points | STRING | 0,0;64,64;128,128;192,192;255,255 | โ |
| interpolation | COMBO | cubic | 3 options: linear, cubic, quadratic |
| strengthopt | FLOAT | 1.000โ2 | โ |
| preserve_luminosityopt | BOOLEAN | false | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |