LC Smart Detailer (pipe) 🩹
Same Detailer, But It Reads the Model, VAE and Sampler Off One Wire
- pipe
- image
- model
- vae
- positive
- inpaint_positive
- negative
- pipe
- image
- mask
This is LC Smart Detailer with the settings supplied by a pipe instead of by hands. Same detection, same per-region crops, same blend. The difference is what's on the node: no model, no vae, no steps, no cfg, no sampler, no scheduler, no seed, no positive wire - those arrive through pipe, and the node passes the pipe straight back out so you can chain the next thing off it.
Whether that's better depends entirely on whether you already live in the LC pipe world. If you're running the companion ComfyUI_LC123_nodes pack and your graph is built around pipes, this is the version that stops you re-wiring seven connections into every detail pass. If you're not, use the non-pipe node - reading the source, this one pulls its values from pipe keys, so it's only useful if something upstream is actually writing them.
What comes from the pipe and what doesn't
The pipe supplies model, vae, seed, the step count, cfg, sampler_name, scheduler, and conditioning (positive and negative). The step count it reads is the detailer-oriented step key, falling back to whatever is in the pipe - which is the small tell that the author designed the pipes for detailers in the first place. The cfg the pipe gives is raised to a minimum of 1.0 on the way in, same as on the non-pipe node: below 1 the redraw comes out speckled.
What stays on the node: prompt (what to find - hands, face, comma separated, :N to cap a word like face:1), sam3_model, threshold, and the shape of the pass - grow, feather, blend, padding, inpaint_resolution, denoise. Those are per-use decisions, so the author kept them local, which is the right call.
The optional inputs are the escape hatches. Wire model to use something else for the redraw - a model with LoRAs on it, or a different checkpoint entirely - and vae to swap the VAE. Wire positive and inpaint_positive if the pipe has no conditioning or if you want the crops to get a different prompt from the one that made the image; inpaint_positive is the one to reach for whenever positive describes the whole scene, because at denoise 0.3 and up that scene gets drawn into every crop. Wire negative for SDXL and other models that use one; leave it empty for cfg-1 models.
Outputs are pipe (continuation), image, and mask.
How the pass itself works, briefly
It's the same pipeline as its sibling: SAM 3 finds each thing you named - up to 16 objects per word, so "hands" gets both hands - masks are grown and merged when crops overlap, each crop is enlarged to about inpaint_resolution squared by area, redrawn as a masked inpaint with the seam ring, colour-matched to the original, and pasted back with a blend-weighted feather. denoise 0.3 is the detail-fix setting; 0.6 and up starts redrawing from scratch. Nothing found means the image passes through untouched and the node tells you. The non-pipe node's page goes into the tuning in more depth, and it all transfers - only the wiring differs.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC_MaskMaker_nodes
# restart ComfyUI
Or ComfyUI Manager, searching "LC MaskMaker" (ComfyUI_LC_MaskMaker_nodes, v0.17.1, MIT). The installer only checks for transformers and huggingface_hub. You also want the companion ComfyUI_LC123_nodes pack - that's where the LC pipe producers live, and without them there's nothing to plug into pipe. SAM 3 comes from ComfyUI itself: you need a build with built-in SAM 3 support, and the SAM 3.1 download (1.7GB, models/sam3) or your own sam3.pt / sam3.safetensors in that folder.
Where people get burned
"The pipe has no model, vae, seed, steps, cfg, sampler_name, scheduler." That's the node's own error, and it names the missing pieces exactly. Something upstream isn't filling the pipe - add it with the pipe creator/edit nodes from LC123 and run again. It's the single most common failure here, and it's not a bug.
Wiring a LoRA-laden model and expecting the pipe's model too. You get the wired one. That's the point of the override, but it's easy to wire a model "just to test" and then wonder why the redraw changed character.
Crowds. Every detected region is redrawn on the same seed, so a group of faces can converge on one person. Detail crowds by hand, or run the regions separately.
Over-processing. Detailing an already-sharp face spends render time to change an image without improving it. Fix at native resolution before upscaling, and skip the pass when the region wasn't broken.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | LC_PIPE | LC pipe: model, VAE, seed, steps, cfg, sampler and scheduler come from here. | |
| prompt | STRING | Face | What to detail, as simple words separated by commas: hands, face. Every match is found (both hands, every face). Add :N to cap it, e.g. face:1. |
| sam3_model | COMBO | SAM 3 model that does the finding. Pick the SAM 3.1 download, or use your own sam3.pt / sam3.safetensors in models/sam3. | |
| threshold | FLOAT | 0.500.05–0.95 | How sure SAM 3 has to be. Lower finds more (and more wrong things), higher is pickier. 0.5 is a good start. Colors are only a hint: 'red dress' can still pick a green dress. Things that are not there are not found. |
| grow | FLOAT | 4.0-64–256 | Pixels to grow (positive) or shrink (negative) the mask before inpainting. Growing a little covers the edges. |
| feather | FLOAT | 8.00–128 | Softness of the mask edge in pixels, so the redrawn area blends into the rest. 0 = hard edge. |
| blend | FLOAT | 0.800–1 | How much of the redraw is pasted in: 1 = all of it. Below 1 the old and new pixels are mixed, and features the redraw moved a little (lashes, eyelids) can show twice. For a lighter redraw, lower denoise instead. |
| padding | INT | 640–1024 | Pixels of the surrounding image included with each crop, so the model sees the context. |
| inpaint_resolution | INT | 1024256–4096 | Each crop is redrawn at about this many pixels squared (1024 = 1 megapixel), whatever its shape. Higher = more detail, slower. |
| denoise | FLOAT | 0.300–1 | How much is redrawn. Low keeps the shape and fixes details, high redraws from scratch. |
| imageopt | IMAGE | Optional. Empty = the pipe's image. Wire one when a node without a pipe changed the picture in between. | |
| modelopt | MODEL | Optional. Wire a model here to use it instead of the pipe's (with LoRAs on it, or a different model). | |
| vaeopt | VAE | Optional. Wire a VAE here to use it instead of the pipe's. | |
| positiveopt | CONDITIONING | The image's prompt. A prompt describing the whole scene can get drawn into every crop at denoise 0.3 and up (a whole tiny scene in the face): wire inpaint_positive to prevent that. | |
| inpaint_positiveopt | CONDITIONING | Optional. A prompt for the crops only, e.g. 'close-up of a woman's face, natural skin'. Used instead of positive for the redraw. Recommended whenever positive describes the whole scene. | |
| negativeopt | CONDITIONING | Optional. Leave empty for cfg 1 models; wire it for SDXL and other models that use a negative. | |
| tone_matchopt | BOOLEAN | true | On: the redraw gets the original's brightness, contrast and colour back where it is pasted, keeping the new detail. A light redraw comes back a little flat and dull without it. Turn off when the redraw is meant to change colours (a new shirt colour, a different object). |
| cfgopt | FLOAT | 1.01–30 | CFG for the redraw. 1 works for Krea 2, Flux, Z-Image and, at detailer denoise (up to about 0.4), SDXL too (tested: SDXL looked the same at cfg 1 to 7). Used instead of the pipe's cfg_1, which is usually the main sampler's. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| pipe | LC_PIPE | — |
| image | IMAGE | — |
| mask | MASK | — |