preMaskDetailerFix
Impact Pack's detailer knobs, wrapped in an EasyUse pipe
- pipe
- mask
- optional_image
- pipe
If you've ever used Impact Pack's FaceDetailer, you already know what this node does - the parameter names are lifted almost 1:1. easy preMaskDetailerFix is Easy-Use's own version of the detect-crop-resample-paste-back pattern that made automatic detail fixing standard ComfyUI practice, except it doesn't do any detecting itself. You hand it a mask (from wherever - a segmentor, a manual paint, an SAM box), and it configures a resampling pass over that masked region for a paired execution node to actually run.
The "pre" pattern
This is the half of the Easy-Use split that everyone new to the pack trips over once: pre nodes don't sample anything. They bundle your settings - sampler, steps, cfg, crop geometry - into the pipe object and hand it downstream. The node that actually crops, upscales, resamples, and composites is a separate one (the README calls out easy DetailerFix as its execution-side partner). If you wire this node up and nothing changes in your image, you're missing that second node - this one alone is just configuration.
The mechanism, once wired correctly, is the same as Impact Pack's: crop a padded box around your mask, upscale that crop to a real working resolution, run a fresh sampling pass on it, then feather and composite it back into the full image. It's why detail passes work at all - an eye occupying 60 pixels of a 1024px frame gets almost no model attention at native res; crop it out and it can get 384 or more.
The inputs that actually matter
Most of the required list is standard sampling (seed, steps, cfg, sampler_name, scheduler, denoise) - keep denoise around 0.5, this is a fix pass, not a regeneration. The geometry-specific ones are the point of the node:
guide_size(384) - the resolution the cropped patch gets upscaled to before sampling. This is where your detail actually comes from.max_size(1024) - a ceiling on that upscale, so a huge mask doesn't try to render at absurd resolution.crop_factor(3) - how much padding around the mask to include. Too tight and you get visible seams; too loose and you burn yourguide_sizebudget on background instead of the subject.feather(5) and the optionalnoise_mask_feather- edge softening for the output composite and for the noise mask used during sampling, respectively. Two different feathers, two different jobs.drop_size- ignores stray mask fragments smaller than this, useful when your mask source is noisy.cycle- re-runs the detail pass this many times. Diminishing returns fast; 1 or 2 is normal.refiner_ratio- if thepipecarries a refiner model, how much of the step budget hands off to it.
Optionally, optional_image overrides the image carried in the pipe (handy if you're detailing something you loaded separately from your main generation), and inpaint_model switches the encode step to inpaint-conditioning semantics if your checkpoint is an actual inpainting model rather than a general one.
The single output is pipe - carry it straight into easy DetailerFix to get an image back.
Installing it
ComfyUI Manager: search ComfyUI Easy Use, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
On Windows, double-click install.bat in the new folder to grab the pack's dependencies; on Linux/Mac there's no script, so cd into the folder and run pip install -r requirements.txt yourself. Restart ComfyUI.
Where people get stuck
The most common complaint is "I set everything and nothing happened" - that's the missing paired execution node, not a bug. Second most common: a blank or all-zero mask silently produces no visible change, which usually means whatever fed mask (a segmentor, a SAM node) didn't actually detect anything - check that upstream output before assuming this node is broken. And if the detailed region looks stylistically off from the rest of the image, that's the classic inpainting failure mode: denoise is too high for a "fix," or crop_factor didn't give the model enough surrounding context to match.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | PIPE_LINE | — | |
| mask | MASK | — | |
| guide_size | FLOAT | 38464–16384 | — |
| guide_size_for | BOOLEAN | true | — |
| max_size | FLOAT | 102464–16384 | — |
| mask_mode | BOOLEAN | true | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.000–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.500.0001–1 | — |
| feather | INT | 50–100 | — |
| crop_factor | FLOAT | 3.01–10 | — |
| drop_size | INT | 101–16384 | — |
| refiner_ratio | FLOAT | 0.200–1 | — |
| batch_size | INT | 11–100 | — |
| cycle | INT | 11–10 | — |
| optional_imageopt | IMAGE | — | |
| inpaint_modelopt | BOOLEAN | false | — |
| noise_mask_featheropt | INT | 200–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE_LINE | — |