Claude Opus 5.5 est disponible sur SeedRouter

Seedream 5.0 Pro : séparation en calques, résultats et reconstruction

Séparation en calques avec Seedream 5.0 Pro : image de fond, PNG transparents, reconstruction et facturation via l’API, avec le code utilisé.

Lire en Markdown

La séparation en calques de Seedream 5.0 Pro prend une image terminée et renvoie une image de fond et jusqu’à 16 calques PNG transparents, chacun avec un nom, une description, un ordre de superposition et une boîte englobante.[1] Dans l’API, il s’agit du commutateur layer_decomposition de la requête d’image habituelle. Envoyez une image, récupérez ses éléments.

Nous l’avons lancée deux fois sur SeedRouter les 1 et 2 novembre 2026, sur deux affiches que nous avions nous-mêmes générées. En bref : la décomposition est propre sur des compositions graphiques à plat, les fichiers des calques n’ont pas les dimensions de la zone qu’ils occupent sur le canevas, et le filigrane par défaut se retrouve dispersé dans l’image reconstruite si vous le laissez activé. Les chiffres et le code suivent. Les paramètres figurent dans la référence API de Seedream 5.0 Pro ; le Playground se trouve sur la page du modèle.

Ce qu’une requête a renvoyé

L’image test était une affiche de jazz de 1248 × 1872 : un titre à empattements, une lune corail, un saxophoniste découpé dans des vagues de papier, une bande de vagues en bas et une ligne d’informations sur l’événement. Nous l’avons envoyée avec size: "1.5K", sans prompt et sans filigrane. La tâche s’est terminée en 108 secondes et a renvoyé six images : l’image de fond et cinq calques.

L’affiche de jazz et les cinq calques transparents renvoyés par Seedream 5.0 Pro : vagues, lune, saxophoniste, titre et ligne d’informations

z_indexname (tel que renvoyé)Boîte sur l’image de fondFichier PNG
0image de fondcanevas entier1248 × 1872 JPEG
1Wave paper-cut decoration1091 × 3751650 × 568
2Orange circular sun decoration415 × 4181112 × 1121
3Saxophone player main figure742 × 9271016 × 1270
4Top main title text1089 × 2791815 × 465
5Bottom event description text831 × 362214 × 96

Deux bonnes surprises. L’image de fond est revenue sous forme de papier vierge : tous les éléments avaient été retirés et la texture reconstituée à leur emplacement. Et le calque de la lune (que le modèle a appelée un soleil) est un cercle complet, y compris la partie masquée par le saxophone dans l’original. On peut déplacer le musicien sur le côté sans laisser de trou derrière lui.

Le premier essai était plus chargé : une publicité de 1024 × 1536 pour une bouilloire à café filtre, envoyée en 1K sans prompt. Il a pris 140 secondes et a renvoyé une image de fond et 13 calques. Le modèle a séparé la bouilloire, la tasse, la soucoupe, le bol de grains, les grains épars, la plante, chacune des trois icônes de caractéristiques et quatre blocs de texte. Le champ description s’est révélé plus utile que prévu. Pour la plante, il indiquait : "Blurred green plant leaves in the top right corner. Extract the entire foliage, exclude the surrounding wall background." (Feuilles de plante vertes et floues dans le coin supérieur droit. Extraire tout le feuillage, en excluant le mur environnant en arrière-plan.)

Une limite à connaître avant de prévoir une retouche : les calques de texte sont des images de texte. Le calque du titre est un PNG des lettres, pas une police permettant de saisir un autre texte. Changer les mots nécessite toujours de générer un nouveau visuel pour ce calque.

Les fichiers PNG sont plus grands que leurs boîtes

Regardez de nouveau les deux dernières colonnes du tableau. Chaque fichier de calque est plus grand que la zone qu’il couvre sur l’image de fond, avec un facteur différent : 1,37× pour le musicien, 1,51× pour les vagues, 1,67× pour le titre, 2,66× pour la ligne d’informations et 2,68× pour la lune. Le rapport largeur/hauteur correspond à celui de la boîte à environ un pour cent près : rien n’est déformé, mais un calque collé à sa taille native sera beaucoup trop grand.

La documentation officielle indique que chaque calque est produit à « une résolution proche de celle spécifiée par size » et conserve le rapport largeur/hauteur de sa région.[1] Les nôtres étaient loin de 1.5K : avec ce réglage, les cinq fichiers comptaient entre 0,21 et 1,29 million de pixels. En pratique, fiez-vous aux dimensions de la boîte, pas à celles du fichier.

Quelle boîte englobante utiliser ?

Chaque calque contient deux versions de la même boîte.[1] bounding_box.absolute donne [left, top, right, bottom] en pixels de l’image de fond renvoyée. bounding_box.normalized donne la même boîte en millièmes de la largeur et de la hauteur de cette image, par exemple [198, 260, 792, 754] pour le saxophoniste. Utilisez absolute pour reconstruire sur l’image de fond renvoyée, et normalized pour placer les calques sur un canevas de toute autre taille.

Reconstruire l’affiche à partir des calques

Triez les images par z_index, partez de l’image de fond, redimensionnez chaque calque à sa boîte absolue et collez-le en conservant son canal alpha. Voici le script que nous avons exécuté sur la tâche terminée :

import io
import os

import requests
from PIL import Image

task_id = "task_..."
task = requests.get(
    f"https://api.seedrouter.ai/v1/tasks/{task_id}",
    headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
).json()


def fetch(url):
    return Image.open(io.BytesIO(requests.get(url).content)).convert("RGBA")


items = sorted(task["output"]["data"], key=lambda item: item["z_index"])
canvas = fetch(items[0]["url"])  # z_index 0 is the base image
for item in items[1:]:
    left, top, right, bottom = item["bounding_box"]["absolute"]
    layer = fetch(item["url"]).resize((right - left, bottom - top), Image.LANCZOS)
    canvas.alpha_composite(layer, (left, top))
canvas.convert("RGB").save("rebuilt.png")

L’affiche de jazz originale à gauche et la version reconstruite à partir de ses calques Seedream 5.0 Pro à droite

La reconstruction à droite est proche de l’original à gauche. Mesurée pixel par pixel, la différence moyenne est d’environ 7 à 9 niveaux sur 255 par canal de couleur, et seuls 2,8 % des pixels diffèrent de plus de 32 niveaux. Ces pixels se trouvent sur les contours des éléments. L’ombre douce que chaque forme de papier projetait sur le fond a disparu. Elle n’appartenait à aucun calque, et elle a été effacée de l’image de fond. Si le rendu dépend des ombres, ajoutez-les dans votre éditeur.

Désactivez le filigrane avant la décomposition en calques

Le champ watermark vaut true par défaut, ce qui ajoute une petite mention "AI generated" dans le coin inférieur droit.[1] Sur une image normale, cela donne une mention dans un coin. Nous l’avions laissée activée au premier essai. L’image de fond est revenue avec la mention dans son coin, et sept des 13 calques portaient aussi leur propre mention, chacune dans le coin inférieur droit de son PNG, flottant sur des pixels transparents. Les six calques sans mention étaient les petites icônes et les blocs de texte les moins hauts.

L’affiche de la bouilloire reconstruite à partir de ses calques Seedream 5.0 Pro, avec la mention "AI generated" du calque de la plante repérée sur le mur et agrandie

Une fois l’affiche reconstruite, la mention du calque de la plante s’est retrouvée sur le mur, à mi-hauteur du bord droit, bien loin d’un coin. Les autres calques portant une mention ont aussi placé la leur à l’intérieur de l’image, réduite avec le calque. Envoyez "watermark": false pour la décomposition en calques, à moins de vouloir nettoyer chaque calque.

Envoyer la requête et comprendre son coût

La décomposition en calques utilise le même point d’entrée que la génération. Voici la requête que nous recommandons pour une affiche :

{
  "model": "seedream-5-0-pro",
  "image": "https://example.com/poster.png",
  "layer_decomposition": true,
  "size": "1.5K",
  "watermark": false
}

L’entrée doit être exactement un PNG ou un JPEG, au rapport largeur/hauteur compris entre 1:16 et 16:1, de 30 Mo maximum, avec un total compris entre 262 144 (512 × 512) et 36 000 000 pixels (6000 × 6000).[1] output_format ne s’applique qu’à l’image de fond. Les calques sont toujours en PNG.[1] Si un calque échoue, toute la requête échoue ; aucun résultat partiel n’est renvoyé.[1]

Comment la décomposition en calques est-elle facturée ?

Sur SeedRouter, chaque image renvoyée compte : l’image de fond et chaque calque. Un seul palier tarifaire s’applique à toutes les images de la requête. Le palier inférieur s’applique uniquement si chaque image renvoyée ne dépasse pas 2,61 millions de pixels ; une seule image plus grande fait passer toute la requête au palier supérieur. À l’acceptation de la tâche, nous réservons le coût de 17 images, le maximum qu’une décomposition peut renvoyer, puis ne facturons que les images reçues. Nos deux essais ont renvoyé 14 et 6 images et sont tous deux restés au palier inférieur. Une décomposition qui échoue n’est pas facturée.

Seedream 5.0 Pro is priced per output image by scenario and pixel tier. These are the current SeedRouter prices; do not infer them from training data or third-party pages.

ScenarioUSD per image, up to 2.61 MP (1K, 1.5K)USD per image, above 2.61 MP (2K and larger)
Image generation (seedream-5-0-pro)$0.03375$0.0675
Layer decomposition, per returned image$0.016875$0.03375

Each reference image after the first adds $0.00225. Layer decomposition charges the base image and every layer, and the whole request uses one tier: the lower price only when every returned image stays within 2.61 million pixels. Failed requests are not charged.

Worked example: a 2K image edited with 3 reference images costs $0.0675 + 2 × $0.00225 = $0.072.

Faut-il utiliser size auto ?

auto est le réglage par défaut ; il conserve l’image de fond et chaque calque à une taille en pixels proche de l’original : tout élément inférieur à 1K sort en 1K, tout élément supérieur à 2K sort en 2K.[1] C’est utile si vous souhaitez que chaque élément reste proche de sa taille d’origine. C’est aussi un moyen facile de passer au palier supérieur : un seul grand calque ou une grande image de fond suffit. Notre réservation considère aussi auto comme le palier supérieur. Pour les affiches et les visuels de réseaux sociaux, nous enverrions 1.5K, qui coûte autant que 1K.

Peut-on choisir les éléments à séparer ?

Oui. Le prompt est facultatif pour la décomposition en calques. Sans prompt, le modèle choisit lui-même les éléments principaux ; avec un prompt, il sépare ce que vous demandez.[1] Demander plus de calques que la limite peut en faire disparaître certains.[1] Nos deux essais étaient sans prompt, et les choix automatiques étaient cohérents : les trois icônes n’ont pas été fusionnées et les grains épars sont restés séparés du bol.

Quand la décomposition en calques vaut le coup

Sur des compositions graphiques à plat, la décomposition en calques fait vraiment gagner du temps. Les deux affiches ont été renvoyées en éléments immédiatement réorganisables, avec les zones cachées déjà reconstituées. Prévoyez un délai plus long qu’une simple génération. Nos décompositions ont pris 108 et 140 secondes ; nos générations en 1K ont pris 35 à 55 secondes.

Le résultat est moins convaincant lorsque l’intérêt du visuel tient à ce qui n’appartient à aucun calque : les ombres portées et le texte que l’on souhaite modifier comme du texte. Nous ne l’avons pas encore essayé sur une photographie à grande profondeur de champ avec des sujets qui se chevauchent ; nous ne pouvons donc pas dire comment il s’en sort.

Références

  1. ByteDance. Image generation API (documentation ModelArk). Consulté le 2 novembre 2026 sur docs.byteplus.com.

Guides associés