Rating Checker (NudeNet)
The One That Splits SFW, R15, and R18 — Rating Checker (NudeNet)
- images
- lagels
- detections_json
- boxed_images
Most NSFW classifiers are trained on real photos, which means they do two things badly: they scream NSFW at harmless anime illustrations, and they can't tell "barely R15" from "definitely R18." This is the node that's supposed to fix both. Rating Checker (NudeNet) is the flagship of the tighug/comfyui-rating-checker pack - the one the author actually built the others to evaluate - and it splits images into SFW, NSFW (R15), and NSFW (R18).
Why it works better on anime
Instead of one classifier, it combines two passes. First, NudeNet - a real object detector - hunts for specific body parts (breasts, genitalia, anus, armpits, belly, feet…). Object detection cares about where things are in the frame, not the texture style, so it holds up on drawn art far better than a photo-trained image classifier. Then the GantMan classifier from the same pack acts as a second opinion for the mushy middle ground.
The actual decision logic
- Run NudeDetector on each image (it uses
640m.onnxif you drop that file into the pack'smodels/folder, otherwise the 320m default, which auto-downloads on first run). - Keep only detections scoring at or above threshold_detect (default 0.15) whose body-part class is enabled by the
detect_*toggles. - Any hit →
nsfw_r18. - No hit, but the GantMan pass labels the image
hentai,porn, orsexy→nsfw_r15. - Otherwise →
sfw.
One thing worth knowing: the README claims R15 is driven by an "nsfw_score > threshold" rule, but the shipped code actually uses the GantMan labels for that call. Trust the code - the README has rotted there.
Inputs that matter
- images - IMAGE batch.
- threshold_detect - FLOAT, default 0.15. How confident a body-part detection must be to count. Raised it when you're drowning in false positives.
- The 10
detect_*booleans - female_face, male_face, armpits, female_breast, male_breast, belly, female_genitalia, male_genitalia, buttocks, anus, feet. Only four ship enabled by default: female_breast, female_genitalia, male_genitalia, and anus. Want armpits or belly to push something to R18? Flip them on.
Outputs - and the typo you'll see in the UI
- lagels - STRING list of the ratings. Yes, "lagels" is a real typo in the code, and it's what the output port is actually called in ComfyUI. Don't go hunting for a "labels" port.
- detections_json - STRING list, the JSON of every detection that passed the filter (class, score, box). Good for scripting or logging.
- boxed_images - IMAGE list, copies of the inputs with red boxes drawn around whatever triggered the flag. This is your best debugging tool: wire it to a preview and you'll see in one glance why an image got rated the way it did.
Installing it
ComfyUI Manager: search "ComfyUI Rating Checker". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/tighug/comfyui-rating-checker
Restart. First run downloads the 320m NudeNet model and the GantMan ONNX file, so it needs internet once.
Where it bites
The pack's requirements.txt pins torch to 2.6.0, torchvision to 0.21.0, and lists both onnxruntime and onnxruntime_gpu - on an environment already running a newer ComfyUI, those pins are the most likely source of install pain. And despite the anime-friendly design, it's not magic: stylized art can still trip it, which is why boxed_images exists. When a rating looks wrong, look at the box first, then decide whether to raise threshold_detect or switch off a body-part toggle.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| threshold_detect | FLOAT | 0.150–1 | — |
| detect_female_face | BOOLEAN | false | — |
| detect_male_face | BOOLEAN | false | — |
| detect_armpits | BOOLEAN | false | — |
| detect_female_breast | BOOLEAN | true | — |
| detect_male_breast | BOOLEAN | false | — |
| detect_belly | BOOLEAN | false | — |
| detect_female_genitalia | BOOLEAN | true | — |
| detect_male_genitalia | BOOLEAN | true | — |
| detect_buttocks | BOOLEAN | false | — |
| detect_anus | BOOLEAN | true | — |
| detect_feet | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| lagels | STRING | — |
| detections_json | STRING | — |
| boxed_images | IMAGE | — |