MOSS-Image AnyPaint: инпейтинг и аутпейтинг по маске в ComfyUI

ComfyUI Wikinews

Адаптер ранга 32 даёт MOSS-Image-Base инпейтинг по произвольной маске, аутпейтинг за один проход и смешанные правки, плюс узлы ComfyUI и 12 примеров.

13 ноября yijunwang2 опубликовал MOSS AnyPaint, адаптер ранга 32 для MOSS-Image-Base, который превращает базовую модель в универсальный редактор масок: инпейтинг на том же холсте, аутпейтинг за один проход, несколько разрозненных областей правки, узкие структуры и маски, выходящие за край источника. Это один файл весов плюс небольшой рантайм, а отдельный набор узлов ComfyUI, alexw5702-afk/moss-anypaint, вышел в тот же день вместе с подходящим рабочим процессом. Адаптер является неофициальным релизом сообщества и не одобрен OpenMOSS.

Портрет, смешанный инпейтинг и аутпейтинг с MOSS AnyPaint

Один запрос: пальто перегенерируется внутри источника, и одновременно холст расширяется, поэтому стена галереи и пол вокруг неё тоже генерируются. Все примеры в этой статье начинаются с синтетического источника, отрендеренного базовой моделью Krea 2, а не с фотографии. Источник: yijunwang2/moss-anypaint

Зачем маска, если MOSS-Image уже умеет редактировать

Собственный путь редактирования MOSS-Image управляется инструкциями: вы подаёте ему референсное изображение и предложение. Рассмотренные здесь LoRA для редактирования устроены так же: от LoRA редактирования ранга 64 до Edit HQ v5 и семи control LoRA. Все они перегенерируют весь кадр, а что изменится, решает промпт.

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

Контракт входных данных

Рантайм принимает один RGB-источник, одну бинарную маску, выходной холст со сторонами, кратными 16, необязательные границы источника (x0, y0, x1, y1) в пикселях выхода и промпт:

  • Белый генерирует, чёрный сохраняет. Значения выше 0.5 считаются генерацией, всё остальное: сохранением; серые или полупрозрачные маски не работают как частичная сила.
  • Маска размером с источник следует за источником. Маска размером с холст используется как есть, а если оба размера совпадают, побеждают координаты холста. Любой другой размер маски отклоняется.
  • Область за пределами рамки источника всегда генерируется. Для аутпейтинга достаточно добавить отступы к холсту, маску вручную рисовать не нужно, а внутреннюю маску можно совместить с этим в одном запросе.
  • Промпт описывает готовое изображение, а не операцию. Чтобы убрать кружку, вы описываете стол и фон, которые хотите сохранить.

Холст с маской кодируется как единственный референс с ограничением максимальной стороны в 384 пикселя, а его позиционные (rotary) координаты охватывают весь целевой холст, поэтому модель видит цельную картинку, а не вставленный фрагмент. Известные пиксели также хранятся в полном разрешении в отдельной копии и восстанавливаются после каждого шага потока, а граница маски остаётся свободной для смешивания. Внешние швы получают полосу перерисовки шириной 32 пикселя внутрь; внутренние маски применяются точно. Возвращаемое изображение представляет собой сырой выход модели: никакого скрытого наложения источника сверху нет.

Одна деталь важна для тех, кто привык к референсам MOSS-Image: текстовый энкодер видит только ваш промпт. Изображение полностью обрабатывается путём референса, а VLM-кодирование референса отключено.

Как выглядят примеры

Три примера из релиза, каждый показан как источник, точная маска и результат:

Акварельный источникАкварельная маскаАкварельный результат
ИсточникМаскаАутпейтинг вниз за один проход
Источник с лампойМаска лампыРезультат с лампой
ИсточникУзкая полоса вдоль кабеляКабель перерисован в оранжевом
Источник с портретомМаска портретаРезультат с портретом
ИсточникВнутренняя маска плюс полоса за краемОдежда и холст изменены вместе

Случай с узким кабелем самый интересный: маска шириной в несколько пикселей, а тонкие детали как раз то место, где методы на основе масок обычно ломаются, потому что VAE и токенизатор патчей их сглаживают. Случай с акварелью идёт в обратную сторону: изображение с соотношением сторон около 1:1 расширяется до вертикальной композиции за один шаг.

Контактный лист со всеми двенадцатью случаями AnyPaint

Все двенадцать случаев, в каждом ряду источник, его точная бинарная маска и результат. Интерьерные и уличные сцены, объекты, иллюстрации, 3D и люди. Источники: yijunwang2/moss-anypaint

Запуск в ComfyUI

Пакет узлов повторяет интерфейс более ранних узлов Krea 2 AnyPaint того же автора, поэтому те, кто запускал тот рабочий процесс, узнают раскладку: AnyPaint Prepare принимает исходное изображение, MASK и отступы по сторонам, MOSS AnyPaint Encode принимает промпт, а MOSS AnyPaint Model Patch стоит между загрузчиками и KSampler.

Поставляемый рабочий процесс собран так:

УзелЗначение
Загрузить модель диффузииmoss_image_base_int8_convrot.safetensors
Загрузить CLIPqwen3.5_9b_int8_convrot.safetensors, type moss_image
Загрузить VAEflux2-vae_small.safetensors
LoraLoaderModelOnlymoss_anypaint_rank32.safetensors на 1.0
LoraLoaderModelOnlylora_dmd2.safetensors на 1.0
AnyPaint Prepareотступы 0/0/0/0, сторона референса 384, полоса перерисовки 32
KSampler8 шагов, CFG 1, euler, simple

Базовый checkpoint, текстовый энкодер и VAE берутся из репака Comfy-Org MOSS-Image; адаптер DMD2: это lora_dmd2.safetensors из репозитория Base 8-step DMD2, а не более старый lora.safetensors из того же репозитория. Адаптер AnyPaint: один файл размером 142 MiB.

Для инпейтинга оставьте все четыре значения отступов равными 0 и подайте маску из того, что вы уже используете: SAM или другой узел сегментации, правку в Редакторе масок на источнике или ImageToMask на чёрно-белом изображении. Поменяйте подключение, если узел-семплер возвращает инвертированную маску, поскольку контракт строго требует белого на входе. Для аутпейтинга задайте в пикселях сторону, которую хотите расширить, а остальные оставьте на 0; холст округляется вверх до кратных 16, поэтому у невыровненного источника может появиться несколько лишних пикселей справа и снизу.

Ограничения

  • Большая доля генерируемой области может притягивать посторонние объекты или структуры.
  • Очень тонкие элементы маски огрубляются VAE и токенизатором патчей, поэтому волосы, провода и контуры: сложные случаи.
  • Неоднозначные промпты меняют больше контекста рядом с внешней полосой перерисовки, чем внутри маски.
  • Маски должны покрывать весь объект или край, который нужно заменить; пропущенный контур оставляет кайму.
  • Количество мелких объектов, точные позиции и геометрия могут меняться от seed.
  • Пиксели вне маски всё равно могут немного отличаться, поскольку весь кадр проходит через декодирование VAE.
  • Опубликованные автором измерения относятся только к поставляемой конфигурации: Base с 8-шаговым адаптером DMD2, 8 шагов, CFG 1, shift 5. Другие семплеры, число шагов и точности не тестировались.

Доступность

Адаптер и его Python-рантайм лежат на Hugging Face, включая example.py, код пайплайна и контрольные суммы SHA256. Узлы ComfyUI находятся в alexw5702-afk/moss-anypaint с релизами вплоть до v0.2.0 от 14 ноября. Существующие сохранённые рабочие процессы сохраняют свои значения отступов, поэтому старая установка не подхватит новые значения по умолчанию.

Страница базовой модели MOSS-Image находится здесь, а подход на основе маски дополняет LoRA для редактирования по инструкциям: путь инструкций проще составить, путь маски проще контролировать.

Комментарии

Войдите через GitHub, чтобы участвовать в обсуждении.

Загрузка комментариев…
MOSS-Image AnyPaint: инпейтинг и аутпейтинг по маске в ComfyUI | ComfyUI Wiki