CMK Mask Detailer · Process
Running CMK's Standalone Detailer
- MODEL
- MASK DETAILER PROCESS
- LOG
- VISUAL
- MODEL
- MASK DETAILER PROCESS
- IMAGE
- LOG
- VISUAL
- diagnostic
This is the node you reach for when one region of an otherwise-fine image is a smear and you'd rather paint the mask yourself than trust a detector. Small hand, mangled ear, a logo that came out as alien glyphs - paint it, run one masked pass over it at proper resolution, paste it back.
CMK Mask Detailer · Process is that single node. It takes the process object built by Mask Detailer · Prepare and a set of sampling parameters, and returns a finished image.
The mechanism, precisely
It doesn't hand your image to an inpainting checkpoint. It does what the whole detailer category does, and it does it in four steps you can trace in the source:
- It grows your mask by
mask_expandpixels and converts it into SEGS - the same segment-container concept Impact Pack popularised, but CMK ships its own engine (engine/native_detailer.py), so you do not need Impact Pack installed. SEGSDetailercrops each region, resamples it atguide_size=512up tomax_size=1024, withforce_inpaint=True.- That crop is re-sampled with your seed, steps, CFG, sampler, scheduler and denoise, using the positive and negative conditioning baked into the prepare step.
SEGSPastecomposites the refined crops back withfeather=mask_featherpixels of blend.
Because it forces inpaint and a noise mask, this is a masked img2img, which means every rule in the inpainting playbook applies unchanged.
The knobs worth caring about
denoise- default0.45. This is the single most important number on the node. Low values polish and sharpen; high values redraw. Past roughly0.6you're asking the model to invent a hand, and it will invent a hand-shaped object.mask_expand- default8. Grows the mask outward. Too tight and the paste seams land right on the feature's edge; too generous and you start re-rendering healthy pixels that didn't need help.mask_feather- default12. Blend radius on paste-back. If you can see a square, this is the number to raise.cfg(7.0),steps(20),sampler_name,scheduler- the usual. Match your main render's sampler family rather than mixing; a different sampler on the crop shows up as a texture mismatch.seed- fixed by default (control_after_generate: "fixed"), which is a small mercy given how much ComfyUI's seed-widget-after-generate behaviour has burned everyone at least once.
Outputs
MODEL (unchanged, passed through), MASK DETAILER PROCESS with the result written in, IMAGE (the composited image), LOG and VISUAL.
Wire IMAGE to whatever saves or displays your work. Wire VISUAL to CMK Visualizer and you get a proper before/after of exactly the masked region - which is worth doing, because masked passes are the kind of change that's easy to over-apply and hard to see. The node registers its provider with status="completed" and a before/after channel pair specifically for that comparison.
Install
Manager → search CMK Flow → install the CMKFlow entry → restart. Manual, with ComfyUI shut down:
git clone https://github.com/CMKFlow/cmk_nodes.git custom_nodes/cmk_nodes
python3 custom_nodes/cmk_nodes/scripts/install_cmk_requirements.py
You want CMK dependency check: OK. Models are separate: scripts/check_cmk_resources.py --models-root ... audits what the shipped workflows need. For this node you need an SDXL-family checkpoint and its VAE, nothing exotic.
Common issues
The output looks identical to the input. Either the mask is empty (check the Visualizer, or the Intake status line) or denoise is so low that the pass truly isn't changing anything. 0.45 on a small region is a subtle change by design.
The patch is visibly a patch. Raise mask_feather, raise mask_expand, and check that cfg matches your main render. This is the classic bbox-vs-blend problem from the broader detailing literature, and it's almost always a mask-edge issue rather than a model issue.
"invalid process family." Something other than Mask Detailer · Prepare produced that object. Process validates the type field and refuses anything else - the same anti-mis-wiring discipline the rest of the pack uses.
No boundary cache here, on purpose. Unlike the Flow detailer modules, this standalone path skips the dependency-manifest caching, so it re-runs every time you queue. It's the tool, not the accelerator.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| MODEL | CMK_MODEL_PIPE | — | |
| MASK DETAILER PROCESS | CMK_MASK_DETAILER_PROCESS | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.450.01–1 | — |
| mask_expand | INT | 80–128 | — |
| mask_feather | INT | 120–128 | — |
| LOGopt | CMK_LOG_PIPE | — | |
| VISUALopt | CMK_VISUAL_PIPE | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| MODEL | CMK_MODEL_PIPE | — |
| MASK DETAILER PROCESS | CMK_MASK_DETAILER_PROCESS | — |
| IMAGE | IMAGE | — |
| LOG | CMK_LOG_PIPE | — |
| VISUAL | CMK_VISUAL_PIPE | — |
| diagnostic | CMK_DIAGNOSTIC | — |