ComfyUI Node

Detailer End

What Detailer End does after your inpaint pass

By kinorax·Created 5 months ago·Updated about a month ago· 2
Detailer End
  • detailer_control
  • inpainted_image
  • accumulated_image
  • image

Detailer End is the closing half of the pack's two-node detailer, and the half that decides whether your face fix looks like it was painted on or actually belongs there. You've already run the crop-and-resample pass - this node is what puts the improved region back into the original frame without the seams, and it's also the part beginners usually get wrong by skipping.

Why it exists

ComfyUI's classic detailing trick is detect, crop, resample at full resolution, paste back. Impact Pack's FaceDetailer made that loop a household habit, but it keeps the whole thing in one node. This pack splits it into Detailer Start and Detailer End so you get to control exactly what happens in the middle - which sampler, which steps, which denoise - instead of trusting a black box. Detailer End is your pay-off: it takes the inpainted_image your sampling pass produced and composites it back into the original using a soft mask that Start preserved. Graded values at the mask edges survive, so the blend is feathered rather than a hard cut. If you've ever had a box-shaped face appear in an image, this is the node that fixes the cause.

Inputs and output that matter

The required input is detailer_control, the little object produced by Detailer Start. It carries the original frame, the canvas geometry, and the soft mask. Then there's inpainted_image - the finished crop from your inpainting pass.

The clever part: inpainted_image is lazy and optional. If Detailer Start found no active mask region, End doesn't even evaluate it, so the whole downstream sampling pass can be skipped and you just get the original image back unchanged. No wasted generations for an empty batch. If the inpainted crop comes back at a different resolution than Start expected, End resizes it automatically before restoring. The accumulated_image input is internal plumbing for per-item batch execution - don't wire anything into it.

Output is a single image, ready to feed a save node or the next stage of the workflow.

Wiring it up

The normal chain looks like:

Image + Mask → Detailer Start → inpaint_image + inpaint_mask
                                   ↓ (set latent noise mask, KSampler / pack's Sampler Custom)
VAE decode → inpainted_image → Detailer End → image

Whatever you put between Start and End is your detailing recipe, which is the whole point of splitting the loop. Want a quick fix at 0.4 denoise, or a full regeneration of the crop? That's a parameter, not a different node.

Gotchas

The two most common mistakes are wiring Start's inpaint_image straight into End (you've bypassed the actual inpainting, so nothing changed) and not matching the mask you gave Start to the mask you use for the noise mask. Start's output inpaint_mask is the one to feed SetLatentNoiseMask - use that, not the original soft mask.

Installing it

This ships in the ComfyUI-Info-Prompt-Toolkit pack. ComfyUI Manager is the easy path - search for "Info Prompt Toolkit". Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/kinorax/comfyui-info-prompt-toolkit.git
cd comfyui-info-prompt-toolkit
pip install -r requirements.txt

Restart ComfyUI afterward. No model downloads needed for this node - the pack's model files are only for its SAM3 and tagger nodes. Note this is a small, quietly-maintained single-author pack (GPL-3.0), not a household name, so treat it as a tool you chose, not a dependency you inherit.

CategoryInfo-Prompt-Toolkit/Mask

Inputs (3)

NameTypeDefaultDescription
detailer_controlIPT-DetailerControlControl object produced by Detailer Start.
inpainted_imageoptIMAGEInpainted crop image. When Detailer Start produced no active mask, this input is not evaluated.
accumulated_imageoptIMAGEInternal use only. Carries the progressively composited full image batch during per-item execution.

Outputs (1)

NameTypeDescription
imageIMAGE