Nodes/ComfyUI Rating Checker/Rating Checker (NudeNet)
ComfyUI Node

Rating Checker (NudeNet)

The One That Splits SFW, R15, and R18 — Rating Checker (NudeNet)

By tighug·Created about a year ago·Updated about a year ago· 2
Rating Checker (NudeNet)
  • images
  • lagels
  • detections_json
  • boxed_images
threshold_detect0.15
detect_female_facefalse
detect_male_facefalse
detect_armpitsfalse
detect_female_breasttrue
detect_male_breastfalse
detect_bellyfalse
detect_female_genitaliatrue
detect_male_genitaliatrue
detect_buttocksfalse
detect_anustrue
detect_feetfalse

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.onnx if you drop that file into the pack's models/ 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, or sexynsfw_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.

Categoryutils

Inputs (13)

NameTypeDefaultDescription
imagesIMAGE
threshold_detectFLOAT0.150–1
detect_female_faceBOOLEANfalse
detect_male_faceBOOLEANfalse
detect_armpitsBOOLEANfalse
detect_female_breastBOOLEANtrue
detect_male_breastBOOLEANfalse
detect_bellyBOOLEANfalse
detect_female_genitaliaBOOLEANtrue
detect_male_genitaliaBOOLEANtrue
detect_buttocksBOOLEANfalse
detect_anusBOOLEANtrue
detect_feetBOOLEANfalse

Outputs (3)

NameTypeDescription
lagelsSTRING
detections_jsonSTRING
boxed_imagesIMAGE