MOSS-Image AnyPaint : masque, inpainting et outpainting ComfyUI

ComfyUI Wikinews

Un adaptateur rank-32 donne à MOSS-Image-Base l'inpainting par masque arbitraire, l'outpainting en une passe et des éditions mixtes, avec des nœuds ComfyUI et 12 cas.

Le 13 novembre, yijunwang2 a publié MOSS AnyPaint, un adaptateur rank-32 pour MOSS-Image-Base qui transforme le modèle de base en éditeur de masque général : inpainting sur la même toile, outpainting en une passe, plusieurs régions d'édition déconnectées, structures étroites et masques qui franchissent le bord de la source. Il s'agit d'un seul fichier de poids accompagné d'un petit runtime, et un ensemble distinct de nœuds ComfyUI, alexw5702-afk/moss-anypaint, a été livré le même jour avec un flux de travail assorti. L'adaptateur est une version communautaire non officielle et n'est pas approuvé par OpenMOSS.

Portrait, inpainting et outpainting mixtes avec MOSS AnyPaint

Une seule requête : le manteau est régénéré à l'intérieur de la source et la toile est élargie en même temps, si bien que le mur de la galerie et le sol autour d'elle sont eux aussi générés. Tous les exemples de cet article partent d'une source synthétique rendue avec le modèle de base Krea 2, et non d'une photographie. Source : yijunwang2/moss-anypaint

Pourquoi un masque, alors que MOSS-Image édite déjà

Le chemin d'édition propre à MOSS-Image est piloté par instruction : vous lui fournissez une image de référence et une phrase. Les LoRA d'édition déjà couvertes ici suivent la même forme, du LoRA d'édition rank-64 à Edit HQ v5 et aux sept LoRA de contrôle. Toutes régénèrent l'image entière et laissent le prompt décider de ce qui change.

AnyPaint fait l'inverse. Vous indiquez exactement quels pixels peuvent changer, au moyen d'un masque binaire, et le runtime conserve tout le reste au niveau de bruit attendu par l'étape d'échantillonnage. La suppression d'objets, le changement de vêtements, la recoloration de câbles et l'extension de toile cessent d'être des problèmes de formulation de prompt pour devenir des problèmes de masque, ce que les flux de travail d'inpainting et d'outpainting existants dans ComfyUI produisent déjà.

Le contrat d'entrée

Le runtime prend une source RGB, un masque binaire, une toile de sortie dont les côtés sont des multiples de 16, une boîte englobante de source facultative (x0, y0, x1, y1) en pixels de sortie, et un prompt :

  • Le blanc génère, le noir conserve. Les valeurs supérieures à 0,5 comptent comme générer, tout le reste comme conserver ; les masques gris ou semi-transparents ne servent pas de force partielle.
  • Un masque de la taille de la source suit la source. Un masque de la taille de la toile est utilisé tel quel, et lorsque les deux tailles coïncident, les coordonnées de la toile l'emportent. Toute autre taille de masque est rejetée.
  • L'extérieur de la boîte englobante de la source est toujours généré. Ajouter du padding à la toile suffit pour l'outpainting, aucun masque dessiné à la main n'est nécessaire, et un masque interne peut y être combiné dans la même requête.
  • Le prompt décrit l'image terminée, pas l'opération. Pour supprimer une tasse, vous décrivez la table et l'arrière-plan que vous souhaitez conserver.

La toile masquée est encodée comme une référence unique limitée à un bord maximal de 384 pixels, et ses coordonnées rotatives couvrent toute la toile cible, de sorte que le modèle voit une image cohérente plutôt qu'un patch collé. Les pixels connus sont également conservés en pleine résolution dans une copie séparée et restaurés après chaque étape du flow, la limite du masque restant libre de se fondre. Les coutures extérieures bénéficient d'une bande de redessin de 32 pixels vers l'intérieur ; les masques internes sont appliqués exactement. L'image renvoyée est la sortie brute du modèle : il n'y a pas de composite caché de la source par-dessus.

Un détail compte pour quiconque est habitué aux références MOSS-Image : l'encodeur de texte ne voit que votre prompt. Le côté image est entièrement géré par le chemin de référence, l'encodage VLM de la référence étant désactivé.

À quoi ressemblent les cas

Trois exemples issus de la publication, chacun présenté sous forme de source, de masque exact et de résultat :

Source aquarelleMasque aquarelleRésultat aquarelle
SourceMasqueOutpainting vers le bas, en une passe
Source lampeMasque lampeRésultat lampe
SourceUne bande étroite le long du câbleCâble redessiné en orange
Source portraitMasque portraitRésultat portrait
SourceMasque interne plus une bande à l'extérieur du bordVêtement et toile modifiés ensemble

Le cas du câble étroit est le plus intéressant : le masque fait quelques pixels de large, et les caractéristiques fines sont exactement là où les méthodes à base de masque échouent habituellement, parce que le VAE et le tokenizer de patchs les émoussent. Le cas de l'aquarelle va dans l'autre sens, en étendant une peinture proche du format 1:1 vers une composition verticale en une seule étape.

Planche contact des douze cas AnyPaint

Les douze cas, chaque ligne étant une source, son masque binaire exact et le résultat. Scènes d'intérieur et d'extérieur, objets, illustration, 3D et sujets humains. Sources : yijunwang2/moss-anypaint

L'exécuter dans ComfyUI

Le paquet de nœuds réutilise l'interface des nœuds Krea 2 AnyPaint antérieurs de l'auteur, de sorte que quiconque a exécuté ce flux de travail reconnaîtra la disposition : AnyPaint Prepare prend l'image source, un MASK et un padding par côté, MOSS AnyPaint Encode prend le prompt, et MOSS AnyPaint Model Patch se place entre les chargeurs et KSampler.

Le flux de travail livré est câblé ainsi :

NœudValeur
Charger Modèle Diffusionmoss_image_base_int8_convrot.safetensors
Charger CLIPqwen3.5_9b_int8_convrot.safetensors, type moss_image
Charger VAEflux2-vae_small.safetensors
LoraLoaderModelOnlymoss_anypaint_rank32.safetensors à 1.0
LoraLoaderModelOnlylora_dmd2.safetensors à 1.0
AnyPaint Preparepadding 0/0/0/0, bord de référence 384, bande de redessin 32
KSampler8 étapes, CFG 1, euler, simple

Le checkpoint de base, l'encodeur de texte et le VAE proviennent du repack MOSS-Image de Comfy-Org ; l'adaptateur DMD2 est lora_dmd2.safetensors du référentiel Base 8-step DMD2, et non l'ancien lora.safetensors du même référentiel. L'adaptateur AnyPaint est un fichier unique de 142 MiB.

Pour l'inpainting, laissez les quatre valeurs de padding à 0 et fournissez le masque à partir de ce que vous utilisez déjà : SAM ou un autre nœud de segmentation, une édition dans l'éditeur de masque sur la source, ou un ImageToMask sur une image en noir et blanc. Inversez la connexion si un nœud échantillonneur renvoie un masque inversé, car le contrat est strictement blanc en entrée. Pour l'outpainting, définissez en pixels le côté que vous voulez étendre et laissez les autres à 0 ; la toile est arrondie aux multiples de 16, de sorte qu'une source non alignée peut gagner quelques pixels supplémentaires à droite et en bas.

Limites

  • Des fractions générées importantes peuvent attirer des sujets ou des structures sans rapport.
  • Les caractéristiques de masque très fines sont grossies par le VAE et le tokenizer de patchs, ce qui fait des cheveux, des fils et des contours les cas difficiles.
  • Les prompts ambigus modifient davantage de contexte près de la bande de redessin extérieure qu'à l'intérieur du masque.
  • Les masques doivent couvrir tout l'objet ou tout le bord que vous voulez remplacer ; un contour manqué laisse une frange.
  • Le nombre de petits objets, leurs positions exactes et leur géométrie peuvent varier selon la graine.
  • Les pixels non masqués peuvent encore différer légèrement, car toute l'image passe par le décodage VAE.
  • Les mesures publiées par l'auteur ne couvrent que la configuration livrée : Base avec l'adaptateur DMD2 8 étapes, 8 étapes, CFG 1, shift 5. Les autres échantillonneurs, nombres d'étapes et précisions ne sont pas testés.

Disponibilité

L'adaptateur et son runtime Python sont sur Hugging Face, y compris example.py, le code du pipeline et les sommes SHA256. Les nœuds ComfyUI se trouvent à alexw5702-afk/moss-anypaint, avec des releases jusqu'à la v0.2.0 le 14 novembre. Les flux de travail enregistrés existants conservent leurs propres valeurs de padding, de sorte qu'une configuration plus ancienne ne récupère pas les nouveaux paramètres par défaut.

La page du modèle de base MOSS-Image est ici, et l'approche par masque est complémentaire des LoRA d'édition par instruction : le chemin par instruction est plus facile à écrire, celui par masque plus facile à contrôler.

Commentaires

Connectez-vous avec GitHub pour rejoindre la discussion.

Chargement des commentaires…
MOSS-Image AnyPaint : masque, inpainting et outpainting ComfyUI | ComfyUI Wiki