Skip to content
ComfyUI Wiki
Помогите создать лучшую базу знаний ComfyUI Стать спонсором

Урок по ControlNet: Использование ControlNet в ComfyUI для точного управляемого создания изображений

В процессе генерации изображений с помощью ИИ точно управлять результатом — непростая задача. Обычно требуется множество попыток, чтобы получить удовлетворительный результат, но с появлением ControlNet эта проблема была эффективно решена.

ControlNet предлагает более десятка моделей управляющих сетей, позволяя нам дополнительно контролировать стиль изображения, детали, позы персонажей, структуру сцены и многое другое. Эти возможности делают генерацию изображений ИИ более управляемой, и несколько моделей ControlNet могут использоваться одновременно для достижения лучших результатов.

Вы можете представить ControlNet как переводчика, который преобразует наше референсное изображение в инструкции, понятные ИИ, передавая их основной модели для генерации изображений, соответствующих нашим требованиям.

openpose ControlNet

Например, на этом изображении, загрузив фото человека, извлекая условия управления через препроцессор, а затем применяя модель ControlNet, была сгенерирована картинка с человеком в той же позе.

В этом уроке мы рассмотрим:

  • Краткое введение в ControlNet
  • Принцип работы ControlNet в ComfyUI
  • Ресурсы, связанные с ControlNet
  • Состав типового рабочего процесса ControlNet в ComfyUI

В других статьях о ControlNet на ComfyUI-Wiki мы подробно расскажем, как использовать отдельные модели ControlNet с примерами.

Краткое введение в ControlNet

ControlNet — это модель генерации с управляемыми условиями на основе диффузионных моделей (например, Stable Diffusion), впервые предложенная Lvmin Zhang, Maneesh Agrawala и другими в 2023 году. Эта модель значительно улучшает управляемость и восстановление деталей при генерации изображений за счёт введения мультимодальных входных условий (например, детектирование контуров, карты глубины, ключевые точки позы и т.д.).

Вот некоторые полезные ссылки по ControlNet:

Основные типы управления в ControlNet

С развитием ControlNet и вкладом сообщества, сейчас поддерживается более десятка типов управления. Ниже приведены некоторые из них, каждый подходит для разных задач.

1. Линейные типы управления

  • Canny: Генерирует детализированные линии через детектирование контуров, идеально для точного повторения структуры оригинала.
  • MLSD: Детектирует только прямые линии, подходит для архитектуры, дизайна интерьеров и т.д.
  • Lineart: Новое поколение распознавания линий, более точное, чем Canny, поддерживает извлечение линий из аниме.
  • SoftEdge: Мягкое детектирование контуров, выделяет крупные линии, подходит для случаев, когда не требуется точное повторение.
  • Scribble/Sketch: Управление по наброску, поддерживает распознавание грубых контуров или генерацию по ручному эскизу.

2. Типы глубины и структуры

  • Depth: Определяет глубину между передним и задним планом по яркости, белые области ближе, чёрные — дальше.
  • NormalMap: Карта нормалей, управляет текстурой поверхности объекта (например, эффектом углублённых окон).
  • OpenPose: Распознавание скелетной позы, может автоматически определять или вручную редактировать позу человека.

3. Семантические и сегментационные типы

  • Segmentation: Семантическая сегментация, генерирует изображения на основе цветов, соответствующих категориям объектов (например, синий — небо).
  • Inpaint/локальная перерисовка: Изменяет отдельные части изображения, сохраняя стиль оригинала.

4. Типы стиля и цвета

  • Shuffle: Случайное перемешивание, перестраивает семантические элементы референса для создания разнообразных сцен.
  • Recolor: Перекрашивание чёрно-белых изображений, поддерживает автоматический или заданный по ключевым словам цвет.
  • IP-Adapter: Имитация стиля/лица, сохраняет согласованность в сгенерированном изображении.

5. Функциональные расширения

  • InstructP2P: Изменяет изображение по текстовой инструкции (например, сделать дом “в огне”).
  • Instant_ID: AI-замена лиц, сохраняет согласованность лица и поддерживает слияние нескольких изображений.
  • Tile/Blur: Повышение чёткости и детализации размытых изображений.

Не совместимы с специализированными препроцессорами OpenPose для лица/рук и некоторыми семантическими препроцессорами.

Принцип работы ControlNet в ComfyUI

В ComfyUI ControlNet работает как контроллер условий и обычно включает следующие этапы. Из-за множества версий моделей ControlNet в ComfyUI конкретный процесс может отличаться. Здесь мы рассмотрим пример с моделью ControlNet V1.1, а в других уроках добавим конкретные рабочие процессы.

  1. Предобработка изображения

Нужно загрузить референсное изображение, и препроцессор ControlNet извлечёт ключевые признаки (например, контуры, линии, позы). Например, изображение человека в начале статьи становится условиями управления OpenPose.

  1. Внедрение условий

ControlNet преобразует извлечённые признаки в “сигналы условий”, которые передаются сэмплеру (например, K sampler). Эти сигналы говорят ИИ: “При генерации изображения старайся соответствовать линиям/позам/структуре референса”.

  1. Генерация изображения сэмплером

Сэмплер (например, K sampler) при удалении шума учитывает сигналы условий от ControlNet, в итоге создавая изображение, соответствующее как текстовому описанию, так и признакам референса.

Рабочий процесс ControlNet

Рабочий процесс ControlNet без препроцессора

В этом разделе представлен типовой рабочий процесс ControlNet для SD1.5 без сторонних плагинов.

1. Подготовка файлов моделей

Для использования этого процесса убедитесь, что у вас установлено следующее:

💡

В ComfyUI модели ControlNet для разных версий моделей рисования несовместимы друг с другом. Например, модели ControlNet для SD1.5 нельзя использовать с моделями Flux и наоборот. Поэтому рекомендуется создавать отдельные папки для разных версий:

  • ComfyUI/models/checkpoints/sd1.5
  • ComfyUI/models/controlnet/sd1.5

2. Рабочий процесс и материалы

Нажмите на кнопку ниже, чтобы скачать соответствующий рабочий процесс, затем перетащите его в интерфейс ComfyUI или используйте меню Workflows -> Open(Ctrl+O) для загрузки.

Следующее изображение будет использоваться как референс, пожалуйста, скачайте и сохраните его:

Openpose Reference Image

3. Запуск рабочего процесса

Следуйте номерам на изображении, чтобы выполнить соответствующие действия и завершить рабочий процесс ControlNet.

SD1.5 ControlNet Basic Workflow

  1. Убедитесь, что модель SD1.5 загружена в узле Load Checkpoint
  2. Убедитесь, что модель control_v11p_sd15_openpose.pth распознана и загружена в узле Load ControlNet Model
  3. Загрузите референсное изображение в узел Load Image
  4. После выполнения вышеуказанных действий нажмите кнопку Run или используйте сочетание клавиш Ctrl(cmd) + Enter для генерации изображения

Попробуйте изменить различные параметры в узле Apply ControlNet и сгенерировать изображения чтобы увидеть, как разные значения Strength, start_percent и end_percent влияют на результат.

4. Объяснение рабочего процесса

Если сравнить этот процесс с нашим рабочим процессом text-to-image: ComfyUI Text-to-Image Workflow

Вы заметите, что основное отличие — теперь мы подаём соответствующие условия в узел Apply ControlNet, добавляя условия управления, а затем передаём их на вход condition узла KSampler.

Можно увидеть, что персонаж сгенерирован хорошо, и, кроме того, типичные ошибки с конечностями в моделях SD1.5 в этом процессе не появляются.

После выполнения вышеуказанных действий попробуйте изменить размер узла Empty Latent Image, например, установить 512x512, и снова сгенерировать изображение, чтобы увидеть разницу между результатом и референсом.

Changing Empty Latent Image Size in ComfyUI

Вы должны заметить, что итоговое изображение использует только центральную часть референса. Кроме того, для разных типов референсов нужны разные модели ControlNet. Например, для OpenPose требуется control_v11p_sd15_openpose.pth, а для Canny — control_v11p_sd15_canny.pth.

В этом процессе может возникнуть вопрос: используемое нами референсное изображение (OpenPose) не так уж распространено, можно ли использовать более обычные изображения? Для этого нужны препроцессоры. Перейдём к рабочему процессу с препроцессором в следующем разделе.

Рабочий процесс ControlNet с препроцессором

Что такое препроцессор?

Например, на изображении ниже мы использовали препроцессор Canny в ComfyUI, который извлекает контурные признаки изображения.

ControlNet Preprocessor

Это и есть задача препроцессора: преобразовать наше референсное изображение (фото, лайнарт, набросок и т.д.) в структурированную карту признаков, чтобы модель ControlNet могла понять и направлять результат генерации.

Существуют разные типы препроцессоров, например:

  • Лайнарт-препроцессоры (canny, lineart): извлекают контуры, создавая чёрно-белый лайнарт.
  • Препроцессоры карты глубины (depth_midas): вычисляют уровни глубины объектов, создавая градацию серого.
  • Препроцессоры позы (openpose): распознают ключевые точки скелета, создавая “палочного человечка”.

Однако в ComfyUI по умолчанию есть только препроцессор Canny, поэтому для других типов нужно использовать сторонние плагины. Далее рассмотрим соответствующий рабочий процесс.

1. Установка необходимых плагинов

Для этого урока требуется плагин ComfyUI ControlNet Auxiliary Preprocessors.

Инструкцию по установке плагинов смотрите в руководстве по установке пользовательских узлов ComfyUI.

2. Подготовка файлов моделей

В этом примере можно использовать те же файлы моделей, что и в предыдущем разделе:

3. Рабочий процесс и материалы для входного изображения

Скачайте рабочий процесс по ссылке ниже:

После запуска ComfyUI перетащите файл процесса или используйте сочетание клавиш Ctrl+O для открытия.

Пожалуйста, скачайте изображение ниже и загрузите его в узел Load Image: OpenPose ControlNet input

SD1.5 OpenPose ControlNet Workflow Img

  1. Загрузите входное изображение в узел 1 Load Image
  2. Выберите установленную модель в узле 2 Load Checkpoint
  3. Выберите модель control_v11f1p_sd15_openpose.pth в узле 3 Apply ControlNet
  4. Используйте Queue или сочетание клавиш Ctrl+Enter для запуска процесса и генерации изображения

4. Объяснение рабочего процесса

Этот процесс по сравнению с предыдущим просто добавляет этап предобработки изображения. Мы подаём изображение в препроцессор OpenPose Pose из ComfyUI ControlNet Auxiliary Preprocessors, завершая предобработку.

Вот такое простое введение в ControlNet в ComfyUI. В следующих уроках мы продолжим знакомить с другими моделями ControlNet и приведём соответствующие примеры.