![ComfyUI 기본 개념과 워크 플로우 뜯어보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRQEkK%2FbtsGTD4WCJw%2FSLe2E4WG7cL9VtzmHAPFe1%2Fimg.png)
안녕하세요, SDmaster 입니다. 오늘은 ComfyUI에 대한 기본 개념 설명과 함께 처음 보여주는 workflow를 뜯어보며
기본 node들에 대해 알아보겠습니다.
일단 ComfyUI는 Stable diffusion을 사용하기 위한 노드 기반 GUI입니다. 서로 다른 블록(node라고 함)을 생성하고 연결하여 이미지 생성 워크플로우를 구성할 수 있습니다.
일반적으로 사용되는 몇 가지 node들은 체크포인트 모델 로드, 프롬프트 입력, 샘플러 지정 등입니다. ComfyUI는 워크플로우를 재배치 가능한 요소로 세분화하여 사용자가 자신만의 워크플로우를 커스터마이징 할 수 있다는 점이 아주 매력적이라고 할 수 있습니다.
아래 설명할 때 기본이 되는 단어들은 웬만하면 영어로 표현합니다. 우리가 ComfyUI를 사용할 때 기본적으로 모든 기능들이 영어로 되어있기 때문에 추후 글을 읽고 사용하실 때 혼란이 더 적게 하기 위함이니 참고해주시면 감사하겠습니다.
기본이 되는 작동법
- 마우스 휠을 사용하여 확대 및 축소합니다.
- 우클릭 후 add node 혹은 빈 작업 공간을 더블클릭하여 node를 생성할 수 있습니다.
- node 끝에는 input과 output이 되는 점들이 있는데 이 점을 길게 끌어서 각 node들을 연결합니다. 같은 유형의 input과 output 사이에만 연결할 수 있습니다.
- 왼쪽 클릭을 유지한 채 끌거나, 스페이스바를 누른 채 마우스를 움직이며 작업 공간을 이동 시킬 수 있습니다.
- Ctrl-0(Windows) 또는 Cmd-0(Mac)을 눌러 대기열 패널을 표시합니다.
ComfyUI 기본 개념
워크플로우는 두 가지 기본 구성 요소로 만들어집니다: node와 edge입니다.
node는 Load Checkpoint, Clip Text Encode 등과 같은 직사각형 블록입니다. 각 node는 일부 코드를 실행합니다. 프로그래밍 경험이 있다면 노드를 함수로 생각할 수 있습니다. 각 노드에는 다음 세 가지가 필요합니다.
- Inputs : 와이어 선이 들어오는 왼쪽의 텍스트와 점입니다.
- Outputs : 와이어 선이 나가는 오른쪽의 텍스트와 점입니다.
- Parameters : 블록의 중앙에 있는 필드입니다.
이러한 노드들은 input과 ouput을 통해 연결되며 전체적인 workflow를 구성합니다. 이것만 알아도 ComfyUI를 시작하기에 충분하다고 생각합니다. 그럼 이제 본격적으로 워크 플로우를 뜯어 보며 각 노드들을 알아보겠습니다.
아래 화면은 ComfyUI에서 가장 기초라고 볼 수 있는 워크플로우 입니다. 해당 워크 플로우는 openart.ai에서 가져왔습니다. 해당 링크에 들어가시면 기초가 되는 다양한 워크플로우를 다운받으실 수 있습니다.
1. Load Checkpoint
먼저 Load Checkpoint node는 Stable Diffusion 체크포인트 모델을 선택할 수 있습니다. 모델 이름을 클릭하면 사용 가능한 모델 목록이 표시됩니다.
(node가 너무 작은 경우에는 마우스 휠을 사용하거나 터치패드에서 두 손가락으로 집어 확대 및 축소할 수 있습니다)
모델 이름을 클릭해도 아무 효과가 없다면 앞 포스팅에 설명드린 해당하는 폴더에 모델이 없어서 발생하는 경우입니다.
여기에서 자세한 내용을 확인할 수 있습니다.
Load Checkponit node의 구성요소입니다.
- MODEL : 잠재 공간의 노이즈 예측 모델입니다.스테이블 디퓨전에서는 U-net이라는 모델을 사용중이죠.
- CLIP: 언어 모델인 긍정 및 부정 프롬프트를 전처리합니다.
- VAE: 가변 자동 인코더로 픽셀과 잠재 공간 사이에서 이미지를 변환합니다.
2. CLIP Text Encode (Prompt)
CLIP Text Encode (Prompt) node는 프롬프트를 가져와 CLIP 언어 모델에 공급합니다. CLIP은 프롬프트의 각 단어를 임베딩으로 변환하는 OpenAI의 언어 모델입니다.
CLIP Text Encode (Prompt)라는 두 개의 node를 세팅하고 보통 위쪽 node에 긍정적 프롬프트를 입력하고 아래쪽 node에 부정적 프롬프트를 입력합니다.
node의 이름을 바꿔주면 조금 더 직관적으로 워크플로우를 구성할 수 있습니다. node의 이름을 바꾸는 방법은 node위에서 우클릭한 뒤 Properties Panel을 이용해 수정합니다.
CLIP Text Enode node는 먼저 프롬프트를 토큰으로 변환한 다음 텍스트 인코더를 사용하여 임베딩으로 인코딩합니다.
(이 분이 이해가지 않는다면 ['Stable Diffusion' 도대체 어떻게 이미지를 만들어 내는걸까?] 포스팅을 참조 해주세요)
이 node는 KSampler node의 양극 입력에 연결어 있는데 긍정적 프롬프트는 KSampler node의 positive에 부정적 프롬프트는 negative에 연결해주시면 됩니다.
3. Empty latent image
text-to-image 프로세스는 잠재 공간(latent space)에 임의의 이미지를 생성하는 것으로 시작됩니다.
latent image의 크기는 픽셀 공간의 실제 이미지에 비례합니다. 따라서 이미지의 크기를 변경하려면 latent image의 크기를 변경하면 됩니다.
픽셀 공간에서 이미지 크기를 변경하려면 width와 height으로 설정할 수 있습니다.
여기에서 생성하는 이미지 수인 배치 크기를 설정할 수도 있습니다. batch_size = 1 이면 하나의 이미지만 생성합니다.
4. KSample
KSampler는 스테이블 디퓨전에서 이미지 생성의 핵심입니다. 샘플러는 임의의 이미지를 프롬프트와 일치하는 이미지로 노이즈를 제거합니다.
다음은 KSampler node의 파라미터입니다.
seed: 무작위 시드 값은 잠상 이미지의 초기 노이즈와 최종 이미지의 구성을 제어합니다.
Control_after_generation: 각 세대 후에 시드를 변경하는 방법. 임의의 값을 가져오거나(랜덤화), 1씩 증가하거나(증분), 1씩 감소하거나(감소), 변경하지 않거나(고정) 할 수 있습니다.
steps: 샘플링 단계 수입니다. 높을수록 수치 프로세스에서 아티팩트가 줄어듭니다.
cfg : 분류자유척도 입니다. 높은 값을 입력하면 프롬프트에 있는 내용을 따르는 경향이 강해지고, 낮추면 프롬프트를 무시할 확률이 높아집니다.
sampler_name: 여기에서 샘플링 알고리즘을 설정할 수 있습니다.
scheduler: 각 단계에서 노이즈 레벨을 변경하는 방법을 제어합니다.
denoise 제거: 노이즈 제거 프로세스에서 초기 노이즈를 얼마나 지워야 하는지 설정합니다. 1일 경우에는 잡음이 최대치로 추가됩니다.
마지막으로 오른쪽에는 분홍색 LATENT 출력 슬롯이 있습니다. 이 node에서는 잠재 이미지(latent image)가 생성되는데, 이를 디코딩해 이미지로 만들어주는 VAE Decode와 연결해야 합니다.
5. VAE Decode
VAE(가변 자동 인코더, Variable Automatic Encoder)는 잠재 이미지를 실제 이미지로 바꿔주는 역할을 하며, 이것은 원래 체크포인트 파일의 일부임을 알 수 있습니다. 이 VAE를 이용해 VAE Decoder모듈이 이미지를 생성합니다.
오른쪽 IMAGE의 점을 클릭하고 빈 캔버스에 놓으면 이미지가 저장되는 node를 만들 수 있습니다.
기초가 되는 워크 플로우 하나를 뜯어보며 기본 node들의 구성요소와 역할들을 살펴봤습니다.
워크 플로우를 간단히 요약해보자면
Load Checkpoint에서 출발하여 CLIP Text Encode (Prompt) 와 Emptyt Latent image 를 거쳐 KSamler에 도착해 잠재 공간에서 이미지를 만들고 VAE Decode를 통해 이미지를 변환 시켜주었습니다.
나만의 커스터 마이징 된 워크플로우를 만들 수 있을 때까지 앞으로 기초가 되는 워크플로우를 계속 살펴보겠습니다.
'ComfyUI > Workflow 뜯어보기' 카테고리의 다른 글
AI가 그린 어색한 손들 ComfyUI로 고쳐보기(feat.MeshGraphormer) (2) | 2024.05.22 |
---|---|
ComfyUI에서 ControlNet의 모든것(Open pose, Cany, Tile...) (0) | 2024.05.17 |
ComfyUI Face Detailer을 이용한 얼굴 보정 워크플로우 (1) | 2024.05.15 |
ComfyUI Face Detailer 파라미터 뜯어보기 (feat.Impact Pack) (0) | 2024.05.09 |
ComfyUI 인페인트(Inpaint)로 원하는 부분 수정하기 (0) | 2024.04.29 |
생성형 이미지 AI 중 스테이블 디퓨전에 관한 내용을 주로 다룹니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!