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

πŸ”ž ErosCraft gate

The checkpoint your prompt and photos pass before anything samples

By Eros-CraftΒ·Created 22 days agoΒ·Updated 3 days agoΒ· 1
πŸ”ž ErosCraft gate
  • product
  • checker
  • photo_1
  • photo_2
  • photo_3
  • photo_4
  • photo_5
  • photo_6
  • photo_7
  • photo_8
  • photo_9
  • photo_10
  • words
  • photo_1
  • photo_2
  • photo_3
  • photo_4
  • photo_5
  • photo_6
  • photo_7
  • photo_8
  • photo_9
  • photo_10
  • policy
β—„wordsβ€”β–Ί
β—„max_tokens4096β–Ί

The gate is the node that sits on your workflow rather than beside it, and that's the whole trick. Your request goes in, and the same request comes out - untouched - but only if the words and every photo you attached pass first. Since the string the rest of the graph reads comes out of this node, there is no path to the sampler that goes around it. If the gate stops, its outputs don't exist and nothing downstream runs at all. A check you can forget to wire is a check that does nothing; this one is a wire.

How it works

It asks the stock Qwen3-VL 8B encoder a small set of yes/no questions - is the main subject under 18, does the request name a specific famous real person - using the same encoder your Qwen Image 2.1 workflow already keeps in memory. Greedy, thinking-on generation, one call for the whole batch of text facts, a separate call for the photos.

Photos get special handling. Every photo you wire in goes into a single call, each as its own vision slot, so ten photos are ten separate looks rather than two averaged ones. Each is also downscaled so its longest side is 768 pixels first, which is the author being sensible: "is anyone in this under 18" is answered as well by a 768px view as a 2K one, and ten 2K frames would burn ten times the vision tokens for nothing.

Then everything is read fail closed. The reply is parsed line by line into booleans. A label the model didn't answer, a value that isn't clearly yes or no, an exception from the checker, or a reply whose thinking block opened and never closed - all of those count as the unsafe answer, and the run stops. I like this more than I expected to: the failure mode of an unreliable classifier here is "annoying stop", not "quietly passes something". Meanwhile a model that opens no thinking block at all and just answers is read normally, so a direct answer isn't punished.

Every ask prints one line: what was asked, how many pictures went with it, the raw length, whether it answered, and the parsed result. When something stops you, that line is the explanation.

Inputs that matter

Four required:

  • product - the PRODUCT from πŸ”ž ErosCraft policy. Wire it. Without it the gate raises "No policy is wired to this gate", which is a better error than a silent bypass.
  • words - the request, as the form assembled it. Forced to an input, so you can't type it in and forget to update it.
  • checker - the stock Qwen3-VL 8B. This is deliberately independent of whatever encoder you chose for the picture.
  • max_tokens - default 4096, range 64–8192. Room for the checker to think and answer. Set it too low and the thinking block never closes, which the pack reads as unsafe, and your run dies for a reason that has nothing to do with you. If you have a long prompt, push this up rather than leaving it tight.

Optional: photo_1 through photo_10, all IMAGE sockets. Wire in whatever reference or img2img inputs the flow uses. Empty slots are simply skipped.

Outputs mirror the inputs: words, then photo_1 … photo_10 passed through unchanged, then policy, which is what you feed to the rewrite check and the output check. Nothing is edited on the way through - the gate is a checkpoint, not a filter.

One behaviour worth knowing: the two gates are judged first, before any model call. A run stopped by a toggle costs no GPU time.

Install

Pack-wide, so the same three lines as its siblings. In ComfyUI Manager, search "Qwen 2.1 Adult Policy", or:

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

Restart ComfyUI. Nothing to pip install (the pack declares no dependencies), no model to download - the questions ride on the Qwen3-VL 8B text encoder the workflow already loads. 18+ pack: both gates ship off, so the node refuses to queue until you turn them on in πŸ”ž ErosCraft policy.

Where people get burned

  • Feeding the gate a fine-tuned or abliterated encoder. A checker that has been trained to say yes to everything is a gate that says yes to everything. Keep the encoder input on a stock Qwen3-VL 8B.
  • Wiring photos to the sampler but not to the gate. The gate only checks what you hand it, and the sampler only reads what you hand it. Hand both the same images or the check is theatre.
  • Blaming the gate for the "could not get a clear answer" stop. That message means the checker didn't produce a parseable reply - it is explicitly not a finding about your request. Run it again; if it stops twice, read the console line before changing anything about your prompt.
  • Skimping on max_tokens. The most common self-inflicted stop in this pack.
CategoryQwen Image 2.1/ErosCraft

Inputs (14)

NameTypeDefaultDescription
productPRODUCTThe two gates and the policy behind them.
wordsSTRINGThe request, as the form assembled it.
checkerCLIPThe stock Qwen3-VL 8B encoder the questions are asked through.
max_tokensINT409664–8192Room for the checker to think and answer. Too small and the thinking never closes, which counts as unsafe and stops the run.
photo_1optIMAGEβ€”
photo_2optIMAGEβ€”
photo_3optIMAGEβ€”
photo_4optIMAGEβ€”
photo_5optIMAGEβ€”
photo_6optIMAGEβ€”
photo_7optIMAGEβ€”
photo_8optIMAGEβ€”
photo_9optIMAGEβ€”
photo_10optIMAGEβ€”

Outputs (12)

NameTypeDescription
wordsSTRINGβ€”
photo_1IMAGEβ€”
photo_2IMAGEβ€”
photo_3IMAGEβ€”
photo_4IMAGEβ€”
photo_5IMAGEβ€”
photo_6IMAGEβ€”
photo_7IMAGEβ€”
photo_8IMAGEβ€”
photo_9IMAGEβ€”
photo_10IMAGEβ€”
policyPOLICYβ€”