ComfyUI 간단한 사용 방법 – 워크플로우 구성, 이미지 생성 가이드 #1

오늘은 ComfyUI 사용법에 대해 간단하게 살펴보겠습니다. 요즘은 너무나 다양한 이미지 생성 AI가 있죠. 너무나도 유명한 미드저니(Midjourney)에서부터 구글이나 OpenAI는 물론 xAI까지 거의 대부분 멀티모달을 지원하는 생성형 AI 서비스 기업에서는 모두 이미지 생성 AI를 서비스하죠. 그중 Stable Diffusion 윈도우 앱을 시작으로 WebUI 그리고 현재의 버전까지 오면서 위 기업과는 차별화된 도구를 제공합니다.


ComfyUI 사용 방법 가이드

스테이블 디퓨전을 오래 전부터 사용해 온 사용자를 제외하고, OpenAI와 같은 유명 대기업에서 제공하는 이미지 생성 도구만을 사용했던 사람은 처음 ComfyUI를 접하면 상당히 당황스럽죠. 왜냐? 무슨 회로 처럼 보이는 노드들 때문에 일반 위화감, 이질감 등등을 느끼게 됩니다.

“어디서부터 손을 대야 하지?” 하며 말이죠.

ComfyUI-01
ComfyUI-01

그럼에도 이 도구의 사용해 보려 여기저기 찾아보며 사용법을 익히게 됩니다. 왜냐구요? 이 도구는 무료 이미지 생성 도구니까요. 한달에 몇 만원씩 내고 이미지 생성AI 사용하다 보면 자꾸 stable diffusion 계열 이미지 도구를 사용할까 하는 생각을 하게 됩니다. 이건 무료니까요. 하지만, 윈도우 11로 업그레이드 되면서 이전 방식의 stable diffusion은 사용할 수 없죠. 때문에 어쩔 수 없이 ComfyUI를 사용해야 만 합니다.

자, 그럼 이제 뭐를 어떻게 사용해야 가장 간단하게 가장 쉽게 이미지를 생성할 수 있는지 정리해 볼게요.

기본 구조 이해하기

ComfyUI는 노드(Node)라고 불리는 기능 블록들을 연결하여 하나의 복잡한 워크플로우(Workflow)를 설계하는 방식입니다. 이는 마치 레고 블록을 조립하여 원하는 구조물을 만드는 것과 유사합니다. 각 노드는 이미지 생성 과정의 특정 단계나 연산(Operation)을 담당하고, 데이터는 노드 간의 연결선(Link)으로 전달되며 최종 결과물인 이미지를 만들어냅니다.

  • 노드(Node)
    • 이미지 생성 과정의 최소 단위 기능 블록이에요. 위 그림에서 보이는 박스 형태를 노드라고 합니다. 예를 들어, 모델을 불러오는 노드, 프롬프트를 처리하는 노드, 이미지를 생성하는 노드 등으로 구성되죠.
    • ComfyUI의 모든 기능은 이 노드 형태로 구현되어 있으며, 사용자는 필요한 노드를 추가하고 연결함으로써 원하는 모든 작업을 수행할 수 있습니다. 노드에는 입력(Input)과 출력(Output)을 위한 포트(Port)가 존재합니다.
  • 포트(Port)
    • 노드의 입구와 출구 역할을 합니다. 포트는 데이터의 종류에 따라 색상과 모양이 다릅니다. 예를 들어, 모델 데이터는 한 가지 색으로, 프롬프트 데이터는 다른 색으로 구분되어 있어, 사용자가 올바른 데이터 흐름을 시각적으로 쉽게 파악할 수 있습니다.
    • 데이터는 한 노드의 출력 포트에서 다른 노드의 입력 포트로 연결됩니다.
  • 워크플로우(Workflow)
    • 노드들이 연결되어 완성된 전체적인 작업 흐름도를 말합니다. WebUI가 ‘하나의 정해진 틀’에서 작업하는 방식이라면, ComfyUI는 사용자가 직접 ‘나만의 작업 틀’을 설계하는 방식이죠.
    • 이 워크플로우를 .json 파일로 저장하고 공유할 수 있어, 다른 사람의 복잡한 워크플로우를 불러와 그대로 사용하거나 수정하는 것이 가능합니다.


설치 및 사용 방법

ComfyUI 설치는 너무나 간단해 졌어요. 예전에는 조금 복잡하게 설치하는 방식들이었지만, 이제는 여느 응용프로그램들 처럼 홈페이지를 통해 설치하면 됩니다. 위 “홈페이지”에 링크를 걸어 놨으므로 다운로드 필요하신 분은 해당 홈페이지로 넘어가서 자신의 환경에 맞는 다운로드를 선택하면 됩니다.

윈도우 환경의 경우 설치 파일을 사용해서 설치가 끝나면 바탕화면에 바로가기 아이콘이 생성됩니다. 이를 이용해서 실행하면 되는거죠. 간단하죠.

처음 사용자의 경우 바로가기를 통해 앱을 실행하면 기본적인 워크플로우가 보일거예요. 아! 그전에 디폴트 체크아웃, VAE 등을 설치하라고 할거예요. 우선은 뭐가 없으니 그냥 하라는 대로 워크플로우 메인 화면으로 진행합니다.

기본적인 워크플로우는 다음과 같이 구성되어 있어요.

  • Load Checkpoint → 모델 불러오기
  • KSampler → 샘플링(실제 이미지 생성)
  • CLIP Text Encode (Prompt) → 텍스트 프롬프트 입력
  • VAE Decode → 이미지를 최종 변환, 색을 입히고, 디테일을 수행.
  • Empty Latent Image : 노이즈 이미지 또는 빈 이미지 생성
  • Save Image → 결과 저장



워크플로우 구성과 이미지 생성 따라하기

이를 순서대로 사용해 보면,

Load Checkpoint : 우선 체크포인트를 불러와야 해요. 이 체크포인트가 사실 이미지 생성의 가장 중요한 파일이에요. Hugging face 등을 통해 다운 받을 수 있죠. 일단 받아둔 모델이 있다면, 아래 그림 처럼 화면 좌측의 메뉴 중 “모델” 메뉴에서 체크포인트를 선택할 수 있어요.

Checkpoint node
Checkpoint node

뭐가 중요하냐? 쉽게 말해, 이미지가 어떻게 생겼는지, 사람 얼굴은 어떤 구조인지, 고양이는 어떤 패턴인지 등을 이미 학습해둔 모델인 거예요. 즉, 내가 지브리 스타일의 그림 이미지를 생성하고 싶다면 지브리 스타일의 이미지를 학습한 체크포인트를 찾아서 다운로드 해 놔야 한다는 거죠. 또는 내가 직접 학습 모델을 만들던가 해야 하는거죠.

그 다음은 프롬프트가 있어야 합니다. 바로 CLIP Text Encode 입니다. 내가 원하는 정보를 입력해야 원하는 이미지를 생성하게 되죠. 역시 아래 그림 처럼 화면 왼쪽의 메뉴 중 “노드” 항목에서 찾을 수 있어요.

CLIP Text Encode node
CLIP Text Encode node

그 다음 꼭 필요한 노드는 KSampler 입니다. 아래 그림에서 보면 각 노드를 연결하는 선(Line)이 보이는데, 자동으로 되는 게 아니라 체크포인트의 “모델” 부분을 마우스로 클릭 앤 홀드한 상태로, KSampler의 “모델”에 마우스를 릴리즈하면 체크포인트와 KSampler를 연결하게 됩니다. 같은 방법으로 체크포인트와 프롬프트를 연결하는 거죠. 바로 “CLIP”을 말이죠. 또, 프롬프트의 “조건”과 KSampler의 “긍정 조건”을 연결합니다.

KSampler node
KSampler node

이제 네 번째로 필요한 노드는 Empty Latent Image 노드에요. 역시 노드 메뉴에서 찾으면 되고요, 아래 그림 처럼 직접 텍스트를 입력해서 찾을 수도 있어요. 노드만 봐도 바로 뭘 하는 노드인지 알 수 있죠. 네, 바로 이미지 사이즈와 샘플링 개수를 정하는 거예요.

Empty Latent Image node
Empty Latent Image node

그리고 VAE와 이미지 저장 즉 출력 노드를 구성합니다. 여기까지가 이제 이미지 생성을 위한 가장 간단한 워크플로우를 생성한 거예요.

VAE decode node, save image node
VAE decode node, save image node

역시 위에서와 같이 Line을 연결해 주고요. 이러면 정말 이미지 생성 준비는 끝난 거예요.

그러면 바로 이미지를 생성해 볼게요. 지금까지 생성한 노드의 어떤 옵션도 변경하지 않고 디폴트 옵션 그대로에요. 물론 이미 체크포인트가 다운된 상태이므로 이 부분은 제외하고요. 또, 한 곳 그대로 두고 이미지를 생성할 수는 없는 부분이 있죠. 네, 바로 프롬프트예요.

스테이블 디퓨전의 프롬프트 작성 방식에 대해서는 나중에 따로 다루기로 하고요, 오늘은 체크포인트를 다운로드한 사이트에서 임의의 이미지의 프롬프트를 그대로 복사해서 사용해 보죠. 아래 이미지 처럼 civitai.com 에서 이미지를 선택하면 바로 우측에 해당 이미지를 생성하기 위해서 사용한 프롬프트 및 자세한 옵션 설정 내용이 나옵니다. 오늘은 여기에서 프롬프트만 이용해 보겠습니다.

civita.com 이미지 프롬프트 참고
civita.com 이미지 프롬프트 참고

다시, 내 ComfyUI 워크플로우로 돌아와서 복사한 프롬프트를 적용해 봅니다. 프롬프트를 적용하고 실행하면 KSampler는 부정 조건 CLIP Text Encode가 필요하다는 경고 팝업이 뜹니다. 때문에 프롬프트 노드를 한 개 더 추가하고, 위 이미지에서 보이는 Negative prompt 내용을 복사해서 내 워크플로우에 적용합니다. 아래는 복사한 프롬프트 내용입니다.

Positive prompt

score_9, score_8_up, score_7_up, (masterpiece, best quality, ultra-detailed, realistic), RAW editorial photo, beautiful young woman, 20 years old, upper body close-up, green eyes, freckles, ginger hair to the side, wearing open plaid flannel shirt and black choker, white stockings visible, soft smile, dreamy look, elegant legs partially shown, soft natural lighting, capturing a high-end editorial portrait with a poised, elegant demeanor

Negative prompt

score 6, score 5, score 4, (worst quality:1.2), (low quality:1.2), (normal quality:1.2), lowres, bad anatomy, bad hands, signature, watermarks, ugly, imperfect eyes, skewed eyes, unnatural face, unnatural body, error, extra limb, missing limbs

자, 그럼 다른 옵션을 건드리지 않고, 프롬프트만 복사해서 적용한 채 실행하여 이미지가 잘 생성되는지 확인해 볼게요.

ComfyUI 이미지 생성 가이드
ComfyUI 이미지 생성 가이드

결과 이미지가 나왔어요. 어떤가요? 위에서 프롬프트를 참고했던 원본 이미지와 꽤 유사하게 결과가 나왔어요. 어떤 옵션도 변경하지 않았는데 말이죠.

자, 오늘은 가장 간단하게 단순하게 스테이블 디퓨전 ComfyUI 사용 방법에 대해 살펴봤어요. 다음에는 좀 더 깊이 드러가 보도록하죠.


답글 남기기