GPT Image 2.5 Flare & Sunburst가 EvoLink에 출시되었습니다GPT Image 2.5 체험하기
본문으로 이동
파란 물체와 코랄색 포인트가 있는 아이보리 디자인이 투명한 판으로 분리되는 개념 일러스트
튜토리얼

Seedream 5.5 레이어 분리 후 재구성과 텍스트 편집

Seedream 5.5 PNG 레이어를 사각형과 쌓임 순서로 재구성하고 제공된 OCR을 편집 가능한 텍스트로 변환하세요. 디자인 변형 전 검수 방법도 설명합니다.

JessieCOO
21분 소요

Seedream 5.5의 레이어 분리는 배경 이미지, 투명 PNG 레이어와 배치 메타데이터를 반환합니다. 이를 편집 가능한 디자인으로 만들려면 애플리케이션에서 각 레이어의 크기와 위치를 맞추고, 쌓이는 순서를 유지하며, 제공된 OCR로 텍스트 객체를 만들어야 합니다. PNG 다운로드는 이 작업의 시작입니다.

이 글은 EvoLink로 광고 변형, 다국어 포스터 또는 디자인 편집 도구를 개발하는 엔지니어를 위한 안내입니다. 2026년 11월 13일 확인한 라우트 문서를 기준으로 합니다. 그림은 출처를 밝힌 BytePlus 공식 예제와 설명용 도식이며, EvoLink API 실측 결과가 아닙니다. 재사용할 누끼 이미지 한 장만 필요하다면 투명 PNG 가이드를 참고하세요.

무엇을 편집 가능한 상태로 유지할지 결정하기

승인된 포스터와 구체적인 변경 한 가지부터 정합니다. 제품을 옮길지, 제목을 바꿀지, 다른 언어 버전을 만들지에 따라 필요한 결과물이 달라집니다.

결과물변경할 수 있는 대상애플리케이션에 남는 작업
투명 PNG 한 장전체 이미지의 위치합성과 내보내기
배경 이미지와 PNG 레이어분리된 요소의 위치와 표시 여부크기 조절, 배치, 쌓임 순서와 검수
레이어와 서식 있는 OCR인식된 텍스트와 유사한 스타일네이티브 텍스트 객체, 글꼴 매핑, 배치와 저장
레이어 분리는 PSD 직접 내보내기나 원본 제작 파일 복구가 아닙니다. 여러 객체가 한 레이어에 묶일 수 있고, 텍스트가 래스터 이미지로 남을 수도 있습니다. 워크플로를 구현하기 전에 변경할 요소가 독립적으로 분리되었는지 확인하세요. 모델 선택 설명에서 일반 생성과 Layerize의 용도를 구분합니다.

작업에 필요한 요소 요청하기

EvoLink에서는 접근 가능한 PNG 또는 JPEG 입력 한 장만 doubao-seedream-5.5-layerize에 전달합니다. 일반 생성은 입력 조건이 다르므로 여러 참조 이미지를 사용하는 설정을 이 라우트에 그대로 적용하면 안 됩니다. 키는 서버에 보관하세요.
처음 요소를 파악할 때는 선택 사항인 prompt를 생략하고 model_params.text_recognition: true로 OCR을 요청할 수 있습니다. 특정 요소가 필요하면 문서에 있는 자연어 또는 bbox 지정을 사용하세요. 보이는 모든 객체가 별도 레이어가 된다고 가정하지 마세요. 요청했더라도 응답에 OCR이 없을 수 있습니다.
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.5-layerize",
    "image_urls": ["YOUR_PUBLIC_IMAGE_URL"],
    "quality": "auto",
    "output_format": "png",
    "n": 30,
    "model_params": {"text_recognition": true}
  }'
YOUR_PUBLIC_IMAGE_URL을 서버에서 접근할 수 있는 이미지 URL로 바꿉니다. n: 30은 배경을 포함한 출력 상한이며 30장을 보장하지 않습니다. EvoLink는 2~100의 n을 허용하고 실제로는 더 적은 이미지를 반환할 수 있습니다. 해상도는 quality: auto, 1K, 1.5K, 2K로 지정하며 16:9 같은 비율은 사용하지 않습니다.
반환된 작업의 id를 저장하고 GET /v1/tasks/{task_id}로 완료 여부를 조회하거나 실패를 처리합니다. 고정 길이 배열을 가정하지 말고 실제 result_data를 읽으세요. 라우트 문서에 따르면 레이어 하나가 실패해도 전체 요청이 실패하고 환불됩니다. 결과 링크는 24시간 유효하므로 완료된 파일을 빨리 저장하세요. 전체 계약은 Layerize API 문서를 참고하세요.

Seedream 5.5 PNG 레이어 재구성하기

배경 이미지는 z_index: 0이고 큰 값의 레이어가 위에 놓입니다. 배치는 bounding_box를 따르며 좌표 기준은 출력된 배경 이미지입니다. 입력 포스터나 레이어 파일 자체의 좌표계와 바꿔 사용하면 안 됩니다.
BytePlus 공식 포스터, 배경 이미지와 재구성한 합성 결과
BytePlus 공식 포스터, 배경 이미지와 재구성한 합성 결과
BytePlus Seedream 5.5 공식 예제의 입력은 왼쪽, 배경은 가운데, 제공된 PNG 레이어를 로컬에서 합성한 결과는 오른쪽입니다. 표시를 위해 축소했습니다. 공식 예제 파일의 합성이며 EvoLink 생성 테스트나 픽셀 단위의 완벽한 복원을 증명하지 않습니다.
[left, top, right, bottom]의 표시 너비는 right - left, 높이는 bottom - top입니다. 레이어를 이 사각형 크기로 조정한 뒤 (left, top)에 놓습니다. 마지막 두 값을 너비와 높이로 해석하거나, 다운로드한 모든 레이어를 원래 파일 크기로 붙이지 마세요.
공식 예제에서 발표자 정보 레이어 파일은 1166×899이지만 배경에서의 사각형은 [1142, 528, 1474, 784], 즉 332×256픽셀입니다. 파일 크기만으로 배치를 복원할 수 없는 이유입니다. 이는 공개 예제의 속성이며 다른 결과의 크기를 보장하지 않습니다.
아래 로컬 매니페스트는 애플리케이션 변환 형식으로, API 응답이 아닙니다. 다운로드 후 배경과 각 레이어의 파일, 사각형, z_index를 이 구조로 매핑합니다. 좌표는 설명용이므로 실제 결과 메타데이터로 바꾸세요.
작업 문서는 results에 이미지 URL을 두고 Layerize 설명은 result_data에 배치와 OCR을 추가합니다. 전체 응답과 파일을 저장한 뒤 검증 가능한 파일·메타데이터 대응 관계를 확인하고 매니페스트를 만드세요. 배경은 추측한 파일명이 아니라 z_index: 0으로 식별합니다. 현재 응답 계약이 명시하지 않았다면 배열 인덱스로 두 정보를 결합하지 마세요. 관계가 불명확하면 실제 작업 문서를 확인하세요. 이 가이드는 EvoLink 생성을 실행하지 않고 예제 파일의 로컬 합성만 수행했습니다.
{
  "base": "base.png",
  "layers": [
    {"file": "layer-1.png", "box": [120, 80, 420, 280], "z": 1}
  ]
}
python -m pip install pillow로 Pillow를 설치합니다. 다음 블록을 reassemble.py로 저장하고 layers.json과 이미지를 함께 둔 뒤 python reassemble.py layers.json을 실행하세요. 스크립트는 로컬 기하 정보와 순서를 확인하고 시각 검수용 미리보기를 내보냅니다. 편집 가능한 텍스트를 재구성하거나 모델 품질을 인증하지는 않습니다.
import json
import sys
from pathlib import Path
from PIL import Image

manifest = Path(sys.argv[1])
data = json.loads(manifest.read_text())
root = manifest.parent
with Image.open(root / data["base"]) as image:
    canvas = image.convert("RGBA")
width, height = canvas.size
layers = data["layers"]
orders = [item["z"] for item in layers]
if any(type(z) is not int or z <= 0 for z in orders):
    raise ValueError("Layer order must be a positive integer")
if len(set(orders)) != len(orders):
    raise ValueError("Duplicate layer order")
for item in sorted(layers, key=lambda layer: layer["z"]):
    box = item["box"]
    if len(box) != 4 or any(type(v) is not int for v in box):
        raise ValueError("Expected four integer box coordinates")
    left, top, right, bottom = box
    if not (0 <= left < right <= width and 0 <= top < bottom <= height):
        raise ValueError("Box outside the base image or empty")
    with Image.open(root / item["file"]) as image:
        layer = image.convert("RGBA").resize(
            (right - left, bottom - top), Image.Resampling.LANCZOS
        )
    canvas.alpha_composite(layer, dest=(left, top))
canvas.save(root / "reassembled.png")
신뢰할 수 있는 사각형이 없거나 순서가 중복되거나 좌표가 유효하지 않다면 멈추고 확인하세요. 레이어를 조용히 원점에 배치하면 안 됩니다. 크기 조절과 합성 중 PNG의 알파를 유지하고, 알파와 가장자리 검사로 테두리 번짐과 가는 구조를 점검하세요.

OCR을 편집 가능한 텍스트로 바꾸기

정형 텍스트 레이어의 text_recognition에는 전체 텍스트, lines, 각 줄의 bounding_box와 스타일이 있는 runs가 포함될 수 있습니다. 공식 가이드에서 줄의 사각형 역시 배경 이미지 좌표입니다. 부모 레이어의 위치를 다시 더하지 마세요.
인식 결과를 출발점으로 내용과 읽는 순서를 확인합니다. similar_font_family를 사용 가능하고 라이선스를 확보한 글꼴로 매핑하고, 편집기가 지원하는 foreground_color와 스타일 속성을 적용하세요. 글꼴과 속성은 추정값입니다. 장식 글자나 손글씨에는 OCR이 없을 수 있으므로 수동으로 텍스트를 재구성하거나 이미지 레이어를 유지합니다.

텍스트 레이어를 네이티브 텍스트로 바꿀 때는 해당 래스터 글자를 숨겨 기존 글자와 새 글자가 겹치지 않게 합니다. 여러 줄 중 한 줄만 바꾼다면 그 줄만 가리거나 제거하고 나머지 줄은 보존하세요. 또는 필요한 모든 텍스트를 재구성한 뒤 원래 래스터 레이어 전체를 숨깁니다. 텍스트 객체, 글꼴과 배치를 애플리케이션 문서에 저장해야 합니다. OCR 데이터 자체가 저장된 편집 가능 디자인은 아닙니다.

similar_font_family가 unknown이면 필요한 글리프와 라이선스를 갖춘 대체 글꼴을 명시적으로 선택하고 배치를 확인하세요. 스타일의 false는 모델이 해당 스타일을 인식하지 못했다는 뜻이지 원본에 없다는 증거가 아닙니다. 정확한 디자인 속성이 아니라 인식 힌트로 다루세요.

디자인을 왜곡하지 않고 변형하기

배경 이미지 좌표와 다른 배치의 관계를 보여 주는 도식
배경 이미지 좌표와 다른 배치의 관계를 보여 주는 도식
좌표 도식이며 모델 출력이 아닙니다. 균일한 크기 조절은 상대 위치를 유지하지만 종횡비 변경에는 배치 결정이 필요합니다.
종횡비가 같다면 전체 합성에 동일한 배율을 적용합니다. 정규화 사각형은 두 모서리에 대해 x = normalized_x × target_width / 1000, y = normalized_y × target_height / 1000으로 계산합니다. 절대 사각형은 실제 출력 배경 크기를 기준으로 변환합니다. 전체 과정에서 일관된 좌표 변환 방식을 사용하세요.

정사각형 포스터를 세로 광고로 바꿀 때는 좌표 곱셈만으로 충분하지 않습니다. 여백을 두고 맞출지, 자를지, 요소를 재배치할지 선택해야 합니다. 가로와 세로를 따로 늘리면 제품과 글자가 왜곡될 수 있습니다. 객체를 옮기면 재구성된 배경의 결함이 드러날 수도 있으므로 새로 보이는 영역을 확인하세요. 원래 가려져 있던 장면이 그대로 복원되었다고 가정하면 안 됩니다.

언어 변형은 제목 하나를 먼저 교체해 보세요. 글리프 지원, 줄바꿈, 텍스트 상자 높이, 시각적 위계와 전경 객체의 겹침을 확인합니다. 검토자가 비교할 수 있도록 원본 상태와 편집 상태를 별도로 보관하세요. 번역과 재배치는 애플리케이션 작업이며 OCR을 받았다고 자동으로 끝나지 않습니다.

변형을 늘리기 전에 결과 검수하기

증상먼저 확인할 내용다음 조치
레이어가 너무 크거나 위치가 틀림사각형 규칙, 배경 크기와 파일을 사각형에 맞추는 조절모델을 다시 요청하기 전에 합성 변환 수정
겹치는 순서가 잘못됨z_index 오름차순과 표시 상태의도한 쌓임 순서 복원
글자가 겹치거나 줄이 사라짐래스터 글자 표시와 교체 범위줄마다 한 가지 표현만 유지
OCR이 없거나 스타일이 부정확함정형 텍스트인지와 실제 OCR 필드수동 텍스트 재구성 또는 래스터 유지

변경 전 재구성된 원본을 검토하고, 편집 결과는 최종 납품 크기로 검사합니다. 제품의 동일성, 가장자리, 배경 채움, 가림, 문구와 최종 내보내기를 확인하세요. 좌표가 맞는다고 픽셀 단위 복원이나 디자인 품질이 보장되지는 않습니다.

실제 출력 이미지를 기준으로 예산을 잡으세요. EvoLink는 입력 한 장과 n장의 2K 출력 요금을 우선 예약하고, 실제 생성 이미지와 각각의 픽셀 구간에 따라 정산한다고 안내합니다. 큰 상한은 더 많은 잔액을 예약하지만 해당 편집에 꼭 필요한 것은 아닙니다. 기존 가격 섹션을 사용하며 이 글에서는 별도 요금표를 유지하지 않습니다.
다음 작업은 Seedream 5.5 Layerize에서 시작하세요. EvoLink에서는 같은 연동으로 모델 선택, 키, 잔액과 비동기 작업을 처리합니다. 합성, 편집 가능한 문서와 검수는 애플리케이션이 담당합니다.

자주 묻는 질문

Seedream 5.5는 PSD를 반환하나요?

문서에 있는 EvoLink 라우트는 이미지와 메타데이터를 반환하며 네이티브 PSD를 반환하지 않습니다. 편집기나 내보내기 도구가 문서를 만들어야 합니다.

n: 30은 독립된 전경 레이어 30개인가요?

아닙니다. 배경을 포함한 전체 출력 이미지 상한입니다. 실제 수는 더 적을 수 있으므로 반환 항목을 읽으세요.

레이어 PNG의 원본 크기를 사용해야 하나요?

배경에서의 사각형을 기준으로 배치합니다. 파일이 그 사각형보다 클 수 있으므로 합성 전에 크기를 조절하세요.

정규화 좌표로 재구성할 수 있나요?

네. 0~1000 범위의 각 모서리를 대상 캔버스 크기로 변환합니다. 종횡비가 바뀐다면 맞추기, 자르기 또는 재배치를 명시적으로 선택해야 합니다.

모든 텍스트 레이어에 OCR이 있나요?

아닙니다. 인식을 요청한 다음 text_recognition의 존재를 확인하세요. 정형 텍스트는 지원하지만 장식 글자나 손글씨는 수동 작업이 필요할 수 있습니다.

OCR이 원래 글꼴을 정확하게 식별하나요?

아닙니다. similar_font_family는 유사한 글꼴 추정이며 동일성이나 라이선스의 증거가 아닙니다. 사용 가능한 글꼴을 선택하고 결과를 확인하세요.

레이어가 맞지 않으면 다시 생성해야 하나요?

먼저 순서, 사각형 해석과 배율을 확인하세요. 합성 오류는 로컬에서 고칠 수 있습니다. 시각 콘텐츠가 없거나 쓸 수 없다면 편집이나 재분리가 필요할 수 있습니다.

아닙니다. 공식 예제와 로컬 파일 작업으로 문서의 흐름을 설명합니다. API 성공률, 복원 충실도나 속도를 측정하지 않았습니다.

출처

통합 API로 AI 모델 연동하기

모델 기능과 현재 요금을 비교한 뒤 API 문서에 따라 작업에 맞는 모델을 연동하세요.