Nodes/ComfyUI_Element_easy/Element ImageCurve
ComfyUI Node

Element ImageCurve

Photoshop-style RGB curves, in ComfyUI, with a live preview

By supElement·Created 9 months ago·Updated about 11 hours ago· 10
Element ImageCurve
  • image
  • image
curve_data{"RGB":[[0.0,0.0],[1.0,1.0]],"R":[[0.0,0.0],[1.0,1.0]],"G":[[0.0,0.0],[1.0,1.0]],"B":[[0.0,0.0],[1.0,1.0]]}
saturation1.00
preview_size512
frame_index0
output_modefalse

Element ImageCurve is the plainest of this pack's four curve nodes, and in some ways the most useful: it gives you per-channel RGB curves exactly like the Curves adjustment in Photoshop - lift shadows, roll off highlights, tint the midtones, all by dragging a curve. It's the node you reach for when "make it look graded" has to actually happen inside ComfyUI, before the image ever touches an external editor.

How it works

The curve editor has four channels: RGB (all channels at once) plus individual R, G, and B curves. The default curve_data makes this obvious - it's a JSON object with an entry for each channel, each holding a straight diagonal line from (0,0) to (1,1), i.e. "no change." You click to add a point, drag it to bend the curve, right-click to remove. The curve shape for each channel is exactly what you'd expect from Photoshop: pulling the R curve up lifts red in the highlights, pulling it down subtracts red (adds cyan), an S-curve on RGB boosts contrast.

On top of the curves there's a saturation slider (0–2, default 1) - the pack's author knew a pure-curve approach leaves you without a quick saturation knob, so there it is. It's the one setting on the node that's a plain number instead of a curve, and it's the fast way to compensate when a channel tweak pushes colors toward gray.

Everything else is the standard curve-node set: preview_size (256–4096) controls preview resolution, frame_index picks which frame of a sequence you're looking at, and output_mode toggles between the preview and full-quality output. The single image output is your graded frame.

Why this one matters

The hue-based siblings (HueSat, HueBright, HueHue) are surgical - they act on specific color ranges. ImageCurve is the generalist. Want more punch in the midtones? S-curve on RGB. Want a cinematic teal shadow? Push blue into the shadows with a lifted B curve and pull the G curve down slightly. Because it's channel-based rather than hue-based, it's also the right tool for neutralizing color casts (that's what per-channel curves were invented for), and it works identically on single frames and frame sequences.

Installing it

It's in supElement/ComfyUI_Element_easy:

cd ComfyUI/custom_nodes
git clone https://github.com/supElement/ComfyUI_Element_easy.git

Restart ComfyUI, or search ComfyUI_Element_easy in ComfyUI Manager.

Gotchas

The big one is that curves are global - a per-channel curve affects every pixel of that channel, so you can't isolate "just the sky." If you need region-specific grading, mask the image first or chain this with the pack's mask tools. Also, curve edits can push colors into posterization if you drag too aggressively, especially on already-compressed images; keep an eye on the preview and back off rather than trusting a heavy curve blindly. And as with the other curve nodes, curve_data is a portable string - save a nice grade by copying it, and share it like a preset.

CategoryElement_easy/image

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
curve_dataSTRING{"RGB":[[0.0,0.0],[1.0,1.0]],"R":[[0.0,0.0],[1.0,1.0]],"G":[[0.0,0.0],[1.0,1.0]],"B":[[0.0,0.0],[1.0,1.0]]}
saturationFLOAT1.000–2
preview_sizeINT512256–4096
frame_indexINT00–9999
output_modeBOOLEANfalse

Outputs (1)

NameTypeDescription
imageIMAGE