Nodes/ComfyUI-Image-Effects/๐Ÿ“ˆ RGB Curves
ComfyUI Node

๐Ÿ“ˆ RGB Curves

The Power Tool of Color Grading, With Control Points You Type Instead of Drag

By orion4dยทCreated about a year agoยทUpdated about a year agoยท 28
๐Ÿ“ˆ RGB Curves
  • image
  • IMAGE
โ—„channelRGBโ–บ
โ—„curve_points0,0;64,64;128,128;192,192;255,255โ–บ
โ—„interpolationcubicโ–บ
โ—„strength1.00โ–บ
โ—„preserve_luminosityfalseโ–บ

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 default 0,0;64,64;128,128;192,192;255,255 is 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.

CategoryImage Effects

Inputs (6)

NameTypeDefaultDescription
imageIMAGEโ€”
channelCOMBORGB4 options: RGB, Red, Green, Blue
curve_pointsSTRING0,0;64,64;128,128;192,192;255,255โ€”
interpolationCOMBOcubic3 options: linear, cubic, quadratic
strengthoptFLOAT1.000โ€“2โ€”
preserve_luminosityoptBOOLEANfalseโ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEโ€”