Nodes/MKRShift_Nodes/Gamut Warning
ComfyUI Node

Gamut Warning

Find the colors that will clip before they embarrass you on another screen

By criskb·Created 7 months ago·Updated 5 months ago· 0
Gamut Warning
  • image
  • mask
  • image
  • mask
  • gamut_warning_info
settings_json{"warning_mode":"combined","low_clip":0.02,"high_clip":0.98,"saturation_limit":0.9,"highlight_gate":0.55,"overlay_opacity":0.82,"mask_feather":12.0,"invert_mask":false}

The worst feeling in grading is seeing your image look great on your monitor and then watching it fall apart on someone else's - neon-reds turning to flat blocks, highlights blowing out, everything posterizing. x1GamutWarning is the "before it's a problem" tool: it overlays your image with a visual alarm wherever colors are out of range for broadcast or display, so you can find the trouble zones before you export, not after. It's the analysis half of the pair the MKRShift pack ships - the fixer is x1GamutMap right next to it.

It's part of MKRShift Nodes by Cris K B, under MKRShift Nodes/Color/Analyze.

How it works

The node checks your image against broadcast/display limits in three warning_modes:

  • broadcast_safe - flags colors that break legal broadcast limits (the old "broadcast safe" reds and luminance).
  • chroma_stress - flags pixels where color saturation is pushed hard enough that it will band or clip on a display.
  • combined (default) - both at once.

The test is shaped by saturation_limit (default 0.9) - how much saturation counts as "too much" - and highlight_gate (default 0.55), which only flags the saturated trouble in brighter areas, since a saturated-but-dark pixel is usually fine while a saturated-and-bright one is where clipping happens. low_clip / high_clip (defaults 0.02 / 0.98) define the extremes, and overlay_opacity (default 0.82) decides how loudly the alarm paints over your image.

The image output is the warning overlay. The mask output is where it gets interesting: it isolates the exact out-of-range pixels, so you can wire it into a mix or a corrective node and fix only the flagged areas - surgical, rather than grading the whole frame down to protect a few red pixels.

The inputs that matter

Inside the settings_json:

  • warning_mode - broadcast_safe, chroma_stress, or combined.
  • saturation_limit - the "too saturated" bar (default 0.9).
  • highlight_gate - only flag bright-enough pixels (default 0.55).
  • overlay_opacity - how visible the warning is.

Optional mask input with mask_feather / invert_mask, plus the gamut_warning_info string output.

Installing it

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

Restart ComfyUI, or install via ComfyUI Manager (search MKRShift_Nodes). No requirements.txt, no models.

The take

This is a monitor, not a look - don't leave it on the frame you export. The workflow: run it, note where the alarm fires, fix with x1GamutMap (or a targeted saturation drop), re-check. It's especially worth it if you're delivering anything for broadcast or web platforms that re-encode, because the thing that dies in re-encode is exactly what this flags. The trap is saturation_limit - at 0.9 with chroma_stress, on a stylized piece, everything lights up, and the alarm becomes noise. Raise the limit until only the genuinely broken pixels alarm, then trust it.

CategoryMKRShift Nodes/Color/Analyze

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"warning_mode":"combined","low_clip":0.02,"high_clip":0.98,"saturation_limit":0.9,"highlight_gate":0.55,"overlay_opacity":0.82,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
gamut_warning_infoSTRING