Utilisez spicyapi/object-eraser-v1/edit avec image_url et soit un prompt court, soit une mask_url, soit les deux. Pour un masque, le blanc signifie supprimer, le noir signifie conserver, et ses dimensions en pixels doivent correspondre à celles de la source. Le prix est de 0,03 $ par image produite, quel que soit le nombre d’objets supprimés par la requête. Le résultat garde la taille de canevas d’origine et remplit la zone sélectionnée avec le contenu de la scène environnante.
Choisir entre prompt et masque
Pour un objet bien distinct et entouré d’espace, commencez par une courte description :
le gobelet en carton blanc posé au sol à côté du pied avant droit de la chaise
Utilisez un nom, une couleur ou une matière visible, et une position. « Rends la scène propre et haut de gamme » n’identifie pas ce qui doit disparaître. Le prompt peut contenir de 1 à 1 000 caractères, mais une consigne plus longue ne sélectionne pas plus précisément.
| Situation | Entrée à utiliser |
|---|---|
| Un seul gobelet bien visible sur un sol dégagé | prompt qui désigne ce gobelet |
| Deux gobelets semblables, un seul à retirer | mask_url sur le gobelet visé |
| Câble fin, ou objet qui touche le bord du cadre | mask_url ; les descriptions les manquent souvent |
| Une description pourrait désigner le mauvais objet | Envoyer les deux, en décrivant et en marquant la même cible |
| Besoin d’une chaise détourée sur fond transparent | Suppression d’arrière-plan |
| Besoin de plus d’espace autour de la photo | Outpainting après le nettoyage |
Une description qui ne correspond à rien renvoie l’image inchangée, et la tâche réussit quand même. Comparez donc le résultat à la source avant de le considérer comme une suppression.

Illustration de sélections possibles. Tous les objets marqués sont encore présents ; ce n’est pas un résultat de l’API.
Essayer d’abord dans le Playground
- Ouvrez la page Object Eraser, restez sur l’onglet Playground en vue Form et connectez-vous avec un compte approvisionné pour lancer l’exécution.
- Ajoutez la photo sous Input image (JPG, PNG ou WebP, jusqu’à 10 Mo). Déposez un fichier, collez un lien avec Asset URL puis Add URL, ou parcourez vos fichiers.
- Décrivez la cible dans Prompt, ou ajoutez votre image en noir et blanc sous Mask, ou remplissez les deux. Le formulaire exige au moins l’un des deux.
- Laissez Output format sur PNG (JPEG et WebP donnent des fichiers plus légers) et lancez. Le prix est de 0,03 $ par image.
- Ouvrez le résultat à côté de l’original et du masque, puis consultez le tableau des échecs ci-dessous si quelque chose reste.
Le panneau Request body affiche le même JSON que celui de l’API : un prompt ou un masque qui fonctionne ici se copie tel quel dans le code. Si cela échoue ici, corrigez le prompt ou le masque avant d’écrire la moindre ligne de code.
Créer le masque d’après l’image exacte que vous enverrez
Si vous connaissez déjà la zone (boîte d’un détecteur ou sélection dans une interface), générez le masque dans le code. Sa taille vient de la source, il correspond donc toujours :
from PIL import Image, ImageDraw
src = Image.open("source.jpg") # apply EXIF rotation and crop first
mask = Image.new("L", src.size, 0) # black = keep
bbox = (src.width // 4, src.height // 3, src.width // 2, src.height // 2)
# Example coordinates only: adjust this box to the unwanted object in your photo.
ImageDraw.Draw(mask).rectangle(bbox, fill=255) # white = remove
mask.save("mask.png")Pour des formes irrégulières sur une source de 2 400 × 1 600 pixels, préparez un masque de 2 400 × 1 600 pixels dans un éditeur d’images :
- Terminez d’abord la rotation et le recadrage de la source, puis enregistrez cette image de travail.
- Ajoutez un calque noir à la taille complète du canevas et baissez son opacité pendant que vous dessinez, pour que la cible reste visible.
- Peignez le gobelet en blanc, avec son bord indésirable et son ombre de contact, en gardant une petite marge là où il y a de la place. Le pied de chaise reste noir.
- Remettez le calque à pleine opacité et exportez-le seul en PNG noir et blanc opaque, et non en photo assombrie ni avec des annotations en couleur.
- Superposez le masque exporté à la source de travail et vérifiez la zone blanche.
Des proportions identiques ne suffisent pas : les deux fichiers doivent avoir la même largeur, la même hauteur, le même recadrage et la même orientation. Une forme légèrement généreuse convient quand rien d’autre ne se trouve à proximité. Le masque d’exemple de la page du modèle, pour un support au bord du cadre, est un canevas noir de la taille de la photo avec un simple rectangle blanc sur le support.
Les ombres et les reflets peuvent dépasser la silhouette de l’objet. Peignez un reflet indésirable comme une zone blanche distincte. Quand l’ombre du gobelet chevauche l’ombre d’appui de la chaise, ne peignez pas toute la tache sombre en blanc, sinon la chaise peut sembler flotter. Le masque indique ce qu’il faut supprimer ; il ne fournit ni le sol caché ni la géométrie du produit.
Traitez les suppressions importantes ou qui se chevauchent en passes séparées, en construisant chaque masque sur le résultat précédent accepté. Deux petits objets dans une seule requête coûtent 0,03 $ ; deux requêtes séparées coûtent 0,06 $. Gardez ensemble les noms de fichiers du masque et de l’image afin qu’une ancienne sélection ne modifie pas en silence une photo plus récente.
Puis l’exécuter depuis le code
Installez le SDK Python (pip install spicyapi), définissez SPICY_API_KEY dans l’environnement de votre serveur et lancez la requête ci-dessous. Elle utilise la photo d’exemple de la page du modèle et fonctionne donc telle quelle. Les fichiers de votre ordinateur passent par client.upload_file et reviennent sous forme d’adresse spicy://. Pour un masque, ajoutez "mask_url" avec votre propre fichier, de même taille en pixels que la photo.
import uuid
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
task = client.create_task(
model="spicyapi/object-eraser-v1/edit",
input_data={
"image_url": "https://cdn.spicyapi.ai/models/examples/inputs/fbc8d531c80e6d0d.jpeg",
"prompt": "the wooden ladle lying across the sauna stones at the left",
"output_format": "png",
},
idempotency_key=str(uuid.uuid4()),
)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"{task['taskId']} ended as {final['state']}: {final.get('errorCode')}")
print(output_assets(final)[0]["url"]) # copy the image to your own storage nowLes envois de fichiers, la création, l’attente, le téléchargement, les nouvelles tentatives et les codes d’erreur sont traités dans le guide des tâches et la référence du SDK Python. Les fichiers générés sont conservés 14 jours au maximum : copiez le résultat dans votre propre stockage.
Ou laisser un agent l’exécuter
Quand un assistant doit réaliser la retouche, les trois outils officiels affichent le prix et vous demandent confirmation avant un appel payant.
- CLI. Envoyez la photo et le masque, puis créez la tâche :
``bash spicyapi files upload photo.jpg spicyapi tasks create --model spicyapi/object-eraser-v1/edit --input-file input.json --wait ``
Placez les adresses spicy:// renvoyées dans input.json comme image_url et mask_url. Voir la documentation de la CLI ; npx @spicyapi/cli fonctionne sans installation.
- Serveur MCP. Ajoutez le serveur MCP à votre assistant, puis demandez : « Supprime le gobelet en carton blanc de cette photo avec Object Eraser ; le fichier est dans /path/to/photo.jpg. » Il envoie le fichier avec
spicyapi_upload_file, appellespicyapi_task_create, qui s’arrête pour confirmer le prix, puisspicyapi_task_wait. - Skill.
npx skills add spicyapi-ai/spicy-skillinstalle l’Agent Skill, qui fait lire à un assistant de code le schéma réel du modèle au lieu de deviner les champs.
Corriger l’échec précis que vous observez
Ouvrez erased.png à côté de l’original et du masque. Vérifiez d’abord où la sélection rejoint le contenu conservé, puis le centre du remplissage.
| Résultat | Ce qu’il faut changer |
|---|---|
| Le gobelet est toujours là après une requête avec prompt seul | Passez à un masque sur ce gobelet. |
| Le câble reste au bord | Peignez toute sa longueur visible en blanc sur un masque en pleine résolution. |
| Un contour léger subsiste | Étendez légèrement la sélection au-delà du bord de l’objet, sans recouvrir les bords voisins du produit. |
| Le gobelet a disparu mais un ovale sombre reste | Ajoutez au masque l’ombre de contact du gobelet, séparément de l’ombre de la chaise. |
| Une partie du pied de chaise est mal reconstruite | Réduisez le masque là où il recouvre le pied. Si le gobelet cache le pied lui-même, utilisez une autre photo source. |
| Une comparaison par différence montre toute l’image modifiée | Alignez d’abord la rotation et la taille ; le bruit de compression seul n’est pas une retouche. Examinez des repères fixes. |
| La requête renvoie 400 | Vérifiez l’absence de prompt et de masque, ou des champs que le modèle n’a pas, comme strength, mask_blur ou transparent_background. Rien n’est facturé pour une requête rejetée. |

Illustration de l’examen des ombres et des reflets. Elle ne montre pas une suppression terminée.
Le modèle reconstruit l’arrière-plan masqué ; il ne peut pas révéler ce qui se trouvait réellement derrière l’objet. Pour une fiche produit, n’acceptez pas une articulation de chaise inventée ou une couture de tapisserie modifiée sous prétexte que le sol paraît plus propre. Refaites la photo quand l’objet retiré cache un détail que la fiche doit montrer fidèlement.
SpicyAPI n’exécute aucun contrôle de sécurité sur ce modèle ; c’est le modèle lui-même qui décide de ce qu’il renvoie.
Conservez la source et le masque avec le résultat accepté, et n’ajoutez une passe que pour un objet précis qui reste. L’onglet Examples de la page du modèle montre de vrais résultats avant/après.






