Seedream 5.0 Pro 图层分离:返回什么,如何合成还原
通过 API 使用 Seedream 5.0 Pro 图层分离,实测底图与透明 PNG 图层的内容、尺寸和定位方式,说明计费规则,并提供可运行的合成代码。
以 Markdown 阅读Seedream 5.0 Pro 图层分离接收一张成品图,返回底图和最多 16 个透明 PNG 图层,每层都有名称、描述、堆叠顺序和边界框。[1] 在 API 中,只需在普通图像请求里开启 layer_decomposition。发送一张图,拿回拆开的各个部分。
我们在 2026 年十一月 1 日和 2 日,在 SeedRouter 上用自己生成的两张海报各跑了一次。结论很直接:平面设计拆得干净,但图层文件的尺寸并不等于它在画布上占的尺寸;默认水印若不关闭,合成后会散落在画面各处。下面是具体数据和代码。参数见 Seedream 5.0 Pro API 文档,Playground 在模型页面。
一次图层分解请求返回了什么
测试图是一张 1248 × 1872 的爵士乐海报:衬线字体标题、珊瑚色月亮、由纸片海浪剪出的萨克斯演奏者、底部的一带海浪,以及一行活动信息。我们设置 size: "1.5K",不填提示词,并关闭水印。任务耗时 108 秒,返回六张图像:底图和五个图层。

z_index | name(返回原文) | 底图上的边界框 | PNG 文件 |
|---|---|---|---|
| 0 | 底图 | 整张画布 | 1248 × 1872 JPEG |
| 1 | Wave paper-cut decoration | 1091 × 375 | 1650 × 568 |
| 2 | Orange circular sun decoration | 415 × 418 | 1112 × 1121 |
| 3 | Saxophone player main figure | 742 × 927 | 1016 × 1270 |
| 4 | Top main title text | 1089 × 279 | 1815 × 465 |
| 5 | Bottom event description text | 831 × 36 | 2214 × 96 |
有两点比我们预期的好。底图变成了一张空白纸,所有元素都被移除,原来的位置补上了纸张纹理。月亮图层(模型把它命名为太阳)则是一个完整的圆,连原图中被萨克斯遮住的部分也补全了。把演奏者往旁边移,后面不会留洞。
第一次测试的画面更复杂:一张 1024 × 1536 的手冲壶产品广告,以 1K 提交,不填提示词。耗时 140 秒,返回底图和 13 个图层。模型把壶、杯子、杯碟、装豆子的碗、散落的豆子、植物、三个功能图标和四块文字都分别拆了出来。description 字段比我们想象的有用。植物的描述是:"Blurred green plant leaves in the top right corner. Extract the entire foliage, exclude the surrounding wall background."(右上角模糊的绿色植物叶片。提取全部枝叶,排除周围的墙面背景。)
打算用它改图前,要先知道一个限制:文字图层是文字的图片。标题图层是一张由像素组成的字形 PNG,不能像字体那样重新输入文字。要改文案,仍然得重新生成这一层的图像。
为什么 PNG 文件尺寸大于边界框
再看表格的最后两列。每个图层文件的尺寸都大于它在底图上覆盖的区域,而且放大倍数各不相同:演奏者为 1.37×,海浪为 1.51×,标题为 1.67×,活动信息为 2.66×,月亮为 2.68×。宽高比与边界框的偏差在约百分之一以内,所以没有变形,但按原始尺寸粘贴会大出很多。
官方文档说,每个图层会以“接近 size 指定分辨率的分辨率”输出,并保留所属区域的宽高比。[1] 我们拿到的文件并不接近 1.5K:在这个设置下,五个文件的像素总数从 0.21 到 1.29 百万不等。实际合成时,应以边界框的数值为准,不能直接用文件尺寸。
合成图层该用哪个边界框?
每个图层都附带同一个边界框的两种表示。[1] bounding_box.absolute 是以返回底图的像素为单位的 [left, top, right, bottom]。bounding_box.normalized 则以底图宽、高的千分之一为单位表示同一个框,例如萨克斯演奏者为 [198, 260, 792, 754]。在返回的底图上重建时用 absolute;要把图层放到其他尺寸的画布上,则用 normalized。
用代码把海报重新合成
按 z_index 排序,从底图开始,将每层缩放到绝对坐标边界框的大小,再按其 alpha 通道叠加。这是我们对已完成任务运行的脚本:
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")
右侧的合成图与左侧原图很接近。逐像素测量,每个颜色通道在 255 级数值范围内的平均差异约为 7 到 9 级,仅有 2.8% 的像素差异超过 32 级。这些像素集中在各元素的轮廓处。每个纸片形状投在背景上的柔和阴影消失了:它没有被分到任何图层,底图上也被涂掉了。如果设计效果依赖阴影,需要在编辑器里补回来。
分解图层前先关闭水印
watermark 默认值为 true,会在右下角添加一个小小的“AI generated”标记。[1] 普通图像只会在一个角落出现一个标记。我们第一次测试没有关闭它,结果底图的角落带了标记;13 个图层中的七个也带了标记,分别位于各自 PNG 的右下角,浮在透明像素之上。没有标记的六个图层是小图标和较细的文字块。

重新合成海报后,植物层的标记落在右边缘中段的墙面上,离任何一个角落都很远。其他带标记的图层也把标记带进了画面内部,随图层一起缩小。除非准备逐层清理,否则图层分解请求应传入 "watermark": false。
如何发送请求,费用怎么算
图层分解与图像生成使用同一个端点。处理海报时,我们建议这样请求:
{
"model": "seedream-5-0-pro",
"image": "https://example.com/poster.png",
"layer_decomposition": true,
"size": "1.5K",
"watermark": false
}输入必须且只能是一张 PNG 或 JPEG,宽高比在 1:16 至 16:1 之间,文件不超过 30 MB,总像素数在 262,144(512 × 512)至 36,000,000(6000 × 6000)之间。[1] output_format 仅设置底图的格式,图层始终是 PNG。[1] 只要一个图层失败,整次请求就会失败,不会返回部分结果。[1]
图层分解如何计费?
在 SeedRouter 上,每张返回图像都计费,包括底图和各个图层,整次请求统一采用一个价格档位。只有每张返回图像都不超过 261 万像素,才采用低价档;只要有一张超过,整次请求就采用高价档。任务受理时,我们按一次分解最多可能返回的 17 张图像预留费用,最终只按实际返回数量收费。我们的两次测试分别返回 14 和 6 张图像,都采用低价档。分解失败不收费。
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.
| Scenario | USD 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.
尺寸该选 auto 吗?
auto 是默认值,会让底图和各图层接近原始像素尺寸:小于 1K 的按 1K 输出,大于 2K 的按 2K 输出。[1] 希望各个部分接近原始尺寸时,这样很方便。但也容易进入高价档,因为只要一个大图层或一张大底图就够了。我们预留费用时也将 auto 按高价档计算。对于海报和社交媒体配图,我们会传 1.5K,它与 1K 同价。
能指定要拆分哪些元素吗?
可以。图层分解的 prompt 是可选的。不填时,模型自行挑出主要元素;填写后,则按你的要求拆分。[1] 要求的图层数超过上限时,部分图层可能被舍弃。[1] 两次测试我们都没填提示词,自动选择的结果合理:三个图标没有合并,散落的豆子也没有和碗合在一起。
哪些场景值得用图层分解
做平面设计时,图层分解确实省时间。两张海报返回的各个部分都能直接重新排版,被遮挡的区域也已补全。不过,它会比普通生成更慢。我们的两次分解耗时 108 和 140 秒,1K 图像生成则需要 35 到 55 秒。
如果设计的关键在于投影,或者需要像文字一样编辑的文本,它就不那么好用了:这些内容无法完整地归到某个图层中。我们还没用景深较大、主体相互遮挡的照片测试过,所以暂时无法判断这类照片的处理效果。
参考资料
- ByteDance。Image generation API(ModelArk 文档)。于 2026 年十一月 2 日查阅 docs.byteplus.com。



