📸 Camera Raw (OreX)
The Camera Raw clone living inside ComfyUI — grade your output like a photo, not a render
- image
- IMAGE
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_nodesand 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.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| Enable Settings | BOOLEAN | true | — |
| Exposure | INT | 0-150–150 | — |
| Contrast | INT | 0-150–150 | — |
| Highlights | INT | 0-150–150 | — |
| Shadows | INT | 0-150–150 | — |
| Whites | INT | 0-150–150 | — |
| Blacks | INT | 0-150–150 | — |
| Temperature | INT | 0-150–150 | — |
| Tint | INT | 0-150–150 | — |
| Colorfulness | INT | 0-150–150 | — |
| Saturation | INT | 0-100–100 | — |
| Texture | INT | 0-150–150 | — |
| Clarity | INT | 0-150–150 | — |
| Dehaze | INT | 0-150–150 | — |
| Grain | INT | 00–150 | — |
| Sharpening | INT | 00–150 | — |
| Gaussian Blur | INT | 00–150 | — |
| Vignette | INT | 00–150 | — |
| HSL Active | BOOLEAN | false | — |
| HSL Data | STRING | {} | — |
| Curve Active | BOOLEAN | false | — |
| Curve Data | STRING | {} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |