Nodes/ComfyUI-Curve/🎨 PS Curves
ComfyUI Node

🎨 PS Curves

The popup curve editor that makes this pack worth installing

By aiaiaikkk·Created about a year ago·Updated 10 months ago· 181
🎨 PS Curves
  • image
  • mask
  • image
  • curve_chart
rgb_curve[[0,0],[255,255]]
red_curve[[0,0],[255,255]]
green_curve[[0,0],[255,255]]
blue_curve[[0,0],[255,255]]
curve_typecubic
strength100
preset_curve_points
preset_suggested_channel
mask_blur0.0
invert_maskfalse

This is the heart of the ComfyUI-Curve pack, and the reason it exists. Photoshop-style curve adjustment with per-channel control, live histogram backgrounds, and - the standout bit - a double-click popup editor where you drag control points on a curve and watch the image change in real time, no re-running the workflow. If you've ever fiddled with an S-curve in a photo editor, you already know what this does; the novelty is doing it inside ComfyUI with the same fluidity.

Reach for it whenever you want tonal control, not just saturation sliders. Curves are the precise instrument: an S-curve adds contrast without touching color balance, a lifted bottom corner rescues crushed shadows, and per-channel curves are how you build a teal-and-orange grade or fix a color cast. It slots anywhere after an image exists - Load Image → this node → Preview/Save.

How it works

The node takes a list of control points per channel, interpolates them into a 256-entry lookup table, and remaps the image through it. Interpolation is cubic (smooth, Photoshop-like) or linear (straight lines between points, good for deliberate hard looks), and the strength slider (0-200%) blends the result back toward the original so you can apply a curve at 60% instead of committing to all of it.

The popup is where it shines. Double-click the node: click the curve to add a point, drag to move it, right-click to delete, toggle between RGB / R / G / B, and each channel's histogram renders behind its curve so you can aim adjustments at actual data. Hit Apply and the coordinates sync back into the node's string inputs. The second output, curve_chart, is a matplotlib-rendered image of the curves plus histograms - handy for documenting a look or eyeballing it side by side with the result.

The inputs that matter

  • rgb_curve, red_curve, green_curve, blue_curve - point lists as strings, format [[x1,y1],[x2,y2],...], default [[0,0],[255,255]] (no adjustment). Points run 0-255.
  • curve_type - cubic or linear.
  • strength - 0 = no effect, 100 = full curve, 200 = doubled. Dial it down to keep a grade subtle.

Outputs: image (graded) and curve_chart (the visualization).

There's also an optional mask / mask_blur / invert_mask set for masking, plus two preset inputs - preset_curve_points and preset_suggested_channel - that pair with the pack's Curve Presets node. Wire CurvePresetNode into those and the preset's suggested channel (Red/Green/Blue/RGB) is applied automatically. Worth wiring up just to see the smart channel mapping do its thing.

Installing it

ComfyUI Manager → search "ComfyUI-Curve", or:

cd ComfyUI/custom_nodes
git clone https://github.com/aiaiaikkk/ComfyUI-Curve.git

Restart ComfyUI. No models to download; it's all tensor math. The pack pulls in scipy (curve interpolation) and matplotlib (the chart output), both light.

Where people get burned

The silent identity fallback is the sneaky one: if a curve string fails to parse, the code quietly defaults to the linear [[0,0],[255,255]] curve - no error, just no effect. Check your formatting if a curve "does nothing"; batch input via the popup's numeric entry (0,0;64,80;128,128;192,200;255,255) avoids hand-typing JSON. Also remember strength starts at 100, and if curve_chart errors out, matplotlib isn't installed in your environment - pip install matplotlib in ComfyUI's Python fixes it.

CategoryImage/Adjustments

Inputs (12)

NameTypeDefaultDescription
imageIMAGE
rgb_curveSTRING[[0,0],[255,255]]RGB曲线控制点,格式:[[x1,y1],[x2,y2],...]
red_curveSTRING[[0,0],[255,255]]红色通道曲线控制点
green_curveSTRING[[0,0],[255,255]]绿色通道曲线控制点
blue_curveSTRING[[0,0],[255,255]]蓝色通道曲线控制点
curve_typeCOMBOcubic曲线插值类型
strengthFLOAT1000–200调整效果强度,100为完整效果,0为无效果
preset_curve_pointsoptSTRING来自CurvePresetNode的预设曲线点,格式:x1,y1;x2,y2;...
preset_suggested_channeloptSTRING来自CurvePresetNode的建议通道:RGB/Red/Green/Blue
maskoptMASK可选遮罩,调整仅对遮罩区域有效
mask_bluroptFLOAT0.00–50遮罩边缘羽化程度
invert_maskoptBOOLEANfalse反转遮罩区域

Outputs (2)

NameTypeDescription
imageIMAGE
curve_chartIMAGE