메인 콘텐츠로 건너뛰기
이 데이터 유형을 다룰 때는 torch.Tensor 클래스에 대해 알아야 합니다. 자세한 문서는 여기에서 확인할 수 있으며,
Comfy에 필요한 핵심 개념에 대한 소개는 여기에서 확인할 수 있습니다.
노드의 출력이 단일 텐서인 경우, (image)가 아니라 (image,)를 반환해야 합니다.
아래의 대부분의 개념은 예제 코드 스니펫에서 설명되어 있습니다.

이미지

IMAGE는 [B,H,W,C] 형태의 torch.Tensor로, C=3입니다. 이미지를 저장하거나 불러올 때는 PIL.Image 형식으로 변환하거나 그 반대로 변환해야 합니다. 아래 코드 스니펫을 참고하세요! 일부 pytorch 연산에서는 계산 효율성을 위해 [B,C,H,W], 즉 ‘채널 우선’ 형식을 제공하거나 요구합니다. 주의하시기 바랍니다.

PIL.Image 다루기

이미지를 불러오고 저장하려면 PIL을 사용하는 것이 좋습니다:
from PIL import Image, ImageOps

마스크

MASK는 [B,H,W] 형태의 torch.Tensor입니다. 많은 상황에서 마스크는 이진 값(0 또는 1)을 가지며, 특정 픽셀이 어떤 작업을 수행해야 하는지를 나타냅니다. 경우에 따라 0과 1 사이의 값을 사용해 마스크의 정도를 나타내기도 합니다(예를 들어, 투명도를 조정하거나 필터를 적용하거나 레이어를 합성할 때).

이미지 로드 노드에서 마스크 생성하기

LoadImage 노드는 이미지의 알파 채널(즉, ‘RGBA’의 ‘A’)을 사용해 마스크를 생성합니다.
알파 채널의 값은 [0,1] 범위로 정규화된 후(토치.float32) 반전됩니다.
LoadImage 노드는 이미지를 로드할 때 항상 마스크 출력을 생성합니다. 많은 이미지(예를 들어 JPEG)에는 알파 채널이 없습니다. 이런 경우 LoadImage는 기본 마스크를 [1, 64, 64] 형태로 생성합니다.

마스크 형태 이해하기

numpy, PIL 등 여러 라이브러리에서는 단일 채널 이미지(마스크와 같은)를 보통 2D 배열로 표현하며, 형태는 [H,W]입니다.
이는 채널 차원(C)이 암묵적으로 포함된다는 것을 의미하며, 따라서 IMAGE 유형과 달리 마스크의 배치는 [B, H, W] 세 차원만 갖습니다.
종종 B 차원이 암묵적으로 축소되어 [H,W] 형태의 텐서를 만나게 되는 경우가 있습니다.
마스크를 사용하려면 종종 unsqueeze를 통해 [B,H,W,C] 형태로 맞춰야 합니다. 여기서 C=1입니다.
C 차원을 확장하려면 unsqueeze(-1)을, B 차원을 확장하려면 unsqueeze(0)을 사용하세요.
노드에서 마스크를 입력으로 받는다면, 항상 mask.shape의 길이를 확인하는 것이 좋습니다.

랜트

LATENT는 dict이며, 랜트 샘플은 키 samples로 참조되며, 형태는 [B,C,H,W]이고 C=4입니다.
LATENT는 채널 우선이며, IMAGE는 채널 마지막입니다