
Seedream 5.0 Pro Layerize API로 이미지 한 장을 편집 가능한 레이어로 분리하기
https://api.evolink.ai/v1/images/generations 로 POST 하고, model 에 doubao-seedream-5.0-pro-layerize 를 지정한 뒤 이미지 URL을 정확히 한 장 넘깁니다. 돌아오는 것은 이미지가 아니라 작업 ID입니다. 이 모델은 비동기이며 약 120초가 걸립니다. 이후 GET /v1/tasks/{task_id} 를 폴링하다가 status 가 completed 가 되면 result_data 에서 레이어를 꺼냅니다.이 글은 틀리기 쉬운 부분을 중심으로 다룹니다. "어떤 요소를 분리할지" 지정하는 세 가지 방법, 장당 과금 때문에 레이어 수가 비용의 주요 변수가 되는 이유, 그리고 일반 생성보다 엄격한 입력 제약입니다.
무엇을 돌려받는가
| 출력 | 형식 | 내용 |
|---|---|---|
| 베이스 이미지 | output_format 을 따름(기본값 jpeg) | 배경이며, 떼어낸 요소 아래는 자동으로 복원됨 |
| 레이어 1~16 | 항상 alpha 채널이 있는 PNG, output_format 의 영향을 받지 않음 | 한 장당 요소 하나, 나머지는 투명 |
주목할 것은 베이스 이미지입니다. Layerize가 포스터에서 헤드라인을 떼어낼 때 그 자리에 구멍이 남지 않습니다. 글자 아래에 있던 내용이 재구성됩니다. 이것이 세그멘테이션 마스크와의 본질적인 차이이며, 결과물을 바로 디자인 툴에 넣을 수 있는 이유입니다.
레이어를 지정하는 세 가지 방법
prompt 는 선택 항목이며, 세 가지 사용법이 각각 다른 작업에 대응합니다.
1. prompt를 보내지 않기 — 자동 전체 분해
{
"model": "doubao-seedream-5.0-pro-layerize",
"image_urls": ["https://example.com/poster.png"],
"quality": "auto",
"output_format": "jpeg"
}프롬프트를 전혀 주지 않으면 모델이 이미지 안의 주요 요소를 모두 스스로 찾아냅니다. 텍스트 블록, 피사체, 장식, 배경을 하나씩 독립 레이어로 분리합니다. 이것이 이 모델의 주된 용도이며, 복잡한 포스터라면 10장 이상으로 나뉘는 것이 보통입니다.
"prompt": "" 는 상류에서 "사용자가 빈 지시를 주었다"로 해석되어 자동 감지 의미가 사라집니다. 요청 본문에 prompt 키 자체를 넣지 않는 것이 정답입니다.2. 자연어 — 원하는 요소를 지목하기
{
"model": "doubao-seedream-5.0-pro-layerize",
"prompt": "앵무새와 제목 텍스트를 분리해줘",
"image_urls": ["https://example.com/poster.png"],
"quality": "2K"
}두세 개 요소만 필요하고 전체 분해 비용을 치르고 싶지 않을 때 사용합니다. 요소는 의미적으로 식별되므로 "제목 텍스트"라고만 해도 되고, 그것이 어디 있는지 알 필요가 없습니다.
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> 태그 안에는 숫자 네 개가 들어가며, 픽셀이 아니라 정규화된 0~1000 좌표를 사용하고 순서는 왼쪽 위 오른쪽 아래 입니다. 자연어로는 모호해지는 경우에 사용합니다. 한 화면에 비슷한 제품이 둘 있거나, 텍스트 블록이 여러 개여서 "그 제목"이 어느 쪽이든 될 수 있는 상황입니다.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 는 같은 가격이며 둘 다 저단계에 들어갑니다. 단계는 장마다 판정되므로 2K 베이스 이미지는 고단계로, 거기서 떼어낸 작은 텍스트 레이어는 저단계로 과금됩니다.실제 계산 예를 두 개 들면 이렇습니다.
걸려 넘어지기 쉬운 네 가지
- 키를 생략하지 않고
"prompt": ""를 보내기. 이 모델에서 가장 쓸모 있는 자동 감지가 무력화됩니다. output_format: "png"가 레이어에 적용된다고 착각하기. 이것은 베이스 이미지만 제어합니다. 레이어는 항상 alpha 채널이 있는 PNG입니다.- 실패를 부분 성공으로 처리하기. 부분 성공은 없습니다. 한 장이라도 실패하면 전체가 실패하고 전액 환불되므로, 재시도 로직은 "전부 아니면 전무"를 전제로 작성해야 합니다.
- 링크를 만료시키기. 24시간이면 사라집니다. 폴링하는 같은 작업 안에서 다운로드하세요.
자주 묻는 질문
최대 몇 개의 레이어를 얻을 수 있나요?
레이어는 1~16장이며 여기에 베이스 이미지를 더해 최대 17장의 출력 이미지입니다. 장수를 지정할 수는 없고 분해 결과에 따라 결정됩니다.
어떤 요소를 레이어로 만들지 제어할 수 있나요?
<bbox> 태그로 0~1000 정규화 좌표를 지정하면 됩니다.레이어는 정말 투명한 PNG인가요?
output_format 의 영향을 받지 않습니다. 그 설정은 베이스 이미지에만 적용됩니다.한 번 호출에 얼마나 걸리나요?
callback_url 을 사용하세요.레이어 하나가 실패하면 어떻게 되나요?
요청 전체가 실패하고(부분 성공은 없습니다) 전액 환불됩니다.
어떤 이미지든 분해할 수 있나요?
PNG 또는 JPEG여야 하고 총 픽셀 262,144 이상(예: 512×512), 30MB 미만, 종횡비 1:16 ~ 16:1 이어야 합니다. 일반 생성에서는 받아들여지는 webp도 여기서는 거부됩니다.


