MOSS-Image AnyPaint: relleno con máscara y outpainting en ComfyUI
Un adaptador rank-32 añade a MOSS-Image-Base relleno con máscaras arbitrarias, outpainting en una pasada y ediciones mixtas, con nodos de ComfyUI, un flujo listo y 12 casos.
El 13 de noviembre, yijunwang2 publicó MOSS AnyPaint, un adaptador de rango 32 para MOSS-Image-Base que convierte el modelo base en un editor de máscara general: relleno inteligente en el mismo lienzo, outpainting en una sola pasada, varias regiones de edición desconectadas, estructuras estrechas y máscaras que cruzan el borde de la fuente. Se trata de un único archivo de pesos más un pequeño runtime, y un conjunto independiente de nodos de ComfyUI, alexw5702-afk/moss-anypaint, se publicó el mismo día con un flujo de trabajo a juego. El adaptador es un lanzamiento no oficial de la comunidad y no está respaldado por OpenMOSS.
Una sola petición: el abrigo se regenera dentro de la fuente y el lienzo se amplía al mismo tiempo, de modo que la pared de la galería y el suelo a su alrededor también se generan. Todos los ejemplos de este artículo parten de una fuente sintética renderizada con el modelo base Krea 2, no de una fotografía. Fuente: yijunwang2/moss-anypaint
¿Por qué una máscara, si MOSS-Image ya edita?
La ruta de edición propia de MOSS-Image está guiada por instrucciones: le entregas una imagen de referencia y una frase. Los LoRA de edición ya tratados aquí siguen la misma forma, desde el LoRA de edición de rango 64 hasta Edit HQ v5 y los siete LoRA de control. Todos ellos regeneran el fotograma completo y dejan que el prompt decida qué cambia.
AnyPaint va en la dirección contraria. Indicas exactamente qué píxeles pueden cambiar mediante una máscara binaria, y el runtime mantiene todo lo demás en el nivel de ruido que espera el paso de muestreo. La eliminación de objetos, el cambio de ropa, el recolorido de cables y la extensión del lienzo dejan de ser problemas de ajuste del prompt y pasan a ser problemas de máscara, que es justo lo que ya producen los flujos de trabajo de relleno inteligente y outpainting existentes en ComfyUI.
El contrato de entrada
El runtime acepta una fuente RGB, una máscara binaria, un lienzo de salida cuyos lados sean múltiplos de 16, una caja delimitadora de la fuente opcional (x0, y0, x1, y1) en píxeles de salida, y un prompt:
- El blanco genera, el negro conserva. Los valores superiores a 0.5 cuentan como generar y todo lo demás como conservar; las máscaras grises o semitransparentes no actúan como intensidad parcial.
- Una máscara del tamaño de la fuente sigue a la fuente. Una máscara del tamaño del lienzo se usa tal cual y, cuando ambos tamaños coinciden, prevalecen las coordenadas del lienzo. Cualquier otro tamaño de máscara se rechaza.
- Fuera de la caja de la fuente siempre se genera. Basta con rellenar el lienzo para hacer outpainting, sin necesidad de una máscara dibujada a mano, y una máscara interna puede combinarse con ello en la misma petición.
- El prompt describe la imagen finalizada, no la operación. Para eliminar una taza describes la mesa y el fondo que quieres conservar.
El lienzo enmascarado se codifica como una única referencia limitada a un borde máximo de 384 píxeles, y sus coordenadas rotatorias abarcan todo el lienzo objetivo, de modo que el modelo ve una imagen coherente en lugar de un parche pegado. Los píxeles conocidos también se conservan a resolución completa en una copia aparte y se restauran después de cada paso del flujo, dejando el límite de la máscara libre para mezclarse. Las costuras exteriores reciben una banda de redibujado de 32 píxeles hacia dentro; las máscaras internas se aplican con exactitud. La imagen devuelta es salida pura del modelo: no hay una composición oculta de la fuente encima.
Un detalle importa a quien esté acostumbrado a las referencias de MOSS-Image: el codificador de texto solo ve tu prompt. El lado de la imagen lo gestiona por completo la ruta de referencia, con la codificación VLM de la referencia desactivada.
Cómo son los casos
Tres ejemplos del lanzamiento, cada uno mostrado como fuente, máscara exacta y resultado:
![]() | ![]() | ![]() |
|---|---|---|
| Fuente | Máscara | Outpainting hacia abajo, una sola pasada |
![]() | ![]() | ![]() |
|---|---|---|
| Fuente | Una banda estrecha a lo largo del cable | Cable redibujado en naranja |
![]() | ![]() | ![]() |
|---|---|---|
| Fuente | Máscara interna más una banda fuera del borde | Prenda y lienzo cambiados a la vez |
El caso del cable estrecho es el interesante: la máscara tiene unos pocos píxeles de ancho, y los rasgos finos son justo donde suelen fallar los métodos basados en máscaras, porque el VAE y el tokenizador de parches los embotan. El caso de la acuarela va en la dirección opuesta: extiende una pintura de proporción casi 1:1 a una composición vertical en un solo paso.
Los doce casos, cada fila una fuente, su máscara binaria exacta y el resultado. Escenas de interior y exterior, objetos, ilustración, 3D y sujetos humanos. Fuentes: yijunwang2/moss-anypaint
Ejecutarlo en ComfyUI
El paquete de nodos reutiliza la interfaz de los nodos anteriores Krea 2 AnyPaint del autor, así que quien haya ejecutado ese flujo de trabajo reconocerá la disposición: AnyPaint Prepare recibe la imagen fuente, una MASK y el relleno por lado; MOSS AnyPaint Encode recibe el prompt; y MOSS AnyPaint Model Patch se sitúa entre los cargadores y KSampler.
El flujo de trabajo incluido está conectado así:
| Nodo | Valor |
|---|---|
| Cargar modelo de difusión | moss_image_base_int8_convrot.safetensors |
| Cargar CLIP | qwen3.5_9b_int8_convrot.safetensors, tipo moss_image |
| Cargar VAE | flux2-vae_small.safetensors |
| LoraLoaderModelOnly | moss_anypaint_rank32.safetensors a 1.0 |
| LoraLoaderModelOnly | lora_dmd2.safetensors a 1.0 |
| AnyPaint Prepare | relleno 0/0/0/0, borde de referencia 384, banda de redibujado 32 |
| KSampler | 8 pasos, CFG 1, euler, simple |
El checkpoint base, el codificador de texto y el VAE provienen del repaquete MOSS-Image de Comfy-Org; el adaptador DMD2 es lora_dmd2.safetensors del repositorio Base 8-step DMD2, no el lora.safetensors más antiguo del mismo repositorio. El adaptador AnyPaint es un único archivo de 142 MiB.
Para el relleno inteligente, mantén los cuatro valores de relleno en 0 y alimenta la máscara desde lo que ya uses: SAM u otro nodo de segmentación, una edición en el Editor de máscara sobre la fuente, o un ImageToMask sobre una imagen en blanco y negro. Cambia la conexión si un nodo muestreador devuelve una máscara invertida, ya que el contrato exige estrictamente blanco a la entrada. Para el outpainting, define en píxeles el lado que quieres extender y deja el resto en 0; el lienzo se ajusta hacia arriba a múltiplos de 16, así que una fuente no alineada puede ganar algunos píxeles extra a la derecha y abajo.
Limitaciones
- Las fracciones generadas grandes pueden atraer sujetos o estructuras no relacionados.
- El VAE y el tokenizador de parches engrosan los rasgos muy finos de la máscara, por lo que el pelo, los cables y los contornos son los casos difíciles.
- Los prompts ambiguos cambian más contexto cerca de la banda de redibujado exterior que dentro de la máscara.
- Las máscaras deben cubrir todo el objeto o borde que quieres reemplazar; un contorno omitido deja un halo residual.
- El recuento de objetos pequeños, las posiciones exactas y la geometría pueden variar con la semilla.
- Los píxeles no enmascarados aún pueden diferir ligeramente, porque todo el fotograma pasa por la decodificación del VAE.
- Las mediciones que publica el autor cubren solo la configuración incluida: Base con el adaptador DMD2 de 8 pasos, 8 pasos, CFG 1, shift 5. Otros muestreadores, números de pasos y precisiones no se han probado.
Disponibilidad
El adaptador y su runtime de Python están en Hugging Face, incluidos example.py, el código del pipeline y las sumas SHA256. Los nodos de ComfyUI están en alexw5702-afk/moss-anypaint con versiones hasta la v0.2.0 del 14 de noviembre. Los flujos de trabajo guardados existentes conservan sus propios valores de relleno, así que una configuración anterior no adopta los nuevos valores predeterminados.
La página del modelo base de MOSS-Image está aquí, y el enfoque basado en máscaras es complementario a los LoRA de edición basados en instrucciones: la ruta por instrucciones es más fácil de escribir, la ruta por máscara es más fácil de controlar.








Comentarios
Inicia sesión con GitHub para unirte a la conversación.