ZImage Turbo Sampler
The Z-Image sampler that knows what it's doing so you don't have to
- model
- positive
- negative
- latent_image
- samples
- steps
- cfg
- denoise
- sampler_name
- scheduler_name
This is the heart of the pack: the sampler you actually generate with. Plug in a model, positive and negative conditioning, a latent, a seed, pick a mode, and it runs the full KSampler internally with the right sampler, scheduler, steps, CFG, and denoise for Z-Image Turbo. It's a one-node workflow ender.
Why you'd want this over a plain KSampler: Z-Image Turbo is a distilled flow-matching model, and the community spent weeks rediscovering that the obvious settings are mostly wrong for it. Karras and exponential schedulers fail across the board, DPM++-style samplers effectively double your step count, and the model is trained at CFG 1 - guidance just isn't how it works. This node hardcodes the good recipe instead of trusting you to type it in.
How it works. Internally it consults the pack's sampling plan and calls ComfyUI's common_ksampler with the "capitan_flow" profile - which uses the pack's own euler_flow sampler and its capitanZiT scheduler, a simple linear sigma ramp from 1.0 to 0.0. Both are registered locally by the pack on import, so you don't need Capitan's scheduler repo. The mode dropdown is the whole user-facing decision:
- base_ultra - 9 steps, CFG 1, full denoise. The default; this is the "make me a new image" setting.
- base_balanced - 8 steps, CFG 1, full denoise. Marginally faster, marginally rougher; the "I'm iterating" setting.
- refine_subtle / refine_normal / refine_strong - 8–10 steps at low denoise (0.25 / 0.32 / 0.40). These are partial-denoise passes, so feed them a latent that already has an image in it, not a blank one.
The inputs that matter: model (a Z-Image Turbo UNet - the workflow uses ModelSamplingAuraFlow shift 5; the community's most-repeated tweak is shift 7), positive/negative from the pack's conditioning nodes, latent_image from ZImageTurboLatentInit (or a previous pass), seed, and mode. The negative is a formality at CFG 1 - zeroed conditioning is fine here, since guidance-free means it can't steer anything.
Outputs. samples (LATENT) goes to a VAE decode. Then it also echoes back steps, cfg, denoise, sampler_name, and scheduler_name - the exact values it used, which is handy for logging or for driving a display node so you know what actually ran.
Install is the pack routine: ComfyUI Manager → "ZImageTurboHQNodes", or
cd ComfyUI/custom_nodes
git clone https://github.com/marduk191/ComfyUI-ZImageTurboHQNodes
restart. No pip dependencies. The models aren't bundled - grab z_image_turbo_bf16.safetensors (or a GGUF/FP8 variant) and qwen_3_4b.safetensors from Tongyi-MAI on HuggingFace, plus a Z-Image VAE.
One thing to remember: the euler_flow and capitanZiT names only exist while this pack is loaded - they're registered at import time. If you delete the pack, any workflow or saved JSON referencing those names won't resolve, and you'll be staring at a red "unrecognized sampler" error. Keep the pack around if you share workflows that use it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| seed | INT | 133713370–18446744073709550000 | — |
| mode | COMBO | base_ultra | 5 options: base_ultra, base_balanced, refine_subtle, refine_normal, refine_strong |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| denoise | FLOAT | — |
| sampler_name | STRING | — |
| scheduler_name | STRING | — |