Это пользовательские узлы для собственной реализации ComfyUI.
Мой вклад ограничивается адаптацией ComfyUI, и вся заслуга принадлежит авторам статей.
16 мая 2024 г. Внутренняя переработка для улучшения совместимости с другими узлами. РАУНет реализован.
12 мая 2024 г. Узел CutForInpaint, см. пример.
11 мая 2024 г. Реализован пакет изображений. Вы даже можете добавить BrushNet в рабочий процесс AnimateDiff vid2vid, но они не работают вместе — это разные модели, и обе пытаются исправить UNet. Добавил еще несколько примеров.
6 мая 2024 г. Реализована модель PowerPaint v2. После обновления ваш рабочий процесс, вероятно, не будет работать. Не паникуйте! Проверьте параметр end_at
BrushNode, если он равен 1, измените его на какое-нибудь большое число. О параметрах читайте в разделе «Использование» ниже.
2 мая 2024 г. BrushNet SDXL запущен. Однако для этого требуется позитивная и негативная обработка, поэтому рабочий процесс немного меняется, см. пример.
28 апреля 2024 г. Очередная переделка, извините за неудобства. Но теперь BrushNet является родным для ComfyUI. IPAdapter Plus знаменитого Cubiq теперь работает с BrushNet! Надеюсь... :) Пожалуйста, сообщайте о найденных ошибках.
18 апреля 2024 г. Полная переработка, библиотеки специальных diffusers
больше нет. Возможно использование моделей LoRA.
11 апреля 2024 г. Первоначальная фиксация.
Клонируйте репозиторий в каталог custom_nodes
и установите требования:
git clone https://github.com/nullquant/ComfyUI-BrushNet.git
pip install -r requirements.txt
Контрольные точки BrushNet можно скачать здесь.
Контрольная точка в segmentation_mask_brushnet_ckpt
предоставляет контрольные точки, обученные на BrushData, которая имеет предварительную сегментацию (маска имеет одинаковую форму объектов). random_mask_brushnet_ckpt
предоставляет более общий ckpt для случайной формы маски.
segmentation_mask_brushnet_ckpt
и random_mask_brushnet_ckpt
содержат модели BrushNet для SD 1.5, а segmentation_mask_brushnet_ckpt_sdxl_v0
и random_mask_brushnet_ckpt_sdxl_v0
для моделей SDXL.
Вам следует поместить файлы diffusion_pytorch_model.safetensors
в папку models/inpaint
. Вы также можете указать папку inpaint
в файле extra_model_paths.yaml
.
Для PowerPaint вам необходимо скачать три файла. Оба diffusion_pytorch_model.safetensors
и pytorch_model.bin
отсюда должны быть помещены в папку models/inpaint
.
Также вам понадобится модель кодировщика текста SD1.5 model.safetensors
. Вы можете взять его отсюда или из другого места. Вы также можете использовать версию fp16. Его следует поместить в папку models/clip
.
Это структура моей папки models/inpaint
:
Ваш может быть другим.
Ниже приведен пример предполагаемого рабочего процесса. Рабочий процесс для примера можно найти в каталоге «example».
рабочий процесс
рабочий процесс
рабочий процесс
Иногда вывод и VAE нарушали изображение, поэтому вам нужно смешать изображение inpaint с оригиналом: рабочий процесс. Вы можете увидеть размытый и сломанный текст после зарисовки на первом изображении и то, как я предполагаю его исправить.
рабочий процесс
Тонкая грань ControlNet
рабочий процесс
рабочий процесс
Для масштабирования следует использовать базовую модель, а не BrushNet. То же самое относится и к кондиционированию. Скрытое масштабирование между BrushNet и KSampler не будет работать или даст странные результаты. Эти ограничения связаны со структурой BrushNet и ее влиянием на расчеты UNet.
рабочий процесс
Если у вас проблемы с OOM, вы можете использовать Evolved Sampling из AnimateDiff-Evolved:
рабочий процесс
В параметрах контекста установите context_length на количество изображений, которые можно загрузить во VRAM. Изображения будут обрабатываться частями такого размера.
рабочий процесс
Когда вы работаете с большим изображением, а ваша маска Inpaint маленькая, лучше вырезать часть изображения, поработать с ней, а затем снова смешать ее. Я создал узел для такого рабочего процесса, см. пример.
рабочий процесс
рабочий процесс
Часто бывает сложно полностью удалить объект, особенно если он находится спереди:
Попробуйте добавить описание объекта в отрицательную подсказку и описать пустую сцену, как здесь:
dtype
, по умолчанию — torch.float16
. Тип torch.d из BrushNet. Если у вас старый графический процессор или карта NVIDIA 16-й серии, попробуйте переключиться на torch.float32
. scale
, по умолчанию 1.0: «сила» BrushNet. Выходные данные BrushNet умножаются на scale
, прежде чем они добавляются к остатку в исходном unet.start_at
, по умолчанию 0: шаг, на котором BrushNet начинает применять.end_at
, по умолчанию 10000: шаг, на котором BrushNet прекращает применение.Вот примеры использования этих двух последних параметров.
CLIP
: PowerPaint CLIP, который должен быть передан из узла PowerPaintCLIPLoader.fitting
: степень подгонки PowerPaint.function
: функция PowerPaint, подробности см. на ее странице.save_memory
: если эта опция установлена, модуль внимания разбивает входной тензор на срезы для вычисления внимания в несколько этапов. Это полезно для экономии памяти в обмен на снижение скорости. Если у вас закончилась видеопамять или вы получили Error: total bytes of NDArray > 2**32
на Mac, попробуйте установить для этого параметра значение max
.При использовании определенных сетевых функций авторы PowerPaint рекомендуют добавлять в подсказку фразы:
empty scene blur
empty scene
empty scene
Многие пользователи ComfyUI используют собственные узлы генерации текста, узлы CLIP и множество других условий. Я не хочу ломать все эти узлы, поэтому не стал добавлять оперативное обновление и вместо этого положился на пользователей. Кроме того, мои собственные эксперименты показывают, что эти дополнения к подсказке не являются строго необходимыми.
Скрытое изображение может быть из узла BrushNet или нет, но оно должно быть того же размера, что и исходное изображение (деленное на 8 в скрытом пространстве).
Как positive
, так и negative
условия в узлах BrushNet и PowerPaint используются для вычислений внутри, а затем просто копируются на вывод.
Имейте в виду, что не все рабочие процессы и узлы будут работать с BrushNet из-за его структуры. Также вносите изменения модели до узлов BrushNet, а не после. Если вам нужна модель для работы с изображением после вывода BrushNet, используйте базовую модель (см. пример масштабирования ниже).
du_start
, по умолчанию равно 0: шаг, на котором начинает применяться изменение размера понижающей/повышающей дискретизации.du_end
, по умолчанию 4: шаг, на котором изменение размера понижающей/повышающей дискретизации перестает применяться.xa_start
, по умолчанию — 4: шаг, на котором начинает применяться изменение размера CrossAttention.xa_end
, по умолчанию — 10: шаг, на котором изменение размера CrossAttention перестает применяться.Примеры и пояснения можно найти здесь.
BrushNet имеет некоторые ограничения (из статьи):
К сожалению, из-за особенностей кода BrushNet некоторые узлы с ними несовместимы, поскольку мы пытаемся исправить те же функции ComfyUI.
Список известных несовместимых узлов.
Код основан на