ControlNet: рисунок по контурам картинки
Урок «controlnet» в группе Картинки: приёмы списка уроков. Шагов: 11.
Чему вы научитесь
Модель рисует новую картинку, сохраняя контуры картинки-образца.
Что понадобится
- Урок продолжает Первая картинка из текста. Карточка говорит об этом; это подсказка, а не замок.
- Ноды: Load Checkpoint, CLIP Text Encode (Prompt), KSampler, VAE Decode, Save Image / Preview Image, Load ControlNet Model, Load Image, Detect Edges (Canny), Apply ControlNet.
- Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.
Шаги
Слова каждого шага, как их показывает урок. Имена нод выделены.
Что делает ControlNet (чтение)
Описание говорит, что нарисовать, но не где. ControlNet добавляет второй вид указаний, управляющую картинку: контуры, глубину, позу человека. Модель держится её, пока рисует то, что сказано в описании.
Управляющую картинку делают из обычной. В этом уроке её делает встроенный в ComfyUI искатель контуров. Урок добавляет четыре ноды к графу из урока «Первая картинка из текста».
Нужен граф с картинкой
Этот урок продолжает граф из урока «Первая картинка из текста». На холсте должны быть Load Checkpoint, два текста CLIP Text Encode (Prompt) и CLIP Text Encode (Prompt), KSampler, VAE Decode и Save Image со связями между ними.
Если их нет, сначала пройдите тот урок.
Загрузите ControlNet
Добавьте ноду Load ControlNet Model и выберите в её поле
control_net_nameControlNet для контуров: в названии стоит «canny». ComfyUI ищет их вmodels/controlnet.ControlNet обучен для одного семейства моделей и одного вида управляющей картинки. ControlNet для SD 1.5 не работает с SDXL, а ControlNet для глубины не читает контуры.
Если нужного файла в списке нет, значит, его нет в вашем ComfyUI. Приложение ничего не скачивает. Проще всего открыть в самом ComfyUI шаблон ComfyUI с ControlNet: он покажет, каких файлов не хватает и куда их положить. Потом выберите здесь в меню «Синхронизация ▸ Синхронизировать сейчас», и файлы появятся в списках.
Загрузите картинку-образец
Добавьте ноду Load Image и выберите в её поле
imageкартинку, контуры которой хотите сохранить.Эта картинка только план: её цвета и содержимое в результат не идут.
Найдите контуры
Добавьте ноду Detect Edges (Canny) и подключите выход ноды Load Image к её входу
image.Она рисует белые линии там, где у картинки края.
low_thresholdиhigh_thresholdговорят, насколько сильным должен быть край: меньшие значения дают больше линий, мелкие детали тоже. Подключите её к ноде Preview Image, чтобы увидеть, что получит ControlNet.Примените ControlNet
Добавьте ноду Apply ControlNet и подключите к ней:
- к
positiveиnegativeоба текста; - к
control_netвыход ноды Load ControlNet Model; - к
imageвыход ноды Detect Edges (Canny).
Нода добавляет контуры к обоим описаниям, и модель получает их вместе со словами.
- к
Отдайте сэмплеру новые описания
Подключите выход
positiveноды Apply ControlNet ко входуpositiveноды KSampler, аnegativeкnegative. Прямые связи от текстов заменятся.Задайте силу
Для первого запуска оставьте
strengthноды Apply ControlNet на 1.При 1 модель строго держится контуров. Когда результат выглядит обведённым и деревянным, опустите до 0.6: контуры останутся, а внутри них модель рисует свободнее.
Когда он действует: начало и конец (чтение)
start_percentиend_percentговорят, в какой части шагов действует ControlNet, от 0 до 1. Первые шаги задают композицию, последние детали.end_percent0.8: контуры закрепляются рано, а последние шаги свободно рисуют детали;start_percent0.2: модель сама раскладывает картинку и только потом следует контурам.
Другие виды управления (чтение)
Каждый ControlNet читает свой вид картинки: canny и lineart читают линии, depth карту глубины, openpose скелет человека, scribble грубый набросок. Сам ComfyUI находит только контуры; остальные управляющие картинки делает пак comfyui_controlnet_aux, смотрите урок «ControlNet по карте глубины».
Несколько ControlNet могут действовать сразу: поставьте две ноды Apply ControlNet цепочкой, выходы первой во входы второй. ControlNet «union» читает несколько видов в одном файле.
Для Flux, SD3.5 и Qwen-Image в ComfyUI есть шаблоны со своими ControlNet.
- Граф готов (чтение)
Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.
Что попробовать: одни контуры с двумя разными описаниями; strength 0.4.
Что проверяет урок
Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:
- Шаг 2, Нужен граф с картинкой:
- нода Load Checkpoint.
- нода CLIP Text Encode (Prompt).
- нода CLIP Text Encode (Prompt).
- нода KSampler.
- нода VAE Decode.
- нода Save Image или Preview Image.
CLIPноды Load Checkpoint во входclipноды CLIP Text Encode (Prompt) (промпт) (можно через Load LoRA или CLIP Set Last Layer).CLIPноды Load Checkpoint во входclipноды CLIP Text Encode (Prompt) (негатив) (можно через Load LoRA или CLIP Set Last Layer).MODELноды Load Checkpoint во входmodelноды KSampler (можно через Load LoRA или LoraLoaderModelOnly или DifferentialDiffusion или ModelSamplingAuraFlow или ModelSamplingFlux или CFGNorm или IPAdapter Unified Loader или IPAdapter или IPAdapterAdvanced или IPAdapterStyleComposition).CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды KSampler (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды KSampler (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).LATENTноды KSampler во входsamplesноды VAE Decode.VAEноды Load Checkpoint во входvaeноды VAE Decode.IMAGEноды VAE Decode во входimagesноды Save Image или Preview Image.
- Шаг 3, Загрузите ControlNet:
- нода Load ControlNet Model.
control_net_nameноды Load ControlNet Model: значение выбрано.- файл в поле
control_net_nameноды Load ControlNet Model сделан для семейства файла из поляckpt_nameноды Load Checkpoint. Почему: loRA и ControlNet работают только с тем семейством моделей, для которого сделаны; с другим они ничего не дают или портят картинку.
- Шаг 4, Загрузите картинку-образец:
- нода Load Image.
imageноды Load Image: значение выбрано.
- Шаг 5, Найдите контуры:
- нода Detect Edges (Canny).
IMAGEноды Load Image во входimageноды Detect Edges (Canny) (можно через Upscale Image или Upscale Image By или Scale Image to Total Pixels или FluxKontextImageScale или Resize Image или ImageResizeKJv2 или Pad Image for Outpainting).
- Шаг 6, Примените ControlNet:
- нода Apply ControlNet.
CONDITIONINGноды CLIP Text Encode (Prompt) (промпт) во входpositiveноды Apply ControlNet (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).CONDITIONINGноды CLIP Text Encode (Prompt) (негатив) во входnegativeноды Apply ControlNet (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).CONTROL_NETноды Load ControlNet Model во входcontrol_netноды Apply ControlNet.IMAGEноды Detect Edges (Canny) во входimageноды Apply ControlNet.
- Шаг 7, Отдайте сэмплеру новые описания:
positiveноды Apply ControlNet во входpositiveноды KSampler (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).negativeноды Apply ControlNet во входnegativeноды KSampler (можно через Apply ControlNet или InpaintModelConditioning или Conditioning (Combine) или ConditioningSetArea или ConditioningSetAreaPercentage или ConditioningSetMask или Apply Style Model или FluxGuidance или ConditioningZeroOut или FluxKontextMultiReferenceLatentMethod).
- Шаг 8, Задайте силу:
strengthноды Apply ControlNet: от 0.3 до 1; «Сделать за меня» ставит 1.
Что дальше
Этот урок продолжают: ControlNet по карте глубины.