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

πŸ”ž ErosCraft output check

The last look before Save Image β€” and it can actually stop the save

By Eros-CraftΒ·Created 22 days agoΒ·Updated 3 days agoΒ· 1
πŸ”ž ErosCraft output check
  • image
  • policy
  • checker
  • image
β—„max_tokens4096β–Ί

Every check upstream of this one judges intent. Prompts lie - not maliciously, just because a diffusion model is not a prompt interpreter. Ask for "a woman in her late twenties" and the sampler can hand you a face that reads nineteen. πŸ”ž ErosCraft output check is the only node in the pack that looks at the actual pixels and asks the one question that matters before the file lands on disk.

It sits between your decode and your Save Image. If the finished image fails the age question, the save does not happen.

How it works

It hands the finished image to the stock Qwen3-VL 8B encoder - the same one your Qwen Image 2.1 workflow loads as its text encoder - with the pack's age question, and reads the reply fail closed: unparseable answer, missing label, or a thinking block that never closed all count as unsafe.

Two implementation details change how it behaves in practice. First, every frame of a batch gets checked separately, one vision slot each, rather than the batch being collapsed into a single look. So a four-image batch is four asks, and a bad frame can kill the batch even if the other three are clean. Second, the image is downscaled before the ask (longest side 768, alpha dropped, since the question is about people, not pixels), which keeps this cheap but means it is not a forensic pass.

Then the interesting part: when it fails, it doesn't raise an error like the gate does. It returns ComfyUI's own ExecutionBlocker, which is the engine's sanctioned way to stop an output node and everything downstream of it. That's a deliberate choice - a blocked branch leaves the graph in a readable state and the block is what a Save Image node understands, rather than a crashed prompt. A missing policy is treated the same way: it blocks, it never passes the image through.

The stop messages are split into two flavours on purpose. If the checker clearly said the image reads as someone under 18, you get told that, plus the useful advice to state the age plainly in the prompt ("a woman in her late twenties") and run again. If the checker simply couldn't produce a clear answer, you get the unclear message instead, which explicitly tells you this is not a finding about your image. Different problem, different fix.

Inputs and output

  • image - the finished image. Wire this from whatever decode produced it.
  • policy - the policy this run was judged under. It comes down the chain: πŸ”ž ErosCraft policy β†’ the gate β†’ here. Forget it and you get a block telling you to rebuild the workflow, which is at least more honest than a silent pass.
  • checker - the stock Qwen3-VL 8B encoder.
  • max_tokens - 4096 default, 64 to 8192. Too low and the thinking never closes, which reads as unsafe, which blocks your save. If you're debugging weird blocks, this is the first knob to raise.

One output: image, the same tensor, unchanged. It's a pass-through gate, not a filter - nothing is cropped, retouched or re-encoded on the way out. Wire it into Save Image (or anything else that writes) rather than into further sampling.

Where it fits in a Qwen Image 2.1 workflow

Qwen Image 2.1 is the interesting case for this kind of node. The family's whole reputation is Apache-2.0 weights with no content terms attached, which is exactly why the adult LoRA ecosystem landed there instead of on a licence that polices fine-tunes. Nothing on the model side will stop you, so if you want a floor, you build it in the graph.

Install

Same as the rest of the pack. 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. No pip install (the pack declares no dependencies), no extra model - it rides the Qwen3-VL 8B encoder already in your workflow. 18+ pack: both gates ship off in πŸ”ž ErosCraft policy, and with either one off nothing samples at all.

Where people get burned

  • Expecting the save to be skipped rather than the whole branch. A block stops the output node and its descendants; if you've wired the same latent somewhere else that writes, that path isn't covered by this check.
  • Batch generation. One bad frame blocks the save for the whole batch. Generate one at a time if you'd rather not reroll everything.
  • Treating "could not get a clear answer" as a verdict on your image. It isn't; the console line prints whether the checker answered and what it parsed. Retry before you rewrite your prompt.
  • Running an encoder here that isn't the stock one. The pack leaves the picture encoder choice to you but always asks the questions through the stock encoder - a checker fine-tuned toward compliance isn't a checker, and Qwen3-VL instruct builds already carry assistant-style refusals that make their judgments noisy in either direction.
CategoryQwen Image 2.1/ErosCraft

Inputs (4)

NameTypeDefaultDescription
imageIMAGEThe finished image.
policyPOLICYThe policy the gate judged this run under.
checkerCLIPβ€”
max_tokensINT409664–8192β€”

Outputs (1)

NameTypeDescription
imageIMAGEβ€”