Nodes/ComfyUI-Hypnodes/Hypnodes Conditioner
ComfyUI Node

Hypnodes Conditioner

Turns your character stack into ten CLIP conditionings in one node

By hypnichorse·Created 3 months ago·Updated 16 days ago· 0
Hypnodes Conditioner
  • clip
  • char_stack
  • hn_config
  • char_1_pos_cond
  • char_2_pos_cond
  • char_3_pos_cond
  • char_4_pos_cond
  • char_5_pos_cond
  • char_6_pos_cond
  • char_7_pos_cond
  • char_8_pos_cond
  • char_9_pos_cond
  • char_10_pos_cond
  • char_1_text

Raw text is just data; a diffusion model can't paint pixels from it until a CLIP model has turned it into conditioning. Normally that means one CLIP Text Encode node per character, and a five-character scene turns into a wall of nearly identical nodes. The Hypnodes Conditioner does the whole batch in one compact block - it takes your character stack, encodes every prompt, and hands you one conditioning output per slot.

What it needs

Three inputs, all required:

  • clip - from your checkpoint or CLIP loader.
  • char_stack - the output of the Hypnodes Character Stacker.
  • hn_config - the Control Hub's bus, so it knows the global context and character count.

How it works

Internally it instantiates a plain CLIPTextEncode and runs it for each character. The detail worth understanding: it takes the global_prompt_start from the Hub (that's the global positive prompt) and prepends it to every character's prompt, then encodes the combined string. So character 1's conditioning is effectively global positive + character 1's box. That's the "global context + regional detail" design on purpose - the scene, lighting, and quality live in the Hub, and the per-character boxes only need to describe the character.

The second detail is that empty slots don't error out - they get encoded as empty conditioning, so a coupler downstream doesn't receive a hole in its mask-to-conditioning mapping. The pack would rather give you a blank region than a broken wire.

The outputs

  • char_1_pos_cond through char_10_pos_cond - one CONDITIONING per slot, ready to pair with the matching mask from the Mask Generator.
  • char_1_text - a bonus STRING containing character 1's full combined prompt (global + local). Handy for debugging what the node actually encoded, or routing to a text display.

There are no negative conditioning outputs here. This node handles the per-character positives; the global negative lives in the Hub and is encoded by the Hypnodes Prompt Encoder (HN_PromptEncoder), which you feed to the sampler alongside these.

Where this fits

The outputs are designed to plug straight into a regional mechanism - Attention Coupler, Regional Prompter, or ConditioningSetMask with the matching masks. The whole point of the pack is that mask 3 and conditioning 3 stay locked together, so you never manually match a prompt to a region. If you're building this by hand with stock nodes, count how many encode nodes and wire pairs you're saving; that's the pitch.

One honest caveat: the global-prompt prefix means each character's conditioning carries the full scene description. On models with weaker prompt adherence that can reinforce the "every character describes the whole scene" failure mode - but that's exactly the problem the regional masking downstream is there to fix.

Install

ComfyUI Manager (search Hypnodes), or:

cd ComfyUI/custom_nodes
git clone https://github.com/hypnichorse/ComfyUI-Hypnodes

Restart ComfyUI. No model downloads; dependencies are just numpy and pillow, already present in ComfyUI.

CategoryHypnodes

Inputs (3)

NameTypeDefaultDescription
clipCLIP
char_stackHN_CHAR_STACK
hn_configHN_CONFIG

Outputs (11)

NameTypeDescription
char_1_pos_condCONDITIONING
char_2_pos_condCONDITIONING
char_3_pos_condCONDITIONING
char_4_pos_condCONDITIONING
char_5_pos_condCONDITIONING
char_6_pos_condCONDITIONING
char_7_pos_condCONDITIONING
char_8_pos_condCONDITIONING
char_9_pos_condCONDITIONING
char_10_pos_condCONDITIONING
char_1_textSTRING