Anima NSFW 分级判定(0-3 级 + 内容分类)
Anima NSFW Grader reads your prompt back to you — and it's five levels, not four
- wardrobe
- text
- level
- level_num
- report
Once your prompt is a random outfit roller plus a character picker plus whatever else you wired in, you stop knowing exactly what you just sent to the sampler. This node answers that question. It reads a prompt string (or a wardrobe declaration) and tells you what's actually in it: a 0–4 level, plus which categories of adult content it found, tag by tag.
First thing to get straight: the node's menu label says "0-3 级" and the implementation doesn't. The scale is five wide - sfw (0), suggestive (1), explicit (2), hardcore (3), extreme (4). The label is stale, the code is not.
What it's grading, and why that axis is useful
The level isn't Danbooru's rating tag. Danbooru ships four rough buckets (general, sensitive, nsfw, explicit) and anime models are trained against those, but a bucket won't tell you whether a rolled outfit drifted from "crop top" to "undressed" or whether a pose roll quietly added a sex toy. The pack's scale is finer on purpose, because it's the same vocabulary the outfit, pose and scene rollers use as their target level. Grade a roll, compare against the level you asked for, done. That's the loop it exists for.
The report also names categories: nudity, see-through, undressed, cutout, sexual, toy, bondage, fluid, plus extreme_insert / extreme_bondage / extreme_fluid / marked on the top level, and lighter ones like yuri, fetish and suggestive.
How the judgement works
Mechanically it's a dictionary, not a model. The input is split on commas; each tag is normalized and matched against per-category tag lists plus a few regex patterns. The node computes a baseline explicitness from those hits, then takes the maximum of the baseline and the highest category level it found. Anything matching an extreme category pins the result to 4, anything in the hardcore categories pins it to 3. The report output opens with the baseline line so you can see why it decided what it decided.
Filter mode is stricter than it looks and worth understanding: strip_nsfw grades every comma-separated tag on its own and drops the ones above your ceiling. So it's a per-tag ceiling, not a contextual judgement. bottomless alone reads as explicit; the fact that standing in a park is next to it changes nothing.
Inputs and outputs
| What | Set it to |
|---|---|
| mode | 只报告 (report only, changes nothing) or 过滤超标标签 (drop over-limit tags) |
| max_level | The ceiling for filter mode. Default explicit. Note the dropdown runs any → sfw, so it's easy to grab the wrong end. |
| text / wardrobe (optional) | text wins; wardrobe is only used when text is empty. |
text is a forceInput socket - you wire something into it, you don't type in it. That trips people up on a node whose whole job looks like typing.
Four outputs. level is the label string, level_num is the integer you'd feed a switch or a note, report is the multi-line breakdown, and text is the passthrough - or the filtered text when you're in the other mode. In a normal graph: roll the wardrobe, grade it here, wire the text output onward to your CLIP text encode, and send report to a Show Text node so it isn't invisible.
Install
Nothing special - the pack has zero third-party Python dependencies.
cd ComfyUI/custom_nodes
git clone https://github.com/lingdongbudong/Comfyui-Anima-Wardrobe
# restart ComfyUI; the node shows up under the AnimaWardrobe category
Or ComfyUI Manager → Install Custom Nodes → search Anima-Wardrobe → Install → restart.
Where people get burned
The obvious one is expecting a safety net. This is a hand-built tag table, so a tag nobody wrote down, a plural, an underscore instead of a space, or a phrase the model understands but the table doesn't will sail straight through. Treat the level as a useful reading and a decent filter, not a guarantee - the same caveat applies to any keyword-based rating pass.
The second is that the README notes the author pulled this node out of their own workflows while leaving the class in the menu. It works, it's just opt-in, and there are no example graphs to copy, so read the two functions that do the work (grade_nsfw and strip_nsfw) if you want to know exactly what's in the tables. There's essentially no community write-up of this pack anywhere yet, so the source is the documentation.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 只报告 | 2 options: 只报告, 过滤超标标签 |
| max_level | COMBO | explicit | 6 options: any, extreme, hardcore, explicit, suggestive, sfw |
| textopt | STRING | — | |
| wardrobeopt | ANIMA_WARDROBE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| level | STRING | — |
| level_num | INT | — |
| report | STRING | — |