Z-Image Text Encoder (Simple)
The stripped-down Z-Image encoder for negatives
- clip
- conditioning
- formatted_prompt
- debug_output
This is the trimmed-down twin of ZImageTextEncoder. Same Qwen3-4B chat-template plumbing, same template and thinking-block support, but it drops the conversation chaining. The pack author points you at it for one job in particular: negative prompts. When you don't need to feed a multi-turn conversation forward, there's no reason to carry the extra output around, so this is the one you reach for on the negative branch of your sampler.
Quick context, because it changes how you should think about "negative" here. Z-Image comes in two flavors and they behave differently. Turbo is guidance-distilled and runs at CFG 1 - at CFG 1 there is no classifier-free guidance, so a negative prompt does nothing no matter what you plug in. Base runs at CFG 3-5 and genuinely responds to negatives. So this node earns its keep on Base (or any CFG > 1 setup); on Turbo it's along for the ride but won't change your output. That's a property of the model, not the node.
How it works
Like its full-featured sibling, it wraps your text in the Qwen3-4B chat template rather than the old CLIP path. Which means the usual negative-prompt tricks from the SDXL era are off the table: negative embeddings target a CLIP vocabulary these models never learned, and prompt weighting isn't implemented. For a Z-Image negative you just write plain language - "bad anatomy, blurry, watermark" - and let the encoder handle it. The README's own example wires exactly that: ZImageTextEncoder into the KSampler's positive, ZImageTextEncoderSimple into the negative.
The inputs and outputs that matter
clip(required) - the Qwen3-4B encoder loaded as CLIP.user_prompt(required) - for a negative, the stuff you want to exclude.template_preset/system_prompt- available if you want them, but for a negative you usually leave these empty and just list what to avoid.add_think_block(default on),thinking_content,assistant_content- the same chat channels as the full node, minus conversation state.
Outputs are conditioning (into the KSampler negative), formatted_prompt (what actually got encoded), and debug_output. Note what's missing versus the full encoder: there's no conversation output here. That's the deliberate difference - no chaining, so nothing to pass to ZImageTurnBuilder.
How to install it
ComfyUI Manager: search ComfyUI-QwenImageWanBridge, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/fblissjr/ComfyUI-QwenImageWanBridge
then restart. You'll need a Z-Image checkpoint and the Qwen3-4B text encoder in place; this node is just the front door to the latter.
Common issues & troubleshooting
The negative has zero effect. You're almost certainly on Turbo at CFG 1. Switch to Z-Image Base and a CFG of 3-5 if you actually want negative prompting; on Turbo, nothing you type here will matter.
You wanted to chain turns and this node won't. Right node, wrong variant - use the full ZImageTextEncoder for anything that produces a conversation to feed forward. Simple is intentionally a dead end.
It's a research pack, so expect churn. fblissjr flags breaking changes up front. If a field moves or a default flips after an update, that's the deal you signed up for - re-check the node against a fresh pull rather than assuming your old graph still wires the same way.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | Z-Image CLIP model (lumina2 type) | |
| user_prompt | STRING | Your prompt - what you want (or don't want) the model to generate | |
| trigger_wordsopt | STRING | LoRA trigger words - prepended to user_prompt. Can convert to input for LoRA loader connection. | |
| template_presetopt | COMBO | none | Select a template to auto-fill system_prompt (editable after selection) |
| system_promptopt | STRING | System instructions (auto-filled by template, then editable) | |
| add_think_blockopt | BOOLEAN | true | Add <think></think> block. Default True matches DiffSynth/diffusers reference implementations. |
| thinking_contentopt | STRING | Content inside <think>...</think> tags | |
| assistant_contentopt | STRING | Content after </think> tags | |
| filter_paddingopt | BOOLEAN | true | Filter padding tokens (matches diffusers/DiffSynth). Disable for stock ComfyUI behavior. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |
| formatted_prompt | STRING | — |
| debug_output | STRING | — |