Nodes/FoW - Light/🙈 FoW - Content Category Light
ComfyUI Node

🙈 FoW - Content Category Light

The negative-prompt shield for 'what's in the frame'

By SirWillance·Created 2 years ago·Updated about a year ago· 5
🙈 FoW - Content Category Light
  • clip
  • Content Conditioning
  • Content Text
user_input
default_catalogue{"catalogue": {"FoW - Content": [{"id": "content_appearance_001", "category": "Content Appearance", "name": "Appearance Attributes", "notes": "Tokens to modify specific appearance attributes like hair color, hair style and facial features.", "tokens": [{"value": "unnatural hair color", "enabled": true, "tooltip": "Reverts hair color to natural tones."}, {"value": "purple hair", "enabled": true, "tooltip": "Changes purple hair to a more common color."}, {"value": "dark blue hair", "enabled": true, "tooltip": "Changes dark blue hair to a more common color."}, {"value": "green hair", "enabled": true, "tooltip": "Changes green hair to a more common color."}, {"value": "pink hair", "enabled": true, "tooltip": "Changes pink hair to a more common color."}]}, {"id": "content_safety_001", "category": "Content Safety", "name": "Safety & Ethical Concerns", "notes": "Tokens to restrict content based on maturity, suggestive themes, or other potentially unwanted or unethical elements. Use with caution, as AI interpretation can vary.", "tokens": [{"value": "nsfw", "enabled": true, "tooltip": "Removes content that is not safe for work."}, {"value": "suggestive", "enabled": true, "tooltip": "Removes hints at or indirect references to explicit content."}, {"value": "sexual content", "enabled": true, "tooltip": "Removes sexually explicit material."}, {"value": "explicit", "enabled": true, "tooltip": "Removes content that directly depicts sexual acts or nudity."}, {"value": "mature content", "enabled": true, "tooltip": "Removes content suitable only for adults."}, {"value": "child exploitation", "enabled": true, "tooltip": "Remove the image."}, {"value": "bestiality", "enabled": true, "tooltip": "Remove the image."}]}, {"id": "content_charactercount_001", "category": "Content Charactercount", "name": "Character Control", "notes": "Tokens to control the number and variety of characters in the image.", "tokens": [{"value": "multiple characters", "enabled": true, "tooltip": "Adds more than one character to the image."}, {"value": "different characters", "enabled": true, "tooltip": "Ensures that any multiple characters are distinct individuals."}]}, {"id": "content_demographics_001", "category": "Content Demographics", "name": "Demographics", "notes": "Tokens to influence the demographic characteristics of the subjects in the image (e.g., age, ethnicity, nationality). Use with sensitivity and awareness of potential biases.", "tokens": [{"value": "child", "enabled": true, "tooltip": "Depicts a young person."}, {"value": "baby", "enabled": true, "tooltip": "Depicts a very young child."}, {"value": "teenager", "enabled": true, "tooltip": "Depicts an adolescent."}, {"value": "adult", "enabled": true, "tooltip": "Depicts a fully grown person."}]}, {"id": "content_physical_001", "category": "Content Physical", "name": "Physical Characteristics", "notes": "Tokens to modify specific physical characteristics and physiques in a descriptive and inclusive manner.", "tokens": [{"value": "muscular", "enabled": true, "tooltip": "Character with well-defined and prominent muscles."}, {"value": "thin", "enabled": true, "tooltip": "Petite look"}]}, {"id": "content_clothing_001", "category": "Content Clothing", "name": "Clothing & Accessories", "notes": "Tokens to restrict or modify clothing items and accessories.", "tokens": [{"value": "overly detailed dress", "enabled": true, "tooltip": "Simplify the design."}, {"value": "overly detailed shoes", "enabled": true, "tooltip": "Simplify the design."}]}, {"id": "content_style_001", "category": "Content Style", "name": "Style & Theme Restrictions", "notes": "Tokens to exclude specific styles or themes that might be automatically applied by the AI.", "tokens": [{"value": "photorealistic", "enabled": true, "tooltip": "Prevents images from being overly realistic."}, {"value": "anime", "enabled": true, "tooltip": "Prevents anime-style drawing."}, {"value": "cartoon", "enabled": true, "tooltip": "Prevents cartoon-style drawing."}]}, {"id": "content_technical_001", "category": "Content Technical", "name": "Technical/Undesired Elements", "notes": "Tokens to remove technical issues and undesired elements.", "tokens": [{"value": "hybrid parts", "enabled": true, "tooltip": "Removes unnaturally merged components."}, {"value": "blended tokens", "enabled": true, "tooltip": "Remove image that were the mix of 2 images"}]}, {"id": "content_censorship_001", "category": "Content Censorship", "name": "Censorship", "notes": "Tokens to enforce censorship or prevent un-censored content.", "tokens": [{"value": "censored", "enabled": true, "tooltip": "Hides part of body."}]}, {"id": "content_species_001", "category": "Content Species", "name": "Species Control", "notes": "Tokens to force the model to not use specific species", "tokens": [{"value": "non human", "enabled": true, "tooltip": "Enforce it to only create organic being"}]}]}}

The menu-driven negative prompt for content

FoW - Content Category Light (the "Content Villain") is the negative-side counterpart to the agent nodes: instead of typing a content blacklist from memory, you open a catalog and tick the things you don't want in frame - nsfw, multiple characters, purple hair, cartoon, censored, the whole mixed bag of content controls. The node encodes your picks into negative conditioning.

It's part of SirWillance's FoW_Suite_LIGHT, the free Light tier of the "Force of Will" suite - a self-taught dev's two-month first project, MIT-licensed, aimed at beginners. The catalog is the author's own: categories like Content Appearance, Content Safety, Character Count, Demographics, Physical, Clothing, Style, Technical, Censorship, Species, each with a few tokens and a tooltip explaining what each one does. Higher tiers promise bigger catalogs; Light gets the curated basics.

How it works

Same encode-only backend as every villain/agent in the pack:

tokens = clip.tokenize(user_input)
cond = clip.encode_from_tokens_scheduled(tokens)
return (cond, user_input)

Your CLIP encodes the selected negatives; you get conditioning and the raw text back. The frontend hides the user_input widget and shows an "Open Content Catalogue" button that opens a draggable modal of grouped tokens. Tick what you want gone, and the selections are stored on the node so they survive save/reload. There's no magic filtering happening - this is a structured way to write a negative prompt, not a content filter the model enforces.

The inputs that matter

  • clip (CLIP) - the text encoder from your checkpoint.
  • user_input (STRING, multiline) - hidden; the modal fills it with your selected tokens.
  • default_catalogue (STRING) - hidden; the embedded catalog JSON.

Outputs are Content Conditioning (CONDITIONING) and Content Text (STRING). The conditioning feeds a negative Fusion node or a KSampler's negative input.

Installing it

One install, whole suite:

cd ComfyUI/custom_nodes
git clone https://github.com/SirWillance/FoW_Suite_LIGHT

Restart ComfyUI, nodes appear under "🧿 FoW - Light". ComfyUI Manager has it too - search "Force of Will Suite Light". No dependencies, no model downloads.

Where people get burned

The single most important thing to know about this node is also the most ignored: a negative prompt is not a filter and removes nothing from the model. It steers the sampler's unconditioned pass, and it only does that while CFG is above 1 (the KB's negative-prompt panel is very clear: at CFG 1 it's not even computed). On a distilled/turbo checkpoint at CFG 1, this whole catalog is cosmetic. On SDXL-lineage models at CFG 4–9, it works - but resist ticking the entire safety section "just in case." Twenty negatives average toward zero, and things like child or baby in a content catalog can misfire and warp the model's behavior on entirely innocent prompts. Tick the few specific things you actually keep seeing, not the whole menu.

Category🧿 FoW - Light/📇 The 9 Categories/👎 Negative

Inputs (3)

NameTypeDefaultDescription
clipCLIPCLIP model for encoding
user_inputSTRING
default_catalogueSTRING{"catalogue": {"FoW - Content": [{"id": "content_appearance_001", "category": "Content Appearance", "name": "Appearance Attributes", "notes": "Tokens to modify specific appearance attributes like hair color, hair style and facial features.", "tokens": [{"value": "unnatural hair color", "enabled": true, "tooltip": "Reverts hair color to natural tones."}, {"value": "purple hair", "enabled": true, "tooltip": "Changes purple hair to a more common color."}, {"value": "dark blue hair", "enabled": true, "tooltip": "Changes dark blue hair to a more common color."}, {"value": "green hair", "enabled": true, "tooltip": "Changes green hair to a more common color."}, {"value": "pink hair", "enabled": true, "tooltip": "Changes pink hair to a more common color."}]}, {"id": "content_safety_001", "category": "Content Safety", "name": "Safety & Ethical Concerns", "notes": "Tokens to restrict content based on maturity, suggestive themes, or other potentially unwanted or unethical elements. Use with caution, as AI interpretation can vary.", "tokens": [{"value": "nsfw", "enabled": true, "tooltip": "Removes content that is not safe for work."}, {"value": "suggestive", "enabled": true, "tooltip": "Removes hints at or indirect references to explicit content."}, {"value": "sexual content", "enabled": true, "tooltip": "Removes sexually explicit material."}, {"value": "explicit", "enabled": true, "tooltip": "Removes content that directly depicts sexual acts or nudity."}, {"value": "mature content", "enabled": true, "tooltip": "Removes content suitable only for adults."}, {"value": "child exploitation", "enabled": true, "tooltip": "Remove the image."}, {"value": "bestiality", "enabled": true, "tooltip": "Remove the image."}]}, {"id": "content_charactercount_001", "category": "Content Charactercount", "name": "Character Control", "notes": "Tokens to control the number and variety of characters in the image.", "tokens": [{"value": "multiple characters", "enabled": true, "tooltip": "Adds more than one character to the image."}, {"value": "different characters", "enabled": true, "tooltip": "Ensures that any multiple characters are distinct individuals."}]}, {"id": "content_demographics_001", "category": "Content Demographics", "name": "Demographics", "notes": "Tokens to influence the demographic characteristics of the subjects in the image (e.g., age, ethnicity, nationality). Use with sensitivity and awareness of potential biases.", "tokens": [{"value": "child", "enabled": true, "tooltip": "Depicts a young person."}, {"value": "baby", "enabled": true, "tooltip": "Depicts a very young child."}, {"value": "teenager", "enabled": true, "tooltip": "Depicts an adolescent."}, {"value": "adult", "enabled": true, "tooltip": "Depicts a fully grown person."}]}, {"id": "content_physical_001", "category": "Content Physical", "name": "Physical Characteristics", "notes": "Tokens to modify specific physical characteristics and physiques in a descriptive and inclusive manner.", "tokens": [{"value": "muscular", "enabled": true, "tooltip": "Character with well-defined and prominent muscles."}, {"value": "thin", "enabled": true, "tooltip": "Petite look"}]}, {"id": "content_clothing_001", "category": "Content Clothing", "name": "Clothing & Accessories", "notes": "Tokens to restrict or modify clothing items and accessories.", "tokens": [{"value": "overly detailed dress", "enabled": true, "tooltip": "Simplify the design."}, {"value": "overly detailed shoes", "enabled": true, "tooltip": "Simplify the design."}]}, {"id": "content_style_001", "category": "Content Style", "name": "Style & Theme Restrictions", "notes": "Tokens to exclude specific styles or themes that might be automatically applied by the AI.", "tokens": [{"value": "photorealistic", "enabled": true, "tooltip": "Prevents images from being overly realistic."}, {"value": "anime", "enabled": true, "tooltip": "Prevents anime-style drawing."}, {"value": "cartoon", "enabled": true, "tooltip": "Prevents cartoon-style drawing."}]}, {"id": "content_technical_001", "category": "Content Technical", "name": "Technical/Undesired Elements", "notes": "Tokens to remove technical issues and undesired elements.", "tokens": [{"value": "hybrid parts", "enabled": true, "tooltip": "Removes unnaturally merged components."}, {"value": "blended tokens", "enabled": true, "tooltip": "Remove image that were the mix of 2 images"}]}, {"id": "content_censorship_001", "category": "Content Censorship", "name": "Censorship", "notes": "Tokens to enforce censorship or prevent un-censored content.", "tokens": [{"value": "censored", "enabled": true, "tooltip": "Hides part of body."}]}, {"id": "content_species_001", "category": "Content Species", "name": "Species Control", "notes": "Tokens to force the model to not use specific species", "tokens": [{"value": "non human", "enabled": true, "tooltip": "Enforce it to only create organic being"}]}]}}

Outputs (2)

NameTypeDescription
Content ConditioningCONDITIONING
Content TextSTRING