Seedance 2.5 est disponible sur EvoLinkEssayer Seedance 2.5
Une affiche plate se décompose en une image de base et des calques transparents distincts pour le texte, le sujet et les décorations
Tutoriel

Découper une image en calques modifiables avec l'API Seedream 5.0 Pro Layerize

Jacey
Jacey
Founder
15 août 2026
10 min de lecture
La plupart des « retouches d'image par IA » consistent encore à régénérer toute l'image en espérant que les parties réussies survivent. Seedream 5.0 Pro Layerize procède autrement : vous lui confiez une image finie, et il vous la rend démontée — une image de base plus des calques PNG transparents distincts, chacun étant un élément que vous pouvez déplacer, redimensionner ou remplacer séparément.
Le chemin le plus court : POST https://api.evolink.ai/v1/images/generations avec model: "doubao-seedream-5.0-pro-layerize" et exactement une URL d'image. La réponse est un identifiant de tâche, pas une image — ce modèle est asynchrone et prend environ 120 secondes. Interrogez ensuite GET /v1/tasks/{task_id} jusqu'à ce que status passe à completed, puis récupérez les calques dans result_data.
Ce guide couvre les points où l'on se trompe facilement : les trois façons d'indiquer quels éléments découper, pourquoi la facturation par image produite fait du nombre de calques la variable déterminante, et les contraintes d'entrée plus strictes que pour une génération classique.

Ce que vous récupérez

Une requête produit 1 à 17 images : une image de base, plus jusqu'à 16 calques.
SortieFormatContenu
Image de basesuit output_format (jpeg par défaut)Le fond, reconstruit sous tout ce qui a été prélevé
Calques 1 à 16toujours PNG avec couche alpha, indépendamment de output_formatUn élément chacun, transparent partout ailleurs

Le point qui mérite qu'on s'y arrête, c'est l'image de base. Quand Layerize prélève un titre sur une affiche, il ne laisse pas un trou : ce qui se trouvait sous le texte est reconstruit. C'est la différence de fond avec un masque de segmentation, et la raison pour laquelle la sortie s'intègre directement dans un outil de design.

Le nombre de calques ne se décide pas. Aucun paramètre ne le contrôle ; c'est le résultat de la décomposition qui tranche. Et il n'existe pas de succès partiel — si un seul calque échoue, toute la requête échoue et fait l'objet d'un remboursement intégral.

Trois façons de cibler les calques

Le champ prompt est facultatif, et chacune des trois approches répond à un besoin différent.
Les trois modes de ciblage de l'API Seedream 5.0 Pro Layerize : décomposition automatique complète, sélection sémantique des éléments et sélection exacte par boîte englobante
Les trois modes de ciblage de l'API Seedream 5.0 Pro Layerize : décomposition automatique complète, sélection sémantique des éléments et sélection exacte par boîte englobante

1. Omettre le prompt — décomposition automatique complète

{
  "model": "doubao-seedream-5.0-pro-layerize",
  "image_urls": ["https://example.com/poster.png"],
  "quality": "auto",
  "output_format": "jpeg"
}

Sans aucun prompt, le modèle repère lui-même tous les éléments importants — blocs de texte, sujets, décorations, arrière-plan — et découpe chacun en un calque distinct. C'est l'usage principal du modèle, et une affiche complexe revient couramment avec dix calques ou plus.

Un détail d'implémentation qui piège beaucoup de monde : omettez complètement la clé, n'envoyez pas une chaîne vide. "prompt": "" est interprété en amont comme « l'utilisateur a fourni une instruction vide » et fait perdre la détection automatique. Le corps de la requête ne doit tout simplement pas contenir la clé prompt.

2. Langage naturel — nommer les éléments voulus

{
  "model": "doubao-seedream-5.0-pro-layerize",
  "prompt": "Sépare le perroquet et le texte du titre",
  "image_urls": ["https://example.com/poster.png"],
  "quality": "2K"
}

À utiliser quand seuls deux ou trois éléments vous intéressent et que vous ne voulez pas payer une décomposition complète. Les éléments sont identifiés sémantiquement : « le texte du titre » suffit, sans savoir où il se trouve.

3. Coordonnées bbox — délimiter la zone exacte

{
  "model": "doubao-seedream-5.0-pro-layerize",
  "prompt": "texte du titre<bbox>179 58 809 197</bbox>, 1 perroquet<bbox>330 274 641 991</bbox>",
  "image_urls": ["https://example.com/poster.png"],
  "quality": "1.5K"
}
La balise <bbox> prend quatre nombres en coordonnées normalisées 01000 (et non en pixels), dans l'ordre gauche haut droite bas. Recourez-y quand le langage naturel devient ambigu — deux produits similaires dans le même cadre, ou plusieurs blocs de texte où « le titre » pourrait désigner l'un ou l'autre.
Une méthode efficace : lancer d'abord une décomposition automatique, relever les valeurs bounding_box.normalized des calques obtenus, puis relancer avec ces coordonnées pour obtenir exactement le découpage voulu.

Le flux asynchrone

Étape 1 — soumettre la tâche

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 réponse est un identifiant de tâche, pas une image :

{
  "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 }
}
Notez credits_reserved : il s'agit d'une estimation réservée en amont, calibrée sur le pire cas. Le montant réellement facturé se calcule à partir des images effectivement produites.

Étape 2 — interroger jusqu'à la fin

curl https://api.evolink.ai/v1/tasks/task-unified-1757165031-seedream5prolayerize \
  -H "Authorization: Bearer $EVOLINK_API_KEY"
status passe par pendingprocessingcompleted (ou failed). Prévoyez environ 120 secondes ; une interrogation toutes les 5 secondes suffit largement. Si vous préférez éviter l'interrogation, passez une callback_url à la soumission — HTTPS uniquement, pas d'adresses IP internes, déclenchée après confirmation de la facturation, avec jusqu'à 3 tentatives à 1 s / 2 s / 4 s.

Étape 3 — lire les calques

Chaque entrée de result_data porte les métadonnées nécessaires pour reconstituer la composition sur n'importe quel canevas :
ChampSignification
z_indexOrdre d'empilement. 0 correspond à l'image de base, les calques commencent à 1
bounding_box.absolutePosition dans le repère en pixels de l'image de base
bounding_box.normalizedLe même rectangle en coordonnées 01000
nameLibellé généré par le modèle, par exemple « ara écarlate »
descriptionDescription plus détaillée de l'élément
L'image de base ne porte que z_index: 0, sans name ni bounding_box. Trier par z_index et composer chaque calque à son rectangle absolute reproduit exactement l'image d'origine.
Enregistrez les fichiers rapidement : les liens des images générées expirent au bout de 24 heures.

Les contraintes d'entrée sont plus strictes qu'en génération classique

C'est ici que les requêtes échouent le plus souvent, car Layerize n'accepte pas tout ce qu'accepte la génération Seedream classique.

ContrainteValeur
Nombre d'imagesExactement 1. Aucune, ou deux et plus, provoque une erreur
Formats.png, .jpeg, .jpg uniquement — le webp est refusé
Taille du fichier30 Mo maximum
Pixels totauxde 262 144 à 36 000 000 au total — 512×512 est le plus petit carré admissible
Rapport d'aspectentre 1:16 et 16:1
URLdoit être accessible directement par le serveur, ou déclencher un téléchargement direct
Deux points reviennent sans cesse. Le webp passe en génération classique mais il est refusé ici : si votre chaîne de traitement stocke du webp, convertissez avant l'appel. Par ailleurs, le plancher de 262 144 pixels est plus haut qu'en génération classique, les vignettes échouent donc d'emblée.
quality est également plus restreint : le mode calques n'accepte que des paliers (auto, 1K, 1.5K, 2K). Passer un rapport comme 16:9 ou des dimensions explicites comme 2048x2048 renvoie une erreur. Avec auto, la sortie suit l'entrée — conservée telle quelle si l'original se situe entre 921 600 et 4 624 220 pixels, remontée à 1K en dessous, plafonnée à 2K au-dessus.

Facturation : on compte les images produites, pas les requêtes

C'est ce qui surprend le plus à la première facture. Chaque image produite est tarifée selon son propre nombre de pixels — ni selon la taille de l'image de base, ni à la requête.

Sur EvoLink, Layerize est facturé 20 % sous le tarif public BytePlus :

PosteTarif public BytePlusEvoLink
Image d'entrée0,003 $0,0024 $
Image produite, palier bas (≤ 2 610 000 px)0,0225 $0,018 $
Image produite, palier haut (> 2 610 000 px)0,045 $0,036 $
1K et 1.5K coûtent le même prix — tous deux relèvent du palier bas. Le palier est déterminé image par image : une image de base en 2K est facturée au palier haut, tandis que les petits calques de texte qui en ont été prélevés relèvent du palier bas.

Deux exemples chiffrés :

Une décomposition 1K simple en trois calques : 1 image d'entrée (0,0024 $) + 1 image de base (0,018 $) + 3 calques (0,054 $) = 0,0744 $
Une affiche 2K qui se décompose en 8 petits calques de texte : 1 image d'entrée (0,0024 $) + 1 image de base au palier haut (0,036 $) + 8 calques au palier bas (0,144 $) = 0,1824 $
La leçon : c'est le nombre de calques qui pèse sur le coût, pas la résolution. Huit petits calques de texte coûtent quatre fois le prix de l'image de base en 2K. Si vous n'avez besoin que du produit et du titre, précisez-le dans le prompt plutôt que de lancer une décomposition automatique complète — passer de dix éléments à deux représente une économie réelle, pas un réglage marginal.

Quatre pièges à éviter

  1. Envoyer "prompt": "" au lieu d'omettre la clé. Cela supprime la détection automatique, la meilleure caractéristique du modèle.
  2. Croire que output_format: "png" agit sur les calques. Il ne contrôle que l'image de base. Les calques sont toujours des PNG avec couche alpha.
  3. Traiter un échec comme un succès partiel. Le succès partiel n'existe pas. Un calque en échec fait échouer l'ensemble, avec remboursement intégral : la logique de reprise doit donc raisonner en tout ou rien.
  4. Laisser les liens expirer. Au bout de 24 heures, ils disparaissent. Téléchargez dans le même traitement que celui qui interroge la tâche.

Questions fréquentes

Combien de calques puis-je obtenir ?

Entre 1 et 16 calques plus l'image de base, soit 17 images produites au maximum. Vous ne pouvez pas demander un nombre précis : c'est le résultat de la décomposition qui décide.

Puis-je choisir quels éléments deviennent des calques ?

Oui, de trois façons : omettre le prompt pour une décomposition automatique complète, décrire les éléments en langage naturel, ou les délimiter avec des balises <bbox> en coordonnées normalisées 0–1000.

Les calques sont-ils vraiment des PNG transparents ?

Oui — chaque calque est un PNG avec couche alpha, sans que output_format n'y change quoi que ce soit. Ce paramètre ne concerne que l'image de base.

Combien de temps prend un appel ?

Environ 120 secondes. C'est nettement plus lent qu'une génération d'image classique, d'où le fonctionnement asynchrone de l'API. Utilisez callback_url si vous ne voulez pas interroger la tâche.

Que se passe-t-il si un calque échoue ?

Toute la requête échoue — il n'y a pas de succès partiel — et elle est intégralement remboursée.

Est-ce que cela fonctionne avec n'importe quelle image ?

Il faut un PNG ou un JPEG d'au moins 262 144 pixels au total — 512×512 par exemple — de moins de 30 Mo, avec un rapport d'aspect compris entre 1:16 et 16:1. Le webp est refusé alors que la génération classique l'accepte.


Pour essayer directement dans le navigateur, rendez-vous sur la page du modèle Seedream 5.0 Pro : le playground propose un mode Layer Split avec les mêmes trois options de ciblage. Les tarifs en vigueur figurent sur la page des prix, et la note de lancement résume ce qui a été livré.

Prêt à réduire vos coûts IA de 89 % ?

Commencez avec EvoLink dès aujourd'hui et découvrez la puissance du routage intelligent des API.