En resumen: envía una imagen y recibe una imagen base reparada (la imagen con los elementos extraídos eliminados y el fondo rellenado) más hasta 16 capas PNG transparentes, una por elemento. Cada capa viene con un name y un boundingBox, de modo que las capas se apilan de nuevo en su sitio. SpicyAPI lo ejecuta en Seedream 5.0 Flash por $0.026 por imagen de salida a cualquier resolución, y en Seedream 5.0 Pro por $0.042 por imagen (1K, 1.5K) o $0.084 (2K, auto). Empieza con Flash: cuesta menos y completó las categorías de entrada adulta en nuestras pruebas. Pro cuesta más y rechaza imágenes de una escena íntima entre dos adultos.
En 30 segundos
- Salida: la imagen base en el índice 0, luego las capas. Las capas siempre son PNG transparentes;
output_formatsolo cambia la imagen base (JPEG o PNG). - Límite y facturación: como máximo 17 imágenes por ejecución (imagen base más 16 capas), y pagas por las imágenes devueltas, incluida la imagen base. Cuando la tarea se acepta retenemos el precio de 17 y devolvemos la diferencia en cuanto se conoce el recuento real.
- Prompt opcional. Si lo omites, el modelo elige los elementos principales; si escribes uno, separa lo que nombres. No hay ningún ajuste para el número de capas.
- No es instantáneo: una ejecución tarda entre 45 y 100 segundos en ambos modelos.
- Copia los archivos a tu propio almacenamiento cuando termine la ejecución.
Cómo se ve
Partimos de un cartel generado con Seedream 5.0 Flash.

Flash, sin prompt alguno
Enviamos el cartel sin prompt y con resolution en auto. Volvieron 8 imágenes: la imagen base más siete capas, que eran el restaurante, un coche lejano, el neón rojo, la mujer con el trench rojo, el eslogan, el título LATE SHIFT y el resguardo del boleto ADMIT ONE.

La imagen base es una calle lluviosa sin el restaurante, sin la mujer y sin ninguna letra, con la calle rellenada. Lo que hubiera detrás de un elemento eliminado lo pinta el modelo, así que el resultado parece correcto pero no son los píxeles originales.

Dos de las capas de Flash por separado (el patrón de damero que verías en un editor es solo transparencia):


Pro, nombrando los elementos
Pro recibió el mismo cartel, con un prompt que nombraba cinco elementos, a 1.5K:
Separate the LATE SHIFT title, the tagline, the woman in the red trench coat,
the diner building and the ADMIT ONE ticket stub into their own layersVolvieron seis imágenes: la imagen base y cinco capas con los nombres Diner building, Tagline text, LATE SHIFT title, Woman in red trench coat y ADMIT ONE ticket stub. Apilarlas según sus cajas reproduce el cartel original.

Pro también resolvió el anuncio de perfume que hicimos antes. Nombramos cuatro elementos (el titular NOIR ÉTÉ, la botella, la cinta dorada y la pequeña línea "eau de parfum") y recibimos cinco imágenes: un pedestal vacío de mármol negro como imagen base, más las cuatro capas. Es una foto de producto que puedes recomponer sobre un fondo nuevo sin regenerar nada.

¿Flash o Pro?
| Flash | Pro | |
|---|---|---|
| Precio por imagen de salida | $0.026 en cualquier resolución | $0.042 (1K, 1.5K), $0.084 (2K y auto) |
resolution por defecto | auto | 1.5k |
| Nombres y cajas | name y boundingBox en cada capa | name y boundingBox en cada capa |
| Mismo cartel, división automática | 7 capas más imagen base | 8 capas más imagen base |
| Imágenes de entrada orientadas a adultos (NSFW, hasta temas intensos) | Aceptadas | Aceptadas |
| Una escena íntima entre dos adultos | Aceptada | Rechazada, sin cobro |
| Prompt | Opcional; al menos 3 caracteres si se escribe | Opcional |
Elige Flash por defecto: es más barato y completó todas las categorías de entrada adulta probadas aquí. Elige Pro cuando la división de Flash se pierda un elemento que necesitas y tu entrada no sea una escena íntima entre dos adultos (una versión cubierta de la misma escena se divide con normalidad). En Pro, una imagen rechazada vuelve como tarea fallida con un error genérico y sin cargo; no reintentes la misma imagen, envíala a Flash. Ambos te dan nombres y cajas, así que ambos sirven para los mismos trabajos:
- editar el titular de un cartel y volver a colocarlo;
- cambiar solo el fondo y conservar un producto o una persona;
- convertir recortes en pegatinas o recursos de diseño reutilizables;
- construir una escena de paralaje o un rig de animación a partir de una ilustración.
Cómo escribir un prompt que nombre lo que quieres
Sin prompt, el modelo decide qué cuenta como elemento. Con prompt, separa lo que listes. Dos hábitos hicieron los resultados predecibles:
- Nombra cada elemento que te importe, con una frase nominal breve: "the LATE SHIFT title", "the woman in the red trench coat". Lo que dejes fuera depende del modelo, así que nombra lo que pienses mover. Si pides menos elementos, obtienes menos capas; el límite es 16.
- Señala una región con
<bbox>. Las coordenadas sonx1 y1 x2 y2, normalizadas a una rejilla de 0 a 1000 con el origen en la esquina superior izquierda, independientemente del tamaño de la imagen:
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layersEsto resuelve el caso en que dos cosas se parecen o se solapan. En una imagen de 1536×2048, una caja de 100 a 900 en horizontal cubre los píxeles 154 a 1382.
Qué cuesta
Pagas por imagen devuelta, y la imagen base cuenta. Los carteles y anuncios típicos devuelven de 3 a 11 imágenes: de $0.078 a $0.286 en Flash, y una ejecución de Pro de 6 imágenes a 1.5K cuesta 6 × $0.042 = $0.252. No se cobra nada más por capa.
El importe retenido al aceptar es el precio de 17 imágenes: $0.442 en Flash, $0.714 en Pro a 1K o 1.5K y $1.428 en Pro a 2K o auto. Se libera hasta el recuento real cuando termina la ejecución. En Pro, pon resolution en 1k o 1.5k para una división que funcione; auto se factura a la tarifa de 2K, así que una petición copiada de un ejemplo de Flash con auto cuesta el doble en Pro.
Pruébalo primero en el Playground
- Abre la página de descomposición en capas de Flash y quédate en la pestaña Playground, en la vista Form. Inicia sesión con una cuenta con saldo para ejecutar.
- Añade tu cartel o anuncio en Input image (un archivo o una Asset URL).
- Deja Prompt vacío para que el modelo elija los elementos principales, o nombra los que quieras mover, con
<bbox>donde dos cosas se parezcan. - Deja Resolution en
autopara Flash y luego ejecuta el modelo. El resultado se abre como una vista de capas donde puedes ocultar capas, descargar una capa o todas en un zip, o exportar la pila visible como un solo PNG. Una imagen que hayas generado en el sitio puede enviarse directamente a la descomposición en capas. - Si la división se pierde algo, ejecuta la misma imagen en la página de Pro; allí pon Resolution en
1ko1.5k, porqueautose factura a la tarifa de 2K.
Luego 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:
import uuid
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
task = client.create_task(
model="bytedance/seedream-5.0-flash/layer-decomposition",
input_data={
"image_url": "https://your-cdn.example/poster.png",
"prompt": "Separate the LATE SHIFT title, the tagline, the woman in the red trench coat, "
"the diner building and the ADMIT ONE ticket stub into their own layers",
"resolution": "auto",
"output_format": "png",
},
idempotency_key=str(uuid.uuid4()),
)
print("Resume task:", task["taskId"], flush=True)
final = client.wait_for_terminal(task["taskId"]) # a run takes about 45 to 100 seconds
if final["state"] != "succeeded":
raise RuntimeError(f"{task['taskId']} ended as {final['state']}: {final.get('errorCode')}")
assets = output_assets(final) # assets[0] is the base plate; copy the files to your own storage now
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")Para Pro, usa bytedance/seedream-5.0-pro/layer-decomposition con "resolution": "1.5k". Mantén la imagen de origen por debajo de 10 MB. Crear, esperar, descargar, los reintentos y el cuerpo del callback están en la guía de tareas y la referencia del SDK de Python.
O deja que lo ejecute un Agent
Cuando un asistente debe ejecutar la división, las tres herramientas oficiales muestran el precio y te preguntan antes de una llamada de pago.
- CLI. Pon el mismo objeto
inputeninput.jsony luego:
``bash spicyapi tasks create --model bytedance/seedream-5.0-flash/layer-decomposition --input-file input.json --wait ``
Consulta la documentación de la CLI; npx @spicyapi/cli funciona sin instalar nada.
- Servidor MCP. Añade el servidor MCP a tu asistente y luego pregunta: "Split this poster into layers with Seedream 5.0 Flash and name the title, the tagline and the woman." Llama a
spicyapi_task_create, que se detiene para tu confirmación de precio, y luego aspicyapi_task_wait. - Skill.
npx skills add spicyapi-ai/spicy-skillinstala el Agent Skill, que hace que un asistente de programación lea el esquema del modelo en vivo en lugar de adivinar campos.
Vuelve a colocar las capas
Una capa PNG suele tener mayor resolución que la caja que ocupa (por ejemplo, una caja de 671×139 con un PNG de 1233×256), así que escala cada capa dentro de su caja y luego dibújalas desde el zIndex más bajo hasta el más alto. Esto funciona con la salida de Flash y de Pro.
Python con Pillow:
import io
import requests
from PIL import Image
def fetch(url):
return Image.open(io.BytesIO(requests.get(url, timeout=60).content)).convert("RGBA")
assets = output_assets(final) # from the finished task above
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")
canvas = fetch(assets[0]["url"]) # base plate, zIndex 0
for a in sorted(assets[1:], key=lambda a: a["layer"]["zIndex"]):
box = a["layer"].get("boundingBox")
if not box:
continue # no position: place this one by hand
x1, y1, x2, y2 = [round(v) for v in box]
layer = fetch(a["url"]).resize((x2 - x1, y2 - y1), Image.LANCZOS)
canvas.paste(layer, (x1, y1), layer) # alpha-aware paste
canvas.convert("RGB").save("recomposed.jpg", quality=95)Lo mismo en el navegador con canvas:
async function load(url) {
const img = new Image();
img.crossOrigin = "anonymous";
img.src = url;
await img.decode();
return img;
}
const assets = task.data.output.assets; // task: the finished task's JSON
const base = await load(assets[0].url);
const canvas = document.createElement("canvas");
canvas.width = base.naturalWidth;
canvas.height = base.naturalHeight;
const ctx = canvas.getContext("2d");
ctx.drawImage(base, 0, 0);
const layers = assets.slice(1).sort((a, b) => a.layer.zIndex - b.layer.zIndex);
for (const a of layers) {
const box = a.layer.boundingBox;
if (!box) continue; // no position: place this one by hand
const [x1, y1, x2, y2] = box;
ctx.drawImage(await load(a.url), x1, y1, x2 - x1, y2 - y1);
}Para cambiar el título del cartel, deja esa capa fuera del bucle, dibuja tu propio texto en la misma caja y conserva el resto. Para cambiar solo el fondo, sustituye assets[0] por tu propia imagen del mismo tamaño.
Otras formas de dividir una imagen en capas
La mayoría de las páginas que aparecen para esta búsqueda son herramientas de navegador con precios por créditos y sin API. La principal alternativa de código abierto es Qwen-Image-Layered (Apache 2.0, 20B parámetros), que puedes autoalojar en una GPU o llamar a través de fal por $0.05 por imagen de salida (una ejecución por defecto de 4 capas cuesta unos $0.20 si se factura cada capa). Allí estableces el número de capas (4 por defecto) y obtienes imágenes transparentes del tamaño completo del lienzo, sin nombres ni posiciones, y el verificador de seguridad de fal está activo por defecto y devuelve imágenes negras para las entradas marcadas. Elígela cuando necesites un número fijo de capas o tu propio alojamiento. Elige la descomposición en capas de Seedream cuando quieras capas recortadas con un nombre y una posición cada una, un prompt que nombre los elementos y que se acepten imágenes de entrada adultas; a $0.026 por imagen en Flash también es más barata por imagen.
FAQ
¿Cuántas capas obtendré?
Tantas como encuentre el modelo, hasta 16 más la imagen base. No puedes fijar un número. Nombra los elementos que quieras para controlar el recuento y, si falta uno, nómbralo (o dale su <bbox>) y ejecuta de nuevo; una repetición se factura como una ejecución nueva.
¿Puedo dividir una imagen que no hizo SpicyAPI?
Sí, cualquier imagen individual dentro de los límites de la página del modelo. Para material de cartel que se divida con limpieza, empieza por Seedream 5.0 Flash texto a imagen.
¿Son reproducibles los resultados?
No. No hay seed, así que ejecuta la división una vez, guarda los archivos y edita esos.
Qué hacer a partir de aquí
Prueba con un cartel que ya te guste en la descomposición en capas de Flash; si su división se pierde algo, pasa la misma imagen por Pro.







