πΈ Detailer Pro
The two-pass detailer with quality-gated face skipping
- image
- basic_pipe
- model
- clip
- vae
- positive
- negative
- face_mask
- face_mask_2
- face_mask_3
- hands_mask
- body_mask
- image
- debug
Frog Detailer Pro is the older sibling with a longer name and a longer input list. Where the plain πΈ Detailer runs one pass per region, Pro runs two - a fix pass that corrects structure at full denoise, then a refine pass that sharpens detail - and it adds the tooling to decide whether a region even needs work. It's WIP like its sibling, but it's the version you graduate to when the plain Detailer is either destroying small faces or wasting time on faces that were already fine.
The two-pass loop is the core idea. Pass one does the main denoise and fixes the structural problems - wrong eyes, smeared mouth. Pass two runs at refine_denoise (default 0.2, and the tooltip's honest range is 0.15β0.25) to add crispness without re-breaking what pass one fixed. That split is why Pro produces cleaner results at comparable denoise: structure correction and texture sharpening want different noise levels, and jamming both into one pass always compromises one of them.
Pro also adds pre_upscale - upscale the whole image before detailing, then downscale back after. The tooltip is blunt about why: it makes small features (small hands, and yes, it says "nipples") large enough for the model to refine rather than hallucinate. 1.0 is off; 2.0 is the recommendation for body features. And sharpen (unsharp mask, 0β3, default 0.4) counters the softness VAE decode always introduces. If your Pro output looks softer than expected, this is the knob.
The clever bit: quality-gated skipping
face_skip_threshold is the node that knows when to leave a face alone. It's a sharpness score in the 0β0.2 range, default 0.0 (always process). The workflow the tooltip describes is genuinely useful: run once with 0.0, read the console's "quality score" lines, then set the threshold just below the score of faces you want kept. A typical well-drawn ANIMA face scores 0.030β0.070; a broken or blurry one scores 0.005β0.020. Set the threshold at, say, 0.025 and already-good faces skip their pass entirely - you save time and stop the detailer from "fixing" a face that was fine.
The inputs that matter
Beyond the two-pass pair (two_pass, refine_denoise) and the quality gate, the knobs are the same family as the plain Detailer: max_upscale_ratio and min_region_px guard against generating faces from scratch; mask_dilation expands each mask outward before cropping so the model gets context; face_denoise/hands_denoise/body_denoise default higher here (0.45/0.5/0.4) because the refine pass handles the cleanup. Pro also ships per-region negative prompts (face_negative, hands_negative, body_negative) so the fix pass can actively avoid bad anatomy - the defaults are long, explicit lists of exactly the artifacts you're fixing. auto_eye_color carries over from the plain Detailer: per-mask eye-color sampling so multi-character scenes don't cross-contaminate.
Masks come from πΈ Florence2+SAM Masker or πΈ Mask Batch Split (per the face_mask tooltip), and basic_pipe overrides the individual model/conditioning inputs when connected.
Installing and where people trip
Pack install, no extras:
cd ComfyUI/custom_nodes
git clone https://github.com/RabbitThatIsPink/FrogNodePack
Same traps as its sibling, plus one of its own: face_skip_threshold works only if you actually do the calibration run - setting it blind is guessing. And if you crank pre_upscale to 4Γ on a big image, you're paying a real VRAM and time cost for the whole frame, not just the regions; 2Γ is the sweet spot the tooltip recommends. Remember it's WIP, so expect occasional breakage on pack updates.
Inputs (43)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| seed | INT | 00β18446744073709550000 | β |
| steps | INT | 121β150 | ANIMA: 8β15 is sufficient. |
| cfg | FLOAT | 2.00β30 | ANIMA: 1.5β3.0 with er_sde. |
| sampler_name | COMBO | er_sde | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | beta57 | 10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4 |
| upscale_to | COMBO | 512 | 4 options: 512, 768, 1024, 1536 |
| padding | INT | 320β256 | β |
| feather | INT | 80β128 | β |
| max_upscale_ratio | FLOAT | 4.01β16 | Hard cap on crop scale factor. Prevents tiny regions being generated from scratch. |
| min_region_px | INT | 480β512 | Skip regions whose shorter dimension is below this. Set 0 to disable. |
| resize_mode | COMBO | bicubic | 4 options: bicubic, bilinear, area, nearest |
| antialias | BOOLEAN | true | Antialiasing for bicubic/bilinear. No effect on area/nearest. |
| pre_upscale | FLOAT | 1.001β4 | Upscale the full image by this factor before detailing, then downscale back to original resolution after all passes. Makes small features (nipples, small hands) large enough for the model to refine rather than hallucinate. 1.0 = off. 2.0 recommended for body features. |
| mask_dilation | INT | 60β64 | Expand each mask outward N pixels before cropping. Gives the model more context. |
| sharpen | FLOAT | 0.40β3 | Unsharp mask strength applied after decode. Counters VAE softness. 0 = off. |
| two_pass | BOOLEAN | true | Run two inpaint passes per region. Pass 1 (fix) β main denoise, corrects structure. Pass 2 (refine) β refine_denoise, sharpens detail. |
| refine_denoise | FLOAT | 0.200β1 | Denoise for the refinement pass. Typically 0.15β0.25. |
| face_enabled | BOOLEAN | true | β |
| face_denoise | FLOAT | 0.450β1 | β |
| auto_eye_color | BOOLEAN | true | Detect dominant eye colour per face mask and prepend it to face conditioning. |
| face_skip_threshold | FLOAT | 0.0000β0.2 | Skip a face pass if its sharpness score β₯ this value. 0.0 = always process (disabled). Run once with 0.0, read the console 'quality score' lines, then set threshold just below the score of faces you want kept. Typical well-drawn ANIMA face: 0.030β0.070. Broken/blurry face: 0.005β0.020. |
| face_prompt | STRING | detailed face, detailed eyes, symmetrical eyes, sharp iris, clean linework, high quality | β |
| face_negative | STRING | asymmetrical eyes, crossed eyes, heterochromia, bad face, fused face, poorly drawn face, extra eyes, missing eyes, off-model face, nipples, breast, areola, genitals, body parts | β |
| hands_enabled | BOOLEAN | true | β |
| hands_denoise | FLOAT | 0.500β1 | β |
| hands_prompt | STRING | detailed hands, five fingers, correct finger anatomy, clean fingernails, no extra fingers | β |
| hands_negative | STRING | extra fingers, fused fingers, malformed hands, too many fingers, missing fingers, bad hands, mutated hands, six fingers, four fingers, nipples, breast, areola, nipple, genitals, penis, vagina, nude body parts, body | β |
| body_enabled | BOOLEAN | true | β |
| body_denoise | FLOAT | 0.400β1 | β |
| body_prompt | STRING | detailed body, correct anatomy, clean linework, high quality | β |
| body_negative | STRING | bad anatomy, malformed, extra limbs, missing limbs, fused body parts, distorted anatomy, poorly drawn body | β |
| basic_pipeopt | BASIC_PIPE | Provide model/clip/vae/positive/negative as a pipe. Overrides individual inputs. | |
| modelopt | MODEL | β | |
| clipopt | CLIP | β | |
| vaeopt | VAE | β | |
| positiveopt | CONDITIONING | β | |
| negativeopt | CONDITIONING | β | |
| face_maskopt | MASK | Face mask. Wire from πΈ Florence2+SAM Masker or πΈ Mask Batch Split. | |
| face_mask_2opt | MASK | Second character face mask. | |
| face_mask_3opt | MASK | Third character face mask. | |
| hands_maskopt | MASK | β | |
| body_maskopt | MASK | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |
| debug | STRING | β |