Nodes/MKRShift_Nodes/RGB Balance Scope
ComfyUI Node

RGB Balance Scope

Stop eyeballing color casts, start measuring them

By criskb·Created 7 months ago·Updated 5 months ago· 0
RGB Balance Scope
  • image
  • mask
  • image
  • mask
  • rgb_balance_scope_info
settings_json{"analysis_mode":"zones","shadow_point":0.22,"highlight_point":0.78,"zone_softness":0.12,"response_gain":1.15,"neutral_tolerance":0.08,"show_reference":true,"mask_feather":12.0,"invert_mask":false}

Every colorist has the same lie they tell themselves: "I can see the green cast, I'll just fix it." Then you push a slider, make it worse, and undo. x1RGBBalanceScope is the node that replaces that guessing with measurement. It analyzes where your image is off-balance - in shadows, midtones, and highlights - and draws the answer, so your correction is aimed instead of fumbled.

It's part of MKRShift Nodes' Color/Analyze branch, a small family of analysis nodes (with x1NeutralityMap and x1SatLumaScope) that all follow the same shape: they emit a visualization, a mask, and an info string. The value proposition here is the same one post-processing.md makes for the whole layer: deterministic analysis beats re-rolling generations to fix color.

How it works

The default analysis_mode is zones: the image is split into shadow/mid/highlight zones, and the node measures how each zone's red, green, and blue diverge from neutral. The key controls:

  • shadow_point (0.22) and highlight_point (0.78) - where the zones begin and end on the luma scale. These define your tonal window
  • zone_softness (0.12) - how soft the zone boundaries are, so you don't get hard bands
  • response_gain (1.15) - how much the imbalance is exaggerated for visibility. Like x1NeutralityMap's cast gain, this is a magnifier, not a measurement at face value
  • neutral_tolerance (0.08) - how far from gray a pixel can be before it's flagged. Tighter = stricter analysis
  • show_reference (true) - whether the output includes a neutral reference so you can read the offset against it
  • analysis_mode - zones or columns (a column-based readout)

The settings all live in a settings_json string, the pack's house style. The defaults are tuned so that a genuinely balanced image shows little, and a cast jumps out immediately.

Inputs and outputs

Required: image and settings_json. Optional: mask to restrict the analysis to a region - check only the skin tones, or only the sky, without the rest of the frame skewing the read.

  • image - the scope visualization: the frame with balance offsets drawn in
  • mask - the regions flagged as off-balance, as a MASK
  • rgb_balance_scope_info - a string summary of the measured offsets per zone

That mask output is the killer feature. Don't just read the scope and hand-correct globally - wire the mask into a x1ColorBalance or curves node and correct only the off zones. That's the difference between fixing a cast and fixing it without touching the parts that were fine.

Where it fits

In a grading pipeline it's the front of the chain: analyze → correct → re-analyze. The pack's Color branch gives you the whole loop - x1RGBBalanceScope to find it, x1ColorWheels/x1Curves to fix it, x1SatLumaScope to check saturation against luma. It's niche, but it's the kind of niche that saves you real time once you're doing regular color work instead of one-off generations.

Installing it

ComfyUI Manager (search "MKRShift Nodes") or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart, no requirements, no model downloads, no ffmpeg. Big repo, small node - this is a "you're already in the pack" tool, but the Color/Analyze trio is a genuinely good reason to keep the pack installed.

Where people get burned

Reading response_gain as truth. Crank it to 3.0 and everything shows a cast; that's the magnifier working, not the image being broken. Read relative differences between zones at a consistent gain. And if nothing shows up even on a clearly warm image, check neutral_tolerance - too tight and the node flags nothing as neutral enough to analyze.

CategoryMKRShift Nodes/Color/Analyze

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"analysis_mode":"zones","shadow_point":0.22,"highlight_point":0.78,"zone_softness":0.12,"response_gain":1.15,"neutral_tolerance":0.08,"show_reference":true,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
rgb_balance_scope_infoSTRING