Ideogram4 V9 Trigger Text Encode
The V9 text encoder that turns one literal trigger into four token slots
- clip
- activator
- conditioning
- diagnostics
This is where your Ideogram4 V9 trigger actually fires. Gen2_Ideogram4V9TriggerTextEncode replaces your normal CLIPTextEncode on the Ideogram4 chain: give it the activator you composed, the prompt containing your trigger literal, and it returns standard CONDITIONING you can feed straight to the sampler. The name is a lie in the best way - it doesn't call any API, it's all local, and it needs no key.
How the four-slot expansion works
Here's the trick that makes these triggers hit hard. The V9 format reserves four virtual token slots for every literal trigger occurrence in your prompt. When the encoder finds <r1X1dOn9mA2> (the default literal) in your text, it doesn't tokenize it as one ordinary token - it expands that occurrence into four virtual slots, injects the [4,H] embedding across them, and engages all 36 text-encoder module-LoRAs at once. More conditioning budget per trigger = a stronger, more reliable activation than a single-token embedding can manage. Multiple occurrences each get their own four-slot expansion, and the pack computes the token layout so your other prompt text doesn't get clobbered - though it will raise a truncation error if your max_length can't fit all the expanded triggers.
The important gotcha: this node does not replace placeholders. The prompt must already contain the literal trigger. The pack's intended flow is prompt text → Gen2_StringReplace (also in this pack) → literal such as <r1X1dOn9mA2> → this encoder. Feed it a prompt with no literal and it fails closed - no silent no-op, an actual error. That's a design choice that saves you from shipping a workflow that quietly does nothing.
The inputs that matter
clip- the Ideogram4 Qwen3-VL text encoder. Must be the real native backend; the pack rejects Klein/Qwen3-8B even though it looks similar.activator- fromGen2_ComposeIdeogram4V9TriggerActivator.text- your prompt, already containing the literal trigger (default<r1X1dOn9mA2>).mode- defaultsemantic_only, which is the full experience: four-slot embedding plus all 36 TE module-LoRAs. The other modes let you isolate parts for debugging:embedding_only,internal_only,activator_bypass, andstock_literal(which tokenizes the literal normally, no four-slot expansion - the mode you use if you just want the concept without the heavy trigger).literal- the exact trigger string to find intext. Missing literals fail closed.max_length(default 0 = no limit) - cap on the token length; watch it if you're stacking many triggers.
Outputs: conditioning (standard CONDITIONING - wires into your sampler or guider) and diagnostics, a GEN2_IDEOGRAM4_V9_TRIGGER_DIAGNOSTICS you can route into the diagnostics node to see what actually got encoded.
Install
ComfyUI Manager: search ComfyUI-gen2. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/petmycat/ComfyUI-gen2.git
cd ComfyUI-gen2
pip install -r requirements.txt
Restart. You need the Ideogram4 weights + Qwen3-VL encoder (non-commercial license - worth a read, it reaches your generated images), plus your V9 trigger artifacts in ComfyUI/models/gen2/. The whole V9 pipeline is still pre-parity in the author's own words, so budget for some exploration.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| activator | GEN2_IDEOGRAM4_V9_TRIGGER_ACTIVATOR | — | |
| text | STRING | <r1X1dOn9mA2> | — |
| mode | COMBO | semantic_only | 5 options: semantic_only, embedding_only, internal_only, activator_bypass, stock_literal |
| literal | STRING | <r1X1dOn9mA2> | — |
| max_length | INT | 00–1048576 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |
| diagnostics | GEN2_IDEOGRAM4_V9_TRIGGER_DIAGNOSTICS | — |