Nodes/ComfyUI-ZTurbo-Style-Transfer/Z-Turbo Style Transfer
ComfyUI Node

Z-Turbo Style Transfer

It's not style transfer, it's color jacking — the Z-Turbo Style Transfer node, honestly

By WuMIn259·Created 4 months ago·Updated 4 months ago· 11
Z-Turbo Style Transfer
  • model
  • vae
  • reference_image
  • positive_prompt
  • negative_prompt
  • image
style_strength0.85
cfg1.0
steps8
seed0
color_match_strength1.00

Calling this "style transfer" oversells it, and knowing that up front is the whole trick. This node doesn't copy brushstrokes or art direction. It re-renders your image with Z-Image Turbo and then forces the reference photo's color mood onto the result - a fast, dependency-free palette hijack. That's a much narrower promise than IP-Adapter or a trained style LoRA, and much better at being exactly that.

Why reach for it: Z-Image Turbo is guidance-distilled, which means plain img2img at CFG 1 lets the reference image's color atmosphere drift away - the model obeys the prompt so hard that a "warm golden hour" reference comes back neutrally lit. The author's fix is two things glued into one node: img2img with Turbo-appropriate sampling, then a pixel-space color match that re-applies the reference's tone after the fact, no matter what the prompt said.

How it works

Reading the source, the pipeline is refreshingly transparent. Your reference_image gets VAE-encoded and used as the img2img latent - so it does double duty as both the composition source and the color reference. The sampler is hardcoded to res_multistep + simple, which is exactly the sampler/scheduler combo the community validated for Z-Image Turbo, with CFG 1 and 8 steps baked in as sensible defaults. You're not choosing these, and that's fine - it's one less way to shoot yourself.

After decode, the node runs its "color gene" step: it computes the per-channel mean and standard deviation of the reference, renormalizes the generated image to those stats, then linearly blends the two by color_match_strength and clamps to a valid range. That's AdaIN-style adaptive instance normalization, simplified and dropped into pixel space. It's mathematically crude and it works shockingly well for the one thing it claims: forcing a palette.

The inputs that matter

  • style_strength - this is your denoise in disguise. 0.7–0.85 keeps the reference's composition and swaps materials/style; 1.0 throws composition away for a full re-render, which is when the color match earns its keep.
  • color_match_strength - the real dial. 0.8 is the sweet spot: keeps the reference's high-level tone without flattening the new image's highlights and shadows. 1.0 is total coverage and tends to overcook.
  • cfg, steps, seed - sane defaults (1, 8, 0). On Turbo, raise CFG above ~3 and images burn; the 8-step default is where the model was trained to be.

The output is a single image (IMAGE), which you wire straight into a preview or Save Image node, then on into an upscaler if you want more than Z-Image's ~2MP native ceiling. One note: reference_image can be a batch, but only the first frame is used for the color stats.

Installing it

ComfyUI Manager: search "Z-Turbo Style Transfer". Or the manual route:

cd ComfyUI/custom_nodes/
git clone https://github.com/WuMIn259/ComfyUI-ZTurbo-Style-Transfer
# restart ComfyUI

That's genuinely it. requirements.txt lists only torch and numpy - both already present in any ComfyUI install. No model files ship with the pack; you bring your own Z-Image Turbo checkpoint (HuggingFace Tongyi-MAI/Z-Image-Turbo).

Where it bites

The README's best-practice section tells you to connect ControlNet to the node's "model input" for a fully new composition. Don't hunt for that port - it doesn't exist. This node is a self-contained VAEEncode → KSampler → VAEDecode package; there's no way to inject ControlNet conditioning into it. The ControlNet example workflow ships as a screenshot, not a loadable graph. If you want ControlNet-driven composition, build that in a standard sampler and treat this node's idea - match your output's stats to a reference after the fact - as the reusable trick.

Also, be honest about scope: the color match is global tone. It won't give you a painter's textures or line quality. For that you still want a style LoRA or an IP-Adapter; this is the fast, free palette shortcut when a reference's mood is what you're after. There's also a hard 4096px guard that refuses oversized inputs to protect VRAM - rare, since Z-Image caps out around 2MP anyway, but it will error loudly if you feed it a huge reference.

Distilled-model users, one familiar gotcha: the negative prompt port is a formality at CFG 1 - Turbo ignores it. If you need actual negative control, this isn't the node's job.

CategoryZ-Turbo-Tools

Inputs (10)

NameTypeDefaultDescription
modelMODEL
vaeVAE
reference_imageIMAGE
positive_promptCONDITIONING
negative_promptCONDITIONING
style_strengthFLOAT0.850.1–1
cfgFLOAT1.01–10
stepsINT81–50
seedINT00–18446744073709550000
color_match_strengthFLOAT1.000–1

Outputs (1)

NameTypeDescription
imageIMAGE