Face Style Preset
The node that turns FaceDetailer's twenty-input setup into one dropdown
- model
- clip
- model
- positive
- negative
- guide_size
- denoise
- feather
- bbox_dilation
- bbox_crop_factor
Every FaceDetailer workflow has the same tedious front-end: a LoRA loader, two CLIPTextEncode nodes holding the style prompt you've typed a hundred times, and five widgets (guide_size, denoise, feather, bbox_dilation, bbox_crop_factor) you tune by feel. Face Style Preset (class FaceStylePreset, under Face Tools) is what happens when someone decides that whole cluster is one node's job. Pick a preset from a dropdown and the positive/negative prompts plus all five parameters snap into the widgets. Then it runs the LoRA stack and the CLIP encoding for you, so it outputs CONDITIONING directly instead of raw text.
It exists to feed Impact Pack's FaceDetailer, the detect-crop-refine loop that fixes small, mangled faces. FaceDetailer is the workhorse; its setup is the annoying part, and this node automates exactly that stretch.
How it works
The Python backend is small and honest. Each run reads a hidden lora_stack_json widget, walks the LoRA list in order applying each to both MODEL and CLIP via comfy.sd.load_lora_for_models, then encodes the positive and negative texts through clip.encode_from_tokens - the same call stock CLIPTextEncode makes. Empty names, disabled toggles, and strength 0.0 are skipped, as are LoRA files missing from your loras folder: that row gets an orange border and is silently ignored, so a shared workflow keeps running on a machine without the files.
The frontend half - the auto-fill and add/remove LoRA rows - is a JS extension pulling presets from face_presets.json over /face_style_preset/presets and your LoRA list over /face_style_preset/loras. The stack persists in saved workflows through that hidden JSON widget, the same idea as rgthree's Power Lora Loader but scoped to face work.
Eight outputs: model, positive, negative, then guide_size, denoise, feather, bbox_dilation, bbox_crop_factor. The last five are plain numbers meant to wire straight into FaceDetailer - the pack renamed bbox_padding to bbox_dilation in v2.1 to match Impact Pack's input name, and outputs FLOATs so the connectors line up.
The inputs that matter
The node requires model and clip from your checkpoint. Everything else is a widget:
preset- 36 choices.User_Manualleaves your widgets alone,Noneclears the text and sets safe defaults, and any named preset overwrites all six fields (your edits stick until you switch again).guide_size/denoise- the two you'll actually nudge. Presets span 384–512 and 0.38–0.50.bbox_dilationandbbox_crop_factor- how much the detected face region grows before the detail pass. Leave these alone at first.positive_text/negative_text- auto-filled per preset, editable, withpositive_enabled/negative_enabledtoggles.lora_stack_json- hidden, managed by the JS. Ignore it.
Honest framing on that preset list: roughly half is "amateur smartphone" aesthetics, and a few are blunt about it - B12_Smartphone_OnlyFans_AmateurNude, B13_Smartphone_LingerieBedroom, B14_Smartphone_MirrorNudeSelfie, B15_Smartphone_DiscordLeak. The pack is uncensored and aimed at a specific niche; the names are the clearest statement of its focus. If that's not your thing, the editorial, vintage film, B&W and Y2K presets are still decent starting points.
Wiring it up
model→KSampler.modelandFaceDetailer.model. For SD1.5 / SDXL / Flux wire it straight; for Z-Image Turbo / AuraFlow / SD3 route it throughModelSamplingAuraFlow/ModelSamplingSD3first.positive/negative→KSamplerand/orFaceDetailerconditioning inputs.- The five numeric outputs → FaceDetailer, after right-clicking each matching widget on FaceDetailer and picking Convert widget to input.
Install
ComfyUI Manager: search "Face Style Preset". Or manually:
cd <ComfyUI>/custom_nodes
git clone https://github.com/artfat-creator/ComfyUI-Face-Style-Preset-for-FaceDetailer-.git
Restart, and the node appears under Face Tools. There's no requirements.txt and no extra Python dependencies - the shipped code uses only ComfyUI's own modules plus the standard library. The only real dependency is Impact Pack, and only if you want the numeric outputs wired into FaceDetailer.
Presets, and making your own
Presets live in face_presets.json next to the node. Add an entry with positive, negative, guide_size, denoise, feather, bbox_dilation, bbox_crop_factor, restart ComfyUI (or hard-refresh with Ctrl+Shift+R), and it appears in the dropdown.
Troubleshooting
- Node missing after install or update: delete the
__pycache__folder inside the pack's directory and restart - stale bytecode is the classic cause. - No LoRA stack widget: hard-refresh the browser (
Ctrl+Shift+R). The JS is cached aggressively. guide_sizewon't connect to FaceDetailer: convert the matching FaceDetailer widget to an input first. The connector should be green (FLOAT).- Orange LoRA border: the file isn't in your
lorasfolder. It's skipped at runtime; fix the name or copy the file in. - Auto-fill silently not happening: check the browser console (F12) for
[FaceStylePreset]log lines.
This is a shortcut to learning rather than a replacement for it - the presets are starting points, and knowing what denoise does still matters the day nothing on the list fits. But if you rebuild the same face-pass prompt stack in every workflow, this kills a genuinely annoying chunk of graph-building.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| preset | COMBO | User_Manual | 36 options: User_Manual, None, A_Magazine_Cinematic, B0_Smartphone_Default, B1_Smartphone_YoungSelfie, B2_Smartphone_IndoorCasual, +30 |
| guide_size | FLOAT | 38464–2048 | — |
| denoise | FLOAT | 0.400–1 | — |
| feather | INT | 200–64 | — |
| bbox_dilation | INT | 320–256 | — |
| bbox_crop_factor | FLOAT | 3.01–10 | — |
| positive_enabled | BOOLEAN | true | — |
| positive_text | STRING | — | |
| negative_enabled | BOOLEAN | true | — |
| negative_text | STRING | — | |
| lora_stack_json | STRING | [] | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| guide_size | FLOAT | — |
| denoise | FLOAT | — |
| feather | INT | — |
| bbox_dilation | INT | — |
| bbox_crop_factor | FLOAT | — |