ComfyUI에서 로라(LoRA) 및 컨트롤넷 사용 방법

많은 분들이 스테이블 디퓨전을 WebUI로 입문하신 뒤 조금 더 관심을 갖고 사용하다보면 ComfyUI까지 넘어오시곤 합니다. 하지만 처음에는 WebUI에서는 당연하다고 생각했던 기능들이 ComfyUI 에서는 당연하지 않아 당황스럽습니다. ComfyUI에서는 기능을 수행하기 위해 노드의 구성을 수동으로 작성해야 해서 각 노드의 기능을 정확히 이해해야 자유롭게 사용이 가능합니다. 알고나면 별 것 아닌데, 처음에는 당황스러운 노드구성, 오늘은 ComfyUI에서 로라(LoRA)와 컨트롤넷을 구현하기 위해 노드를 구성(워크플로우 작성)하고 사용하는 방법에 대해 살펴보도록 하겠습니다.

ComfyUI에서 로라 사용법

로라는 모델(체크포인트) 위에 얹어서 사용하는 학습 모델입니다. 당연히 ComfyUI에서도 WebUI에서 사용하던 로라 모델을 그대로 사용할 수 있는데요, 우선 로라(LoRA)의 개념과 다운로드 방법에 대해 자세한 설명이 필요하신 분들은 아래 글을 참고해주시기 바랍니다.

ComfyUI에서 로라 노드 구성

ComfyUI에서 로라를 사용하기 위한 워크플로우 노드 구성은 생각보다 매우 간단합니다. 앞서 설명드린 내용을 다시 말씀드리면, “로라는 체크포인트 모델 위에 얹어서 사용하는 학습 모델”이므로, ComfyUI에서는 이대로 노드를 구성하면 됩니다.

ComfyUI에서 로라 사용 예시

위 그림과 같이 Default 워크플로우에서 Load Checkpoint 앞에 빈 공간에 마우스를 더블클릭하면, 노드 검색창이 나타납니다. lora를 입력하고 Load LoRA 노드를 선택합니다. 새로 생긴 Load LoRA 노드는 로라 모델을 불러오는 역할을 합니다.

이제 새로 생성된 Load LoRA 노드에서 불러온 로라 모델을 체크포인트 모델 위에 얹기 위해, Load Checkpoint와 Load LoRA 노드의 입출력 단자를 연결합니다. 기존에 Load Checkpoint에서 나가던 MODEL, CLIP을 그대로 Load LoRA 노드의 입력으로 넘겨주고, Load LoRA의 출력단의 MODEL, CLIP을 원래의 Load Cehckpoint가 연결되어 있던 노드들로 연결합니다. 말 그대로 체크포인트 앞에 로라모델을 끼워 넣은 구성을 만들어 주면됩니다.

Bypass 기능

로라를 적용한 워크플로우를 이용하더라도, Load LoRA 노드를 임시로 끔으로써 마치 존재하지 않는 것처럼 이용하는 것도 가능합니다.

ComfyUI에서 로라 바이패스 예시

바로 ComfyUI의 막강한 기능 Bypass(우회로)를 활용하는 것인데요, 사용하지 않고 통로로만 이용할 노드를 선택한 뒤 위 그림과 같이 Ctrl+B를 눌러 꺼주면 그림을 생성할 때 해당 노드의 Input값은 아무런 처리를 하지 않고 곧바로 output으로 전달됩니다.

ComfyUI에서 로라 적용한 결과 이미지 예시

위 이미지는 Bypass 적용 유무에 따라 실제로 생성된 이미지를 비교한 것입니다. Baloon 로라를 적용한 이미지와 적용되지 않은 이미지를 한눈에 확인할 수 있는데요, 꼭 Load LoRA 노드가 아니더라도, ComfyUI 워크플로우 구성 중 특정 노드의 사용여부를 테스트할 때, 노드를 만들고 삭제하는 등의 워크플로우를 수정하기보다는 바이패스 기능을 활용하면 매우 편리합니다.

다중 로라 적용 방법

위에서는 로라를 1개만 적용했는데요, 만약 2개, 3개의 로라를 중첩하여 사용하고싶을 때는 어떻게 해야할까요? 이 또한 매우 간단합니다. 로라를 계속 얹어서 사용하면 됩니다.

ComfyUI에서 로라 여러개 사용 예시

위 이미지는 기본 워크플로우에 로라를 2개 적용한 모습입니다. Load Checkpoint와 기존의 Load LoRA 사이에 1개의 Load LoRA 노드를 삽입한 형태입니다. 여기서 Load LoRA 노드를 선택적으로 Bypass하면 실제 워크플로우 실행시 몇개의 로라를 적용할지 선택할 수 있습니다. 따라서 2개 이상 다수의 로라를 동시에 사용하시는 분들은 아예 처음부터 Load LoRA 노드를 여러개 연결해두시고 선택적으로 적용할 노드만 On 하여 사용하시면 됩니다.

ComfyUI에서 컨트롤넷 사용법

이번에는 ComfyUI에서 컨트롤넷 노드를 연결하는 방법을 살펴보고자 합니다. 컨트롤넷에서 제공하는 다양한 각각의 기능을 구체적으로 알아보는 시간은 다른 포스팅에서 갖도록 하겠습니다. 여기서는 ComfyUI에서 컨트롤넷을 구동하기 위한 기본적인 노드 구성(워크플로우)을 어떻게 만들어야하는지 살펴봅니다.

ComfyUI 컨트롤넷 설치

먼저 ComfyUI에서 WebUI처럼 전처리기를 포함해 컨트롤넷을 사용하려면 커스텀노드를 설치해야 합니다. Git Clone으로 직접 설치하거나 ComfyUI Manager에서 ControlNet으로 검색하면 나오는 아래의 커스텀 노드를 설치합니다. 커스텀노드 설치 방법에 대해 자세한 설명이 필요하신 분들은 아래 글도 함께 참고하시기 바랍니다.

ComfyUI에서 컨트롤넷 전처리기 설치

https://github.com/Fannovel16/comfyui_controlnet_aux

ComfyUI 컨트롤넷 워크플로우

ComfyUI에서 컨트롤넷은 동작하게 하는 핵심 노드 2개는 바로 컨트롤넷 모델을 불러오는 Load Controlnet Model 노드와 컨트롤넷 자체를 적용시키는 Apply ControlNet 노드 입니다. 아래와 같이 두 노드를 불러온 뒤 프롬프트와 KSampler 사이에 위치하면 기본적인 컨트롤넷 적용 구성이 갖춰지게 됩니다.

ComfyUI에서 컨트롤넷 필수 노드 추가

이제 Apply Controlnet에 빈 Image 입력값만 채워주면 되는데요, 여기에 입력되는 이미지가 바로 컨트롤 이미지가 됩니다. 즉, 오픈포즈를 사용한다면 오픈포즈 전처리를 통해 얻은 뼈따구를, 캐니를 사용한다면 외곽선이 그려진 전처리 이미지를 집어넣어줘야 한다는 것입니다. 이 전처리 과정을 구현하기 위해 위에서 커스텀노드를 설치했으므로, 이제 여기에 노드를 더 추가해보겠습니다.

ComfyUI에서 컨트롤넷 전처리기 조회하기

빈 공간에 마우스 우클릭 > Add Node로 이동하면 ControlNet Preprocessors 항목이 보입니다. 여기서 사용하실 컨트롤넷 전처리기를 선택하여 불러오면 됩니다.

Canny

ComfyUI에서 컨트롤넷 Canny 사용

위 이미지는 컨트롤넷의 Canny를 실행하기 위해 Load Image, Canny Edge(전처리기) 노드를 불러온 모습입니다. Load Image는 말 그대로 이미지를 불러오는 역할이고, 이 이미지를 Canny Edge로 보내면 Canny Edge에서 전처리한 이미지를 Apply ControlNet으로 넘겨줍니다. 이 과정에서 전처리를 마친 이미지를 보고싶으신 분들은 위와 같이 Preview Image 노드를 추가하여 Canny Edge에서 나오는 이미지를 Preview Image에도 함께 전달해주시면 됩니다.

DWPose Estimation

이번에는 Openpose를 적용해보겠습니다. 아래 그림처럼 전처리기로 Canny Edge 대신 DWPose Estimation을 선택해주면 됩니다.

ComfyUI에서 컨트롤넷 DWPose 사용

마찬가지로 Preview Image 노드를 통해 전처리가 제대로 되어 얼굴과 상반신의 뼈따구가 만들어 진 것을 확인할 수 있습니다. 사용하지 않는 Canny Edge 노드는 Bypass 시켜두었지만, 어차피 연결된 다른 노드가 없어서 그냥 살려두셔도 무방합니다.

Depth Map

마지막으로 Depth map 전처리 기능도 사용해보겠습니다. 마찬가지로 컨트롤넷 전처리 목록에서 MiDas – Depth Map 노드를 선택하여 다음과 같이 구성합니다.

ComfyUI에서 컨트롤넷 Depth 사용

전처리 후에 그림을 생성할 때 Load ControlNet Model 또한 전처리 이미지에 맞는 모델로 변경해주시는 것을 잊지 말아야 합니다.

맺음말

이상으로 ComfyUI에서 로라 및 컨트롤넷 워크플로우를 구성하고 사용하는 방법에 대해 살펴보았습니다. WebUI와 달리 자유도가 높은만큼 익숙해지면 훨씬 강력한 도구로 사용 가능합므로, 앞으로도 계속 ComfyUI에 대한 소식도 함께 전달드릴 수 있도록 하겠습니다.