Text Encode with Z-Image System Prompt (Scaled Bias) (Legacy)
Z-Image's system prompt slot, scaled-bias edition
- clip
- CONDITIONING
Z-Image is the model that ate the local-photorealism default - 6B, Apache-2.0, fast, and good enough that a lot of people stopped reaching for anything else. Like every modern model worth its weights, it's an LLM-encoder model, which means it has a chat template and a system prompt channel, and it ignores (word:1.3). This node wraps your prompt in Z-Image's template with a system message, then adds the pack's scaled-bias layer so <tag=strength> emphasis works anyway.
How it works
"ZIT" is Z-Image Turbo. The node builds Z-Image's chatml-style template - <|im_start|>system\n{system_prompt}<|im_end|>\n<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n - encodes through your clip, and returns CONDITIONING. If system_prompt is empty it just encodes the bare prompt. On top of that, the scaled-bias parser scans the prompt for <name=number> tags and scales the matching token embeddings by your strength in the output - the emphasis mechanism that works where (word:1.3) gets discarded.
Three inputs, all straightforward:
- clip - Z-Image's text encoder.
- prompt - your description, bias tags welcome.
- system_prompt - behavior instructions; Z-Image is quite responsive to a good system message, and the pack's SystemMessagePresets node has Z-Image-appropriate phrasing you can wire in.
Why a Z-Image-specific encoder
Z-Image's encoder is trained on a specific chat format, and feeding it untemplated text or the wrong model's template produces worse prompt adherence than you'd expect from how good the model is. This node removes that variable: the template is the one the model was trained on. The scaled-bias part is the bonus - Z-Image's encoder will happily follow a long instruction prompt, but if you want to weight one concept within it, <thing=1.3> is the only emphasis syntax that survives to the actual conditioning.
Where people get burned
- Template × model mismatch. This is Z-Image's template. If you wire in a Flux 2 or Klein clip, the wrapper won't match the encoder's training and quality dips.
- The bias tag is
<name=number>exactly; anything looser stays in the text. - Keep strengths ≤ ~1.5; the mechanism scales embeddings, and too much just oversaturates.
Installing it
Ships in silveroxides/ComfyUI-UtilsCollection. ComfyUI Manager: search ComfyUI-UtilsCollection, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI-UtilsCollection
cd ComfyUI-UtilsCollection
pip install -r requirements.txt # opencv-python, typing-extensions
Restart. No node-specific model downloads - Z-Image weights load through the normal CLIP loader. Legacy alias of UC_ScaledBiasTextEncodeZITSystemPrompt, identical behavior.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| prompt | STRING | — | |
| system_prompt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |