Начал использовать эти расширения относительно недавно и пожалел, что не начал раньше. В разы облегчают работу с композицией и позами персонажей.
Углубляться в базовую информацию про Stable Diffusion в этой статье не буду. Все уже рассказано в предыдущих материалах, которые вы можете найти в моей подборке статей.
ContolNet
Расширение Control Net представляет собой полноценный метод контроля персонажа в кадре: его позу, мимику, расположение на картинке. Оно является практически обязательным для создания качественных иллюстраций, но взамен дополнительно потребляет ресурсы устройства. Да, работа теперь займет больше времени, но и результат вы будете контролировать лучше.
Говоря простым языком, ControlNet добавляет дополнительное условие, используя стороннее изображение, при генерации изображения любым из способов. И, используя различные настройки, можно выбирать что это будет за условие. Разницу разберем на примере двух основных режимов: openpose и canny.
Установка
- Заходим во вкладку Extansions
- Выбираем Install from URL
- Вставляем в строку «URL for extension's git repository» ссылку на расширение – https://github.com/Mikubill/sd-webui-controlnet
- Нажимаем Install и дожидаемся установки
- Заходим на страницу расширения на HuggingFace – https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main
- Дальше потребуются установить модели с расширением .pth (в первую очередь установите openpose и canny, остальные по желанию)
- Перезагружаем Web-интерфейс
- Если установка прошла успешно, то во вкладках txt2img и img2img у вас появится свернутая плашка ControlNet прямо над выбором скриптов.
Первая генерация
Разберемся с основными параметрами. Enable активирует контроль генерации. Low VRAM намеренно замедляет работу расширения, если у вас слабая видеокарта. Pixel Perfect заставит использовать ControlNet размеры изображения, которые вы указали в настройках генерации txt2img/img2img. Allow Preview показывает вам, как расширение обрабатывает ваше изображение.
Далее загружаем изображение и выбираем нужное сочетание препроцессора и модели. (Для предпросмотра результата нужно лишь нажать иконку "взрыва")
Canny – определяет выделяющиеся края. Отлично подходит для сохранения композиции. Для использования выбираем canny в двух пунктах.
Openpose – определяет ключевые точки человека и их позиции: голову, конечности и т.д. Подходит, если вам нужна только поза человека, без заднего плана, фигуры, причесок и одежды. У openpose есть несколько препроцессоров под разные цели, но все они используют одну и ту же модель с созвучным названием.
- OpenPose: глаза, нос, шея, плечи, локти, запястья, колени и лодыжки
- OpenPose_face: OpenPose и детали лица
- OpenPose_hand: OpenPose и руки с пальцами
- OpenPose_faceonly: только детали лица
- OpenPose_full: все вместе
- dw_openPose_full: улучшенная версия OpenPose_full, стоит использовать ее, вместо устаревшего аналога
Reference – новый метод в ControlNet, для которого не нужна собственная модель. Позволяет генерировать похожее изображение, частично эффект схож с работой во вкладке img2img.
- Reference adain: переносит стиль изображения
- Reference only: переносит изображение напрямую, как при работе в img2img
- Reference adain+attn: комбинация двух препроцессоров
Расширение для расширения
Также советую установить openpose-editor. Это расширение поможет редактировать полученные из openpose результаты.
https://github.com/huchenlei/sd-webui-openpose-editor
Расширение позволяет передвинуть какие-то точки, переместить человека на изображении, убрать ненужные ключевые точки, изменить размер холста и добавить точки, которые автоматически не определились.
Использование нескольких юнитов
Вы можете использовать генерацию с использованием нескольких изображений. Например, взять позу из одного, задний фон с другого, стиль с третьего.
Кратко об остальных препроцессорах
Расширение позволяет использовать еще не один препроцессор, сейчас я пробегусь по их основным возможностям. Более подробно вы можете изучить на своем опыте.
Depth – использует глубину изображений
- Depth Midas: в основном берет только передний план
- Depth Leres: больше деталей, но вместе с задним фоном
- Depth Leres++: еще больше деталей
- Zoe: нечто среднее между Midas и Leres
Line Art – похоже на canny, но стремится больше к стилю рисунка
MLSD – определяет прямые линии. Удобно для выделения стен, домов и заднего фона.
Normal Maps – работает аналогично Depth, но изображение более объемное.
RegionalPromter
Следующие расширение ориентировано в первую очередь на контроль разных частей изображения. Его можно использовать как вместе с другими расширениями, так и в одиночку. Оно разделяет генерируемое изображение на части и к каждой из них применяет определенный промпт.
Установка
Установка аналогична любому другому расширению и не требует никаких дополнительных действий.
Ссылка, нужная для установки – https://github.com/hako-mikan/sd-webui-regional-prompter
После успешной установки над Scripts появится Regional Prompter
Первая генерация
Нажимаем Active и переходим к настройкам.
Выбираем нужный режим основной ориентации Columns/Rows.
Base prompt: создает базовый промпт, который будет применяться для всех областей. Полезно, если хотите добавить что-то ко всем областям. Можно регулировать его силу при помощи коэффициента Base Ratio.
Common prompt: то же самое, но нельзя контролировать "силу"
Common negative prompt: то же самое, что и предыдущие, но только для негативного промпта
Работа через Matrix
В строчке Divide Ratio задаем необходимые соотношения.
Как это работает:
- Запятая – отделяет регионы в одном ряду
- Точка с запятой – отделяет ряды
- При работе с одним рядом каждая цифра отвечает за соотношение регионов между собой
- При работе в несколько рядов первая цифра отвечает за соотношение высоты рядов, последующие цифры работают как прежде
Для визуализации написанной вами строки нажмите кнопку «visualize and make template». Если результат вас устраивает, то из строчки template копируем полученные ключевые слова.
Теперь перед каждым ключевым словом следует прописать промпт, ответственный за этот регион (последний регион ничем не заканчивается).
Работа через Mask
- Переходим во вкладку Mask
- Настраиваем размер нашего изображения и нажимаем Create mask area
- Появляется белое полотно, на котором можно вручную нарисовать разные регионы
- После выделения нужной области, нажимаем Draw region+show mask
- После создания региона автоматически выбирается создание нового региона. Если нужно будет отредактировать, то на слайдере Region выбираем номер нужного нам и дорисовываем. Чтобы стереть часть региона, нужно выбрать номер региона «-1».
- Дальше в промпте при помощи BREAK прописываем каждый регион по порядку. Будьте внимательны, если не активирован Base prompt, то вся незакрашенная область будет приписана к первому региону.
Работа через Prompt
Позволяет прикрепить определенный prompt к нужным целям. Удобно, чтобы окрасить конкретные детали. Подходит, чтобы точно задать определенные элементы.
<lora:CyberPunkAI:1> 3/4 photo, (cyberpunk city, street, night background: 1.3), beautiful girl, neon dress BREAK
green, neon dress
Если попробовать ввести то же самое без использования Regional Prompter, то придется потратить много времени, чтобы добиться нужного результата.
<lora:CyberPunkAI:1> 3/4 photo, (cyberpunk city, street, night background: 1.3), beautiful girl, green neon dress
Конструкция промпта строится следующим образом:
baseprompt target1 target2 BREAK
effect1, target1 BREAK
effect2 ,target2
В первой строчке прописывается базовый промпт изображения. После отсечки словом BREAK ниже можно задать особенности любого использованного слова. На примере промпта из начала раздела, мы хотим добавить к ключевому слову neon dress обязательные параметры. Для этого прописываем green и закрываем строчку соответствующим ключевым словом neon dress. Это можно провернуть снова и снова.
В настройках режима Prompt есть параметр threshold, который отвечает за размер маски. Чем он меньше, тем больше маска.