MOSS-Image AnyPaint: инпейтинг и аутпейтинг по маске в ComfyUI
Адаптер ранга 32 даёт MOSS-Image-Base инпейтинг по произвольной маске, аутпейтинг за один проход и смешанные правки, плюс узлы ComfyUI и 12 примеров.
13 ноября yijunwang2 опубликовал MOSS AnyPaint, адаптер ранга 32 для MOSS-Image-Base, который превращает базовую модель в универсальный редактор масок: инпейтинг на том же холсте, аутпейтинг за один проход, несколько разрозненных областей правки, узкие структуры и маски, выходящие за край источника. Это один файл весов плюс небольшой рантайм, а отдельный набор узлов ComfyUI, alexw5702-afk/moss-anypaint, вышел в тот же день вместе с подходящим рабочим процессом. Адаптер является неофициальным релизом сообщества и не одобрен OpenMOSS.
Один запрос: пальто перегенерируется внутри источника, и одновременно холст расширяется, поэтому стена галереи и пол вокруг неё тоже генерируются. Все примеры в этой статье начинаются с синтетического источника, отрендеренного базовой моделью 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 расширяется до вертикальной композиции за один шаг.
Все двенадцать случаев, в каждом ряду источник, его точная бинарная маска и результат. Интерьерные и уличные сцены, объекты, иллюстрации, 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 |
| Загрузить CLIP | qwen3.5_9b_int8_convrot.safetensors, type moss_image |
| Загрузить VAE | flux2-vae_small.safetensors |
| LoraLoaderModelOnly | moss_anypaint_rank32.safetensors на 1.0 |
| LoraLoaderModelOnly | lora_dmd2.safetensors на 1.0 |
| AnyPaint Prepare | отступы 0/0/0/0, сторона референса 384, полоса перерисовки 32 |
| KSampler | 8 шагов, 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, чтобы участвовать в обсуждении.