Usa spicyapi/object-eraser-v1/edit con image_url y un prompt breve, una mask_url o ambos. En una máscara, el blanco significa eliminar y el negro significa conservar, y sus dimensiones en píxeles deben coincidir con las de la imagen original. El precio es de 0,03 $ por imagen de salida, sin importar cuántos objetos elimine la solicitud. El resultado mantiene el tamaño original del lienzo y rellena la zona seleccionada con contenido de la escena circundante.
Elige entre prompt y máscara
Para un objeto inconfundible con espacio a su alrededor, empieza con una descripción corta:
el vaso de papel blanco en el suelo junto a la pata delantera derecha de la silla
Usa un sustantivo, un color o material visible y una posición. «Deja la escena limpia y premium» no identifica qué debe desaparecer. El prompt admite de 1 a 1000 caracteres, pero una descripción más larga no selecciona con más precisión.
| Situación | Entrada que conviene usar |
|---|---|
| Un único vaso inconfundible en un suelo despejado | prompt que nombre ese vaso |
| Dos vasos parecidos y solo uno sobra | mask_url sobre el vaso que quieres quitar |
| Cable fino u objeto pegado al borde del encuadre | mask_url; las descripciones suelen fallar aquí |
| Una descripción podría señalar el objeto equivocado | Enviar ambos, describiendo y marcando el mismo objetivo |
| Necesitas una silla recortada con fondo transparente | Eliminación de fondo |
| Necesitas más espacio alrededor de la foto | Outpainting después de la limpieza |
Una descripción que no coincide con nada devuelve la imagen sin cambios y la tarea se completa igualmente, así que compara la salida con el original antes de darla por una eliminación.

Ilustración con posibles selecciones. Todos los objetos marcados siguen presentes; no es una salida de la API.
Prueba primero en el Playground
- Abre la página de Object Eraser, quédate en la pestaña Playground en la vista Form e inicia sesión con una cuenta con saldo para ejecutar.
- Añade la foto en Input image (JPG, PNG o WebP, hasta 10 MB). Suelta un archivo, pega un enlace con Asset URL y Add URL, o búscalo en tu equipo.
- Describe el objetivo en Prompt, o añade tu imagen en blanco y negro en Mask, o rellena ambos. El formulario necesita al menos uno de los dos.
- Deja Output format en PNG (JPEG y WebP dan archivos más pequeños) y ejecuta. El precio es de 0,03 $ por imagen.
- Abre el resultado junto al original y la máscara, y usa la tabla de fallos de más abajo si queda algo.
El panel Request body muestra el mismo JSON que acepta la API, así que un prompt o una máscara que funcionen aquí se pueden copiar directamente al código. Si falla aquí, corrige el prompt o la máscara antes de escribir una sola línea de código.
Crea la máscara sobre la imagen exacta que vas a enviar
Si ya conoces la región (un cuadro de un detector o una selección en una interfaz), genera la máscara en código. Su tamaño sale del original, así que siempre coincide:
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")Para formas irregulares sobre un original de 2400×1600, prepara en un editor de imágenes una máscara de 2400×1600:
- Termina primero la rotación y el recorte del original, y guarda esa imagen de trabajo.
- Añade una capa negra del tamaño completo del lienzo y baja su opacidad mientras dibujas para que el objetivo siga visible.
- Pinta el vaso de blanco, incluido su borde no deseado y su sombra de contacto, con un pequeño margen donde haya espacio. La pata de la silla permanece en negro.
- Devuelve la capa a opacidad total y expórtala sola como PNG opaco en blanco y negro, no como una foto atenuada ni con anotaciones de color.
- Superpón la máscara exportada al original de trabajo y comprueba la región blanca.
No basta con que las proporciones coincidan: ambos archivos necesitan el mismo ancho, alto, recorte y orientación. Una forma algo generosa funciona donde no hay nada más cerca. La máscara de ejemplo de la página del modelo para un estante en el borde del encuadre es un lienzo negro del tamaño de la foto con un único rectángulo blanco liso sobre el estante.
Las sombras y los reflejos pueden quedar fuera de la silueta del objeto. Pinta un reflejo no deseado como una región blanca aparte. Donde la sombra del vaso se solapa con la sombra de apoyo de la silla, no pintes toda la mancha oscura de blanco, o la silla puede acabar flotando. La máscara marca lo que se elimina; no aporta el suelo oculto ni la geometría del producto.
Haz las eliminaciones grandes o solapadas en pasadas separadas, construyendo cada máscara sobre la salida anterior ya aceptada. Dos objetos pequeños en una sola solicitud cuestan 0,03 $; dos solicitudes separadas cuestan 0,06 $. Mantén emparejados los nombres de archivo de la máscara y la imagen para que una selección antigua no edite en silencio una foto más reciente.
Después, ejecútalo desde código
Instala el SDK de Python (pip install spicyapi), define SPICY_API_KEY en el entorno de tu servidor y ejecuta la solicitud siguiente. Usa la foto de ejemplo de la página del modelo, así que funciona tal cual. Los archivos de tu equipo pasan por client.upload_file y vuelven como una dirección spicy://. Para una máscara, añade "mask_url" con tu propio archivo del mismo tamaño en píxeles que la foto.
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 nowLas cargas, la creación, la espera, la descarga, los reintentos y los códigos de error se explican en la guía de tareas y en la referencia del SDK de Python. Los archivos generados se conservan 14 días como máximo, así que copia el resultado a tu propio almacenamiento.
O deja que lo ejecute un agente
Cuando un asistente debe hacer la edición, las tres herramientas oficiales muestran el precio y te piden confirmación antes de una llamada de pago.
- CLI. Sube la foto y la máscara, y luego crea la tarea:
``bash spicyapi files upload photo.jpg spicyapi tasks create --model spicyapi/object-eraser-v1/edit --input-file input.json --wait ``
Pon las direcciones spicy:// devueltas en input.json como image_url y mask_url. Consulta la documentación de la CLI; npx @spicyapi/cli funciona sin instalar.
- Servidor MCP. Añade el servidor MCP a tu asistente y pide: «Quita el vaso de papel blanco de esta foto con Object Eraser; el archivo está en /path/to/photo.jpg». Sube el archivo con
spicyapi_upload_file, llama aspicyapi_task_create, que se detiene para que confirmes el precio, y después aspicyapi_task_wait. - Skill.
npx skills add spicyapi-ai/spicy-skillinstala el Agent Skill, con el que un asistente de programación lee el esquema vivo del modelo en lugar de adivinar los campos.
Corrige el fallo concreto que ves
Abre erased.png junto al original y la máscara. Comprueba primero dónde la selección toca el contenido que se conserva y después el centro del relleno.
| Resultado | Qué cambiar |
|---|---|
| El vaso sigue ahí tras una solicitud solo con prompt | Cambia a una máscara sobre ese vaso. |
| El cable queda en el borde | Pinta de blanco toda su longitud visible en una máscara a resolución completa. |
| Queda un contorno tenue | Amplía un poco la selección más allá del borde del objeto, sin cubrir bordes vecinos del producto. |
| El vaso ha desaparecido pero queda un óvalo oscuro | Añade a la máscara la sombra de contacto del vaso, por separado de la sombra de la silla. |
| Una parte de la pata de la silla se reconstruye mal | Reduce la máscara donde cubre la pata. Si el vaso tapa la propia pata, usa otra foto de origen. |
| Una comparación de diferencias muestra toda la imagen cambiada | Alinea primero rotación y tamaño; el ruido de compresión por sí solo no es una edición. Inspecciona puntos de referencia fijos. |
| La solicitud devuelve 400 | Comprueba si faltan el prompt y la máscara, o si envías campos que el modelo no tiene, como strength, mask_blur o transparent_background. No se cobra nada por una solicitud rechazada. |

Ilustración sobre la inspección de sombras y reflejos. No muestra una eliminación terminada.
El modelo reconstruye el fondo oculto; no puede revelar lo que realmente había detrás del objeto. En la ficha de un producto, no aceptes una unión de silla inventada ni una costura de tapizado alterada solo porque el suelo se vea más limpio. Vuelve a fotografiar cuando el objeto eliminado oculte un detalle que la ficha deba mostrar con exactitud.
SpicyAPI no ejecuta ningún verificador de seguridad en este modelo; es el propio modelo quien decide lo que devuelve.
Guarda el original y la máscara junto con la salida aceptada, y añade otra pasada solo para un objeto concreto que siga ahí. La pestaña Examples de la página del modelo muestra resultados reales de antes y después.






