Z-Image-Turbo

Z-Imageという画像生成モデルが評判である。Qwenと同じAlibaba製だ。現在はZ-Image-Turboというモデルだけが公開されている。

PyTorchと最新のdiffusersをインストールしておく(pip install --upgrade torch diffusers)。あとは、サンプルコードを適宜書き直して使う。

Macでも今はbfloat16がなんとか使えるようだ。もしうまくいかなければfloat32にする。float16は数値の範囲が狭いのでうまくいかなかった。

import torch
from diffusers import ZImagePipeline

pipe = ZImagePipeline.from_pretrained(
    "Tongyi-MAI/Z-Image-Turbo",
    torch_dtype=torch.bfloat16, # または torch.float32
)
pipe.to("mps")  # mps, cpu, cuda (Macはmps)

prompt = "A Japanese anime girl"

image = pipe(
    prompt=prompt,
    height=1024,
    width=1024,
    num_inference_steps=9,
    guidance_scale=0.0,
    generator=torch.Generator("mps").manual_seed(42),
    max_sequence_length=1024,  # default: 512 tokens
).images[0]
image.save("out.png")

モデルは自動でダウンロードされる。デフォルトでは ~/.cache/huggingface/hub/models--Tongyi-MAI--Z-Image-Turbo に入る。全部で33Gバイトほどあるので、メモリ48G〜64G以上のマシンが欲しい。Mac Studio M4 Maxでは1枚45秒(float32なら52秒)程度で生成できた。

プロンプトと乱数を変えながら次々に生成するために、次のようにしてみた。プロンプトは prompt.txt というファイルに書く。このファイルの1行目が空なら停止する。

import hashlib
import torch
from diffusers import ZImagePipeline

pipe = ZImagePipeline.from_pretrained(
    "Tongyi-MAI/Z-Image-Turbo",
    torch_dtype=torch.bfloat16,
)
pipe.to("mps")  # mps, cpu, cuda (Macはmps)

while True:
    with open("prompt.txt", "r") as f:
        prompt = f.read()
    if len(prompt) == 0 or prompt[0] == "\n":
        break
    hash = hashlib.md5(prompt.encode("utf-8")).hexdigest()[:8]
    seed = torch.randint(0, 100000000, (1,)).item()
    image = pipe(
        prompt=prompt,
        height=1024,
        width=1024,
        num_inference_steps=9,
        guidance_scale=0.0,
        generator=torch.Generator("mps").manual_seed(seed),
        max_sequence_length=1024,  # default: 512 tokens
    ).images[0]
    image.save(f"img_{hash}_{seed:08}.png")

PROMPTING GUIDE にあるようにプロンプトはLLMでenhanceするとよい。Z-Image Prompt Enhancer に解説とprompt enhancerの英訳があるので、まずは簡単なプロンプトを自分で書いてから、何らかのLLMを使ってenhanceしてから使うとよさそうである。


[2026-01-28] 上位バージョン?の Z-Image も出た。

import torch
from diffusers import ZImagePipeline

# Load the pipeline
pipe = ZImagePipeline.from_pretrained(
    "Tongyi-MAI/Z-Image",
    torch_dtype=torch.bfloat16,
    # low_cpu_mem_usage=False,
    device_map="mps"
)
# pipe.to("mps")

# Generate image
prompt = "两名年轻亚裔女性紧密站在一起,背景为朴素的灰色纹理墙面,可能是室内地毯地面。左侧女性留着长卷发,身穿藏青色毛衣,左袖有奶油色褶皱装饰,内搭白色立领衬衫,下身白色裤子;佩戴小巧金色耳钉,双臂交叉于背后。右侧女性留直肩长发,身穿奶油色卫衣,胸前印有“Tun the tables”字样,下方为“New ideas”,搭配白色裤子;佩戴银色小环耳环,双臂交叉于胸前。两人均面带微笑直视镜头。照片,自然光照明,柔和阴影,以藏青、奶油白为主的中性色调,休闲时尚摄影,中等景深,面部和上半身对焦清晰,姿态放松,表情友好,室内环境,地毯地面,纯色背景。"
negative_prompt = "" # Optional, but would be powerful when you want to remove some unwanted content

image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=1280,
    width=720,
    cfg_normalization=False,
    num_inference_steps=50,
    guidance_scale=4,
    generator=torch.Generator("mps").manual_seed(42),
).images[0]

image.save("example.png")