Img2img и inpainting в ComfyUI: редактирование через SDXL

Img2img подходит, когда допустимо изменение всего изображения. Inpainting — когда нужно перегенерировать выбранный участок, сохранив остальное. Оба примера используют RealVisXL из инструкции по SDXL и обходятся без custom nodes.

Img2img: изменение всего изображения

Скачайте UI workflow img2img, импортируйте в ComfyUI, выберите RealVisXL_V5.0_fp16.safetensors и загрузите исходник через LoadImage.

Перед VAE-кодированием граф меняет размер и обрезает изображение по центру до 1024 × 1024. Проверьте кадрирование: у портрета или широкого предметного снимка могут исчезнуть важные края. Для другого соотношения сторон измените размеры, используйте значения, кратные восьми, и начните с умеренного числа пикселей. Размер latent берётся из закодированного изображения, а не из EmptyLatentImage.

Начальный denoise — 0.45. Меньшее значение обычно сохраняет больше от исходника, большее даёт модели свободу. Попробуйте 0.25, 0.45 и 0.70 с одинаковыми seed и промптом, затем сравните структуру и нежелательные изменения. Это точки для эксперимента, а не гарантированные уровни сходства. Число шагов — отдельный параметр; меняйте его отдельно.

В промпте описывайте желаемый результат: например, керамическую кружку на светлом каменном столе в тёплом вечернем свете. Фраза «изменить только ручку» не ограничивает редактирование пространственно: img2img получает всё изображение.

Inpainting: изменение выделенной области

Скачайте UI workflow inpainting. Подготовьте исходник примерно на 1024 пикселя с шириной и высотой, кратными восьми:

  1. Загрузите изображение в LoadImage и откройте редактор маски этого узла.
  2. Закрасьте область замены с небольшим запасом контекста и сохраните изменённый вход обратно в узел.
  3. Проверьте, что выход MASK подключён и к VAEEncodeForInpaint, и к финальному ImageCompositeMasked.
  4. Опишите замену в позитивном промпте. Начните с denoise 0.85 и batch size 1 из графа.
  5. Выполните генерацию и проверьте границу маски, освещение и остатки исходного объекта.

Белое значение маски означает «редактировать», нулевое — «сохранить». Узел загрузки получает маску из прозрачности изображения; редактор маски управляет этим представлением. У обычного непрозрачного RGB-файла нет области редактирования, пока вы её не создадите. Отдельная чёрно-белая картинка требует загрузки или преобразования в маску; она не становится автоматически выходом MASK исходного RGB-изображения.

В графе используется inpainting с noise mask на обычном SDXL, без специализированного inpainting-чекпойнта. grow_mask_by=6 расширяет область подготовки latent около границы. Финальное наложение использует исходную маску и сохраняет пиксели снаружи; при сильно отличающейся вставке на границе может появиться шов. Сначала настройте маску и промпт. Больший denoise сильнее заменяет содержимое, но может ухудшить согласованность с окружением.

Типичные проблемы

Симптом Что проверить
Правка не видна Пустую/инвертированную маску, слишком низкий denoise, кэш неизменённого графа
Меняется всё изображение Выбран img2img, обойдён финальный composite или маска покрывает всё
Вставка смещена или обрезана Размеры исходника, crop и совпадение маски с изображением
Резкая граница Край маски и освещение вставки; снаружи composite сохраняет исходные пиксели
OOM Размер исходника и batch size до добавления новых узлов

Сохраняйте исходник, маску, результат и workflow вместе. Для API сначала загрузите/создайте вход с маской в ComfyUI, затем экспортируйте обновлённый API-граф: путь изображения должен совпадать с серверным. См. API и серии генераций, хранение и все workflow.

Источники: img2img ComfyUI, inpainting и встроенные узлы масок.

Готовы запустить?

Запустить GPU-сервер