
Seedream 5.0 Pro Layerize API で 1 枚の画像を編集可能なレイヤーに分解する
https://api.evolink.ai/v1/images/generations に POST し、model に doubao-seedream-5.0-pro-layerize を指定して、画像 URL をちょうど 1 枚渡します。返ってくるのは画像ではなくタスク ID です。このモデルは非同期で、所要時間はおよそ 120 秒。その後 GET /v1/tasks/{task_id} をポーリングし、status が completed になったら result_data からレイヤーを取り出します。この記事では、つまずきやすい部分を中心に扱います。「どの要素を分解するか」を指定する 3 つの方法、枚数課金によってレイヤー数がコストの主変数になる理由、そして通常生成より厳しい入力制約です。
何が返ってくるのか
| 出力 | 形式 | 内容 |
|---|---|---|
| ベース画像 | output_format に従う(既定は jpeg) | 背景。取り除かれた要素の下は自動的に再構築される |
| レイヤー 1〜16 | 常に alpha 付き PNG、output_format の影響を受けない | 1 枚につき 1 要素、それ以外は透明 |
注目すべきはベース画像です。Layerize がポスターから見出しを剥がすとき、そこに穴は残りません。文字の下にあった内容が再構築されます。これがセグメンテーションマスクとの本質的な違いであり、出力をそのままデザインツールに持ち込める理由です。
レイヤーを指定する 3 つの方法
prompt は任意項目で、3 つの使い方がそれぞれ別の用途に対応します。
1. prompt を送らない — 自動で全分解
{
"model": "doubao-seedream-5.0-pro-layerize",
"image_urls": ["https://example.com/poster.png"],
"quality": "auto",
"output_format": "jpeg"
}プロンプトを一切与えない場合、モデルは画像内の主要な要素をすべて自分で検出します。テキストブロック、被写体、装飾、背景を 1 つずつ独立したレイヤーに分解します。これがこのモデルの主用途で、複雑なポスターなら 10 枚以上に分解されるのが普通です。
"prompt": "" は上流で「ユーザーが空の指示を与えた」と解釈され、自動検出の意味が失われます。リクエストボディに prompt キー自体を含めないのが正解です。2. 自然言語 — 欲しい要素を名指しする
{
"model": "doubao-seedream-5.0-pro-layerize",
"prompt": "オウムとタイトル文字を分解して",
"image_urls": ["https://example.com/poster.png"],
"quality": "2K"
}2〜3 個の要素だけが必要で、全分解の費用をかけたくない場合に使います。要素は意味的に識別されるため、「タイトル文字」と書くだけでよく、位置を知っている必要はありません。
3. bbox 座標 — 領域を厳密に指定する
{
"model": "doubao-seedream-5.0-pro-layerize",
"prompt": "タイトル文字<bbox>179 58 809 197</bbox>, オウム 1 羽<bbox>330 274 641 991</bbox>",
"image_urls": ["https://example.com/poster.png"],
"quality": "1.5K"
}<bbox> タグの中は 4 つの数値で、ピクセルではなく正規化された 0〜1000 座標を使い、順序は 左 上 右 下 です。自然言語では曖昧になる場合に使います。同じ画面に似た商品が 2 つある、あるいはテキストブロックが複数あって「あの見出し」がどちらとも取れる、といった状況です。bounding_box.normalized を読み取ってから、その座標で再実行すると狙いどおりの分割が得られます。非同期フロー
ステップ 1 — タスクを投入する
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"
}'返ってくるのは画像ではなくタスクハンドルです。
{
"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 }
}credits_reserved は最悪ケースを想定して事前に確保される見積もり値です。実際の請求は、返ってきた画像の枚数とサイズから計算されます。ステップ 2 — 完了までポーリングする
curl https://api.evolink.ai/v1/tasks/task-unified-1757165031-seedream5prolayerize \
-H "Authorization: Bearer $EVOLINK_API_KEY"status は pending → processing → completed(または failed)と遷移します。120 秒程度を見込み、5 秒間隔のポーリングで十分です。ポーリングを避けたい場合は投入時に callback_url を渡します。HTTPS のみ対応、内部 IP は禁止、課金確定後に発火し、失敗時は最大 3 回(1 秒 / 2 秒 / 4 秒間隔)再試行されます。ステップ 3 — レイヤーを読み取る
result_data の各要素には、任意のキャンバス上で構図を再現するのに十分なメタデータが含まれています。| フィールド | 意味 |
|---|---|
z_index | 重ね順。0 がベース画像、レイヤーは 1 から増加 |
bounding_box.absolute | ベース画像のピクセル座標系での位置 |
bounding_box.normalized | 同じ矩形を 0〜1000 の正規化座標で表したもの |
name | モデルが生成した名称(例:「緋色のコンゴウインコ」) |
description | その要素についてのより詳しい説明 |
z_index: 0 のみを持ち、name と bounding_box はありません。z_index でソートし、各レイヤーを absolute の矩形位置に合成すれば、元の画像を正確に再現できます。入力制約は通常生成より厳しい
このフローで最も失敗が多いのがここです。Layerize は通常の Seedream 生成が受け付ける入力をすべて受け付けるわけではありません。
| 制約 | 値 |
|---|---|
| 画像枚数 | ちょうど 1 枚。0 枚でも 2 枚以上でもエラー |
| 形式 | .png、.jpeg、.jpg のみ — webp は拒否される |
| ファイルサイズ | 30MB 以下 |
| 総ピクセル数 | 合計 262,144 〜 36,000,000 — 512×512 が条件を満たす最小の正方形 |
| アスペクト比 | 1:16 〜 16:1 |
| URL | サーバーから直接アクセスできるか、アクセス時に直接ダウンロードが始まること |
quality の選択肢も狭く、レイヤーモードは段階指定のみ(auto、1K、1.5K、2K)を受け付けます。比率(16:9 など)や具体的なピクセル数(2048x2048 など)を渡すとエラーになります。auto では出力が入力に追随し、元サイズが 921,600 〜 4,624,220 ピクセルの範囲ならそのまま、それ未満なら 1K、それを超えるなら 2K で出力されます。課金:数えるのはリクエスト数ではなく出力画像数
EvoLink の Layerize は BytePlus 公式価格より 20% 安く設定されています。
| 項目 | BytePlus 公式価格 | EvoLink |
|---|---|---|
| 入力画像 | $0.003 | $0.0024 |
| 出力画像 低段階(2,610,000 ピクセル以下) | $0.0225 | $0.018 |
| 出力画像 高段階(2,610,000 ピクセル超) | $0.045 | $0.036 |
1K と 1.5K は同価格で、どちらも低段階に入ります。段階は 1 枚ごとに判定されるため、2K のベース画像は高段階、そこから剥がした小さな文字レイヤーは低段階で課金されます。実際の計算例を 2 つ挙げます。
つまずきやすい 4 点
- キーを省略せず
"prompt": ""を送ってしまう。このモデルで最も有用な自動検出が無効になります。 output_format: "png"がレイヤーに効くと思い込む。これはベース画像のみを制御します。レイヤーは常に alpha 付き PNG です。- 失敗を部分的な成功として扱う。部分成功は存在しません。1 枚でも失敗すれば全体が失敗し全額返金されるため、リトライ処理は「全か無か」を前提に書いてください。
- リンクを失効させる。24 時間で消えます。ポーリングと同じジョブ内でダウンロードしてください。
よくある質問
最大で何枚のレイヤーが得られますか?
レイヤーは 1〜16 枚、これにベース画像を加えて最大 17 枚の出力画像です。枚数を指定することはできず、分解結果によって決まります。
どの要素をレイヤーにするか制御できますか?
<bbox> タグで 0〜1000 の正規化座標を指定する、のいずれかです。レイヤーは本当に透過 PNG ですか?
output_format の影響を受けません。その設定はベース画像のみに適用されます。1 回の呼び出しにどれくらいかかりますか?
callback_url を使ってください。レイヤーが 1 枚失敗したらどうなりますか?
リクエスト全体が失敗し(部分成功はありません)、全額返金されます。
どんな画像でも分解できますか?
PNG または JPEG で、総ピクセル数 262,144 以上(例:512×512)、30MB 未満、アスペクト比 1:16 〜 16:1 である必要があります。通常生成では受け付けられる webp も、ここでは拒否されます。


