Mask Reporting
Your merge mask is a black box — this node opens it
- mask
- STRING
- IMAGE
A model mask in DareMerge isn't a little PNG with a feather - it's a whole state dict of boolean tensors, one per parameter, telling the merger which weights it's allowed to touch. You build one with the Simple Masker, the Quad Masker, or the Magnitude Masker, and then it just sits there doing its thing. If something about the resulting merge surprises you, this is the node that tells you why: DM_MaskReporting looks inside the mask and prints what's actually selected.
What you get out of it
The node takes a MODEL_MASK in and gives you two outputs: a STRING with the report text and an IMAGE (declared in the schema, though in practice the text is the part you'll actually read). The one input you'll touch is report, which toggles between two views:
- size (default) - a per-block summary. For each block of the model it prints
selected / totaland a percentage, so you can instantly see "this mask touches 24.9% of the params" instead of trusting a hunch. - details - a line per individual layer, sorted, with the same true/total/percent per line. This is the one the README sends you to for a specific reason: it's how you get the exact layer names you need for wildcards in the Mask Edit node.
*matches everything, but you still need to know what the real keys look like.
The classic sanity check: after a Quad Masker split, run each of the four outputs through this and confirm they're each around a quarter of the model. If one of them comes back at 0%, your seed did something weird and you caught it before burning an afternoon on the merge, not after.
Why this matters for merges
Merging in this pack works on the README's simple rule: one means keep the first model, zero means keep the second. A mask decides which parameters that rule applies to - selected parameters get merged, unselected ones don't. So a mask that's 99% selected is barely a mask at all, and a mask that's 5% selected is a scalpel. The reporting node is the difference between knowing which of those you've built and guessing. It slots naturally in front of a text display node, or you can just read the preview on the node itself.
Installing it
DM_MaskReporting is one of ~25 nodes in the 54rt1n/ComfyUI-DareMerge pack, so you install the whole pack once. Easiest path is ComfyUI Manager - search for "ComfyUI-DareMerge" under Install Custom Nodes. Or, old school:
cd ComfyUI/custom_nodes
git clone https://github.com/54rt1n/ComfyUI-DareMerge
then restart ComfyUI. The requirements (matplotlib, numpy, torch, pillow) are all things a working ComfyUI already has except possibly matplotlib - that one's only needed for the plotting side of the reporting nodes, and Manager will install it for you. No model files to download; the pack has none.
Where people get burned
- It's not a memory light node. Masks are stored as dense CPU tensors, and the source itself comments that sparse or boolean-compressed masks would be better. Reporting on a big mask is fine, but creating several large masks back to back can eat RAM on a modest machine.
- The
detailsreport can be long. SD1.5's UNet has hundreds of named tensors; you'll be scrolling. That's expected - you're usually hunting one layer name, not reading the whole thing.
The honest take: this is a debug tool, and DareMerge is a pack that assumes you're okay with a little archaeology. Most people never open it. But the moment a masked merge produces something wrong, it's the fastest way to find out whether the mask was lying to you.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| mask | MODEL_MASK | — | |
| report | COMBO | size | 2 options: size, details |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |
| IMAGE | IMAGE | — |