Resumindo: envie uma imagem e receba uma imagem base reparada (a imagem com os elementos extraídos removidos e o fundo preenchido) mais até 16 camadas PNG transparentes, uma por elemento. Toda camada vem com um name e um boundingBox, de modo que as camadas se empilham de volta no lugar. A SpicyAPI executa isso no Seedream 5.0 Flash por $0.026 por imagem de saída em qualquer resolução, e no Seedream 5.0 Pro por $0.042 por imagem (1K, 1.5K) ou $0.084 (2K, auto). Comece pelo Flash: ele custa menos e concluiu as categorias de entrada adulta nos nossos testes. O Pro custa mais e recusa imagens de uma cena íntima entre dois adultos.
Em 30 segundos
- Saída: a imagem base no índice 0, depois as camadas. As camadas são sempre PNG transparentes;
output_formatsó muda a imagem base (JPEG ou PNG). - Limite e cobrança: no máximo 17 imagens por execução (imagem base mais 16 camadas), e você paga pelas imagens retornadas, imagem base incluída. Quando a tarefa é aceita, seguramos o preço de 17 e devolvemos a diferença assim que a contagem real é conhecida.
- Prompt opcional. Se você omitir, o modelo escolhe os elementos principais; se escrever, ele separa o que você nomear. Não existe configuração para o número de camadas.
- Não é instantâneo: uma execução leva cerca de 45 a 100 segundos nos dois modelos.
- Copie os arquivos para o seu próprio armazenamento quando a execução terminar.
Como fica
Começamos a partir de um pôster gerado com Seedream 5.0 Flash.

Flash, sem prompt nenhum
Enviamos o pôster sem prompt e com resolution em auto. Voltaram 8 imagens: a imagem base mais sete camadas, que eram a lanchonete, um carro distante, o neon vermelho, a mulher de trench vermelho, o slogan, o título LATE SHIFT e o canhoto do ingresso ADMIT ONE.

A imagem base é uma rua molhada com a lanchonete, a mulher e todo o texto removidos, e a rua preenchida. O que ficava atrás de um elemento removido é pintado pelo modelo, então parece correto, mas não são os pixels originais.

Duas das camadas do Flash isoladamente (o xadrez que você veria em um editor é apenas transparência):


Pro, nomeando os elementos
O Pro recebeu o mesmo pôster, com um prompt que nomeia cinco elementos, em 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 layersVoltaram seis imagens: a imagem base e cinco camadas chamadas Diner building, Tagline text, LATE SHIFT title, Woman in red trench coat e ADMIT ONE ticket stub. Empilhando-as pelas caixas, você reproduz o pôster original.

O Pro também deu conta do anúncio de perfume que fizemos antes. Nomeamos quatro elementos (o título NOIR ÉTÉ, o frasco, a fita dourada e a pequena linha "eau de parfum") e recebemos cinco imagens: um pedestal vazio de mármore preto como imagem base, mais as quatro camadas. É uma foto de produto que você pode remontar em um novo fundo sem regenerar nada.

Flash ou Pro?
| Flash | Pro | |
|---|---|---|
| Preço por imagem de saída | $0.026 em qualquer resolução | $0.042 (1K, 1.5K), $0.084 (2K e auto) |
resolution padrão | auto | 1.5k |
| Nomes e caixas | name e boundingBox em todas as camadas | name e boundingBox em todas as camadas |
| Mesmo pôster, divisão automática | 7 camadas mais imagem base | 8 camadas mais imagem base |
| Imagens de entrada voltadas para adultos (NSFW, até temas intensos) | Aceitas | Aceitas |
| Uma cena íntima entre dois adultos | Aceita | Recusada, sem cobrança |
| Prompt | Opcional; pelo menos 3 caracteres se escrito | Opcional |
Escolha Flash por padrão: ele é mais barato e concluiu todas as categorias de entrada adulta testadas aqui. Escolha Pro quando a divisão do Flash deixar de fora um elemento de que você precisa e sua entrada não for uma cena íntima entre dois adultos (uma versão coberta da mesma cena se divide normalmente). No Pro, uma imagem recusada volta como tarefa com falha, com um erro genérico e sem cobrança; não tente de novo com a mesma imagem, mande-a para o Flash. Os dois fornecem nomes e caixas, então os dois atendem aos mesmos trabalhos:
- editar o título de um pôster e recolocá-lo;
- trocar apenas o fundo e manter um produto ou uma pessoa;
- transformar recortes em adesivos ou recursos de design reutilizáveis;
- montar uma cena de parallax ou um rig de animação a partir de uma única ilustração.
Como escrever um prompt que nomeia o que você quer
Sem prompt, o modelo decide o que conta como elemento. Com prompt, ele separa o que você listar. Dois hábitos fizeram os resultados previsíveis:
- Nomeie todo elemento que importa para você, com um sintagma nominal curto: "the LATE SHIFT title", "the woman in the red trench coat". O que você deixar de fora fica a cargo do modelo, então nomeie o que pretende mover. Se você pedir menos elementos, recebe menos camadas; o limite é 16.
- Aponte para uma região com
<bbox>. As coordenadas sãox1 y1 x2 y2, normalizadas em uma grade de 0 a 1000 com a origem no canto superior esquerdo, independentemente do tamanho da imagem:
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layersIsso resolve o caso em que duas coisas são parecidas ou se sobrepõem. Em uma imagem 1536×2048, uma caixa de 100 a 900 na horizontal cobre os pixels 154 a 1382.
Quanto custa
Você paga por imagem retornada, e a imagem base entra na conta. Pôsteres e anúncios típicos retornam de 3 a 11 imagens: de $0.078 a $0.286 no Flash, e uma execução do Pro com 6 imagens em 1.5K custa 6 × $0.042 = $0.252. Nada é cobrado por camada além disso.
O valor retido na aceitação é o preço de 17 imagens: $0.442 no Flash, $0.714 no Pro em 1K ou 1.5K e $1.428 no Pro em 2K ou auto. Ele é liberado até a contagem real quando a execução termina. No Pro, defina resolution como 1k ou 1.5k para uma divisão que funcione; auto é cobrado pela tarifa de 2K, então uma requisição copiada de um exemplo do Flash com auto custa o dobro no Pro.
Teste primeiro no Playground
- Abra a página de decomposição em camadas do Flash e fique na aba Playground, na visão Form. Entre com uma conta com saldo para executar.
- Adicione seu pôster ou anúncio em Input image (um arquivo ou uma Asset URL).
- Deixe Prompt vazio para o modelo escolher os elementos principais, ou nomeie os que você quer mover, com
<bbox>onde duas coisas se parecerem. - Deixe Resolution em
autopara o Flash e então execute o modelo. O resultado abre como uma visão de camadas em que você pode ocultar camadas, baixar uma camada ou todas em um zip, ou exportar a pilha visível como um único PNG. Uma imagem gerada no site pode ser enviada direto para a decomposição em camadas. - Se a divisão deixar algo de fora, execute a mesma imagem na página do Pro; lá defina Resolution como
1kou1.5k, porqueautoé cobrado pela tarifa de 2K.
Depois execute pelo código
Instale o SDK em Python (pip install spicyapi), defina SPICY_API_KEY no ambiente do seu servidor e execute:
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 o Pro, use bytedance/seedream-5.0-pro/layer-decomposition com "resolution": "1.5k". Mantenha a imagem de origem abaixo de 10 MB. Criação, espera, download, novas tentativas e o corpo do callback estão no guia de tasks e na referência do SDK em Python.
Ou deixe um Agent executar
Quando um assistente deve executar a divisão, as três ferramentas oficiais mostram o preço e pedem confirmação antes de uma chamada paga.
- CLI. Coloque o mesmo objeto
inputnoinput.jsone então:
``bash spicyapi tasks create --model bytedance/seedream-5.0-flash/layer-decomposition --input-file input.json --wait ``
Veja a documentação da CLI; npx @spicyapi/cli funciona sem instalar.
- Servidor MCP. Adicione o servidor MCP ao seu assistente e então pergunte: "Split this poster into layers with Seedream 5.0 Flash and name the title, the tagline and the woman." Ele chama
spicyapi_task_create, que para para a sua confirmação de preço, e depoisspicyapi_task_wait. - Skill.
npx skills add spicyapi-ai/spicy-skillinstala o Agent Skill, que faz um assistente de programação ler o esquema do modelo ao vivo em vez de adivinhar os campos.
Coloque as camadas de volta
Uma camada PNG normalmente tem resolução maior do que a caixa que ocupa (por exemplo, uma caixa 671×139 com um PNG 1233×256), então redimensione cada camada para dentro da sua caixa e depois desenhe-as do zIndex mais baixo para o mais alto. Isso funciona na saída do Flash e do Pro.
Python com 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)O mesmo no navegador com 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 trocar o título do pôster, deixe essa camada fora do laço, desenhe o seu próprio texto na mesma caixa e mantenha o resto. Para mudar só o fundo, substitua assets[0] pela sua própria imagem no mesmo tamanho.
Outras formas de dividir uma imagem em camadas
A maioria das páginas que aparece nessa busca são ferramentas de navegador com preço em créditos e sem API. A principal alternativa de código aberto é Qwen-Image-Layered (Apache 2.0, 20B parâmetros), que você pode hospedar em uma GPU ou chamar por meio da fal por $0.05 por imagem de saída (uma execução padrão de 4 camadas custa cerca de $0.20 se cada camada for cobrada). Lá você define o número de camadas (4 por padrão) e recebe imagens transparentes do tamanho da tela, sem nomes nem posições, e o verificador de segurança da fal vem ligado por padrão e devolve imagens pretas para entradas sinalizadas. Escolha-a quando precisar de uma contagem fixa de camadas ou do seu próprio hosting. Escolha a decomposição em camadas do Seedream quando quiser camadas recortadas com nome e posição cada uma, um prompt que nomeie os elementos e imagens de entrada adultas aceitas; a $0.026 por imagem no Flash, ela também é mais barata por imagem.
FAQ
Quantas camadas eu vou receber?
Quantas o modelo encontrar, até 16 mais a imagem base. Você não pode definir um número. Nomeie os elementos para controlar a contagem e, se faltar um, nomeie-o (ou dê o <bbox> dele) e execute de novo; uma repetição é cobrada como uma nova execução.
Posso dividir uma imagem que não foi feita pela SpicyAPI?
Sim, qualquer imagem única dentro dos limites da página do modelo. Para criar material de pôster que se divide limpo, comece com Seedream 5.0 Flash texto para imagem.
Os resultados são reproduzíveis?
Não. Não há seed, então execute a divisão uma vez, guarde os arquivos e edite esses.
Para onde ir a partir daqui
Teste um pôster de que você já gosta na decomposição em camadas do Flash; se a divisão deixar algo de fora, passe a mesma imagem pelo Pro.







