StableMakeup_LoadModel
The Loader That Drags a Whole Stable Diffusion Pipeline Into Your Graph
- model
StableMakeup_LoadModel is the heavy front half of ComfyUI's port of Stable-Makeup, the 2024 paper that transfers a real photo's makeup look onto another face. It's not a checkpoint loader in the ComfyUI sense. It's a node that builds an entire Stable Diffusion 1.5 pipeline in-process - diffusers pipeline, three trained encoders, optional LoRA - and hands the whole thing to its sibling StableMakeup_Sampler as one opaque MAKEUP_MODEL blob. Think of it as "load everything, once."
What it's actually doing
When you hit Run, the node does a lot, all at once:
- Loads any SD 1.5 checkpoint you pick as a diffusers
StableDiffusionPipeline(the pack ships its ownsd15_config, so it doesn't touch ComfyUI's normal checkpoint plumbing). - Clones the UNet into two ControlNet-style encoders - one for identity, one for pose - and loads the three
pytorch_model*.binweight files fromComfyUI/models/stable_makeupinto them. - Loads the makeup detail encoder, which is a CLIP ViT-L image encoder (the
clip_l.safetensorsfile) plus SSR attention layers and a resampler. This is the part that reads your reference makeup image later. - If you picked a LoRA, it loads and fuses it into the UNet.
That's why this node is slow to fire the first time. Everything runs in float32 on CUDA, and the makeup encoder plus two ControlNet clones sit on top of a full SD 1.5 UNet. You'll feel it.
The inputs that matter
- ckpt_name - any SD 1.5 checkpoint. This model family is SD 1.5-only; an SDXL file will not work here.
- clip - a file from
ComfyUI/models/clip, which per the README should beclip_l.safetensors. It's the image-encoder weights for the makeup detail encoder. - lora / lora_scale / lora_trigger_words - optional. The README notes you can attach an acceleration LoRA (for fast 4-step runs) or a regular one. One confusing bit:
lora_trigger_wordsisn't a prompt, it's just the adapter name the code registers the LoRA under - default "best" is fine to leave alone. - scheduler - 19 sampler options, from DDIM and Euler through the DPM++ family to LCM and UniPC. Default DDIM is fine to start; LCM pairs with an acceleration LoRA.
Output
A single model output of type MAKEUP_MODEL. It only plugs into one thing: StableMakeup_Sampler. There's no prompt or seed anywhere in this graph - the "prompt" is the makeup image itself, which is why the whole thing feels different from a normal KSampler workflow.
Installing it
ComfyUI Manager has it (search "Stable Makeup"), or clone manually:
cd ComfyUI/custom_nodes
git clone https://github.com/smthemex/ComfyUI_Stable_Makeup
Then install requirements (insightface is the only active line) and restart. The real pain is the model files, which are scattered across HuggingFace, Google Drive, and Dropbox - all of them go in ComfyUI/models/stable_makeup:
mobilenet0.25_Final.pth (or resnet50.pth)
pytorch_model.bin
pytorch_model_1.bin
pytorch_model_2.bin
spiga_300wpublic.pt
Plus an SD 1.5 checkpoint in models/checkpoints and clip_l.safetensors in models/clip.
Where people get burned
- Missing Drive files. The loader reads
pytorch_model*.binstraight off disk and throws a file-not-found if you skipped a download. The downloads are the install; don't skip them. - VRAM. Full pipeline plus three encoders in float32 is not a light lunch. If it OOMs, there's no offload toggle - this pack assumes a decent GPU.
- Module errors. The README's one-liner is that ComfyUI bundles most deps and you only add
insightface, then install whatever else the traceback names individually. ComfyUI Manager handles the requirements automatically when it installs the node. - It's not the fast, portable path. smthemex wraps papers fast (the same author ships ComfyUI ports of lots of research models), so expect research-code energy: working, but not optimized the way a native ComfyUI loader is. Community reports on the broader Stable-Makeup port confirm it's fiddly to get running the first time.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | 0 options: | |
| clip | STRING | openai/clip-vit-large-patch14 | — |
| lora | COMBO | 1 options: none | |
| lora_scale | FLOAT | 1.00–1 | — |
| lora_trigger_words | STRING | best | — |
| scheduler | COMBO | 19 options: DDIM, Euler, Euler a, DDPM, DPM++ 2M, DPM++ 2M Karras, +13 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MAKEUP_MODEL | — |