Aller au contenu principal

Découper une image en calques avec une API : Seedream 5.0 Flash ou Pro

Transformez une image en une image de base propre plus jusqu'à 16 calques PNG transparents : résultats réels, syntaxe bbox, coûts et recomposition.

Auteur
SpicyAPI Engineering
Publié
Lecture
13 min de lecture
Mis à jour
L'affiche LATE SHIFT démontée en ses calques : une rue pluvieuse propre, le diner, le titre, la signature, la femme au trench rouge et le billet ADMIT ONE, chacun dans son cadre doré

En bref : envoyez une image et recevez une image de base réparée (l'image avec les éléments extraits retirés et le fond comblé) plus jusqu'à 16 calques PNG transparents, un par élément. Chaque calque est accompagné d'un name et d'un boundingBox, de sorte que les calques se réempilent à leur place. SpicyAPI exécute la tâche sur Seedream 5.0 Flash à $0.026 par image de sortie quelle que soit la résolution, et sur Seedream 5.0 Pro à $0.042 par image (1K, 1.5K) ou $0.084 (2K, auto). Commencez par Flash : c'est moins cher et il a traité toutes les catégories d'entrée adulte lors de nos tests. Pro coûte plus cher et refuse les images d'une scène intime entre deux adultes.

En 30 secondes

  • Sortie : l'image de base à l'indice 0, puis les calques. Les calques sont toujours des PNG transparents ; output_format ne change que l'image de base (JPEG ou PNG).
  • Plafond et facturation : 17 images maximum par exécution (image de base plus 16 calques), et vous payez les images renvoyées, image de base comprise. Lorsque la tâche est acceptée, nous retenons le prix de 17 et remboursons la différence dès que le compte réel est connu.
  • Prompt facultatif. Omettez-le et le modèle choisit les éléments principaux ; écrivez-le et il sépare ce que vous nommez. Il n'existe aucun réglage du nombre de calques.
  • Pas instantané : une exécution prend environ 45 à 100 secondes sur les deux modèles.
  • Copiez les fichiers dans votre propre stockage à la fin de l'exécution.

À quoi ça ressemble

Nous sommes partis d'une affiche générée avec Seedream 5.0 Flash.

L'affiche LATE SHIFT : une femme en trench rouge tenant un gobelet en carton devant un diner sous un néon rouge, titre en sérif crème en haut et talon de billet ADMIT ONE jaune en bas à droite

Flash, aucun prompt du tout

Nous avons envoyé l'affiche sans prompt et avec resolution réglée sur auto. 8 images sont revenues : l'image de base plus sept calques, à savoir le diner, une voiture au loin, le néon rouge, la femme en trench rouge, la signature, le titre LATE SHIFT et le talon du billet ADMIT ONE.

Vue éclatée des calques du résultat LATE SHIFT : l'image de base de la rue pluvieuse et sept calques (diner, voiture, néon, femme, signature, titre, billet) déployés en cadres dorés, avec une liste numérotée à droite

L'image de base est une rue pluvieuse dont le diner, la femme et tout le lettrage ont été retirés, et la rue comblée. Tout ce qui se trouvait derrière un élément retiré est peint par le modèle : le rendu paraît correct mais ce ne sont pas les pixels d'origine.

L'image de base de Flash : la rue nocturne pluvieuse, le diner, la femme et tout le texte supprimés, le fond comblé

Deux des calques de Flash isolément (l'échiquier que vous verriez dans un éditeur n'est que de la transparence) :

Le calque transparent du titre LATE SHIFT seul
Le calque transparent avec la femme en trench rouge seul

Pro, en nommant les éléments

Pro a reçu la même affiche, avec un prompt nommant cinq éléments, en 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

Six images sont revenues : l'image de base et cinq calques nommés Diner building, Tagline text, LATE SHIFT title, Woman in red trench coat et ADMIT ONE ticket stub. Les empiler selon leurs cadres reproduit l'affiche d'origine.

Une planche de contact du résultat Pro : l'image de base et cinq calques transparents, le diner, la signature, le titre, la femme et le talon de billet

Pro a également traité la publicité de parfum que nous avions faite plus tôt. Nous avons nommé quatre éléments (le titre NOIR ÉTÉ, le flacon, le ruban doré et la petite ligne « eau de parfum ») et obtenu cinq images : un socle vide en marbre noir servant d'image de base, plus les quatre calques. C'est une photo de produit que vous pouvez remettre en scène sur un nouveau fond sans rien régénérer.

Une planche de contact du résultat parfum de Pro : une image de base vide en marbre noir et quatre calques, le ruban doré, le flacon, le titre et le petit texte

Flash ou Pro ?

FlashPro
Prix par image de sortie$0.026 à toute résolution$0.042 (1K, 1.5K), $0.084 (2K et auto)
resolution par défautauto1.5k
Noms et cadresname et boundingBox sur chaque calquename et boundingBox sur chaque calque
Même affiche, découpage automatique7 calques plus image de base8 calques plus image de base
Images d'entrée orientées adultes (NSFW, jusqu'aux thèmes intenses)AcceptéesAcceptées
Une scène intime entre deux adultesAcceptéeRefusée, sans facturation
PromptFacultatif ; au moins 3 caractères s'il est écritFacultatif

Choisissez Flash par défaut : il est moins cher et il a traité toutes les catégories d'entrée adulte testées ici. Choisissez Pro lorsque le découpage de Flash rate un élément dont vous avez besoin et que votre entrée n'est pas une scène intime entre deux adultes (une version couverte de la même scène se découpe normalement). Sur Pro, une image refusée revient sous forme de tâche échouée avec une erreur générique et sans facturation ; ne réessayez pas la même image, envoyez-la à Flash. Les deux fournissent des noms et des cadres, les deux conviennent donc aux mêmes tâches :

  • modifier le titre d'une affiche et le remettre en place ;
  • ne remplacer que le fond et conserver un produit ou une personne ;
  • transformer des découpes en autocollants ou en ressources de design réutilisables ;
  • construire une scène de parallaxe ou un rig d'animation à partir d'une seule illustration.

Écrire un prompt qui nomme ce que vous voulez

Sans prompt, le modèle décide de ce qui compte comme élément. Avec un prompt, il sépare ce que vous listez. Deux habitudes ont rendu les résultats prévisibles :

  • Nommez chaque élément qui vous intéresse, avec un court groupe nominal : « the LATE SHIFT title », « the woman in the red trench coat ». Ce que vous omettez revient au modèle, donc nommez ce que vous comptez déplacer. Si vous demandez moins d'éléments, vous obtenez moins de calques ; le plafond est 16.
  • Désignez une région avec <bbox>. Les coordonnées sont x1 y1 x2 y2, normalisées sur une grille de 0 à 1000 avec l'origine dans le coin supérieur gauche, quelle que soit la taille de l'image :
text
Separate the title text <bbox>179 58 809 197</bbox> and the parrot
<bbox>330 274 641 991</bbox> into independent layers

Cela règle le cas où deux choses se ressemblent ou se chevauchent. Sur une image de 1536×2048, un cadre allant de 100 à 900 horizontalement couvre les pixels 154 à 1382.

Ce que cela coûte

Vous payez par image renvoyée, et l'image de base compte. Les affiches et publicités courantes renvoient 3 à 11 images : de $0.078 à $0.286 sur Flash, et une exécution Pro de 6 images en 1.5K coûte 6 × $0.042 = $0.252. Rien n'est facturé par calque au-delà.

Le montant retenu à l'acceptation correspond au prix de 17 images : $0.442 sur Flash, $0.714 sur Pro en 1K ou 1.5K et $1.428 sur Pro en 2K ou auto. Il est libéré jusqu'au compte réel à la fin de l'exécution. Sur Pro, réglez resolution sur 1k ou 1.5k pour un découpage qui fonctionne ; auto est facturé au tarif 2K, si bien qu'une requête copiée depuis un exemple Flash avec auto coûte deux fois plus cher sur Pro.

Essayez d'abord dans le Playground

  1. Ouvrez la page de décomposition en calques de Flash et restez sur l'onglet Playground, en vue Form. Connectez-vous avec un compte crédité pour lancer une exécution.
  2. Ajoutez votre affiche ou publicité sous Input image (un fichier ou une Asset URL).
  3. Laissez Prompt vide pour laisser le modèle choisir les éléments principaux, ou nommez ceux que vous voulez déplacer, avec <bbox> là où deux choses se ressemblent.
  4. Laissez Resolution sur auto pour Flash, puis lancez le modèle. Le résultat s'ouvre en vue calques où vous pouvez masquer des calques, télécharger un calque ou toutes en zip, ou exporter la pile visible en un seul PNG. Une image générée sur le site peut être envoyée directement dans la décomposition en calques.
  5. Si le découpage rate quelque chose, lancez la même image sur la page Pro ; là, réglez Resolution sur 1k ou 1.5k, car auto est facturé au tarif 2K.

Puis lancez-la depuis le code

Installez le SDK Python (pip install spicyapi), définissez SPICY_API_KEY dans l'environnement de votre serveur et exécutez :

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")

Pour Pro, utilisez bytedance/seedream-5.0-pro/layer-decomposition avec "resolution": "1.5k". Gardez l'image source sous 10 MB. La création, l'attente, le téléchargement, les nouvelles tentatives et le corps du callback sont couverts par le guide des tâches et la référence du SDK Python.

Ou laissez un Agent l'exécuter

Quand un assistant doit lancer le découpage, les trois outils officiels affichent le prix et vous demandent avant un appel payant.

  • CLI. Placez le même objet input dans input.json, puis :

``bash spicyapi tasks create --model bytedance/seedream-5.0-flash/layer-decomposition --input-file input.json --wait ``

Voir la documentation de la CLI ; npx @spicyapi/cli fonctionne sans installation.

  • Serveur MCP. Ajoutez le serveur MCP à votre assistant, puis demandez : "Split this poster into layers with Seedream 5.0 Flash and name the title, the tagline and the woman." Il appelle spicyapi_task_create, qui s'arrête pour votre confirmation de prix, puis spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill installe l'Agent Skill, qui fait lire le schéma du modèle en direct à un assistant de code plutôt que de deviner les champs.

Remettez les calques en place

Un calque PNG a généralement une résolution supérieure à celle de la boîte qu'il occupe (par exemple une boîte de 671×139 avec un PNG de 1233×256), donc mettez chaque calque à l'échelle dans sa boîte, puis dessinez-les du zIndex le plus bas au plus élevé. Cela fonctionne avec la sortie de Flash comme de Pro.

Python avec 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)

La même chose dans le navigateur avec 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);
}

Pour remplacer le titre de l'affiche, laissez ce calque hors de la boucle, dessinez votre propre texte dans la même boîte et conservez le reste. Pour ne changer que le fond, remplacez assets[0] par votre propre image aux mêmes dimensions.

D'autres façons de découper une image en calques

La plupart des pages qui se classent pour cette recherche sont des outils de navigateur avec tarification par crédits et sans API. La principale alternative open source est Qwen-Image-Layered (Apache 2.0, 20 milliards de paramètres), que vous pouvez héberger vous-même sur un GPU ou appeler via fal à $0.05 par image de sortie (une exécution par défaut de 4 calques coûte environ $0.20 si chaque calque est facturé). Vous y définissez le nombre de calques (4 par défaut) et obtenez des images transparentes sur toute la toile, sans noms ni positions, et le vérificateur de sécurité de fal est activé par défaut : il renvoie des images noires pour les entrées signalées. Choisissez-le quand vous avez besoin d'un nombre de calques fixe ou de votre propre hébergement. Choisissez la décomposition en calques Seedream quand vous voulez des calques rognés avec chacun un nom et une position, un prompt qui nomme les éléments, et des images d'entrée adultes acceptées ; à $0.026 par image sur Flash, elle est aussi moins chère par image.

FAQ

Combien de calques vais-je obtenir ?

Autant que le modèle en trouve, jusqu'à 16 plus l'image de base. Vous ne pouvez pas fixer un nombre. Nommez les éléments pour contrôler le compte et, s'il en manque un, nommez-le (ou donnez son <bbox>) et relancez : une relance est facturée comme une nouvelle exécution.

Puis-je découper une image qui n'a pas été créée par SpicyAPI ?

Oui, toute image unique dans les limites de la page du modèle. Pour obtenir une matière d'affiche qui se découpe proprement, commencez par Seedream 5.0 Flash texte vers image.

Les résultats sont-ils reproductibles ?

Non. Il n'y a pas de graine, donc lancez le découpage une fois, conservez les fichiers et modifiez ceux-ci.

Pour aller plus loin

Essayez une affiche que vous aimez déjà avec la décomposition en calques de Flash ; si son découpage rate quelque chose, faites passer la même image dans Pro.

Aussi en English · 日本語 · 한국어 · Deutsch · Español · Português (Brasil) · Русский · Italiano · Polski