Pular para o conteúdo principal

Divida uma imagem em camadas com uma API: Seedream 5.0 Flash vs Pro

Transforme uma imagem em uma imagem base limpa mais até 16 camadas PNG transparentes: resultados reais, sintaxe de bbox, custos e como remontar tudo.

Autor
SpicyAPI Engineering
Publicado
Leitura
12 min de leitura
Atualizado
O pôster LATE SHIFT desmontado em suas camadas: uma rua molhada limpa, a lanchonete, o título, o slogan, a mulher com o trench vermelho e o ingresso ADMIT ONE, cada um em sua moldura dourada

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_format só 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.

O pôster LATE SHIFT: uma mulher de trench vermelho segurando um copo de papel diante de uma lanchonete sob um neon vermelho, título em serifa creme no topo e um canhoto de ingresso ADMIT ONE amarelo no canto inferior direito

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.

Vista explodida das camadas do resultado LATE SHIFT: a imagem base da rua molhada e sete camadas (lanchonete, carro, neon, mulher, slogan, título, ingresso) abertas em molduras douradas, com uma lista numerada à direita

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.

A imagem base do Flash: a rua noturna molhada com a lanchonete, a mulher e todo o texto removidos e o fundo preenchido

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

A camada transparente do título LATE SHIFT isolada
A camada transparente com a mulher de trench vermelho isolada

Pro, nomeando os elementos

O Pro recebeu o mesmo pôster, com um prompt que nomeia cinco elementos, em 1.5K:

text
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

Voltaram 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.

Uma folha de contato do resultado do Pro: a imagem base e cinco camadas transparentes, a lanchonete, o slogan, o título, a mulher e o canhoto do ingresso

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.

Uma folha de contato do resultado de perfume do Pro: uma imagem base vazia de mármore preto e quatro camadas, a fita dourada, o frasco, o título e o texto pequeno

Flash ou Pro?

FlashPro
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ãoauto1.5k
Nomes e caixasname e boundingBox em todas as camadasname e boundingBox em todas as camadas
Mesmo pôster, divisão automática7 camadas mais imagem base8 camadas mais imagem base
Imagens de entrada voltadas para adultos (NSFW, até temas intensos)AceitasAceitas
Uma cena íntima entre dois adultosAceitaRecusada, sem cobrança
PromptOpcional; pelo menos 3 caracteres se escritoOpcional

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ão x1 y1 x2 y2, normalizadas em uma grade de 0 a 1000 com a origem no canto superior esquerdo, independentemente do tamanho da imagem:
text
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layers

Isso 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

  1. 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.
  2. Adicione seu pôster ou anúncio em Input image (um arquivo ou uma Asset URL).
  3. Deixe Prompt vazio para o modelo escolher os elementos principais, ou nomeie os que você quer mover, com <bbox> onde duas coisas se parecerem.
  4. Deixe Resolution em auto para 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.
  5. Se a divisão deixar algo de fora, execute a mesma imagem na página do Pro; lá defina Resolution como 1k ou 1.5k, porque auto é 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:

python
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 input no input.json e 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 depois spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill instala 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:

python
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:

js
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.

Também em English · 日本語 · 한국어 · Deutsch · Français · Español · Русский · Italiano · Polski

Experimente você mesmo

Você paga só pelo que executar — sem plano e sem assinatura.

Feito com MiniMax H3 · ByteDance Seedance 2.0 Fast