Nodes/Arthemy Live Tuner - Z-image/Arthemy Z-Image Saver
ComfyUI Node

Arthemy Z-Image Saver

Freeze a good Z-Image tuning into a real .safetensors file

By aledelpho·Created 7 months ago·Updated 7 months ago· 15
Arthemy Z-Image Saver
  • model
    filename_prefixz-image_arthemy_tuned
    save_precisionbf16

    You've spent an evening pushing Z-Image's layer sliders and found a tuning you actually like. Now what? If you close ComfyUI, it's gone. Arthemy Z-Image Saver is the "now what" - it serializes the tuned model state in memory into a standalone .safetensors file you can load later with a plain UNETLoader, no tuner node required. It's how the pack's author turns a happy accident of sliders into a reusable "tuned model."

    The inputs

    Refreshingly few for an output node:

    • model - the MODEL you want frozen. In practice this is the output of ArthemyZImage_Tuner_Simple or ArthemyZImage_Tuner_Lab.
    • filename_prefix - the output name, default z-image_arthemy_tuned. Your file lands at ComfyUI/output/diffusion_models/z-image_arthemy_tuned.safetensors.
    • save_precision - fp16, bf16, or float32, default bf16. That default is right: Z-Image ships in bf16, so this matches the original with no pointless conversion. fp16 if you need a few GB back, float32 if you want to be pedantic about precision (bigger file, no visible gain for most people).

    How it works

    This one is simple under the hood: it grabs the tuned diffusion_model state dict, moves every tensor to CPU, casts it to your chosen precision, and writes the whole thing with safetensors. Two things worth understanding:

    1. It saves the entire model, not a delta. The result is a full checkpoint roughly the size of the original - Z-Image is 6B parameters, so expect a file in the ~12GB bf16 neighborhood. This is not a LoRA; don't go hunting for a small patch file.
    2. It saves whatever you hand it. Feed it the tuner's output and you get a tuned model. Feed it the loader's output directly and you get an untouched stock model with a fresh name. There's no verification, so double-check you've wired the branch you meant to save.

    Wiring

    Add it as a parallel branch off the tuner, or after the sampler - either way it runs alongside your normal generation:

    ArthemyTunerLoader ──> ArthemyZImage_Tuner_Simple ──> KSampler ──> ...
                                       │
                                       └──> ArthemyZImage_Saver
    

    Reusing the result

    Once it's saved, load it anywhere a UNet goes:

    UNETLoader (models/unet/z-image_arthemy_tuned.safetensors) ──> KSampler ──> ...
    

    The tuned file behaves like any other Z-Image model, so pair it with the usual stack - ModelSamplingAuraFlow shift for Turbo, the Qwen3-4B text encoder - and you get your tuning back without dragging the slider rig through every workflow.

    Common issues

    • The file is huge - that's expected, it's a full model. If you wanted a small shareable patch, this isn't the tool.
    • Saved model doesn't look tuned - check which branch you wired into model; saving from the loader instead of the tuner gives you stock weights.
    • Wrong precision on load - you picked fp16 on a Turbo model that expects bf16 math; it usually still works but can drift. When in doubt, bf16.
    • Output folder confusion - note it's output/diffusion_models/, not the unet folder. Move or symlink it into models/unet/ if you want it in the loader's dropdown.

    One workflow tip: keep a scratch filename_prefix while experimenting, and only give the file a real name once you're sure the tuning is a keeper. There's no overwrite warning if you reuse a prefix - it'll happily clobber the earlier save.

    CategoryArthemy/Z-Image/IO

    Inputs (3)

    NameTypeDefaultDescription
    modelMODEL
    filename_prefixSTRINGz-image_arthemy_tuned
    save_precisionoptCOMBObf163 options: fp16, bf16, float32

    Outputs (0)

    No outputs