Color Warp Chroma/Luma
Drag a mesh to build a selective grade
- image
- mask
- image
- mask
- color_warp_chromaluma_info
Most color nodes make you turn a knob and hope. x1ColorWarpChromaLuma lets you drag points on a mesh that maps color space to itself - grab a region of chroma/luma space and pull it somewhere else, and every pixel in that region follows. It's a selective grade without an HSL qualifier's sliders, and it's one of the two mesh-warp nodes in MKRShift Nodes' Color/Grade branch (its sibling is the hue/sat version).
The pack is young - no impressions, no Reddit presence when I checked - so think of this as fresh, deterministic code with an unusually good UI rather than a community-vetted classic.
How it works
The mental model: imagine a 2D map where the axes are chroma and luma. The node places source anchors (light points) and destination targets (red points) on that map; drag a destination and you warp color space, so colors near that region shift toward where you dragged. It's a mesh deformation of the color domain - the same idea as a color lookup mesh, except you build it by dragging in the node instead of loading a file.
The author's docs cover the physical UI, which is worth reading before you grab it:
- Red points are draggable destination targets; light points are source anchors
- Dragging updates
warp_points_jsonautomatically Shift+Clickadds a point,Alt+Clickremoves the nearest one
strength controls how hard the warp applies, falloff how quickly it fades with distance from the dragged region, and mix blends the warped result back with the original. Everything round-trips through settings_json, so the graph stays deterministic.
Outputs: image, mask (warp matte), color_warp_chromaluma_info.
Inputs that matter
warp_points_json- the actual mesh, but you'll never type it; the drag UI owns itstrength- keep it under 1.0 while you're placing points, then push it once the region behavesfalloff- the difference between a surgical pull and a global pushmix- the safety valve
Installing
ComfyUI Manager → search MKRShift Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI. No models, no new dependencies.
Where people get burned
- The UI is the only sane way in. Hand-editing
warp_points_jsonis possible (it's a JSON array) but brutal; break the JSON and the mesh silently resets to defaults, and then you're rebuilding your grade. - Dragging the wrong point type. Red = destination (where the color goes), light = source (what gets pulled). Dragging a light anchor and wondering why nothing moved is the classic first minute.
- The
maskoutput is the warp matte, not your input mask. Pack-wide convention.
Pick the hue/sat sibling when you want to recolor (skies, skin, product tints); pick this one when you want to reshape the tonal response - pulling luma/chroma relationships into a flatter or richer look. Either way, it's grading by direct manipulation, and that's a genuinely nice way to work.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"warp_points_json":"[]","strength":0.65,"falloff":1.0,"mix":1.0,"mask_feather":12.0,"invert_mask":false} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| color_warp_chromaluma_info | STRING | — |