# 레이어로 분리

> 이미지 한 장을 바탕 이미지와 여러 레이어로 나눕니다. 각 요소를 투명 PNG 한 장으로 받고, 이름, 위치 상자, 쌓는 순서도 함께 받습니다.

Source: https://nodaro.ai/ko/docs/nodes/image/split-into-layers

**레이어로 분리** 노드는 이미지 한 장을 바탕 이미지와 여러 레이어로 나눕니다. 사람, 동물, 제품, 텍스트 한 줄, 로고 같은 각 요소가 투명 PNG 한 장으로 따로 돌아옵니다. 노드는 각 레이어가 무엇인지, 어디에 있는지, 레이어가 어떻게 쌓이는지 알려 주는 레이어 데이터도 반환합니다.

레이어를 하나씩 편집하거나, 움직이거나, 교체한 다음 다시 합치세요. **분리할 대상**을 비워 두면 노드가 주요 요소를 스스로 찾고, 원하는 요소를 직접 설명할 수도 있습니다.

- Found in: Image › Edit & Retouch
- API type: `split-into-layers`

## 사용 시기
- 제품이나 헤드라인처럼 이미지의 요소 하나를 나머지는 건드리지 않고 편집할 때.
- 각 요소를 따로 움직일 때. 레이어를 [동영상 생성](https://nodaro.ai/docs/nodes/video/generate-video)에 연결하세요.
- 모든 요소를 [이미지 업스케일](https://nodaro.ai/docs/nodes/image/upscale-image)로 하나씩 업스케일할 때.
- 이미지를 다시 구성할 때. 요소를 옮기거나, 크기를 바꾸거나, 교체한 다음 바탕 이미지 위에 다시 놓습니다.
- 디자인 도구에 바로 쓸 수 있도록 모든 요소를 투명 PNG로 받을 때.

## 빠른 시작
### 노드 추가
캔버스에서 Tab을 누르고 **이미지 › 편집 및 보정 › 레이어로 분리**를 선택하세요.

### 이미지 연결
[이미지 업로드](https://nodaro.ai/docs/nodes/image/upload-image)나 [이미지 생성](https://nodaro.ai/docs/nodes/image/generate-image) 같은 이미지 노드를 **이미지** 입력에 연결하세요. 노드에서 이미지를 직접 업로드할 수도 있습니다.

### 설정 선택
설정 패널을 여세요. **최대 레이어 수**와 **크기**를 정하세요. 요소를 직접 고르려면 **분리할 대상**에 그 요소를 설명하세요.

### 실행
노드에서 **실행**을 클릭하세요. 실행은 보통 1분이 걸리지 않습니다. 노드에 바탕 이미지와 레이어 줄이 표시되며, 각 레이어에는 이름이 붙어 있습니다.

Workflow: 포스터를 레이어로 나누고, 개별 연결로 모든 레이어를 하나씩 업스케일합니다.

- 이미지 업로드 → 레이어로 분리 (이미지)
- 레이어로 분리 → 이미지 업스케일 (레이어)

## 입력
| 입력 | 받는 것 | 하는 일 |
| --- | --- | --- |
| **이미지** | 이미지 업로드, 이미지 생성, 이미지 수정 같은 이미지 노드, 또는 캐릭터, 오브젝트, 장소 | 분리할 이미지: JPEG, PNG, WebP. 더 큰 파일이나 HEIC, AVIF 같은 다른 형식의 파일은 먼저 변환됩니다. 연결한 캐릭터, 오브젝트, 장소는 이미지로 사용됩니다. 필수입니다. |

## 출력
| 출력 | 전달하는 것 |
| --- | --- |
| **바탕** | 바탕 이미지. 불투명 PNG입니다. |
| **레이어** | 아래에서 위 순서로 모든 레이어를 담은 목록. 각 요소에 맞게 잘라 낸 투명 PNG입니다. |
| **레이어 데이터** | 레이어마다 항목 하나. **레이어**와 같은 순서입니다. |

**레이어**는 목록입니다. **레이어**에서 나가는 연결은 기본값인 **개별** 모드에서 다음 노드를 레이어마다 한 번씩 실행합니다. 예를 들어 이미지 업스케일에 연결하면 모든 레이어를 업스케일하고, 동영상 생성에 연결하면 각 레이어를 움직입니다. [이미지 콜라주](https://nodaro.ai/docs/nodes/image/image-collage)나 이미지 생성의 레퍼런스처럼 이미지 여러 장을 받는 노드에 모든 레이어를 한 번에 넘기려면 연결을 **묶음**으로 설정하세요. [목록과 일괄 처리](https://nodaro.ai/docs/concepts/lists-and-batching)를 참고하세요.

바탕 이미지와 모든 레이어는 내 라이브러리에도 저장됩니다. 각 레이어는 자기 이름으로 저장됩니다.

### 레이어 데이터
**레이어 데이터** 출력은 다음과 같습니다.

```json
[
{
"name": "Arctic fox",
"description": "The full body of the standing white arctic fox, with no background.",
"zIndex": 1,
"width": 1108,
"height": 946,
"box": { "x1": 228, "y1": 482, "x2": 897, "y2": 1070 },
"boxNormalized": { "x1": 223, "y1": 314, "x2": 875, "y2": 696 },
"url": "https://…/layer.png",
"baseUrl": "https://…/base.png"
}
]
```

| 필드 | 의미 |
| --- | --- |
| `zIndex` | 쌓는 순서. `1`은 바탕 이미지 바로 위에 놓이고, 숫자가 클수록 그 위에 그려집니다. |
| `box` | 바탕 이미지에서 레이어가 놓이는 위치로, 바탕 이미지의 픽셀 단위입니다. `x1`과 `y1`은 왼쪽 위 모서리, `x2`와 `y2`는 오른쪽 아래 모서리입니다. |
| `boxNormalized` | 같은 상자를, 바탕 이미지의 너비와 높이를 0~1000으로 본 값으로 나타냅니다. |
| `width`, `height` | 레이어 파일 자체의 픽셀. 레이어는 바탕 이미지의 배율로 잘리지 않습니다. 요소에 맞게 잘린 뒤, 요소 자체의 모양으로 **크기** 설정의 픽셀 예산에 가깝게 저장됩니다(1K에서 약 1메가픽셀). 레이어를 제자리에 놓으려면 `box`에 맞게 크기를 조정하세요. |
| `name`, `description` | 요소가 무엇인지. 레이어에 이 값이 없을 수도 있습니다. |
| `url` | 레이어의 파일. **레이어**의 해당 항목과 같습니다. |
| `baseUrl` | 레이어를 잘라 낸 바탕 이미지. **바탕**과 같습니다. |

### 한 번의 실행에 여러 이미지
**이미지**에 이미지 목록을 연결하세요. 예를 들어 이미지 링크를 담은 [목록](https://nodaro.ai/docs/nodes/automate/list)이나, **개별** 연결로 이미지를 여러 장 만드는 노드를 연결합니다. 그러면 노드가 이미지마다 한 번씩 실행됩니다. 각 실행의 결과는 그 이미지의 바탕 이미지, 레이어, 레이어 데이터를 담은 별도의 테이크가 됩니다.

- **바탕**은 결과를 낸 모든 이미지의 바탕 이미지를, 이미지가 들어온 순서대로 나열합니다. 실행이 실패한 이미지에는 바탕 이미지가 없으므로 목록에서 빠집니다.
- **레이어**는 모든 이미지의 레이어를 이미지 순서대로 넘깁니다. **개별** 연결은 다음 노드를 모든 이미지의 레이어마다 한 번씩 실행합니다. 첫 번째 이미지의 레이어, 그다음 두 번째 이미지의 레이어 순입니다. **묶음** 연결은 전부를 한 번에 넘기고, **선택됨** 연결은 첫 번째 것을 읽으며, **항목** 연결은 전체 목록에서 하나를 고릅니다.
- **레이어 데이터**는 그 레이어들과 하나씩 짝을 이룹니다. 각 항목에는 들어온 이미지의 번호인 `row`도 들어 있으며, 번호는 0부터 셉니다. 레이어가 없는 이미지는 **레이어**나 **레이어 데이터**에 아무것도 더하지 않으며, 실행이 실패한 이미지도 마찬가지입니다. 각 이미지는 자기 번호를 유지하므로 `row`는 번호를 건너뛸 수 있습니다.

레이어를 그 바탕 이미지와 짝지으려면 `row`가 아니라 `baseUrl`을 쓰세요. **바탕**에는 결과를 낸 이미지만 나열됩니다. 한 이미지가 실패하면, 그 뒤 이미지의 `row`는 더 이상 **바탕**에서의 위치와 맞지 않습니다. 아래 예에서는 두 번째 이미지가 실패했습니다. 올빼미의 바탕 이미지는 **바탕**의 두 번째 항목이지만, 올빼미의 `row`는 2입니다.

```json
[
{ "name": "Fox", "zIndex": 1, "url": "https://…/fox.png", "baseUrl": "https://…/base-1.png", "row": 0 },
{ "name": "Owl", "zIndex": 1, "url": "https://…/owl.png", "baseUrl": "https://…/base-3.png", "row": 2 }
]
```

이미지 한 장으로 실행하면 첫 번째 예처럼 `row`가 없는 레이어 데이터가 나옵니다. 노드에는 보고 있는 테이크의 레이어가 표시됩니다. 다른 이미지의 레이어를 보려면 다른 테이크를 고르세요. **레이어**와 **레이어 데이터**에서 나가는 연결은 어떤 테이크를 고르든 모든 이미지의 레이어를 계속 넘깁니다. 마찬가지로 **바탕**에서 나가는 **개별** 연결도 모든 이미지의 바탕 이미지를 계속 나열합니다. 첫 실행 전에는 실행 예상 비용이 **레이어**에서 나가는 **개별** 연결을 이미지마다 **최대 레이어 수**만큼으로 계산합니다.

## 설정
| 설정 | 하는 일 |
| --- | --- |
| **최대 레이어 수** | 실행 한 번에 만드는 레이어의 최대 수로, 1~99입니다. 기본값은 9입니다. 바탕 이미지는 이와 별도로 추가됩니다. 요소가 이보다 많은 이미지는 레이어 수가 줄고 레이어 하나가 더 커집니다. 요소는 빠지지 않고 묶이기 때문입니다. |
| **크기** | 각 이미지의 픽셀 예산: 기본값인 `1K`, `1.5K` 또는 `2K`. **자동**은 1K와 2K 사이에서 이미지 자체의 크기를 사용합니다. |
| **분리할 대상** | 선택 사항이며, 최대 2,000자입니다. 어떤 요소를 분리할지 쉬운 말로 설명하세요. 비워 두면 노드가 주요 요소를 스스로 찾습니다. |

**분리할 대상**에서 `<bbox>x1 y1 x2 y2</bbox>`로 요소의 위치를 표시할 수 있습니다. 숫자는 이미지를 0~1000으로 본 모서리 좌표입니다. 예를 들면 다음과 같습니다.

```text
Separate the title <bbox>179 58 809 197</bbox> and the parrot <bbox>330 274 641 991</bbox>
```

### 게시한 앱에서
이 노드가 있는 워크플로로 만든 [앱](https://nodaro.ai/docs/concepts/apps)에서는 사용자가 **최대 레이어 수**를 1~20 슬라이더로, **크기**를 **자동**, `1K`, `1.5K`, `2K` 중 하나로 정하게 할 수 있습니다. 앱의 슬라이더와 워크플로 실행의 모든 재정의 값은 이 범위로 제한됩니다. 그 밖의 값은 실행이 시작되기 전에 거부됩니다.

앱은 사용자가 바꾼 값만 보냅니다. **최대 레이어 수**를 건드리지 않은 실행은 제작자가 노드에 저장한 값(최대 레이어 99개)을 그대로 쓰며, 그 값만큼 예약됩니다. 예를 들어 노드에 레이어 50개가 저장되어 있으면 이미지 51장만큼 예약됩니다. 슬라이더를 끝까지 올리면 `2K`에서 레이어 20개가 369크레딧을 예약합니다.

## 크레딧
실행은 반환할 수 있는 최대 이미지 수, 곧 **최대 레이어 수**에 바탕 이미지를 더한 만큼 **예약**됩니다. 실제로 반환한 이미지, 곧 바탕 이미지와 각 레이어에 대해서만 **청구**됩니다. `1K`와 `1.5K` 크기는 가격이 같고, `2K`와 **자동**은 더 비쌉니다. **실행** 버튼은 선택한 설정의 예약 금액을 보여 줍니다.

| 예 | 예약 | 청구 |
| --- | --- | --- |
| 기본값: 1K 레이어 9개 | 104 | — |
| 1K에서 레이어 3개 반환(이미지 4장) | | 44 |
| 2K 또는 **자동**에서 레이어 3개 반환(이미지 4장) | | 74 |
| 1K에서 **최대 레이어 수** 5 | 64 | — |
| 요소를 찾지 못함: 1K 바탕 이미지만 | | 15 |

- **요소를 찾지 못한 경우.** 실행은 바탕 이미지만으로 완료되며, 그 이미지 한 장만 청구됩니다.
- **저장할 수 없는 레이어.** 몇 번 다시 시도해도 레이어를 저장할 수 없으면, 실행은 그 레이어 없이 완료되고 저장한 이미지만 청구됩니다. 노드에는 저장하지 못한 레이어 수가 “레이어 9개 중 2개를 저장하지 못했습니다”처럼 표시됩니다.
- **실패한 실행은 환불됩니다.** 바탕 이미지를 저장할 수 없는 실행도 포함됩니다.

셀프 호스팅 Community Edition과 Business 에디션은 크레딧을 쓰지 않습니다.

## 팁
- **순서대로 다시 합치세요.** 이미지를 다시 만들려면 각 레이어를 `zIndex` 순서대로 바탕 이미지의 `box` 위치에 놓으세요.
- **얼마나 묶을지 정하세요.** **최대 레이어 수**를 낮추면 헤드라인 전체가 레이어 하나가 되는 것처럼 요소가 함께 묶입니다. 값을 높이면 요소가 따로 유지됩니다.
- **필요한 요소를 직접 지정하세요.** 주요 요소가 원하는 요소가 아니면 **분리할 대상**에 그 요소를 설명하세요. 예를 들어 “로고와 가격표”처럼 쓰세요.

## 문제 해결
| 문제 | 해결 방법 |
| --- | --- |
| 실행이 바탕 이미지만 반환했습니다 | 노드가 요소를 찾지 못했습니다. **분리할 대상**에 원하는 요소를 설명하거나 `<bbox>`로 위치를 표시하세요. |
| 두 요소가 한 레이어로 나왔습니다 | 이미지의 요소가 **최대 레이어 수**보다 많습니다. **최대 레이어 수**를 늘리세요. |
| 레이어가 바탕 이미지와 맞지 않습니다 | 레이어 파일은 바탕 이미지와 같은 배율이 아닙니다. 놓기 전에 레이어 데이터의 `box`에 맞게 크기를 조정하세요. |
| 노드에 일부 레이어를 저장하지 못했다고 표시됩니다 | 실행은 그 레이어 없이 완료되었고, 저장한 이미지만 청구되었습니다. 노드를 다시 실행하면 그 레이어를 얻을 수 있습니다. |

## API에서 사용
`POST /v1/split-into-layers`에 `{ imageUrl, maxLayers?, size?, prompt?, sessionId?, origin? }`를 보내면 작업이 대기열에 들어가고 그 `jobId`로 응답합니다. 형식이 잘못된 요청은 크레딧이 예약되기 전에 `400 validation_error`로 응답합니다. `sessionId`는 작업을 내 세션 중 하나에 넣고, `origin`은 작업에 내 앱의 슬러그를 붙입니다. `Idempotency-Key` 헤더를 붙이면 재시도할 때 두 번째 작업을 시작하지 않고, 첫 요청이 시작한 작업으로 응답합니다(`{ jobId, deduped: true }`).

완료된 작업의 `output_data.imageUrl`은 바탕 이미지이고, `output_data.layers`는 레이어 파일을 순서대로 나열합니다. `output_data.layerData`는 위의 레이어 데이터입니다. `output_data.layerCount`는 저장된 레이어 수이고, `output_data.layersNotSaved`는 저장하지 못한 레이어 수입니다(모든 레이어를 저장했으면 `0`).

실행 전에 예약 금액을 알려면 같은 본문으로 `{ "type": "split-into-layers", "params": { … } }`를 `POST /v1/quote`에 보내세요. 아무것도 시작되지 않습니다. 응답의 `identifier`는 예약에 쓰이는 가격(`split-into-layers:<1k|2k>:<images>`)이고, `reserve`는 예약되는 크레딧입니다. 1K에서 **최대 레이어 수** 5는 64크레딧, 기본값은 104크레딧입니다. SDK에서는 `client.nodes.quote("split-into-layers", body)`를 호출하세요. 노드를 실행할 수 없으면 견적도 실행과 마찬가지로 `403 node_not_available`로 거부됩니다.

SDK 메서드는 `client.media.splitIntoLayers`, MCP 도구는 `split_into_layers`, CLI 명령은 `nodaro media split-layers`입니다. [단일 노드 실행](https://nodaro.ai/docs/developers/api/nodes), [작업](https://nodaro.ai/docs/developers/api/jobs), [SDK의 미디어 및 업로드](https://nodaro.ai/docs/developers/sdk/media-and-uploads), [MCP 도구](https://nodaro.ai/docs/mcp/tools)를 참조하세요.

## 자주 묻는 질문

### 레이어로 분리는 무엇을 반환하나요?

요소 뒤의 장면인 바탕 이미지와, 사람, 제품, 텍스트 한 줄, 로고 같은 요소마다 투명 PNG 레이어 한 장을 반환합니다. 각 레이어의 이름, 위치 상자, 쌓는 순서를 담은 레이어 데이터도 반환합니다.

### 프롬프트를 써야 하나요?

아니요. 분리할 대상을 비워 두면 노드가 주요 요소를 스스로 찾습니다. 주요 요소가 원하는 요소가 아닐 때만 원하는 요소를 설명하세요.

### 실행 한 번에 레이어를 몇 개까지 만들 수 있나요?

최대 레이어 수 설정만큼이며, 1~99 사이이고 기본값은 9입니다. 요소가 더 많은 이미지는 레이어 수가 줄고 레이어 하나가 더 커집니다. 요소는 빠지지 않고 묶이기 때문입니다.

### 레이어로 분리는 크레딧이 얼마나 드나요?

실행은 최대 레이어 수에 바탕 이미지를 더한 만큼 크레딧을 예약하고, 반환한 이미지에 대해서만 청구합니다. 기본값인 1K 레이어 9개는 104크레딧을 예약합니다. 1K에서 레이어 3개를 반환한 실행은 44크레딧이 청구됩니다.

### 레이어를 다시 합치려면 어떻게 하나요?

zIndex가 가장 낮은 레이어부터 가장 높은 레이어까지 쌓는 순서대로, 각 레이어를 바탕 이미지의 상자 위치에 놓으세요. 레이어 파일은 요소에 맞게 잘려 있으므로 먼저 상자 크기에 맞게 조정하세요.
