Тот же персонаж на новой картинке: FLUX.1 Kontext
Урок «character-kontext» в группе Лица и персонажи списка уроков. Шагов: 13.
Сначала согласие
Получите согласие реального человека на использование его внешности и учитывайте местные законы. Не помещайте внешность реального человека в откровенное содержимое; исключайте тех, кто выглядит несовершеннолетним. См. Правила содержимого.
Чему вы научитесь
Вы соберёте граф, который снова рисует придуманного вами героя, в новом месте или позе, с тем же лицом и одеждой.
Что понадобится
- Урок продолжает Первая картинка из текста. Карточка говорит об этом; это подсказка, а не замок.
- Файлы моделей, которые урок проверяет:
- для поля
unet_nameноды Load Diffusion Model: файл, в имени которого естьkontext; - для поля
clip_name1ноды DualCLIPLoader: файл, в имени которого естьclip_l; - для поля
vae_nameноды Load VAE: файл, в имени которого естьae; - для поля
clip_name2ноды DualCLIPLoader: файл, в имени которого естьt5xxl.
- для поля
- Ноды: Load Diffusion Model, DualCLIPLoader, Load VAE, Load Image, FluxKontextImageScale, VAE Encode, CLIP Text Encode (Prompt), ReferenceLatent, FluxGuidance, ConditioningZeroOut, KSampler, VAE Decode, Save Image / Preview Image.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Сначала о лицах (чтение)
FLUX.1 Kontext берёт картинку и фразу о том, что изменить, и сохраняет остальное: то же лицо, ту же одежду, тот же стиль. Так один герой проходит через целую серию картинок.
В примере этого урока придуманный герой или вы сами. Получите согласие реального человека на использование его внешности и учитывайте местные законы. Не помещайте внешность реального человека в откровенное содержимое; исключайте тех, кто выглядит несовершеннолетним.
Урок собирает граф с пустого холста: «Файл ▸ Новый проект».
Загрузите модель
Добавьте ноду Load Diffusion Model и выберите файл Kontext в
unet_name. Шаблон берётflux1-dev-kontext_fp8_scaled.safetensorsиз models/diffusion_models.Так умеет только модель Kontext. Обычный FLUX.1 dev картинку не замечает.
Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI шаблон «Flux Kontext Dev Image Edit»: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.
Загрузите чтение текста и декодер
Добавьте ноду DualCLIPLoader. Выберите
clip_l.safetensorsвclip_name1,t5xxl_fp8_e4m3fn_scaled.safetensorsвclip_name2, аtypeпоставьтеflux.Добавьте ноду Load VAE и выберите
ae.safetensorsвvae_name.Это те же файлы, что FLUX.1 берёт для картинок из текста.
Загрузите картинку с героем
Добавьте ноду Load Image и выберите картинку с вашим героем в её поле
image.Лицо должно быть ясным и достаточно крупным. Эта картинка служит образцом: всё, что модель сохранит, берётся из неё.
Подготовьте картинку
Добавьте ноду FluxKontextImageScale и соедините картинку от Load Image с её входом
image. Потом добавьте ноду VAE Encode: входpixelsот FluxKontextImageScale, входvaeот Load VAE.Первая нода приводит картинку к размеру, на котором учился Kontext. Вторая превращает её в сжатый вид, в котором работает модель.
Скажите, что меняется
Добавьте ноду CLIP Text Encode (Prompt) и соедините выход
CLIPноды DualCLIPLoader с её входомclip. Вtextнапишите, что нового и что остаётся. Например: the same woman with short red hair and a green coat, now standing on a rainy street at night, keep her face and clothes.Называйте героя по тому, что видно («женщина с рыжими волосами»), а не местоимением: так модель знает, кого сохранить.
Отдайте картинку описанию
Добавьте ноду ReferenceLatent. Соедините выход CLIP Text Encode (Prompt) с её входом
conditioning, а выход VAE Encode с её входомlatent.Потом добавьте ноду FluxGuidance, соедините ReferenceLatent с её входом
conditioningи поставьтеguidanceравным 2.5.Первая нода прикрепляет картинку к описанию. Вторая говорит, насколько сильно модель им следует: шаблон ставит 2.5.
Пустой негатив
Добавьте ноду ConditioningZeroOut и соедините выход CLIP Text Encode (Prompt) с её входом
conditioning.Kontext не говорят, чего избегать. Эта нода даёт входу
negativeсэмплера то же описание, обнулённое.Добавьте сэмплер
Добавьте ноду KSampler и подключите четыре входа:
modelот Load Diffusion Model;positiveот FluxGuidance;negativeот ConditioningZeroOut;latent_imageот VAE Encode.
Поставьте
stepsравным 20 иcfgравным 1. Модели FLUX берут силу следования от FluxGuidance, поэтомуcfgостаётся 1.Превратите результат в картинку и сохраните
Добавьте ноду VAE Decode: samples от KSampler, vae от Load VAE. Потом добавьте ноду Save Image и соедините картинку VAE Decode с её входом images.
- Серия с одним героем (чтение)
Чтобы удержать героя через серию:
- начинайте каждую новую картинку с того же образца, а не с последнего результата: мелкие изменения накапливаются;
- меняйте по одному: место, потом позу, потом свет;
- повторяйте в каждом описании черты, которые делают героя: волосы, одежду, примету;
- закрепите
seedв ноде KSampler, пока ищете хорошее описание.
Если лицо уплывает, чуть уменьшите guidance или скажите в описании «keep the face».
- Другие способы удержать героя (чтение)
Другим способам нужно больше файлов, и работают они только со своим семейством моделей:
- IP-Adapter FaceID (пак ComfyUI_IPAdapter_plus): SD 1.5 и SDXL, нужен InsightFace в models/insightface и свои файлы в models/ipadapter;
- PhotoMaker (ноды самого ComfyUI): SDXL, файл в models/photomaker, несколько картинок одного лица;
- InfiniteYou (пак ComfyUI_InfiniteYou): FLUX, файлы в models/infinite_you и InsightFace, много видеопамяти;
- LoRA, обученная на герое: самый устойчивый способ, но её сначала надо обучить.
Для всех них правило то же: придуманный герой или вы сами, или человек, который дал согласие.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Загрузите модель:
- нода Load Diffusion Model.
- в поле
unet_nameноды Load Diffusion Model стоит файл, в имени которого естьkontext(заглавные буквы, точки и дефисы не важны).
- Шаг 3, Загрузите чтение текста и декодер:
- нода DualCLIPLoader.
- нода Load VAE.
- в поле
clip_name1ноды DualCLIPLoader стоит файл, в имени которого естьclip_l(заглавные буквы, точки и дефисы не важны). clip_name2ноды DualCLIPLoader: не тот же файл, что в полеclip_name1ноды DualCLIPLoader.typeноды DualCLIPLoader:flux.- в поле
vae_nameноды Load VAE стоит файл, в имени которого естьaeи нетsdxl,wan,qwen,flux2,taesd(заглавные буквы, точки и дефисы не важны). - в поле
clip_name2ноды DualCLIPLoader стоит файл, в имени которого естьt5xxl(заглавные буквы, точки и дефисы не важны).
- Шаг 4, Загрузите картинку с героем:
- нода Load Image.
imageноды Load Image: значение выбрано.
- Шаг 5, Подготовьте картинку:
- нода FluxKontextImageScale.
- нода VAE Encode.
IMAGEноды Load Image во входimageноды FluxKontextImageScale (можно через ImageStitch).IMAGEноды FluxKontextImageScale во входpixelsноды VAE Encode.VAEноды Load VAE во входvaeноды VAE Encode.
- Шаг 6, Скажите, что меняется:
- нода CLIP Text Encode (Prompt).
CLIPноды DualCLIPLoader во входclipноды CLIP Text Encode (Prompt).textноды CLIP Text Encode (Prompt): не меньше 20 знаков.
- Шаг 7, Отдайте картинку описанию:
- нода ReferenceLatent.
- нода FluxGuidance.
CONDITIONINGноды CLIP Text Encode (Prompt) во входconditioningноды ReferenceLatent.LATENTноды VAE Encode во входlatentноды ReferenceLatent.CONDITIONINGноды ReferenceLatent во входconditioningноды FluxGuidance.guidanceноды FluxGuidance: от 2 до 3.5; «Сделать за меня» ставит 2.5.
- Шаг 8, Пустой негатив:
- нода ConditioningZeroOut.
CONDITIONINGноды CLIP Text Encode (Prompt) во входconditioningноды ConditioningZeroOut.
- Шаг 9, Добавьте сэмплер:
- нода KSampler.
MODELноды Load Diffusion Model во входmodelноды KSampler.CONDITIONINGноды FluxGuidance во входpositiveноды KSampler.CONDITIONINGноды ConditioningZeroOut во входnegativeноды KSampler.LATENTноды VAE Encode во входlatent_imageноды KSampler.stepsноды KSampler: от 20 до 30; «Сделать за меня» ставит 20.cfgноды KSampler:1.
- Шаг 10, Превратите результат в картинку и сохраните:
- нода VAE Decode.
- нода Save Image или Preview Image.
LATENTноды KSampler во входsamplesноды VAE Decode.VAEноды Load VAE во входvaeноды VAE Decode.IMAGEноды VAE Decode во входimagesноды Save Image или Preview Image.
Что дальше
Этот урок продолжают: Один персонаж на многих картинках.