Z-Image Turbo: картинка за восемь шагов

<!-- lesson: zimage-turbo -->

Урок «zimage-turbo» в группе Картинки: модели списка уроков. Шагов: 14.

Чему вы научитесь

Соберёте граф для дистиллированной модели, которая рисует за 8 шагов при cfg 1, и узнаете, почему негативный промпт ей не нужен.

Что понадобится

  • Урок продолжает Какой загрузчик для какого файла. Карточка говорит об этом; это подсказка, а не замок.
  • Файлы моделей, которые урок проверяет:
    • модель Z-Image: models/diffusion_models, например z_image_turbo_bf16.safetensors;
    • файл qwen_3_4b: models/text_encoders, например qwen_3_4b.safetensors;
    • VAE от Flux, файл ae.safetensors: models/vae, например ae.safetensors.
  • Ноды: Load Diffusion Model, Load CLIP, Load VAE, ModelSamplingAuraFlow, CLIP Text Encode (Prompt), ConditioningZeroOut, EmptySD3LatentImage, KSampler, VAE Decode, Save Image / Preview Image.
  • Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.

Шаги

Слова каждого шага, как их показывает урок. Имена нод выделены.

  1. Что такое дистиллированная модель (чтение)

    Turbo, Lightning, schnell, distilled: эти слова значат модель, которую научили рисовать за несколько шагов. Она быстрая и платит за это: cfg должен быть 1, поэтому негативный промпт не читается, а лишние шаги почти не помогают.

    Z-Image Turbo от Alibaba Tongyi как раз такая. Она хорошо рисует фото, понимает английский и китайский и умеет писать на картинке короткие слова.

    Это граф шаблона ComfyUI «Z-Image-Turbo: Text to Image».

  2. Какие файлы нужны вашему семейству (чтение)

    • модель: z_image_turbo_bf16.safetensors в models/diffusion_models;
    • текстовый энкодер: qwen_3_4b.safetensors в models/text_encoders. Это небольшая языковая модель: она читает промпт так же, как любой текст;
    • VAE: ae.safetensors в models/vae, тот же файл, что у Flux.

    Базовая модель Z-Image (без Turbo) берёт тот же энкодер и VAE, а файл модели у неё свой: z_image_bf16.safetensors.

    Если файла нет в списке, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Откройте в самом ComfyUI шаблон «Z-Image-Turbo: Text to Image»: он покажет, каких файлов не хватает и куда их положить. Берите файлы только с официальной страницы модели. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.

  3. Загрузите модель

    Добавьте ноду Load Diffusion Model и выберите файл Z-Image Turbo в поле unet_name.

    Загрузчик берёт из models/diffusion_models ту часть, которая рисует. Текстовый энкодер и VAE загружают свои ноды.

  4. Загрузите текстовый энкодер

    Добавьте ноду Load CLIP. В поле clip_name выберите файл Qwen, а в поле type поставьте lumina2.

    Z-Image читает промпт так же, как семейство Lumina, поэтому ComfyUI называет тип по нему. С другим типом файл прочитается неверно, и картинка не будет иметь отношения к промпту.

  5. Загрузите VAE

    Добавьте ноду Load VAE и выберите ae.safetensors в поле vae_name.

    Z-Image работает с тем же сжатым видом картинки, что и Flux, поэтому берёт тот же VAE.

  6. Задайте сдвиг

    Добавьте ноду ModelSamplingAuraFlow и подключите выход MODEL ноды Load Diffusion Model к её входу model. В поле shift поставьте 3.

    Модели этого вида убирают шум по прямой дорожке, а сдвиг говорит, на какой её части тратить шаги. Больший сдвиг отдаёт больше шагов крупным формам, меньший мелким деталям. Число взято из шаблона ComfyUI; пробуйте от 2 до 6, если композиция разваливается или детали получаются кашей.

  7. Напишите промпт

    Добавьте ноду CLIP Text Encode (Prompt) и подключите выход ноды Load CLIP к её входу clip. В поле text опишите картинку предложениями. Слова, которые нужно написать на картинке, ставьте в кавычки: керамическая кружка на деревянном столе, на ней напечатано слово "MORNING", мягкий свет из окна.

    Языковая модель лучше понимает длинное точное описание, чем список тегов.

  8. Дайте что-то на вход негатива

    Добавьте ноду ConditioningZeroOut и подключите выход ноды CLIP Text Encode (Prompt) к её входу conditioning.

    При cfg 1 сэмплер вход negative не читает, поэтому шаблон ComfyUI подаёт туда пустое условие. Негативный промпт здесь ничего не делает: что не нужно, скажите в самом промпте.

  9. Добавьте пустой латент

    Добавьте ноду EmptySD3LatentImage и поставьте в полях width и height 1024.

    Это тот же пустой латент, что у Flux, с 16 каналами. Z-Image хорошо рисует примерно до 2 мегапикселей; обе стороны должны делиться на 16.

  10. Добавьте сэмплер

Добавьте ноду KSampler и подключите:

  • ко входу model выход ноды ModelSamplingAuraFlow, а не загрузчика;
  • ко входу positive выход ноды CLIP Text Encode (Prompt);
  • ко входу negative выход ноды ConditioningZeroOut;
  • ко входу latent_image выход ноды EmptySD3LatentImage.
  1. Мало шагов, cfg 1

В ноде KSampler поставьте:

  • steps: 8;
  • cfg: 1;
  • sampler_name: res_multistep;
  • scheduler: simple.

Модель научили заканчивать примерно за восемь шагов. С меньшим числом картинка остаётся грубой, с гораздо большим не становится лучше. Cfg выше 1 выжигает цвета и удваивает время.

  1. Превратите результат в картинку

Добавьте ноду VAE Decode. Ко входу samples подключите выход ноды KSampler, ко входу vae выход ноды Load VAE.

Сэмплер выдаёт картинку в сжатом виде, латент. VAE того же семейства разворачивает его в пиксели.

  1. Сохраните картинку

Добавьте ноду Save Image и подключите выход ноды VAE Decode к её входу images.

Без неё ComfyUI посчитает картинку и никуда её не положит.

  1. Граф готов (чтение)

Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.

Если результат плохой:

  • серый шум или ошибка: VAE не ae.safetensors;
  • картинка не слушает промпт: type не lumina2;
  • пластиковая кожа или выжженные цвета: cfg выше 1.

Базовая Z-Image (без Turbo) работает на том же графе с другими числами: 25 шагов, cfg 4 и настоящий негативный промпт во второй текстовой ноде вместо ConditioningZeroOut. С ней работают только LoRA, сделанные для Z-Image.

Что проверяет урок

Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:

  • Шаг 3, Загрузите модель:
    • нода Load Diffusion Model.
    • в поле unet_name ноды Load Diffusion Model стоит файл такого вида: модель Z-Image; такой файл лежит в models/diffusion_models, например z_image_turbo_bf16.safetensors.
  • Шаг 4, Загрузите текстовый энкодер:
    • нода Load CLIP.
    • в поле clip_name ноды Load CLIP стоит файл такого вида: файл qwen_3_4b; такой файл лежит в models/text_encoders, например qwen_3_4b.safetensors.
    • type ноды Load CLIP: lumina2. Почему: с чтением текста не того типа модель прочтёт промпт неправильно и получит бессмыслицу.
  • Шаг 5, Загрузите VAE:
    • нода Load VAE.
    • в поле vae_name ноды Load VAE стоит файл такого вида: VAE от Flux, файл ae.safetensors; такой файл лежит в models/vae, например ae.safetensors.
  • Шаг 6, Задайте сдвиг:
    • нода ModelSamplingAuraFlow.
    • MODEL ноды Load Diffusion Model во вход model ноды ModelSamplingAuraFlow (можно через LoraLoaderModelOnly).
    • shift ноды ModelSamplingAuraFlow: от 1 до 10; «Сделать за меня» ставит 3. Почему: сдвиг решает, на что уходят шаги; шаблон Z-Image ставит 3.
  • Шаг 7, Напишите промпт:
    • нода CLIP Text Encode (Prompt).
    • CLIP ноды Load CLIP во вход clip ноды CLIP Text Encode (Prompt).
    • text ноды CLIP Text Encode (Prompt): не меньше 20 знаков.
  • Шаг 8, Дайте что-то на вход негатива:
    • нода ConditioningZeroOut.
    • CONDITIONING ноды CLIP Text Encode (Prompt) во вход conditioning ноды ConditioningZeroOut.
  • Шаг 9, Добавьте пустой латент:
    • нода EmptySD3LatentImage.
    • width ноды EmptySD3LatentImage: от 512 до 2048; «Сделать за меня» ставит 1024. Почему: z-Image учили около одного мегапикселя.
    • height ноды EmptySD3LatentImage: от 512 до 2048; «Сделать за меня» ставит 1024. Почему: z-Image учили около одного мегапикселя.
  • Шаг 10, Добавьте сэмплер:
    • нода KSampler.
    • MODEL ноды ModelSamplingAuraFlow во вход model ноды KSampler (можно через LoraLoaderModelOnly).
    • CONDITIONING ноды CLIP Text Encode (Prompt) во вход positive ноды KSampler.
    • CONDITIONING ноды ConditioningZeroOut во вход negative ноды KSampler.
    • LATENT ноды EmptySD3LatentImage во вход latent_image ноды KSampler.
  • Шаг 11, Мало шагов, cfg 1:
    • steps ноды KSampler: от 4 до 12; «Сделать за меня» ставит 8. Почему: турбо-модель обучена заканчивать примерно за 8 шагов.
    • cfg ноды KSampler: 1. Почему: при cfg 1 негатив не читается; больший cfg выжигает цвета турбо-модели.
    • sampler_name ноды KSampler: res_multistep.
    • scheduler ноды KSampler: simple.
  • Шаг 12, Превратите результат в картинку:
    • нода VAE Decode.
    • LATENT ноды KSampler во вход samples ноды VAE Decode.
    • VAE ноды Load VAE во вход vae ноды VAE Decode.
  • Шаг 13, Сохраните картинку:
    • нода Save Image или Preview Image.
    • IMAGE ноды VAE Decode во вход images ноды Save Image или Preview Image.

Что дальше

Этот урок продолжают: Qwen-Image: надписи на картинке, Квантованная модель: GGUF.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/lessons/Z-Image-Turbo.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.