Nodes/comfyui-OreX/📸 Camera Raw (OreX)
ComfyUI Node

📸 Camera Raw (OreX)

The Camera Raw clone living inside ComfyUI — grade your output like a photo, not a render

By orex2121·Created about a year ago·Updated 3 days ago· 42
📸 Camera Raw (OreX)
  • image
  • IMAGE
Enable Settingstrue
Exposure0
Contrast0
Highlights0
Shadows0
Whites0
Blacks0
Temperature0
Tint0
Colorfulness0
Saturation0
Texture0
Clarity0
Dehaze0
Grain0
Sharpening0
Gaussian Blur0
Vignette0
HSL Activefalse
HSL Data{}
Curve Activefalse
Curve Data{}

So you generated a great image and the colors are off. Highlights are blown, shadows are muddy, the whole thing looks like a screenshot instead of a photograph. You could reroll the seed and pray - or you could fix it in a minute with a node that works like Adobe Camera Raw, right there in your workflow. That's this one.

📸 Camera Raw (OreX) is a full color-grading node from the comfyui-OreX pack: 17 exposure/color/detail sliders in the style of Lightroom, plus HSL per-color-range controls and RGB curves, all on a single IMAGE in, IMAGE out. It's pure post-processing - no model, no VRAM cost, runs in milliseconds. The KB's standing advice applies here hard: don't do color correction with img2img and its seed lottery; do it with a deterministic pixel pass. This node is a big, friendly lump of that exact philosophy.

What's under the hood

The sliders are all Python/numpy, computed per-pixel in float before being clipped back to 8-bit. Exposure is the honest one: 2^(value/50), so it's a real multiplicative gain like an f-stop, not an additive wash. Highlights and Shadows are luma-masked so they only touch the bright or dark end. Temperature and Tint nudge the red/blue and green/magenta balance. Clarity is a midtone-only detail pass - the "structure" knob, great for giving flat AI renders back some punch without halo-ing edges. Grain adds random noise (see the gotcha below), Vignette darkens corners, Dehaze does a soft contrast-plus-saturation recovery.

Then there's the part you can't see from the schema: click the node and a proper canvas editor opens on the side of your graph - HSL panel with a colorize option and per-range sliders for reds, yellows, greens, cyans, blues, magentas, plus an RGB curve editor (master + R/G/B). That state gets serialized into two hidden STRING widgets, HSL Data and Curve Data, and evaluated Python-side with the same Catmull-Rom spline math as the live preview, so what you see in the editor is what comes out. Don't hand-edit those JSON strings - the editor writes them.

The inputs that actually matter

Only two inputs are worth knowing up front: the image you're grading, and Enable Settings (a master bypass - set it false to pass through untouched, handy for A/B). Of the sliders, Exposure, Highlights, Shadows, Contrast, Saturation, Clarity and Temperature do 90% of the work. Note the ranges: most go −150 to +150, but Saturation is ±100, and Grain, Sharpening, Gaussian Blur and Vignette only go 0–150 - they're on-or-off additions, no negative.

Wire the IMAGE output straight into a Save Image node, or into anything downstream. It handles batches too (it iterates over the batch dimension), so you can grade a whole folder from the pack's batch loader in one go. It's marked as an output node because it previews, but the filtered image still flows out normally.

Installing it

ComfyUI Manager → search comfyui-OreX, or:

cd ComfyUI/custom_nodes
git clone https://github.com/orex2121/comfyui-OreX

Restart ComfyUI. That's it - no model downloads, no GPU deps. This node only needs numpy/Pillow/torch, all of which ComfyUI already ships. (The pack's requirements add soundfile, but that's for its video/audio nodes, not this one.)

Where people get burned

  • The README lags the code. It documents the LM-Studio and load/save nodes and never mentions Camera Raw - the pack is actively developed (currently 1.3.6) and the README hasn't caught up. Don't assume the node is broken because it's undocumented.
  • Grain is unseeded. Every run rolls fresh np.random.normal, so Grain > 0 gives you a different image each time. Fine for final renders, annoying if you're hunting for reproducibility - bump it to zero when you're iterating.
  • The README's own fix-it-first line: if nodes misbehave after an update, it tells you to delete the pack from custom_nodes and reinstall fresh. That's the first thing to try.
  • Sliders are integers, so you can't fine-tune to 0.5 steps. It's a quirk, not a bug - grade with it, don't fight it.

It's not going to replace a proper photo editor for serious retouching, but for pulling AI output back toward "looks like it was shot, not rendered," it's the fastest Camera-Raw-style pass in the ecosystem.

Category🤫OreX/Filters

Inputs (23)

NameTypeDefaultDescription
imageIMAGE
Enable SettingsBOOLEANtrue
ExposureINT0-150–150
ContrastINT0-150–150
HighlightsINT0-150–150
ShadowsINT0-150–150
WhitesINT0-150–150
BlacksINT0-150–150
TemperatureINT0-150–150
TintINT0-150–150
ColorfulnessINT0-150–150
SaturationINT0-100–100
TextureINT0-150–150
ClarityINT0-150–150
DehazeINT0-150–150
GrainINT00–150
SharpeningINT00–150
Gaussian BlurINT00–150
VignetteINT00–150
HSL ActiveBOOLEANfalse
HSL DataSTRING{}
Curve ActiveBOOLEANfalse
Curve DataSTRING{}

Outputs (1)

NameTypeDescription
IMAGEIMAGE