Nodes/Qwen 2.1 Adult Policy/πŸ”ž ErosCraft rewrite check
ComfyUI Node

πŸ”ž ErosCraft rewrite check

Your prompt enhancer writes text nobody typed. This checks it anyway.

By Eros-CraftΒ·Created 23 days agoΒ·Updated 3 days agoΒ· 1
πŸ”ž ErosCraft rewrite check
  • policy
  • checker
  • prompt
β—„beforeβ€”β–Ί
β—„afterβ€”β–Ί
β—„promptβ€”β–Ί
β—„max_tokens4096β–Ί

Here's the hole every safety check built around your text leaves open: the prompt that reaches the model usually isn't your text. A prompt enhancer rewrote it. Literal mentions of "prompt enhancer" in the community corpus went from 12 in 2023 to 253 in the first half of 2026, so this is not a niche concern - a huge share of graphs now put a language model between the user and the encoder. You typed "a woman in her late twenties"; something else wrote "petite 18-year-old-looking girl" because the model decided that reads better.

πŸ”ž ErosCraft rewrite check closes that hole. It takes the request before the rewrite and the request after, and if they differ, it asks the checker the same questions the gate asks of your typing.

How it works

The node compares before and after after stripping whitespace. Identical - enhancer off, or a no-op rewrite - and it returns immediately without touching the model. That's the cheap path, and it means adding this node costs you nothing on workflows that don't enhance prompts.

If they differ, the rewritten text goes to the stock Qwen3-VL 8B with the same yes/no questions (under 18, named famous real person) and the same fail-closed parsing as everywhere else in the pack: an unparseable answer, a missing label, or a thinking block that never closed all stop the run.

The stops are worded separately for exactly this case, and that's the bit I'd point a beginner at. A stop here says the enhancer's rewrite is the problem and tells you to run again with the enhancer off, or to state the age plainly. That distinction matters: without it you'd be staring at your own prompt wondering which word did it, when the word was never yours.

Inputs and the output

Five required inputs, all of them real wires:

  • policy - the POLICY handed down from the gate.
  • checker - the stock Qwen3-VL 8B encoder the questions are asked through.
  • before - the request before the rewrite. Forced input.
  • after - the request after the rewrite. Forced input.
  • prompt - the finished prompt, which passes through. Also forced, and the point of the node: the text that reaches your encoder goes through here.
  • max_tokens - 4096 by default, 64 to 8192. Same warning as the other checks: too small and the thinking never closes, which the pack reads as unsafe and stops.

One output: prompt (STRING). Wire it into the CLIP Text Encode that feeds the sampler, not into anything that has to be modified. The node does not rewrite, clean, trim or annotate your text - it either passes the exact string through or it kills the run. Put it between the enhancer and the encoder and the enhancer's output has no route to the picture.

Reading the graph this belongs in

The natural order is: enhancer out β†’ before and after on this node, finished text β†’ prompt, and the prompt output β†’ your text encoder. The gate upstream already judged the original request and produced the policy. The output check downstream still has to look at the picture, because none of this tells you what the sampler did with a perfectly innocent-sounding prompt. Passing words is not passing pixels.

Install

Pack-wide. comfy-cli users:

comfy node install comfyui-qwen21-adult-policy

Or, by hand, into ComfyUI/custom_nodes:

cd ComfyUI/custom_nodes
git clone https://github.com/Eros-Craft/ComfyUI-Qwen21-Adult-Policy

Restart ComfyUI. No pip install - the pack's project metadata declares no dependencies - and no model download: the questions go through the Qwen3-VL 8B encoder your Qwen Image 2.1 workflow already loads. 18+ pack, both gates ship off.

Where people get burned

  • Leaving the output unwired. If the enhanced text still reaches the encoder some other way, this node is decoration. Its only power is that it sits in the path.
  • Assuming it only fires when you enable an enhancer node. Anything that produces text - an LLM captioner, a randomised prompt, a wildcard expander - belongs in the before/after pair if you want it checked.
  • Reading a stop as a judgment on your request. If the console line shows the checker with no parseable answer, that's a "could not get a clear answer" stop - a retry, not a finding. The message says so, and it's telling the truth.
  • Wiring a non-stock encoder to checker. Same rule as the rest of the pack: a checker that's been tuned toward yes isn't a checker.
CategoryQwen Image 2.1/ErosCraft

Inputs (6)

NameTypeDefaultDescription
policyPOLICYβ€”
checkerCLIPβ€”
beforeSTRINGThe request before the rewrite.
afterSTRINGThe request after the rewrite.
promptSTRINGThe finished prompt, which passes through.
max_tokensINT409664–8192β€”

Outputs (1)

NameTypeDescription
promptSTRINGβ€”