Seedance 2.5가 EvoLink에 출시되었습니다Seedance 2.5 체험하기
한 장의 포스터가 베이스 이미지와 텍스트, 피사체, 장식의 투명 레이어로 분리되는 모습
튜토리얼

Seedream 5.0 Pro Layerize API로 이미지 한 장을 편집 가능한 레이어로 분리하기

Jacey
Jacey
Founder
2026년 8월 15일
17분 소요
이른바 "AI 이미지 편집"의 대부분은 결국 이미지 전체를 다시 생성하고 마음에 들던 부분이 살아남기를 바라는 작업입니다. Seedream 5.0 Pro Layerize(레이어 분리)는 접근이 다릅니다. 완성된 이미지 한 장을 건네면 그 이미지를 분해해서 돌려줍니다. 베이스 이미지 한 장과 여러 장의 투명 PNG 레이어이며, 각 레이어는 개별적으로 옮기고 크기를 바꾸고 교체할 수 있는 요소입니다.
가장 짧은 경로는 이렇습니다. https://api.evolink.ai/v1/images/generations 로 POST 하고, modeldoubao-seedream-5.0-pro-layerize 를 지정한 뒤 이미지 URL을 정확히 한 장 넘깁니다. 돌아오는 것은 이미지가 아니라 작업 ID입니다. 이 모델은 비동기이며 약 120초가 걸립니다. 이후 GET /v1/tasks/{task_id} 를 폴링하다가 statuscompleted 가 되면 result_data 에서 레이어를 꺼냅니다.

이 글은 틀리기 쉬운 부분을 중심으로 다룹니다. "어떤 요소를 분리할지" 지정하는 세 가지 방법, 장당 과금 때문에 레이어 수가 비용의 주요 변수가 되는 이유, 그리고 일반 생성보다 엄격한 입력 제약입니다.

무엇을 돌려받는가

한 번의 요청으로 1~17장이 생성됩니다. 베이스 이미지 한 장과 최대 16장의 레이어입니다.
출력형식내용
베이스 이미지output_format 을 따름(기본값 jpeg)배경이며, 떼어낸 요소 아래는 자동으로 복원됨
레이어 1~16항상 alpha 채널이 있는 PNG, output_format 의 영향을 받지 않음한 장당 요소 하나, 나머지는 투명

주목할 것은 베이스 이미지입니다. Layerize가 포스터에서 헤드라인을 떼어낼 때 그 자리에 구멍이 남지 않습니다. 글자 아래에 있던 내용이 재구성됩니다. 이것이 세그멘테이션 마스크와의 본질적인 차이이며, 결과물을 바로 디자인 툴에 넣을 수 있는 이유입니다.

레이어 수는 지정할 수 없습니다. 제어하는 파라미터가 없고 분해 결과에 따라 결정됩니다. 또한 부분 성공도 없습니다. 한 장이라도 실패하면 요청 전체가 실패하고 전액 환불됩니다.

레이어를 지정하는 세 가지 방법

prompt 는 선택 항목이며, 세 가지 사용법이 각각 다른 작업에 대응합니다.
Seedream 5.0 Pro Layerize API의 세 가지 지정 모드: 자동 전체 분해, 자연어 요소 지정, bbox 좌표 정밀 지정
Seedream 5.0 Pro Layerize API의 세 가지 지정 모드: 자동 전체 분해, 자연어 요소 지정, bbox 좌표 정밀 지정

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"
statuspendingprocessingcompleted(또는 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 만 가지며 namebounding_box 는 없습니다. z_index 로 정렬하고 각 레이어를 absolute 사각형 위치에 합성하면 원본 이미지를 정확히 재현할 수 있습니다.
파일은 빨리 저장하세요. 생성된 이미지 링크는 24시간 후 만료됩니다.

입력 제약은 일반 생성보다 엄격하다

이 흐름에서 실패가 가장 많은 지점입니다. Layerize는 일반 Seedream 생성이 받아들이는 입력을 모두 받아들이지는 않습니다.

제약
이미지 수정확히 1장. 0장이거나 2장 이상이면 오류
형식.png, .jpeg, .jpg 만 — webp는 거부됨
파일 크기30MB 이하
총 픽셀 수합계 262,144 ~ 36,000,000 — 512×512가 조건을 만족하는 가장 작은 정사각형
종횡비1:16 ~ 16:1
URL서버가 직접 접근할 수 있거나, 접근 시 바로 다운로드가 시작되어야 함
이 중 두 가지가 반복해서 문제가 됩니다. webp는 일반 생성에서는 괜찮지만 여기서는 거부됩니다. 파이프라인이 webp로 저장한다면 호출 전에 변환하세요. 또 하나, 총 픽셀 262,144 하한은 일반 생성보다 높아서 썸네일은 그대로 실패합니다.
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
1K1.5K 는 같은 가격이며 둘 다 저단계에 들어갑니다. 단계는 장마다 판정되므로 2K 베이스 이미지는 고단계로, 거기서 떼어낸 작은 텍스트 레이어는 저단계로 과금됩니다.

실제 계산 예를 두 개 들면 이렇습니다.

단순한 1K 분해, 세 개 레이어 추출: 입력 이미지 1장($0.0024) + 베이스 이미지 1장($0.018) + 레이어 3장($0.054) = $0.0744
2K 포스터를 작은 텍스트 레이어 8장으로 분해: 입력 이미지 1장($0.0024) + 고단계 베이스 이미지 1장($0.036) + 저단계 레이어 8장($0.144) = $0.1824
결론은 분명합니다. 비용을 결정하는 것은 레이어 수이지 해상도가 아닙니다. 작은 텍스트 레이어 8장이 그 2K 베이스 이미지의 네 배를 씁니다. 제품과 헤드라인 두 요소만 필요하다면 프롬프트에 그렇게 지정하세요. 전체 자동 분해를 돌릴 필요가 없습니다. 대상을 열 개에서 두 개로 좁히는 것은 사소한 최적화가 아니라 실질적인 비용 절감입니다.

걸려 넘어지기 쉬운 네 가지

  1. 키를 생략하지 않고 "prompt": "" 를 보내기. 이 모델에서 가장 쓸모 있는 자동 감지가 무력화됩니다.
  2. output_format: "png" 가 레이어에 적용된다고 착각하기. 이것은 베이스 이미지만 제어합니다. 레이어는 항상 alpha 채널이 있는 PNG입니다.
  3. 실패를 부분 성공으로 처리하기. 부분 성공은 없습니다. 한 장이라도 실패하면 전체가 실패하고 전액 환불되므로, 재시도 로직은 "전부 아니면 전무"를 전제로 작성해야 합니다.
  4. 링크를 만료시키기. 24시간이면 사라집니다. 폴링하는 같은 작업 안에서 다운로드하세요.

자주 묻는 질문

최대 몇 개의 레이어를 얻을 수 있나요?

레이어는 1~16장이며 여기에 베이스 이미지를 더해 최대 17장의 출력 이미지입니다. 장수를 지정할 수는 없고 분해 결과에 따라 결정됩니다.

어떤 요소를 레이어로 만들지 제어할 수 있나요?

네, 세 가지 방법이 있습니다. prompt를 생략해 전체 요소를 자동 감지시키거나, 자연어로 요소를 설명하거나, <bbox> 태그로 0~1000 정규화 좌표를 지정하면 됩니다.

레이어는 정말 투명한 PNG인가요?

네. 각 레이어는 alpha 채널이 있는 PNG이며 output_format 의 영향을 받지 않습니다. 그 설정은 베이스 이미지에만 적용됩니다.

한 번 호출에 얼마나 걸리나요?

약 120초입니다. 일반 이미지 생성보다 확실히 느리며, 이것이 비동기 API인 이유입니다. 폴링을 피하려면 callback_url 을 사용하세요.

레이어 하나가 실패하면 어떻게 되나요?

요청 전체가 실패하고(부분 성공은 없습니다) 전액 환불됩니다.

어떤 이미지든 분해할 수 있나요?

PNG 또는 JPEG여야 하고 총 픽셀 262,144 이상(예: 512×512), 30MB 미만, 종횡비 1:16 ~ 16:1 이어야 합니다. 일반 생성에서는 받아들여지는 webp도 여기서는 거부됩니다.


브라우저에서 먼저 시험해보려면 Seedream 5.0 Pro 모델 페이지로 가세요. Playground에 Layer Split 모드가 있어 위의 세 가지 지정 방법을 그대로 시험할 수 있습니다. 실시간 가격은 요금 페이지에서, 출시 상세는 출시 안내에서 확인할 수 있습니다.

AI 비용을 89% 절감할 준비가 되셨나요?

오늘 EvoLink를 시작하고 지능형 API 라우팅의 힘을 경험해보세요.