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 пикселя с шириной и высотой, кратными восьми:
- Загрузите изображение в
LoadImageи откройте редактор маски этого узла. - Закрасьте область замены с небольшим запасом контекста и сохраните изменённый вход обратно в узел.
- Проверьте, что выход MASK подключён и к
VAEEncodeForInpaint, и к финальномуImageCompositeMasked. - Опишите замену в позитивном промпте. Начните с denoise 0.85 и batch size 1 из графа.
- Выполните генерацию и проверьте границу маски, освещение и остатки исходного объекта.
Белое значение маски означает «редактировать», нулевое — «сохранить». Узел загрузки получает маску из прозрачности изображения; редактор маски управляет этим представлением. У обычного непрозрачного 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-сервер