Édition multi-tour et masques
Mis à jour le 29 juillet 2026
Chaîner les éditions et utiliser les masques
L’édition d’images devient vraiment puissante lorsque vous enchaînez plusieurs modifications successives ou ciblez des zones précises avec des masques. Ces deux techniques vous permettent de construire des workflows d’édition complexes et contrôlés.
L’édition multi-tour
Le principe est simple : l’URL de sortie d’une édition devient l’entrée de l’édition suivante. Chaque tour affine progressivement l’image.
import requests
import os
headers = {
"Authorization": f"Bearer {os.getenv('XAI_API_KEY')}",
"Content-Type": "application/json"
}
def edit_image(image_url, prompt):
"""Édite une image et retourne l'URL du résultat."""
response = requests.post(
"https://api.x.ai/v1/images/edits",
headers=headers,
json={
"model": "grok-imagine-image",
"prompt": prompt,
"image": {"url": image_url}
}
).json()
return response["data"][0]["url"]
# Tour 1 : modifier l'arrière-plan
url_tour1 = edit_image(
"https://exemple.com/portrait.jpg",
"Remplacez l'arrière-plan par un bureau moderne avec vue sur la ville"
)
# Tour 2 : ajuster l'éclairage
url_tour2 = edit_image(
url_tour1,
"Ajoutez un éclairage chaud et tamisé, style golden hour"
)
# Tour 3 : ajouter un élément
url_tour3 = edit_image(
url_tour2,
"Placez un ordinateur portable ouvert sur le bureau devant la personne"
)
print(f"Résultat final : {url_tour3}")
Bonnes pratiques pour le multi-tour
L’édition multi-tour se travaille comme une retouche photo professionnelle : une modification à la fois. Demander simultanément un changement de fond, un ajout d’objet et une correction de lumière donne au modèle trois occasions de mal interpréter — et vous ne saurez pas laquelle des trois instructions a produit le défaut. En séparant les tours, chaque résultat valide ou invalide une seule décision. Ordonnez ces tours du général au spécifique : les changements majeurs d’abord (fond, composition, ambiance), les détails ensuite (texte, accessoires, corrections fines), parce qu’un grand changement tardif détruit les petites retouches déjà faites.
Deux réflexes de sécurité complètent la méthode. Téléchargez chaque résultat intermédiaire dès sa génération — les URL sont temporaires, et perdre le tour 3 d’une série de cinq oblige à tout refaire depuis le tour 2. Et inspectez chaque étape avant d’enchaîner : un artefact introduit au tour 1 — un doigt déformé, une ombre incohérente — se propage à tous les tours suivants, car chacun part de l’image précédente. Dix secondes de vérification par tour économisent des séries entières.
Les masques
Le paramètre mask permet de définir une zone précise de l’image à modifier. Le masque est une image en noir et blanc où les zones blanches indiquent les parties à éditer et les zones noires les parties à conserver.
payload = {
"model": "grok-imagine-image",
"prompt": "Remplacez cette zone par un jardin fleuri",
"image": {
"url": "https://exemple.com/scene.jpg"
},
"mask": {
"url": "https://exemple.com/masque.png"
}
}
response = requests.post(
"https://api.x.ai/v1/images/edits",
headers=headers,
json=payload
).json()
Créer des masques programmatiquement
Vous pouvez générer des masques avec Python en utilisant la bibliothèque Pillow :
from PIL import Image, ImageDraw
# Créer un masque de mêmes dimensions que l'image source
mask = Image.new("L", (1024, 1024), 0) # Tout noir (conserver)
draw = ImageDraw.Draw(mask)
# Zone blanche = zone à éditer
# Rectangle dans le coin supérieur droit
draw.rectangle([512, 0, 1024, 512], fill=255)
mask.save("masque.png")
Masques circulaires
Pour éditer une zone circulaire (par exemple autour d’un visage) :
from PIL import Image, ImageDraw
mask = Image.new("L", (1024, 1024), 0)
draw = ImageDraw.Draw(mask)
# Cercle centré, rayon 200px
center_x, center_y = 512, 400
radius = 200
draw.ellipse(
[center_x - radius, center_y - radius,
center_x + radius, center_y + radius],
fill=255
)
mask.save("masque_circulaire.png")
Combiner multi-tour et masques
La combinaison la plus puissante consiste à utiliser des masques différents à chaque tour :
# Tour 1 : modifier l'arrière-plan (masque = tout sauf le sujet)
url_step1 = edit_with_mask(
image_url="https://exemple.com/photo.jpg",
mask_url="https://exemple.com/masque-arriere-plan.png",
prompt="Remplacez l'arrière-plan par une plage tropicale"
)
# Tour 2 : modifier un accessoire (masque ciblé)
url_step2 = edit_with_mask(
image_url=url_step1,
mask_url="https://exemple.com/masque-chapeau.png",
prompt="Remplacez par un chapeau de paille"
)
Pipeline d’édition complet
Voici un exemple de pipeline structuré :
class ImageEditor:
def __init__(self, api_key):
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
self.history = []
def edit(self, image_url, prompt, mask_url=None):
payload = {
"model": "grok-imagine-image",
"prompt": prompt,
"image": {"url": image_url}
}
if mask_url:
payload["mask"] = {"url": mask_url}
response = requests.post(
"https://api.x.ai/v1/images/edits",
headers=self.headers,
json=payload
).json()
result_url = response["data"][0]["url"]
self.history.append({
"prompt": prompt,
"input": image_url,
"output": result_url
})
return result_url
Points clés à retenir
- L’édition multi-tour chaîne les résultats d’une édition comme entrée de la suivante
- Les URL de sortie sont temporaires : téléchargez les résultats intermédiaires
- Les masques ciblent les zones à modifier (blanc = éditer, noir = conserver)
- Vous pouvez générer des masques programmatiquement avec Pillow
- Combinez multi-tour et masques pour des workflows d’édition sophistiqués