Inpainting
L’inpainting est une technique de retouche d’image par IA qui permet de modifier, remplacer ou reconstruire une zone spécifique d’une image (définie par un masque) en utilisant un modèle de diffusion guidé par un prompt textuel, tout en préservant le reste de l’image intact.
- Type
- Mode d’édition locale pour modèles de diffusion
- Entrées
- Image originale + masque (noir/blanc) + prompt textuel
- Sortie
- Image modifiée uniquement dans la zone masquée
- Modèles dédiés
- SD 1.5 Inpainting, SDXL Inpainting 0.1, FLUX Fill
- Interfaces
- AUTOMATIC1111, ComfyUI, Forge, InvokeAI, Fooocus
- Paramètre clé
- Denoising Strength (0.0-1.0)
Qu’est-ce que l’inpainting ?
L’inpainting est une variante spécialisée d’img2img qui restreint la zone de modification à une région précise de l’image. Le principe : vous « peignez » un masque sur la zone à modifier (blanc = zone à régénérer, noir = zone à conserver), vous fournissez un prompt décrivant ce que vous voulez voir apparaître dans cette zone, et le modèle de diffusion régénère uniquement la zone masquée en la rendant cohérente avec le contexte environnant.
Le terme vient du monde de la restauration d’art, où l’inpainting désigne la technique de reconstruction de parties endommagées d’un tableau. En IA générative, le concept est le même mais la puissance est décuplée : vous pouvez non seulement restaurer, mais aussi remplacer, ajouter ou supprimer n’importe quel élément d’une image.
Comment fonctionne l’inpainting dans Stable Diffusion
Deux approches techniques
Il existe deux manières de faire de l’inpainting avec Stable Diffusion, et la différence est importante :
Approche 1 : inpainting sans modèle dédié. On utilise un checkpoint standard (non entraîné pour l’inpainting). À chaque step du processus de débruitage, la zone hors masque est remplacée par les latents originaux de l’image plus le bruit correspondant au step actuel. Seule la zone masquée est effectivement débruitée par le modèle. Cette approche fonctionne correctement pour des petites retouches, mais produit des résultats incohérents pour les zones masquées importantes.
Approche 2 : modèle d’inpainting dédié. Le U-Net reçoit 5 canaux d’entrée supplémentaires (4 pour l’image masquée encodée + 1 pour le masque lui-même). Le modèle a été spécifiquement entraîné pour comprendre le contexte autour du masque et produire des résultats cohérents avec l’ensemble de l’image. Cette approche donne des résultats nettement supérieurs, surtout pour les grandes zones masquées et la suppression d’objets.
Le processus étape par étape
Voici ce qui se passe quand vous lancez un inpainting :
L’image originale est encodée dans l’espace latent par le VAE. Le masque est redimensionné à la taille de l’espace latent (division par 8). Du bruit est ajouté à la zone masquée dans l’espace latent, selon le denoising strength choisi. Le modèle de diffusion débruite la zone masquée en se guidant par le prompt et le contexte environnant (la zone non masquée). Le résultat latent est décodé par le VAE pour produire l’image finale. La zone non masquée de l’image originale est restaurée (collée par-dessus la zone non masquée du résultat).
Paramètres essentiels de l’inpainting
Denoising Strength
Comme pour img2img, le denoising strength contrôle l’intensité des modifications. Mais en inpainting, son comportement est plus nuancé car il n’affecte que la zone masquée :
| Denoising Strength | Effet en inpainting | Usage |
|---|---|---|
| 0.2 – 0.4 | Modifications subtiles, conserve fortement le contenu original | Correction de texture, ajustement de couleur |
| 0.4 – 0.6 | Modifications modérées, bonne cohérence avec le contexte | Correction de visages, ajustements de détails |
| 0.6 – 0.8 | Contenu largement remplacé, structure générale préservée | Remplacement d’objets, ajout d’éléments |
| 0.8 – 1.0 | Zone quasi entièrement régénérée | Suppression d’objets, création de contenu nouveau |
Mode de masque : Only Masked vs Whole Picture
C’est un paramètre souvent mal compris mais crucial :
Only Masked (recommandé pour les détails) : le système recadre la zone masquée, l’agrandit à la pleine résolution pour l’inpainting, puis la réduit et la replace dans l’image. C’est essentiel pour traiter des zones petites (un visage dans un plan large, un objet distant) car le modèle travaille à pleine résolution sur la zone cible.
Whole Picture : le modèle traite l’image entière. La zone masquée est régénérée dans le contexte de l’image complète. Préférez ce mode quand la zone masquée est grande ou quand la cohérence globale est prioritaire.
Masked Content (contenu initial du masque)
Ce paramètre contrôle ce que « voit » le modèle dans la zone masquée avant de commencer le débruitage :
| Option | Comportement | Quand l’utiliser |
|---|---|---|
| Original | Garde le contenu original sous le masque comme base | Retouches légères, corrections |
| Fill | Remplit la zone masquée avec la couleur moyenne du voisinage | Suppression d’objets, remplacement |
| Latent noise | Remplit avec du bruit aléatoire dans l’espace latent | Génération de contenu entièrement nouveau |
| Latent nothing | Remplit avec des zéros dans l’espace latent | Rarement utilisé, résultats imprévisibles |
Mask Blur (flou du masque)
Appliquer un léger flou gaussien aux bords du masque (4-8 pixels) aide à créer une transition plus douce entre la zone régénérée et la zone préservée. Sans flou, les bords du masque peuvent être visibles sous forme de coutures nettes. Trop de flou, en revanche, étend la zone modifiée au-delà du masque.
Cas d’usage principaux
Correction de visages et de mains
L’usage le plus fréquent de l’inpainting. Les modèles de diffusion produisent régulièrement des visages flous (quand ils sont petits dans l’image) ou des mains déformées. L’inpainting permet de masquer la zone problématique et de la régénérer à pleine résolution. L’extension ADetailer automatise ce processus en détectant et en corrigeant automatiquement les visages et mains après chaque génération.
Suppression d’objets
Masquez l’objet à supprimer, laissez le prompt vide ou décrivez simplement l’arrière-plan souhaité (« empty park bench », « clean wall »). Le modèle remplit la zone avec un contenu cohérent avec l’environnement. Les modèles d’inpainting dédiés excellent pour cette tâche car ils sont entraînés à produire des transitions naturelles.
Ajout d’éléments
Masquez la zone où vous voulez ajouter un élément et décrivez-le dans le prompt. Par exemple, masquez une table vide et demandez « a vase of sunflowers on a wooden table ». Le modèle ajoutera l’objet en respectant l’éclairage, la perspective et le style du reste de l’image.
Changement de vêtements ou d’attributs
L’inpainting est très utilisé pour modifier l’apparence d’un personnage : changer la couleur des cheveux, modifier un vêtement, ajouter des accessoires. Masquez la zone à modifier, décrivez le résultat souhaité, et le modèle applique le changement tout en préservant la cohérence avec le reste du personnage.
Extension d’image (vers l’outpainting)
En agrandissant le canvas et en masquant les nouvelles zones vides, l’inpainting peut étendre une image au-delà de ses bordures originales. C’est le principe de l’outpainting, qui est essentiellement un cas particulier d’inpainting où le masque couvre les zones ajoutées en périphérie.
Guide pratique : inpainting dans AUTOMATIC1111
Étape 1 : Préparer l’image
Générez ou importez l’image que vous voulez retoucher. Si vous venez de générer une image en txt2img, utilisez le bouton « Send to inpaint » pour l’envoyer directement.
Étape 2 : Dessiner le masque
Dans l’onglet img2img > Inpaint, utilisez l’outil pinceau pour peindre un masque blanc sur la zone à modifier. Couvrez entièrement la zone cible avec une marge légère autour. Ajustez la taille du pinceau selon la zone (pinceau large pour les grandes zones, fin pour les détails).
Étape 3 : Configurer les paramètres
| Paramètre | Valeur recommandée | Notes |
|---|---|---|
| Denoising Strength | 0.5-0.75 | Commencez à 0.5, augmentez si pas assez de changement |
| Inpaint area | Only masked | Pour les petites zones (visages, détails) |
| Masked content | Original | Fill pour suppression d’objets |
| Mask blur | 4 | Augmenter à 8-12 pour des transitions plus douces |
| Batch size | 4 | Générer plusieurs options pour choisir la meilleure |
Étape 4 : Rédiger le prompt
Décrivez ce que vous voulez voir dans la zone masquée, pas l’image entière. Si vous corrigez un visage : « beautiful face, detailed eyes, natural expression ». Si vous remplacez un objet : décrivez l’objet de remplacement. Si vous supprimez un objet : décrivez ce qui devrait apparaître à la place (l’arrière-plan).
Étape 5 : Itérer
Générez un batch de 4 images, choisissez la meilleure, et affinez si nécessaire. Si la zone inpaintée est incohérente avec le reste de l’image, réduisez le denoising ou essayez un modèle d’inpainting dédié.
Inpainting avec Diffusers (Python)
import torch
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image
pipeline = AutoPipelineForInpainting.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-inpainting",
torch_dtype=torch.float16,
variant="fp16"
).to("cuda")
# Charger image et masque
init_image = load_image("photo.png")
mask_image = load_image("mask.png") # blanc = zone à inpainter
prompt = "a beautiful garden with roses"
negative = "blurry, low quality"
image = pipeline(
prompt=prompt,
negative_prompt=negative,
image=init_image,
mask_image=mask_image,
num_inference_steps=30,
guidance_scale=7.5,
).images[0]
image.save("inpainted.png")Le masque est une image en niveaux de gris : blanc = zone à régénérer, noir = zone à conserver. Les valeurs de gris intermédiaires produisent un inpainting partiel, ce qui peut être utile pour des transitions douces.
Inpainting + ControlNet
Combiner l’inpainting avec ControlNet donne un contrôle exceptionnel sur le contenu généré dans la zone masquée. Par exemple, vous pouvez fournir une carte de profondeur ou des contours Canny pour guider la structure de l’élément inpainté, tout en laissant le prompt contrôler le style et les détails.
Cas d’usage typique : vous voulez remplacer un meuble dans une photo d’intérieur. Dessinez le masque sur le meuble à remplacer, fournissez un contour Canny du nouveau meuble souhaité via ControlNet, et décrivez-le dans le prompt. Le résultat respectera la géométrie du contour, le style du prompt, et la cohérence avec la pièce environnante.
Inpainting vs img2img : quand utiliser quoi ?
| Situation | Inpainting | Img2img |
|---|---|---|
| Corriger un détail précis | ✅ Modifie uniquement la zone ciblée | Risque de modifier l’image entière |
| Changer le style global | Inadapté (modifie zone par zone) | ✅ Transforme l’image dans son ensemble |
| Supprimer un objet | ✅ Masque + remplissage contextuel | Peu efficace sans masque |
| Ajouter un élément | ✅ Insérer dans une zone spécifique | Peu de contrôle spatial |
| Améliorer la qualité globale | Inadapté | ✅ Passe globale à faible denoising |
Erreurs courantes et solutions
Couture visible entre zone inpaintée et original
Augmentez le mask blur (8-12 pixels). Utilisez un modèle d’inpainting dédié. Réduisez légèrement le denoising strength. Si le problème persiste, utilisez la fonction apply_overlay dans Diffusers pour forcer la zone non masquée à rester identique à l’originale.
L’objet masqué n’est pas complètement supprimé
Augmentez le denoising strength à 0.8-1.0. Réglez le « Masked content » sur « Fill » au lieu de « Original ». Utilisez un modèle d’inpainting dédié, qui est spécifiquement entraîné pour la suppression d’objets. Décrivez explicitement dans le prompt ce qui devrait apparaître à la place (l’arrière-plan, le sol, le mur).
Le résultat est flou dans une zone masquée petite
C’est le problème classique de la résolution. Le modèle travaille à sa résolution native (512×512 pour SD 1.5). Si la zone masquée ne couvre que 50×50 pixels de l’image finale, le modèle n’a que ~6×6 pixels latents pour travailler. Solution : activez « Inpaint area: Only masked » qui recadre et agrandit la zone masquée à la pleine résolution avant l’inpainting.
Le style de la zone inpaintée ne correspond pas
Assurez-vous d’utiliser le même checkpoint que celui qui a généré l’image originale. Ajoutez des termes de style dans le prompt d’inpainting. Si vous utilisez un modèle d’inpainting dédié, vérifiez qu’il est compatible avec le style de votre image (réaliste, anime, illustration).
Questions fréquentes sur l’inpainting
Faut-il un modèle d’inpainting spécial ?
Pas obligatoirement, mais c’est fortement recommandé pour les modifications importantes. Les modèles d’inpainting dédiés (comme stable-diffusion-inpainting ou stable-diffusion-xl-1.0-inpainting-0.1) ont un U-Net avec 5 canaux d’entrée supplémentaires et sont entraînés spécifiquement pour comprendre le contexte autour du masque. Pour des retouches légères (corriger un visage, ajuster un détail), un checkpoint standard avec l’onglet inpainting de votre interface suffit.
Comment créer un bon masque d’inpainting ?
Couvrez entièrement la zone à modifier avec une marge de quelques pixels autour. Un masque trop serré produit des résultats contraints, un masque trop large modifie plus que nécessaire. Appliquez un léger flou aux bords (4-8 pixels) pour des transitions douces. Pour des masques complexes (détourage précis d’un objet), utilisez un outil de segmentation comme SAM (Segment Anything Model) plutôt que le pinceau manuel.
Quel denoising strength pour l’inpainting ?
Commencez à 0.5 pour les corrections légères, montez à 0.7-0.8 pour les remplacements d’objets, et utilisez 0.9-1.0 pour la suppression complète d’éléments. Si le résultat est incohérent avec le reste de l’image, réduisez le denoising. Si la zone masquée n’est pas assez modifiée, augmentez-le. Un batch de 4 images par essai vous permet de comparer rapidement différentes options.
Peut-on utiliser l’inpainting avec SDXL et FLUX ?
Oui. SDXL dispose d’un modèle d’inpainting dédié (diffusers/stable-diffusion-xl-1.0-inpainting-0.1). FLUX propose FLUX Fill, un modèle optimisé pour l’inpainting et l’outpainting. Les deux produisent des résultats supérieurs à SD 1.5 grâce à leur résolution native plus élevée (1024×1024). Les interfaces ComfyUI et Forge supportent l’inpainting sur ces architectures.
Comment l’inpainting se compare-t-il aux outils de retouche classiques (Photoshop) ?
Les outils classiques (Content-Aware Fill dans Photoshop, par exemple) interpolent à partir des pixels environnants. Ils excellent pour les textures uniformes (supprimer un poteau d’un ciel, effacer un câble). L’inpainting par diffusion génère du contenu nouveau guidé par un prompt : il peut créer des objets complexes, respecter une sémantique, et produire des résultats qui seraient impossibles par simple interpolation. Photoshop a d’ailleurs intégré la génération IA (Generative Fill) depuis 2023, utilisant un modèle de diffusion similaire sous le capot.