ApplyHairRemover
The first half of Stable-Hair
- bald_model
- images
- image
The name is the whole pitch. Feed ApplyHairRemover a portrait and it hands back a bald version of the same person - same face, same expression, hair gone. No prompt, no API key, nothing to type. It's the "make them bald" half of the Stable-Hair hair-editing workflow, and it replaces the mask-and-inpaint dance you'd otherwise be stuck with.
Why you'd reach for it
Hair removal is one of those edits that sounds easy until you try it. You mask the hair, inpaint, and the model redraws a skull that belongs to a different person, or blends the edges, or quietly changes who they are. Before the instruction-editing models took over (the Qwen-Image-Edit path most people reach for in 2026), targeted edits like this were genuinely fiddly. This node sidesteps all of it because it was trained for exactly one job: shave the head, keep the face. It's SD1.5-era tech and it shows in the setup, but for a bald-head swap it's the one node that does the whole thing in a single pass.
It's also the first stage of a bigger pipeline. The bald output feeds straight into its sibling ApplyHairTransfer, which pastes a reference hairstyle onto the now-bald head. On its own it's a fun toy - shave your friend, shave a celebrity - but it earns its place as the geometry-lock step of hair swapping.
How it works
Under the hood it's a diffusers ControlNet pipeline. LoadStableHairRemoverModel builds the pipeline from an SD1.5 checkpoint and bolts on a "bald converter": a ControlNet created by copying the UNet itself (ControlNetModel.from_unet) with the hair_bald_model.bin weights on top. At generation time your portrait is the ControlNet condition - the face and head structure get pinned by the control while the model redraws the region as bald skin.
Here's the tell that makes it work: both the prompt and negative prompt are empty strings. There is no text conditioning at all. The face survives because the ControlNet forces it; the hair disappears because the bald model was trained to output hairless heads from that exact condition. Clean design, honestly.
Inputs and output
Three inputs actually matter:
- images (IMAGE) - your portrait, cropped to the head-and-shoulders region. The README is specific: it should be a front-facing photo, and both dimensions need to be multiples of 8.
- strength (default 1.5) - this is the ControlNet conditioning scale in disguise. How hard the source image holds the face structure. Above default and the geometry locks in tight; drag it down and you start getting a generic head instead of your head.
- steps (default 20) - plus
seedfor reproducibility and an optional cfg (default 1.5) you can safely ignore, since empty prompts barely feel it.
Output is a single image (IMAGE): the bald head. Wire it into ApplyHairTransfer's bald_image input, or straight to SaveImage if you just want the shave.
Installation
Same as the whole pack. In ComfyUI Manager, search for ComfyUI_StableHair_ll. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/lldacing/ComfyUI_StableHair_ll
Then restart ComfyUI. You need two things on disk: an SD1.5 checkpoint in models/checkpoints (the pack does not ship a base model), and the model files from HuggingFace dropped into ComfyUI/models/diffusers/StableHair/. For this node you specifically need hair_bald_model.bin.
Common issues
- Glitchy, wrong-looking bald head - your crop isn't a multiple of 8, or the photo isn't front-facing. Both are hard requirements, not suggestions.
- "ModuleNotFoundError: diffusers" (or sympy) on first load - the pack ships no
requirements.txt; itspyproject.tomlonly declares numpy, so it leans ondiffusersandtorchalready living in your Python environment. Most ComfyUI installs have them from other nodes; a bare venv won't. - Slow first run - building a pipeline from a single-file checkpoint plus a ControlNet copy of the UNet takes a while. The progress bar you see is real work, not a hang.
- A note on fit - this is an obscure pack with almost no community coverage; the handful of Reddit mentions of Stable-Hair are people using it for wig try-ons. If it misbehaves, the README is your only documentation.
The same handle behind the pack publishes the flash-attention Windows wheels that show up in HiDream install guides, which is to say: this is a side project from someone the community knows for keeping Windows users unblocked. Treat the pack accordingly - useful, unpolished, and SD1.5-only by design.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| bald_model | BALD_MODEL | — | |
| images | IMAGE | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| strength | FLOAT | 1.500–5 | — |
| cfgopt | FLOAT | 1.50–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |