Text Encode with Z-Image System Prompt
System prompts for Z-Image, done properly
- clip
- CONDITIONING
Z-Image is a chat-based image model: its Qwen3 encoder expects conversation-shaped input, and a system prompt only works if it's wrapped in the right <|im_start|>system block. UC_TextEncodeZITSystemPrompt is the node that does that wrapping, so you can finally set standing rules - "always render at golden hour", "no text in the image", "photorealistic, not painterly" - without them getting lost in translation.
What it is
The Z-Image-specific sibling of the pack's UC_TextEncodeSystemPrompt. Where the general node juggles five model templates, this one is laser-focused: clip, prompt, and system_prompt in, one CONDITIONING out. When you give it a system prompt it builds:
<|im_start|>system
{system_prompt}<|im_end|>
<|im_start|>user
{prompt}<|im_end|>
<|im_start|>assistant
That's the exact chat template Z-Image's Qwen3 encoder was trained on. If you leave the system prompt empty it does a plain encode, so the node degrades gracefully.
Why it earns its place
Two reasons. First, "ZIT" is a much shorter name to type. Second, and actually seriously: consistent system prompts are how you get reproducible behavior across a run of generations. If you're building a workflow where a character or a style has to stay stable shot-to-shot, putting the rules in the system block keeps them out of your per-shot prompt, which means you can vary the prompt freely without re-specifying the style every time.
It's the natural partner to the pack's UC_TextEncodeZImageThinkPrompt. That one injects reasoning into a <think> block; this one sets the standing instructions. Wire both into the same clip if you want the full control surface.
The inputs that matter
- clip - the Qwen3-based Z-Image text encoder. Z-Image-Turbo, Base, and the Omni family all use the same chat-format encoder.
- prompt - your actual text with braces and weights.
- system_prompt - the standing instructions wrapped into the system block. Empty = plain encode.
Output: CONDITIONING, straight into the KSampler.
Installing it
It's part of ComfyUI-UtilsCollection:
cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI-UtilsCollection
Restart ComfyUI, or use ComfyUI Manager (search "ComfyUI-UtilsCollection"). The pack needs a recent ComfyUI build - it's written against the current Core node API.
Common issues
The main trap is using it with a non-Z-Image encoder; the template is meaningless to T5 or CLIP. Otherwise, keep expectations calibrated by variant: on Z-Image-Turbo (CFG 1, guidance-distilled) system prompts are a gentler lever than on Base, where you can pair them with CFG 3-5 and more steps for a stronger effect. And since this is a newer pack, remember the README is the source of truth for behavior - this encoder node tracks current ComfyUI Core behavior, so keep both updated together.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| prompt | STRING | — | |
| system_prompt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |