Qwen-Image: надписи на картинке

<!-- lesson: qwen-image -->

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

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

Соберёте граф Qwen-Image с настоящим негативным промптом, сдвигом этого семейства и его собственным размером.

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

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

Шаги

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

  1. Модель, которая пишет (чтение)

    Qwen-Image от Alibaba Qwen: большая модель, известная надписями. Вывески, плакаты и этикетки на английском и китайском получаются читаемыми. Её новая версия называется Qwen-Image 2512.

    В отличие от турбо-моделей она работает при cfg выше 1, поэтому негативный промпт читается и действует.

    Это граф шаблонов ComfyUI «Qwen-Image» и «Qwen Image 2512».

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

    • модель: qwen_image_fp8_e4m3fn.safetensors или qwen_image_2512_fp8_e4m3fn.safetensors в models/diffusion_models (около 20 ГБ);
    • текстовый энкодер: qwen_2.5_vl_7b_fp8_scaled.safetensors в models/text_encoders, языковая модель, которая видит и картинки;
    • VAE: qwen_image_vae.safetensors в models/vae.

    Модели правки этого семейства (Qwen-Image-Edit) берут тот же энкодер и VAE, но граф у них другой.

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

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

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

    Файл большой. Если он не помещается в видеокарту, ComfyUI переносит часть в обычную память и работает медленнее, или выручает файл модели в GGUF.

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

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

    Тип говорит ComfyUI, какому семейству служит энкодер. Тот же файл с другим типом даст картинку, которая не слушает промпт.

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

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

    У Qwen-Image свой VAE; VAE от Flux ей не подходит.

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

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

    Сдвиг говорит, на что тратить шаги: больший отдаёт их крупным формам, меньший мелким деталям. Если мелкие буквы выходят размытыми, попробуйте чуть меньше.

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

    Добавьте две ноды CLIP Text Encode (Prompt) и подключите выход ноды Load CLIP ко входу clip каждой.

    В поле text первой подробно опишите картинку предложениями. Слова для надписи поставьте в кавычки и скажите, где они: витрина пекарни в сумерках, над дверью рисованная вывеска "FRESH BREAD", внутри тёплый свет.

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

  8. Добавьте пустой латент нужного размера

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

    Qwen-Image учили примерно на 1.7 мегапикселя; при 1024 она рисует, но страдают мелкие буквы. Для широких и высоких картинок страница модели даёт ещё 1664 на 928 и 928 на 1664; этот шаг просит квадрат.

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

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

    • ко входу model выход ноды ModelSamplingAuraFlow;
    • ко входам positive и negative две текстовые ноды;
    • ко входу latent_image выход ноды EmptySD3LatentImage.
  10. Настройте сэмплер

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

  • steps: 20;
  • cfg: 4;
  • sampler_name: euler;
  • scheduler: simple.

Это числа шаблона «Qwen-Image». Шаблон версии 2512 ставит 50 шагов ради наибольшей детальности; так дольше.

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

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

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

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

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

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

  1. Быстрее: LoRA Lightning (чтение)

У семейства есть LoRA-ускорители (Lightning), которые делают из него модель на несколько шагов. В шаблоне ComfyUI LoRA стоит в ноде Load LoRA только для модели, между Load Diffusion Model и ModelSamplingAuraFlow, с силой 1. Тогда сэмплеру нужно 8 шагов и cfg 1 (с LoRA на четыре шага 4 шага).

При cfg 1 негативный промпт уже не читается: это цена скорости. LoRA должна быть сделана для вашей версии: у Qwen-Image и у 2512 они разные.

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

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

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

  • буквы неверные: слова покороче, каждое в своих кавычках, сказано, где оно стоит; размер со страницы модели;
  • картинка не слушает промпт: type не qwen_image;
  • цвета уходят: VAE не от Qwen-Image.

Тот же граф подходит базовой Z-Image: модель z_image_bf16.safetensors, энкодер qwen_3_4b.safetensors с типом lumina2, VAE ae.safetensors, сдвиг 3, размер 1024, 25 шагов, cfg 4, res_multistep.

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

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

  • Шаг 3, Загрузите модель:
    • нода Load Diffusion Model.
    • в поле unet_name ноды Load Diffusion Model стоит файл такого вида: модель Qwen-Image; такой файл лежит в models/diffusion_models, например qwen_image_fp8_e4m3fn.safetensors.
  • Шаг 4, Загрузите текстовый энкодер:
    • нода Load CLIP.
    • в поле clip_name ноды Load CLIP стоит файл такого вида: файл qwen_2.5_vl_7b; такой файл лежит в models/text_encoders, например qwen_2.5_vl_7b_fp8_scaled.safetensors.
    • type ноды Load CLIP: qwen_image. Почему: с чтением текста не того типа модель прочтёт промпт неправильно и получит бессмыслицу.
  • Шаг 5, Загрузите VAE:
    • нода Load VAE.
    • в поле vae_name ноды Load VAE стоит файл такого вида: файл qwen_image_vae; такой файл лежит в models/vae, например qwen_image_vae.safetensors.
  • Шаг 6, Задайте сдвиг:
    • нода ModelSamplingAuraFlow.
    • MODEL ноды Load Diffusion Model во вход model ноды ModelSamplingAuraFlow (можно через LoraLoaderModelOnly).
    • shift ноды ModelSamplingAuraFlow: от 1 до 10; «Сделать за меня» ставит 3.1. Почему: шаблон Qwen-Image сдвигает шум на 3.1: так решается, на что уходят шаги.
  • Шаг 7, Напишите промпт и негатив:
    • нода CLIP Text Encode (Prompt).
    • нода CLIP Text Encode (Prompt).
    • CLIP ноды Load CLIP во вход clip ноды CLIP Text Encode (Prompt) (промпт).
    • CLIP ноды Load CLIP во вход clip ноды CLIP Text Encode (Prompt) (негатив).
    • text ноды CLIP Text Encode (Prompt) (промпт): не меньше 40 знаков.
  • Шаг 8, Добавьте пустой латент нужного размера:
    • нода EmptySD3LatentImage.
    • width ноды EmptySD3LatentImage: от 512 до 2048; «Сделать за меня» ставит 1328. Почему: qwen-Image учили около 1,7 мегапикселя; на 1024 страдают мелкие буквы.
    • height ноды EmptySD3LatentImage: от 512 до 2048; «Сделать за меня» ставит 1328. Почему: qwen-Image учили около 1,7 мегапикселя; на 1024 страдают мелкие буквы.
  • Шаг 9, Добавьте сэмплер:
    • нода KSampler.
    • MODEL ноды ModelSamplingAuraFlow во вход model ноды KSampler (можно через LoraLoaderModelOnly).
    • CONDITIONING ноды CLIP Text Encode (Prompt) (промпт) во вход positive ноды KSampler.
    • CONDITIONING ноды CLIP Text Encode (Prompt) (негатив) во вход negative ноды KSampler.
    • LATENT ноды EmptySD3LatentImage во вход latent_image ноды KSampler.
  • Шаг 10, Настройте сэмплер:
    • steps ноды KSampler: от 15 до 50; «Сделать за меня» ставит 20. Почему: без ускоряющей LoRA шаблон Qwen-Image ставит 20 шагов.
    • cfg ноды KSampler: от 2.5 до 5; «Сделать за меня» ставит 4. Почему: при cfg 4 негатив читается; шаблон ставит 4 без ускоряющей LoRA.
    • sampler_name ноды KSampler: euler.
    • scheduler ноды KSampler: simple.
  • Шаг 11, Превратите результат в картинку:
    • нода VAE Decode.
    • LATENT ноды KSampler во вход samples ноды VAE Decode.
    • VAE ноды Load VAE во вход vae ноды VAE Decode.
  • Шаг 12, Сохраните картинку:
    • нода Save Image или Preview Image.
    • IMAGE ноды VAE Decode во вход images ноды Save Image или Preview Image.

Что дальше

Этот урок продолжают: Правка картинки словами.

См. также

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

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