BMAB Simple Hand Detailer
The no-fuss fix for mangled hands
- bind
- image
- lora
- BMAB bind
- image
- annotation
Hands are the thing that gives away an AI image, and this is BMAB's blunt-instrument fix for them. It finds a hand-shaped region, crops it out, redraws it at a decent working resolution, and pastes it back - no GroundingDINO, no fancy pose estimation, just detect-crop-resample. If you've used ADetailer in A1111 or Impact Pack's FaceDetailer in ComfyUI, the idea is identical: the reason distant hands come out as a claw is that they're taking up maybe 60x60 pixels of your final image, which is nowhere near enough latent budget for five fingers and knuckles to resolve correctly. Give that region its own dedicated pass at 512x512 and the model suddenly has room to actually draw a hand.
Where it sits in a BMAB pipeline
This node lives downstream of one of BMAB's Integrator nodes. Those pack your model, clip, vae, prompt, and seed into a single "BMAB bind" wire, and everything after - samplers, detailers, resize nodes - just takes that bind in and passes an updated bind back out. Simple Hand Detailer follows that pattern: feed it a bind, it does its detection-and-redraw pass, and hands you back a bind plus the finished image to keep chaining. There's also an annotation output - a visual of exactly what region got detected and redrawn, which is genuinely useful the first few times you use this, since a silent failure (nothing detected, nothing changed) looks identical to success unless you check it.
The inputs that actually matter
Most of the required fields - steps, cfg_scale, sampler_name, scheduler - mirror your main KSampler, and the sampler/scheduler dropdowns default to "Use same sampler" / "Use same scheduler," meaning by default this pass just inherits whatever you set upstream. The three worth tuning yourself:
denoise(default 0.45) - how much the hand region gets redrawn. Push it toward 0.6-0.7 for genuinely wrecked hands; drop it toward 0.3 if the hand is only slightly off and you don't want the style drifting.width/height(default 512 each) - the resolution the cropped hand gets upscaled to before resampling. This is the entire trick - more pixels, more detail.paddinganddilation- how much extra area around the detected region gets included and how aggressively the mask grows. More padding gives the model context (wrist, sleeve) instead of an isolated blob of fingers.
There's also an optional image input (skip it and it pulls from the bind) and an optional lora slot (BMAB's own lora type, for applying a LoRA specifically to this detail pass without touching your base generation).
Installing it
Easiest path: ComfyUI Manager, search comfyui_bmab, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/portu-sim/comfyui_bmab.git
cd comfyui_bmab
pip install -r requirements.txt
The README is upfront that BMAB needs two sibling packs installed alongside it - comfyui_controlnet_aux and ComfyUI_IPAdapter_plus - even though this particular node doesn't touch either directly. Clone and pip-install both the same way, then restart ComfyUI.
Where people get burned
Simple Hand Detailer is the one to reach for specifically because it skips GroundingDINO - the more precise Subframe and Openpose hand detailers depend on it, and GroundingDINO is the flakiest part of this pack (a mismatched transformers version breaks its box_threshold argument outright, a real complaint from BMAB users in the wild). If you're getting import errors or a broken hand detailer elsewhere in this pack, Simple is the fallback that still works. The other trap is padding set too low: a tight crop around just the fingers with no wrist or forearm context gives the sampler nothing to anchor proportions to, and you get a technically-detailed but anatomically wrong hand. When in doubt, bump padding before you touch denoise.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| bind | BMAB bind | — | |
| steps | INT | 200–10000 | — |
| cfg_scale | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 45 options: Use same sampler, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler | COMBO | 10 options: Use same scheduler, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| denoise | FLOAT | 0.450–1 | — |
| padding | INT | 328–128 | — |
| dilation | INT | 44–32 | — |
| width | INT | 512256–2048 | — |
| height | INT | 512256–2048 | — |
| imageopt | IMAGE | — | |
| loraopt | BMAB lora | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| BMAB bind | BMAB bind | — |
| image | IMAGE | — |
| annotation | IMAGE | — |