RC Curves
The curves editor that makes ComfyUI feel like Photoshop
- image
- IMAGE
Curves is the adjustment people miss most when they come to ComfyUI from Photoshop. Most of the ecosystem has brightness/contrast nodes that feel like toys once you've dragged an S-curve across a whole image. RC Curves (RC_CurvesAdjust) is the pack's answer: a real curves editor with draggable points rendered right on the node, RGB and per-channel control, and natural cubic spline interpolation instead of the jagged linear ramps most ComfyUI nodes fake it with.
It ships as part of the RC Image Compositor suite - a 36-node pack that basically ports Photoshop's layer panel into ComfyUI. This is the node you reach for when the histogram says "the blacks are muddy" or the whites are clipped and you want to fix it in one gesture instead of chaining three half-built alternatives.
How it works
The node keeps your curve as JSON in a curve_data string, and a bundled frontend widget (rc_curves_ui.js) renders an actual interactive editor on the node itself. You click to add points, drag them around, and the whole thing recomputes via a cubic spline per channel. The default payload has identity curves for RGB, R, G, B and A - a straight line means "no change," which is the right way to ship a curves tool.
The only inputs that matter:
- curve_data - the JSON that stores your points. The tooltip says it plainly: use the curve editor widget to modify points, don't hand-edit this unless you know JSON.
- mix (0–1) - blends between the original and the adjusted image. Great for dialing in a strong curve at 100% then pulling it back to 40% without rebuilding it.
- apply_alpha - applies the combined/alpha curve to the alpha channel too, when the image has one. Leave it off unless you're intentionally grading a transparent layer.
Output is a single IMAGE, same shape as the input, so you can drop it anywhere in a compositing chain - in front of a blend node, after an upscale, before a save. It also processes batches frame by frame, which means the README's video support applies here: run it over a whole clip and every frame gets the same curve.
Installing it
RC Image Compositor installs like any custom node. Easiest path is ComfyUI Manager: open Manager → Install Custom Nodes → search for "RC Image Compositor" → Install, then restart.
Manual install is just:
cd ComfyUI/custom_nodes
git clone https://github.com/kj863257/ComfyUI_RC_Image_Compositor
cd ComfyUI_RC_Image_Compositor
pip install -r requirements.txt
Then restart ComfyUI. The requirements are only pillow, numpy, and opencv-python - no model downloads, no torch-side surprises. If your environment already runs any image node it has all three. One honest note: this is a small, newer pack (no real community footprint yet, MIT licensed), so you're trading Photoshop-style comfort for a smaller safety net than the big established packs.
Where people get burned
- The output is the same size as the input. If you push a curve that should clip to pure black, it clips - but you don't get a preview mask or histogram out of this node. Wire the result into an image compare node if you want a before/after.
- Alpha surprises. RGB images pass through untouched by
apply_alpha; the flag only matters when the input actually has a 4th channel. If your PNG cutouts are losing transparency after curves, that's the toggle you forgot. - The JSON is state, not config. If you copy a workflow and the curve looks wrong, the
curve_datawidget travels with the node - that's a feature, but it also means a shared workflow can silently carry someone else's heavy grade.
RC Curves is one of the two or three nodes in this pack I'd actually build a workflow around. If you've been fighting fake "curves" nodes that only do brightness, this is the upgrade.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| curve_data | STRING | {"channels": {"RGB": [{"x": 0.0, "y": 0.0}, {"x": 1.0, "y": 1.0}], "R": [{"x": 0.0, "y": 0.0}, {"x": 1.0, "y": 1.0}], "G": [{"x": 0.0, "y": 0.0}, {"x": 1.0, "y": 1.0}], "B": [{"x": 0.0, "y": 0.0}, {"x": 1.0, "y": 1.0}], "A": [{"x": 0.0, "y": 0.0}, {"x": 1.0, "y": 1.0}]}, "active_channel": "RGB", "editor": "RC_CurvesAdjust", "version": 1} | Curve data in JSON format. Use the curve editor widget to modify points. |
| mix | FLOAT | 1.000–1 | Blend factor between original (0) and adjusted image (1). |
| apply_alpha | BOOLEAN | false | Apply combined/alpha curves to the alpha channel when available. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |