Nodes/ComfyUI Seed Wildcard Pack/Safety Level Selector
ComfyUI Node

Safety Level Selector

One dial for how spicy your anime prompt gets

By sinanzoo2nd·Created 8 months ago·Updated 3 months ago· 0
Safety Level Selector
    • ANIMA_text
    • SDXL_text
    enabledtrue
    levelLEVEL 1
    uncensoredfalse
    random_modefalse

    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 tags
    • level - LEVEL 1 through LEVEL 4
    • uncensored - when on, prepends uncensored to both outputs
    • random_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 = false returns 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_mode bypasses the level input entirely. If you flip it on expecting a weighted bias toward a level you set, it ignores you. Set level only when random_mode is off.
    CategorySeed Wildcard/Text

    Inputs (4)

    NameTypeDefaultDescription
    enabledBOOLEANtrue
    levelCOMBOLEVEL 14 options: LEVEL 1, LEVEL 2, LEVEL 3, LEVEL 4
    uncensoredBOOLEANfalse
    random_modeBOOLEANfalse

    Outputs (2)

    NameTypeDescription
    ANIMA_textSTRING
    SDXL_textSTRING