Seedream 5.0 Pro 레이어 분리: 반환 결과와 이미지 재구성 방법
Seedream 5.0 Pro 레이어 분리 API를 직접 테스트했습니다. 배경 베이스 이미지와 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 순으로 정렬하고 배경 베이스 이미지부터 시작합니다. 각 레이어를 절대 좌표 경계 상자의 크기로 조정한 뒤 알파 채널을 사용해 합성합니다. 완료된 태스크에 실행한 스크립트는 다음과 같습니다.
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단계였고, 32단계 넘게 차이 나는 픽셀은 2.8%뿐이었습니다. 이 픽셀들은 요소의 윤곽에 모여 있습니다. 종이 모양들이 배경에 드리우던 부드러운 그림자는 사라졌습니다. 어느 레이어에도 속하지 않았고, 배경 베이스 이미지에서도 지워졌기 때문입니다. 그림자가 중요한 디자인이라면 편집기에서 다시 넣으세요.
레이어 분리 전에 워터마크를 끄세요
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에서는 배경 베이스 이미지와 각 레이어를 포함해 반환된 모든 이미지가 과금 대상입니다. 요청 전체에 하나의 요금 단계를 적용합니다. 반환된 이미지가 모두 2.61메가픽셀 이하일 때만 낮은 요금 단계에 머물고, 한 장이라도 초과하면 요청 전체가 높은 요금 단계로 올라갑니다. 태스크 접수 시 분리 결과의 최대치인 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.
size에 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에서 확인했습니다.



