Tulut Face Detailer
Repair anime faces that crumbled in a full-body render, without leaving the graph
- image
- model
- clip
- vae
- upscale_model
- IMAGE
- MODEL
- CLIP
- VAE
- UPSCALE_MODEL
A face that only gets 70 pixels of a 1024-frame comes out as a smear no matter how good the checkpoint is - the latent simply has no budget to spend there. That's the exact problem this node exists for. Tulut Face Detailer is part of Tulut's tulut_comfyui_Gadget pack, a detect-crop-redraw detailer aimed at full-body anime shots where the face collapses from pixel starvation. It's built around Anima, but the loop it runs is the same one Impact Pack and ADetailer made famous: find the face with YOLO, crop and upscale it, run a fresh sampling pass, paste it back.
How it works
The node runs the whole loop in one shot. A YOLOv8 detector finds faces, each bounding box gets a 25% padding crop for context, your upscale_model upscales the crop, and it's resampled to guide_size (rounded to a multiple of 8). Then it builds an asymmetric mask - more padding on top, less on the bottom, feathered with a Gaussian blur so the seam mostly disappears - encodes to latent, runs a KSampler (hardcoded to dpmpp_2m_sde / sgm_uniform, which suits Anima) with your denoise, and blends the result back. Optionally it injects an AnimaLLLite model into the sampling, which is the pack's signature trick: no external wiring, you just pick the model in the node.
The inputs that matter
image,model,clip,vae- your render and your checkpoint trio, standard.upscale_model- required, and it matters. Feed it something like a CUGAN or any ESRGAN-family model; the crop is upscaled with it before the redraw, and the README's whole argument is that hardware upscaling keeps line art crisp.prompt/neg_prompt- the redraw prompt. Keep it close to your main prompt, since the node doesn't pull it from anywhere; an empty prompt makes the pass pretty aimless.guide_size- how big the face gets before redrawing. Default 512, and honestly that's plenty for a face crop; going higher costs VRAM for little gain.denoise- default 0.45. This is the dial you'll actually tune. Too low and the face stays soft; too high and you get a different face with a visible seam.steps/cfg/seed- sampler settings.character_indexpicks which detected face to fix (0 = all of them, sorted left-to-right).lllite_name- AnimaLLLite selection, default "none". See below.
Outputs are the refined IMAGE plus pass-through MODEL, CLIP, VAE, and UPSCALE_MODEL - so you can chain detailers in series without rerunning loaders.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/Tulut114/tulut_comfyui_Gadget
Restart ComfyUI. Two things the README will not save you from:
ultralyticsisn't inrequirements.txt. The pack only declares Pillow. Withoutpip install ultralytics opencv-pythonin your ComfyUI environment, the detailer nodes don't even appear - the import is wrapped in a try/except that swallows the failure.- The YOLO model has to be present, with the exact filename the code expects. Drop it in
ComfyUI/models/ultralytics/bbox/(the node creates the folder). Here's the trap: the README says the face detector isface_yolov8m.pt, but the shipped code actually loadsyolov8x6_animeface.pt. Rename whatever face detector you have to match the code, or nothing gets detected.
Troubleshooting
- "Nothing happened" - image comes back identical. The classic. If the
.ptfile is missing or the name doesn't match, the node logs a warning and returns the original image unchanged. No error, no red node. Check the console first. - Wrong face, or no face found. Run the pack's Tulut YOLO Preview node first: it draws the boxes with their index numbers, so you can confirm detection and tune the confidence before spending a sampling pass.
- A different person's face, or seams. Denoise too high gives identity drift; drop toward 0.3–0.4. Feathering is baked in, so persistent seams usually mean the mask padding didn't cover what changed.
- LLLite barely does anything. The Anima LLLite ecosystem is young - the community's own verdict is that these models are weak on the 1.0 base (the KB's controlnet doc quotes users calling them "much weaker on the 1.0 base release"). It's a nice-to-have, not the main event; the detect-upscale-redraw loop is what's doing the work.
One more honest note: this whole YOLO stack runs on Ultralytics, which is AGPL and had a real supply-chain scare in December 2024. Fine for personal use, but know what you're pulling into your machine.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| upscale_model | UPSCALE_MODEL | — | |
| lllite_name | COMBO | 1 options: none | |
| prompt | STRING | — | |
| neg_prompt | STRING | — | |
| guide_size | INT | 512256–1024 | — |
| steps | INT | 351–100 | — |
| cfg | FLOAT | 4.51–12 | — |
| denoise | FLOAT | 0.450.01–1 | — |
| character_index | INT | 00–10 | — |
| seed | INT | 00–18446744073709550000 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |
| UPSCALE_MODEL | UPSCALE_MODEL | — |