Safety Level Selector
One dial for how spicy your anime prompt gets
- ANIMA_text
- SDXL_text
Anime models actually understand a rating vocabulary - safe, sensitive, questionable, explicit are real training tags, and putting the wrong one in your prompt genuinely steers the output. SafetyLevelNode ("Safety Level Selector") turns that into a single dropdown: pick a level, get the matching rating tag, ready for your prompt. It's a small node from the ComfyUI Seed Wildcard Pack, and it's the kind of thing that sounds pointless until you're juggling a public and a private workflow and want the safety tag to be one obvious switch.
What it does
Four inputs, two string outputs.
enabled- master switch (default on). Off means both outputs are a single space, effectively blank tagslevel-LEVEL 1throughLEVEL 4uncensored- when on, prependsuncensoredto both outputsrandom_mode- when on, the node rolls a random level every run
The outputs are ANIMA_text and SDXL_text - the same rating tag, expressed per model family:
| Level | ANIMA_text | SDXL_text |
|---|---|---|
| LEVEL 1 | safe | general |
| LEVEL 2 | sensitive | sensitive |
| LEVEL 3 | questionable, nsfw | questionable, nsfw |
| LEVEL 4 | explicit | explicit |
The pairing is the point: Anima was trained on Danbooru's safe/sensitive/questionable/explicit ratings, while the SDXL anime family (Illustrious, NoobAI, Pony) more commonly expects general/sensitive/explicit. One level input, correct vocabulary on both branches.
How it works
Under the hood it's a lookup table with two add-ons. The uncensored flag just prefixes the tag with uncensored, - a real, prompt-steerable token on both model families. random_mode is the interesting bit: when it's on, the node picks a random level each execution (and force-enables uncensored if it rolls LEVEL 4), and it defeats ComfyUI's node caching by reporting float("nan") from IS_CHANGED, so the node actually reruns every time instead of reusing a cached result. That's the detail that makes random mode work at all - most nodes would silently repeat the last level because ComfyUI caches unchanged inputs.
Where it sits
Wire ANIMA_text into your Anima positive prompt prefix and SDXL_text into the equivalent spot in an SDXL workflow. Anima's own recommended prefix is masterpiece, best quality, score_7, safe, ... - so LEVEL 1 outputs exactly the safe token the model card suggests. If you're building a workflow that switches between an Anima fork and an Illustrious fork, this node keeps the rating tag consistent across both without you maintaining two prompt strings.
random_mode is the fun one: combined with the pack's seed-based wildcard nodes, you can build a "surprise me" generator that also varies the content rating per seed. Just remember it also reruns every time, so if you wire it into a huge workflow expecting ComfyUI's caching to skip it, it won't.
Install
It's part of the ComfyUI Seed Wildcard Pack:
cd ComfyUI/custom_nodes
git clone https://github.com/sinanzoo2nd/ComfyUI-Seed-Wildcard-Pack
or ComfyUI Manager → Seed Wildcard → install, restart. No dependencies beyond the standard library, no models, no network. The whole node is a dict lookup and a couple of strings - if it works, it works; there's not much to go wrong.
Gotchas
enabled = falsereturns a single space, not an empty string. That's deliberate (some prompt concatenators choke on truly empty strings), but it means your joined prompt may contain a stray space - harmless, just know it's there.- The outputs are tags, not a content filter. This node sets prompt vocabulary; it does not and cannot gate what the model draws. Level 4 with a plain prompt is not a magic NSFW key - you still need the actual content described (and, on models that need them, LoRAs).
random_modebypasses thelevelinput entirely. If you flip it on expecting a weighted bias toward a level you set, it ignores you. Setlevelonly whenrandom_modeis off.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| level | COMBO | LEVEL 1 | 4 options: LEVEL 1, LEVEL 2, LEVEL 3, LEVEL 4 |
| uncensored | BOOLEAN | false | — |
| random_mode | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| ANIMA_text | STRING | — |
| SDXL_text | STRING | — |