Log Wheels
Resolve-style shadow/midtone/highlight grading, without the $400 editor
- image
- image
Every serious colorist grades in three zones - shadows, midtones, highlights - and DaVinci Resolve made that workflow famous with its color wheels. Log Wheels brings the same idea to ComfyUI: pick a tint (hue) and intensity (saturation) for each zone, plus a brightness shift, and the node builds a smooth, professional grade. It's the "teal and orange" machine if you want it to be, but it's far more than that - it's a proper three-zone color tool.
How it works
The interesting part is the zone separation. This isn't a blunt thresholds-and-blend job. The node works in log2-encoded luminance space and creates soft Gaussian zone masks for shadows, midtones, and highlights. "Soft" is the key word - the zones blend into each other with smooth falloff rather than hard edges, so your grade doesn't band or posterize in the transitions. That's what separates it from a filter that just tints the whole image and calls it a day.
Each zone gets three controls:
hue- the tint direction. The tooltip gives you the map: 0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta. Shadows at 240 with a bit of saturation is your classic cold-shadow look.saturation- 0–100, how strong that tint is.density- −100 to +100, a brightness shift for the zone. Negative darkens; this is how you crush shadows or lift highlights as part of the grade.
Plus shadow_range (default 0.15) and highlight_range (default 0.85) define where the shadow and highlight zones live in linear light - raise/lower them to widen or tighten a zone.
Presets are the fast path
There's a preset dropdown with seven real looks baked in: Warm Shadows / Cool Highlights, Cool Shadows / Warm Highlights, the Teal & Orange cinematic standard, Bleach Bypass (low sat, high contrast), Day for Night (blue push), Golden Hour enhancement, and Moonlight (cold blue shadows). "Custom (manual)" is the default and the one that respects your sliders - the presets just populate them, so you can pick "Teal & Orange" and then hand-tune away from it. That preset-plus-manual pattern is everywhere in this pack, and it's the right pattern: instant result, then you take over.
Where it fits
Log Wheels lives in AKURATE/Darkroom/Grading and is a per-pixel color transform, so it's one of the nodes the README allows inside a LUT bake chain. That's a genuinely useful property: grade a photo with Log Wheels, bake the result into a .cube, and you can carry that exact three-zone look into video or share it as a LUT.
Output is a single image. The inputs are image, preset, the nine zone controls (three per zone), the two range controls, and strength for blending back toward the original - which is your "how much of this grade do I actually want" lever and the first thing to pull when a preset overshoots.
Installing it
It's part of the full ComfyUI-Darkroom pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom.git
pip install -r ComfyUI-Darkroom/requirements.txt
Or search "Darkroom" in ComfyUI Manager. Needs scipy, opensimplex, rawpy, exifread, Pillow; restart after install; lives under AKURATE/Darkroom/Grading. No GPU, no models, no API costs.
If you've ever found yourself stacking three different "add teal to shadows" nodes and fighting the boundaries between them, this is the one node that replaces that entire mess with proper zone masks. It's the workhorse of the pack's grading section.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| preset | COMBO | Custom (manual) | Select a log grading preset or use Custom |
| shadow_hueopt | FLOAT | 00–360 | Shadow tint direction (0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta) |
| shadow_saturationopt | FLOAT | 00–100 | Shadow tint color intensity |
| shadow_densityopt | FLOAT | 0-100–100 | Shadow brightness shift (negative = darker) |
| midtone_hueopt | FLOAT | 00–360 | Midtone tint direction |
| midtone_saturationopt | FLOAT | 00–100 | Midtone tint color intensity |
| midtone_densityopt | FLOAT | 0-100–100 | Midtone brightness shift |
| highlight_hueopt | FLOAT | 00–360 | Highlight tint direction |
| highlight_saturationopt | FLOAT | 00–100 | Highlight tint color intensity |
| highlight_densityopt | FLOAT | 0-100–100 | Highlight brightness shift |
| shadow_rangeopt | FLOAT | 0.150.05–0.4 | Upper boundary of shadow zone in linear light |
| highlight_rangeopt | FLOAT | 0.850.6–0.95 | Lower boundary of highlight zone in linear light |
| strengthopt | FLOAT | 1.000–1 | Blend between original (0) and graded (1) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |