Color: ColorLab (ACR)
An entire Adobe Camera Raw panel stack in one (very tall) node
- image
- image
This is the node that makes the pack's "pro-grade color suite" claim believable. JHPixelProColorLab is a monolithic Adobe Camera Raw-style color node: one node body with 55 parameters that run a deterministic Basic → HSL → Color Grading → Gray Mix pipeline, all in pure PyTorch, all on the tensor. If you've ever wished ComfyUI had a proper grading tool instead of a pile of math nodes, this is the one that says "yes, but it's one tall node."
The pipeline order matters and it's worth knowing: Basic first (global exposure and tone), then HSL (per-color-family adjustments), then Color Grading (shadow/midtone/highlight tinting), then Gray Mix (black & white weights). Everything defaults to neutral, and all-zero with gray_enable=False is a true identity - so it's safe to drop into a workflow and dial up from zero, knowing you're starting from "nothing changed."
What's behind the 55 knobs
The parameter names group into panels:
- Basic (
basic_*, 11 controls): exposure, contrast, highlights, shadows, whites, blacks, texture, clarity, dehaze, vibrance, saturation. This is your exposure/tone pass in one cluster. - HSL (
hsl_*, 24 controls): eight hue anchors - red, orange, yellow, green, aqua, blue, purple, magenta - each with hue, saturation, and luminance. This is the selective-color panel; if you've used the pack'sJHPixelProHueSaturationRangeand wanted it for all families at once, this is the all-at-once version. - Color Grading (
grade_*, 12 controls): shadow, midtone, and highlight hue / saturation / luminance plus balance per region - the teal-and-orange cinematic look lives here. - Gray Mix (
gray_*, 8 controls):gray_enableplus seven B&W mix weights. Skipped entirely when disabled, so leaving it off costs you nothing.
There's a basic_* input for every one of these plus the image input, and a single image output. That's the whole interface.
The honest caveats
Two things to internalize before you get frustrated. First, there is no custom tabbed widget - all 55 controls are scrollable in one node body, grouped by naming convention. It works, but it's a wall of sliders; treat the basic_ / hsl_ / grade_ / gray_ prefixes as your navigation. Second, this is an ACR-compatible approximation, not Adobe's code - the tone masks, HSL hue falloff, and grading masks are pure PyTorch approximations. For a retouch/grading pass it's excellent; for pixel-perfect reproduction of a specific Lightroom preset, it won't be identical.
There's a practical play here worth stealing from the pack's own workflow library: run your grade through ColorLab, then use the HALD pipeline (JHPixelProHALDIdentity → chain → JHPixelProLUTExport) to bake that wall of sliders into a portable .cube LUT. Grade interactively in ColorLab, ship the result as a LUT.
Install
ComfyUI Manager → search ComfyUI-JH-PixelPro, or:
cd ComfyUI/custom_nodes
git clone https://github.com/jetthuangai/ComfyUI-JH-PixelPro.git
cd ComfyUI-JH-PixelPro
pip install -r requirements.txt
Restart ComfyUI; it's under ComfyUI-JH-PixelPro/color. The pack needs ComfyUI ≥ 0.43.x, Python ≥ 3.10, plus kornia, mediapipe, opencv-python-headless, and scipy.
My verdict: this is the node people will either love or dismiss on sight. The love case is real - it's the only thing in this pack that gives you a full ACR-style grade in one place, which is exactly what "professional retouching in ComfyUI" was missing. The dismissal case is also fair: 55 scrollable sliders is a lot of interface for a graph tool. Start with Basic and one HSL family, verify with a before/after, and let the node earn its height.
Inputs (56)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| basic_exposure | FLOAT | 0.00-5–5 | — |
| basic_contrast | FLOAT | 0-100–100 | — |
| basic_highlights | FLOAT | 0-100–100 | — |
| basic_shadows | FLOAT | 0-100–100 | — |
| basic_whites | FLOAT | 0-100–100 | — |
| basic_blacks | FLOAT | 0-100–100 | — |
| basic_texture | FLOAT | 0-100–100 | — |
| basic_clarity | FLOAT | 0-100–100 | — |
| basic_dehaze | FLOAT | 0-100–100 | — |
| basic_vibrance | FLOAT | 0-100–100 | — |
| basic_saturation | FLOAT | 0-100–100 | — |
| hsl_red_hue | FLOAT | 0-100–100 | — |
| hsl_red_sat | FLOAT | 0-100–100 | — |
| hsl_red_lum | FLOAT | 0-100–100 | — |
| hsl_orange_hue | FLOAT | 0-100–100 | — |
| hsl_orange_sat | FLOAT | 0-100–100 | — |
| hsl_orange_lum | FLOAT | 0-100–100 | — |
| hsl_yellow_hue | FLOAT | 0-100–100 | — |
| hsl_yellow_sat | FLOAT | 0-100–100 | — |
| hsl_yellow_lum | FLOAT | 0-100–100 | — |
| hsl_green_hue | FLOAT | 0-100–100 | — |
| hsl_green_sat | FLOAT | 0-100–100 | — |
| hsl_green_lum | FLOAT | 0-100–100 | — |
| hsl_aqua_hue | FLOAT | 0-100–100 | — |
| hsl_aqua_sat | FLOAT | 0-100–100 | — |
| hsl_aqua_lum | FLOAT | 0-100–100 | — |
| hsl_blue_hue | FLOAT | 0-100–100 | — |
| hsl_blue_sat | FLOAT | 0-100–100 | — |
| hsl_blue_lum | FLOAT | 0-100–100 | — |
| hsl_purple_hue | FLOAT | 0-100–100 | — |
| hsl_purple_sat | FLOAT | 0-100–100 | — |
| hsl_purple_lum | FLOAT | 0-100–100 | — |
| hsl_magenta_hue | FLOAT | 0-100–100 | — |
| hsl_magenta_sat | FLOAT | 0-100–100 | — |
| hsl_magenta_lum | FLOAT | 0-100–100 | — |
| grade_shadow_hue | FLOAT | 00–360 | — |
| grade_shadow_sat | FLOAT | 00–100 | — |
| grade_shadow_lum | FLOAT | 0-100–100 | — |
| grade_shadow_bal | FLOAT | 0-100–100 | — |
| grade_mid_hue | FLOAT | 00–360 | — |
| grade_mid_sat | FLOAT | 00–100 | — |
| grade_mid_lum | FLOAT | 0-100–100 | — |
| grade_mid_bal | FLOAT | 0-100–100 | — |
| grade_highlight_hue | FLOAT | 00–360 | — |
| grade_highlight_sat | FLOAT | 00–100 | — |
| grade_highlight_lum | FLOAT | 0-100–100 | — |
| grade_highlight_bal | FLOAT | 0-100–100 | — |
| gray_enable | BOOLEAN | false | — |
| gray_red | FLOAT | 0-200–300 | — |
| gray_orange | FLOAT | 0-200–300 | — |
| gray_yellow | FLOAT | 0-200–300 | — |
| gray_green | FLOAT | 0-200–300 | — |
| gray_aqua | FLOAT | 0-200–300 | — |
| gray_blue | FLOAT | 0-200–300 | — |
| gray_purple | FLOAT | 0-200–300 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |