
Separar una imagen en capas editables con la API de Seedream 5.0 Pro Layerize
POST https://api.evolink.ai/v1/images/generations con model: "doubao-seedream-5.0-pro-layerize" y exactamente una URL de imagen. Lo que recibes es un identificador de tarea, no una imagen: este modelo es asíncrono y tarda unos 120 segundos. Después consulta GET /v1/tasks/{task_id} hasta que status sea completed y extrae las capas de result_data.Qué recibes de vuelta
| Salida | Formato | Contenido |
|---|---|---|
| Imagen base | sigue output_format (jpeg por defecto) | El fondo, reconstruido bajo todo lo que se ha retirado |
| Capas 1 a 16 | siempre PNG con canal alfa, con independencia de output_format | Un elemento cada una, transparente en el resto |
Lo que merece una pausa es la imagen base. Cuando Layerize retira un titular de un cartel, no deja un hueco: reconstruye lo que había debajo del texto. Esa es la diferencia de fondo con una máscara de segmentación, y la razón por la que el resultado entra directamente en una herramienta de diseño.
Tres formas de seleccionar capas
prompt es opcional, y cada una de las tres formas encaja con un trabajo distinto.
1. Omitir el prompt — separación automática completa
{
"model": "doubao-seedream-5.0-pro-layerize",
"image_urls": ["https://example.com/poster.png"],
"quality": "auto",
"output_format": "jpeg"
}Sin ningún prompt, el modelo localiza por su cuenta todos los elementos relevantes — bloques de texto, sujetos, decoración, fondo — y separa cada uno en su propia capa. Este es el uso principal del modelo, y un cartel complejo suele volver con diez capas o más.
"prompt": "" se interpreta aguas arriba como «el usuario ha proporcionado una instrucción vacía» y se pierde la detección automática. El cuerpo de la petición simplemente no debe incluir la clave prompt.2. Lenguaje natural — nombrar los elementos que quieres
{
"model": "doubao-seedream-5.0-pro-layerize",
"prompt": "Separa el loro y el texto del título",
"image_urls": ["https://example.com/poster.png"],
"quality": "2K"
}Úsalo cuando solo te interesen dos o tres elementos y no quieras pagar una separación completa. Los elementos se identifican semánticamente, así que «el texto del título» basta sin necesidad de saber dónde está.
3. Coordenadas bbox — delimitar la región exacta
{
"model": "doubao-seedream-5.0-pro-layerize",
"prompt": "texto del título<bbox>179 58 809 197</bbox>, 1 loro<bbox>330 274 641 991</bbox>",
"image_urls": ["https://example.com/poster.png"],
"quality": "1.5K"
}<bbox> admite cuatro números en coordenadas normalizadas 0–1000 (no píxeles), en el orden izquierda arriba derecha abajo. Recurre a ella cuando el lenguaje natural resulte ambiguo: dos productos parecidos en el mismo encuadre, o varios bloques de texto donde «el encabezado» podría referirse a cualquiera.bounding_box.normalized de las capas obtenidas y vuelve a ejecutar con esas coordenadas para conseguir exactamente el corte que buscas.El flujo asíncrono
Paso 1 — enviar la tarea
curl -X POST https://api.evolink.ai/v1/images/generations \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedream-5.0-pro-layerize",
"image_urls": ["https://example.com/poster.png"],
"quality": "auto"
}'La respuesta es un identificador de tarea, no una imagen:
{
"id": "task-unified-1757165031-seedream5prolayerize",
"object": "image.generation.task",
"model": "doubao-seedream-5.0-pro-layerize",
"status": "pending",
"progress": 0,
"type": "image",
"task_info": { "can_cancel": true, "estimated_time": 120 },
"usage": { "billing_rule": "per_call", "credits_reserved": 39.168 }
}credits_reserved: es una estimación reservada por adelantado, dimensionada para el peor caso. El cargo real se calcula a partir de las imágenes que efectivamente se devuelven.Paso 2 — sondear hasta que termine
curl https://api.evolink.ai/v1/tasks/task-unified-1757165031-seedream5prolayerize \
-H "Authorization: Bearer $EVOLINK_API_KEY"status pasa por pending → processing → completed (o failed). Calcula unos 120 segundos; sondear cada 5 segundos es más que suficiente. Si prefieres no sondear, envía una callback_url al crear la tarea: solo HTTPS, sin direcciones IP internas, se dispara tras confirmarse la facturación y reintenta hasta 3 veces a 1 s / 2 s / 4 s.Paso 3 — leer las capas
result_data incluye los metadatos necesarios para reconstruir la composición en cualquier lienzo:| Campo | Significado |
|---|---|
z_index | Orden de apilado. 0 es la imagen base; las capas empiezan en 1 |
bounding_box.absolute | Posición en el sistema de coordenadas en píxeles de la imagen base |
bounding_box.normalized | El mismo rectángulo en coordenadas 0–1000 |
name | Etiqueta generada por el modelo, por ejemplo «guacamayo escarlata» |
description | Descripción más extensa del elemento |
z_index: 0, sin name ni bounding_box. Ordenar por z_index y componer cada capa en su rectángulo absolute reproduce la imagen original con exactitud.Las restricciones de entrada son más estrictas que en la generación normal
Aquí es donde más peticiones fallan, porque Layerize no acepta todo lo que sí admite la generación normal de Seedream.
| Restricción | Valor |
|---|---|
| Número de imágenes | Exactamente 1. Ninguna, o dos o más, da error |
| Formatos | solo .png, .jpeg, .jpg — webp se rechaza |
| Tamaño de archivo | 30 MB como máximo |
| Píxeles totales | de 262 144 a 36 000 000 en total — 512×512 es el cuadrado más pequeño que cumple |
| Relación de aspecto | entre 1:16 y 16:1 |
| URL | el servidor debe poder acceder directamente, o la URL debe iniciar una descarga directa |
quality también es más restrictivo: el modo de capas acepta únicamente niveles (auto, 1K, 1.5K, 2K). Pasar una relación como 16:9 o píxeles explícitos como 2048x2048 devuelve error. Con auto, la salida sigue a la entrada: se mantiene igual si el original está entre 921 600 y 4 624 220 píxeles, sube a 1K por debajo y se limita a 2K por encima.Facturación: se cuentan imágenes generadas, no peticiones
En EvoLink, Layerize se cobra un 20 % por debajo de la tarifa pública de BytePlus:
| Concepto | Tarifa pública BytePlus | EvoLink |
|---|---|---|
| Imagen de entrada | 0,003 $ | 0,0024 $ |
| Imagen generada, nivel bajo (≤ 2 610 000 px) | 0,0225 $ | 0,018 $ |
| Imagen generada, nivel alto (> 2 610 000 px) | 0,045 $ | 0,036 $ |
1K y 1.5K cuestan lo mismo: ambos caen en el nivel bajo. El nivel se decide imagen a imagen, así que una imagen base en 2K se factura al nivel alto mientras que las pequeñas capas de texto retiradas de ella van al nivel bajo.Dos ejemplos calculados:
Cuatro errores frecuentes
- Enviar
"prompt": ""en lugar de omitir la clave. Anula la detección automática, que es lo mejor del modelo. - Suponer que
output_format: "png"afecta a las capas. Solo controla la imagen base. Las capas siempre son PNG con canal alfa. - Tratar un fallo como éxito parcial. El éxito parcial no existe. Si falla una capa, falla todo y se reembolsa por completo, así que la lógica de reintento debe asumir «todo o nada».
- Dejar que caduquen los enlaces. A las 24 horas desaparecen. Descarga en el mismo proceso que hace el sondeo.
Preguntas frecuentes
¿Cuántas capas puedo obtener?
Entre 1 y 16 capas más la imagen base, es decir, 17 imágenes como máximo. No se puede solicitar un número concreto: lo decide el resultado de la separación.
¿Puedo controlar qué elementos se convierten en capas?
<bbox> en coordenadas normalizadas 0–1000.¿Las capas son realmente PNG transparentes?
output_format no influye en ello. Ese parámetro solo afecta a la imagen base.¿Cuánto tarda una llamada?
callback_url si prefieres no sondear.¿Qué pasa si falla una capa?
Falla la petición completa — no hay éxito parcial — y se reembolsa íntegramente.
¿Funciona con cualquier imagen?
Necesita un PNG o JPEG con al menos 262 144 píxeles en total (512×512, por ejemplo), menos de 30 MB y una relación de aspecto entre 1:16 y 16:1. webp se rechaza aunque la generación normal sí lo acepte.


