Nodes/ComfyUI-curved_weight_schedule/Multi-Mask Strength Combiner (5 inputs)
ComfyUI Node

Multi-Mask Strength Combiner (5 inputs)

One ControlNet, five regions, five strengths — without five separate nodes

By diffussy69·Created 11 months ago·Updated 9 months ago· 2
Multi-Mask Strength Combiner (5 inputs)
  • mask_1
  • mask_2
  • mask_3
  • mask_4
  • mask_5
  • combined_mask
base_strength1.00
mask_1_strength1.00
mask_2_strength0.70
mask_3_strength0.50
mask_4_strength0.30
mask_5_strength0.20
blend_mode
normalize_outputtrue
show_debugfalse

ControlNet strength is a global number - 0.8 everywhere or nowhere. But sometimes you want a pose ControlNet gripping the person hard while barely touching the background, or a face ControlNet that goes full-bore on the head and fades to nothing on the torso. That's what this node is for: it takes up to five masks, applies an individual strength multiplier to each, and merges them into a single weighted mask you can pipe into a ControlNet that supports per-pixel strength.

How it works

Each mask_N gets multiplied by its mask_N_strength, then all of them are combined with blend_mode - max, add, multiply, or average. base_strength scales the whole result, and normalize_output clamps it to 0–1. The output is one combined_mask where bright pixels mean "apply a lot of control here" and dark pixels mean "leave this area alone." Wire that into a ControlNet that honors per-pixel weights - the Advanced ControlNet workflow this pack is built around - and you've got spatially varying control strength from a single condition.

The default strengths are telling: 1.0, 0.7, 0.5, 0.3, 0.2. The node assumes a hierarchy - primary subject strongest, secondary regions weaker, background weakest. You'll usually want to override those, but it's a sensible starting shape.

The inputs that matter

  • base_strength (required) - global multiplier over everything.
  • mask_1mask_5 with per-mask mask_N_strength - your regions and how hard each one pushes.
  • blend_mode - max is the usual pick for keeping regions from interfering; average is gentler.
  • normalize_output - keep it on; values over 1.0 confuse some downstream ControlNet wiring.

Output: combined_mask (MASK).

Note the difference from the pack's batch combiner: this one has no timing. It's a single static, spatially-weighted mask for one point in the generation. If you want the same idea moving through time, that's what Multi-Mask Combiner (Batch) does - these two are "space" and "space + time."

Installing it

Standard pack install, no extra weights:

cd ComfyUI/custom_nodes
git clone https://github.com/diffussy69/comfyui-curved_weight_schedule
pip install matplotlib pillow numpy torch scipy

Restart, hard-refresh the browser if the UI acts stale.

Where people get burned

The most common mistake is expecting this mask to change strength by itself. It doesn't - it produces a weighted mask; something downstream has to actually consume it. If your ControlNet doesn't accept per-pixel mask strength, the node quietly does nothing for you. And keep normalize_output on: with add mode, two overlapping strength-1.0 masks sum past 1.0, and whatever consumes the result may behave unpredictably if you let it through unclamped.

Categorymask

Inputs (14)

NameTypeDefaultDescription
base_strengthFLOAT1.000–2Base strength multiplier applied to all masks
mask_1optMASK
mask_1_strengthoptFLOAT1.000–2Strength multiplier for mask 1
mask_2optMASK
mask_2_strengthoptFLOAT0.700–2Strength multiplier for mask 2
mask_3optMASK
mask_3_strengthoptFLOAT0.500–2Strength multiplier for mask 3
mask_4optMASK
mask_4_strengthoptFLOAT0.300–2Strength multiplier for mask 4
mask_5optMASK
mask_5_strengthoptFLOAT0.200–2Strength multiplier for mask 5
blend_modeoptCOMBO4 options: max, add, multiply, average
normalize_outputoptBOOLEANtrueClamp output to [0,1] range
show_debugoptBOOLEANfalsePrint debug information

Outputs (1)

NameTypeDescription
combined_maskMASK