AI 이미지/ComfyUI

ComfyUI 설치 및 사용법 기초

하늘이푸른오늘 2023. 8. 2. 01:01

이 글을 처음 쓸 때부터 약 6개월 정도 경과된 것 같습니다. 이제는 왠만하면 AUTOMATIC1111 보다 ComfyUI를 사용하는 게 편해졌을 정도로 익숙해졌습니다. ComfyUI가 약간 어렵기는 하지만, 상당한 장점이 있어서 사용자들이 엄청나게 빨리 증가하고 있는 편인데, 저도 그중의 한명이 된 것입니다.

ComfyUI는 무엇보다 프로그램이 가볍고 빠릅니다. AUTOMATIC1111과 비교했을 때 동일한 작업이라면 30% 정도는 빨리 수행되는 것 같고, 특히 이미지 크기가 커지면 속도차가 몇배씩 차이난다는 느낌을 받을 정도입니다.

또한 ComfyUI에서 생성한 워크플로를 공유하기가 아주 쉽습니다. AUTOMATIC1111이라면 모든 매개변수를 하나씩 보면서 설정해야 하고, 그렇게 설정을 해도 동일한 이미지가 생산되는 경우는 극히 드뭅니다. 하지만, ComfyUI는 워크플로가 포함된 이미지나 json 파일을 Drag&Drop 만 하면 해당 워크플로를 완벽하게 복제할 수 있고, 따라서 완벽하게 동일한 이미지를 생성할 수 있습니다.

따라서 기존 AI 이미지 사이트는 이미지만 공유했다면, Comfy 유저들은 OpenArt Flow 사이트 처럼 워크플로 자체를 공유하고 있고, 이를 마음껏 활용할 수 있습니다.

하지만, 저보다 훨씬 더 ComfyUI를 잘 사용하는 분들은, 워크플로를 마음대로 생성할 수 있다는 점 때문에 ComfyUI를 좋아하는 것 같습니다. AUTOMATIC1111에서는 txt2img, img2img 등 워크플로가 정해져 있어서, 마음대로 조정하기는 쉽지 않습니다. 그런데 ComfyUI는 뭐든지 원하는 대로 조정할 수 있습니다. 예를 들어 이미지를 생성한 후 그 이미지를 img2img의 입력으로 사용해 다시한번 샘플링을 돌린 다음에 AI 확대기(Upscaler)를 돌리고... 등등... 자신이 최적이라고 생각하는 워크플로가 있다면 마음대로 짜맞추기 할 수 있습니다. 

이 글은 간단히 ComfyUI를 설치하고 간략하게 사용하는 방법만 정리한 글입니다. 아직 저도 ComfyUI를 계속 배워가는 중이지만, 아무쪼록 ComfyUI의 매력에 빠져드는 데 도움이 되시길 바랩니다. 이 글을 다 읽으시면 ComfyUI 투토리얼도 읽어보실 것을 추천드립니다.

설치방법

ComfyUI 설치방법은 간단합니다. Github 저장소 : https://github.com/comfyanonymous/ComfyUI#windows 에 들어가서 Direct link to download 라고 된 링크에서 파일을 다운로드 받고, 아무 폴더나 원하는 곳에 압축을 풀기만 하면 됩니다. 

ComfyUI 설치 방
ComfyUI 설치 방법

그리고 AUTOMATIC1111에 이미 체크포인트 파일이나 LoRA, controlNet 파일을 설치해둔 분이라면 이러한 파일들을 공유해서 사용할 수 있습니다. 설치 완료후 ComfyUI_windows_portable\ComfyUI 에 들어가면 extra_model_paths.yaml.example 파일이 있는데, 이 파일을 편집하여 AUTOMATIC1111 의 모델 위치를 지정한 후, extra_model_paths.yaml 로 저장해주면 됩니다. 아래는 이 파일의 내용인데, 여기에서 base_path 만 A1111이 설치된 폴더명으로 수정하면 됩니다. ControlNet모델은 models/ControlNet외에도 \extensions\sd-webui-controlnet\models 에도 설치할 수 있기 때문에 확인해 보시구요.

a111:
    base_path: F:/sd/stable-diffusion-webui

    checkpoints: models/Stable-diffusion
    configs: models/Stable-diffusion
    vae: models/VAE
    loras: |
         models/Lora
         models/LyCORIS
    upscale_models: |
                  models/ESRGAN
                  models/RealESRGAN
                  models/SwinIR
    embeddings: embeddings
    hypernetworks: models/hypernetworks
    controlnet: models/ControlNet

이러한 AUTOMATIC1111에서 사용하는 모델 파일 외에도 ComfyUI에서만 사용할 모델 파일들이 있다면, ComfyUI_windows_portable\ComfyUI\models 속에 있는 적당한 폴더에 넣어주시면 됩니다. 예를 들어 저는 SD 1.5 파일들은 위의 extra_model_paths.yaml 파일을 사용해 공유하고, SDXL 파일은 comfyUI에 별도 넣어주기로 했습니다. 아래는 SDXL 파일입니다.

이 두개의 파일을 ComfyUI_windows_portable\ComfyUI\models\checkpoints 속에 넣어주면 됩니다. 스테이블 디퓨전 모델의 모든 것이라는 글에 있는 여러가지 모델들도 원하시면 여기에 넣어주시면 됩니다.

실행방법

먼저 이 파일 생성된 이후 변경된 사항에 대해 업데이트가 필요합니다. ComfyUI_windows_portable\update 폴더속에 있는 update_comfyui.bat 파일을 실행합니다.  아래와 같은 다이얼로그가 뜰 경우에는 추가 정보를 누른후 [실행] 버튼을 클릭해주면 됩니다.

인식할 수 없는 앱 시작 차단
인식할 수 없는 앱 시작 차단

이제 진짜 실행할 차례입니다. ComfyUI_windows_portable 에 아래와 같이 3개의 파일이 있습니다. 자신의 PC에 nvidia 그래픽 카드가 있을 경우, run_nvidia_gpu.bat 파일을, 없을 경우에는 run_cpu.bat 파일을 실행시키면 됩니다.

README_VERY_IMPORTANT.txt 파일에는 주의 사항이 들어 있는데 실행하다가 오류가 발생하면 모델 파일을 미리 복사해 뒀는지 확인하라는 것과, 일반적인 업데이트는 바로 위처럼 update_comfyui.bat 을 실행시키면 된다는 내용이 들어 있습니다 .

ComfyUI_windows_portable 폴더 내용
ComfyUI_windows_portable 폴더 내용

처음 실행시키면 약간 시간이 걸립니다. 잠시 기다리면 아래와 같이 실행이 되고(추가 모델 파일 설정이 잔뜩 나와 있습니다) ....

ComfyUI 처음 실행화면
ComfyUI 처음 실행화면

웹브라우저에 다음과 같이 ComfyUI 메인 화면이 나타납니다. 이렇게 나오면 정상적으로 실행된 것입니다.

ComfyUI 메인화면
ComfyUI 메인화면

이 화면에서 각각의 사각박스를 노드라고 부릅니다. 노드는 Stable Diffusion을 구성하는 여러가지 모듈?을 대표하는 것이라고 생각하시면 됩니다. 노드는 아주 여러가지 종류가 있습니다. 바탕화면에서 우클릭하면 아래와 같은 메뉴들이 나타나는데, 각각의 서브메뉴 별로 다양한 노드가 있음을 알 수 있습니다. 기본 워크플로에는 VAE나 LoRA가 없는데, 아래 그림과 같이 하면 이것들을 추가할 수 있습니다.

노드 추가 방법
노드 추가 방법

또한 노드 이름을 알고 있을 경우엔 화면을 더블클릭하여 이름을 입력하는 방법으로 쉽게 찾을 수 있습니다. 

노드 이름으로 추가하는 방법

화면 제어

기본 워크플로는 그다지 복잡하지 않지만, 계속 노드를 추가하면 복잡할 수 있습니다. (오른쪽 Queue Prompt가 있는 박스 맨 아래있는 [Load Default]를 누르면 항상 기본 워크플로로 돌아옵니다.) 이때 마우스 휠을 굴리면 화면이 확대 또는 축소가 됩니다. 

또한 바탕화면 아무 곳에서나 드래그를 하면 상하 좌우로 패닝도 가능합니다. 

노드들의 위치를 개별적으로 옮길 수도 있습니다. 예를 들어 기본 워크플로는 아래 왼쪽처럼 되어 있는데, 노드를 드래그하면 오른쪽처럼 위치를 변경할 수도 있습니다. 또한 노드를 우클릭하고 [Resize]를 클릭하면 오른쪽처럼 노드의 크기를 조정할 수도 있습니다. 

기타 화면 제어 관련 단축키는 여기를 읽어보시면 됩니다.

기본 워크플로 노드

맨 왼쪽은 모델(체크포인트 파일)을 선정하는 곳입니다. 글씨가 써져있는 곳을 누르면 오른쪽처럼 자신이 설치한 여러가지 모델들이 나타납니다. 저는 sd_xl_base_1,9.safetensors, 즉 SDXL 1.0 base 모델을 선택했습니다. 

체크포인트 파일 선택
체크포인트 파일 선택

이 체크포인트는 아래와 같이 CLIP(언어모델)이 두개 연결됩니다. 위는 프롬프트(prompt)를 입력하는 곳이고 아래는 부정적 프롬프트(negative prompt)를 입력하는 곳입니다. 이처럼 체크포인트 파일과 프롬프트가 직접 연결된다는 것을 직관적으로 알 수 있습니다. 일단 프롬프트는 수정하지 않고 그대로 두도록 하겠습니다. 

체크포인트 파일과 CLIP 프롬프트
체크포인트 파일과 CLIP 프롬프트

다음은 Empty Latent Image 입니다. 즉 현재는 아무 내용도 없는 잠재(latent) 이미지라는 뜻이죠. 여기에 이미지 크기를 입력합니다. 저는 SDXL base 모델을 사용하므로 1024x1024로 지정하였습니다. 

잠재 이미지 크기 설정
잠재 이미지 크기 설정

이 잠재 이미지는 아래와 같이 샘플러와 연결이 됩니다. 잘 보시면 샘플러는 모델, 프롬프트, 잠재이미지를 입력 받는다는 것을 알 수 있습니다.

잠재 이미지와 샘플러
잠재 이미지와 샘플러

샘플러에서는 시드번호, 샘플 스텝수, CFG(분류자유도 척도), 샘플링 방법 등을 지정할 수 있습니다. 이러한 내용은 AUTOMATIC1111에서 설정하는 내용과 거의 비슷합니다. 특히 두번째 control_after_generate를 randomize로 설정해서 시드 번호를 무작위로 변하도록 설정했는데, 고정시킬 수도 있고 +1 또는 -1로 한단계씩 변화시킬 수도 있습니다.

그리고 denoise는 AUTOMATIC1111에서는 잡음 제거강도(denoising strength)에 해당하는데, A1111에서는 0.75가 기본값인데, ComfyUI에서는 1.0이 기본값입니다. 

일단 샘플러 설정화면에서는 아무것도 건드리지 않았습니다. 

다음으로 VAE 디코더를 보면, 샘플러의 출력을 입력으로 받고, vae는 원래의 체크포인트 파일에 들어 있는 VAE를 사용함을 알 수 있습니다. 그리고 VAE 가 디코딩을 하면 최종 이미지가 생성됨을 알 수 있습니다. 아래 그림에서 이미지가 2개 생성된 것은 이미지 크기를 정할 때 batch size를 2로 정했기 때문입니다.

이렇게 설정이 끝나면 맨 오른쪽에 있는 메뉴에서 [Queue Prompt] 버튼을 눌러줍니다. 현재 대기중인 작업이 없으므로 직접 이미지 생성이 시작됩니다. 이미지 생성이 완료되기 전이라도 설정을 바꾸고 [Queue Prompt] 를 누르면 현재 설정한 이미지 생성작업이 대기열에 들어가게 됩니다. AUTOMATIC1111 의 경우에는 이렇게 큐를 넣는 방법이 없어서 일일이 작업이 끝나길 기다렸다가 [Generate]버튼을 눌러야해서 불편했는데, 이건 확실히 좋네요.

최종적으로 생성된 이미지에서 우클릭을 하면 아래와 같이 팝업메뉴가 뜨는데, 여기서 Save Image를 누르면 이미지를 저장할 수 있습니다. 또 ComfyUI_windows_portable\ComfyUI\output  에 들어가면 모든 이미지가 들어 있습니다. 

comfyUI 최종 이미지
comfyUI 최종 이미지

저장되는 폴더를 바꾸고 싶을 경우,  처음 시작할 때 사용하는 배치파일(run_nvidia_gpu.bat)를 편집해서 아래와 같이 "--output-directory"를 추가해야 변경할 수 있습니다. 맨마지막 폴더 위치는 자신의 환경에 맞게 수정하시면 됩니다.

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build  --output-directory E:\00GoogleDrive\00SDOutput
pause

다른 사람의 워크플로 사용하기

ComfyUI를 사용할 때 가장 좋은 점 중 하나가, 다른 사람이 생성한 워크플로를 그대로 사용할 수 있다는 점입니다. 예를 들어 인터넷을 떠돌다가 멋진 이미지를 만나서 비슷한 이미지를 생성해보고 싶을 때, 다른 도구와는 달리 ComfyUI는 만드는 방법과 결과물을 완전히 똑같게 가져올 수 있습니다. 

ComfyUI의 워크플로는 두 가지 방식으로 저장이 됩니다. 첫번째, ComfyUI의 메뉴에서 "Save"를 누르면 워크플로가 .json 파일로 저장이됩니다. 두번째는 ComfyUI 이미지에는 PNG 메타데이터 워크플로가 자동으로 내장되어 있습니다. 

워크플로를 가져오는 방식은 간단합니다. .json 파일이나, ComfyUI로 생성된 이미지를 ComfyUI화면에 Drag&Drop 하면 됩니다. 또는 ComfyUI 메뉴에서 "Load"를 선택해 직접 지정해도 됩니다.

그런데, 이렇게 다른 분이 만든 워크플로를 가져오면 잘 실행되는 경우가 있습니다. 이럴 경우, 이 글을 참조해서 해결하시면 됩니다.

참고로, 아무런 생성 정보가 없는 이미지를 비슷하게 생성하고 싶을 경우에는 프롬프트를 알아내는 방법을 사용하면 되고요, Civitai.com의 이미지처럼 생성정보가 있다면, AUTOMATIC1111 에서 이러한 생성정보를 입력해서 생성하는 것이 가장 빠릅니다.

노드 추가 방법

기본 워크플로만으로도 훌륭한 이미지를 생성할 수 있지만, 스테이블 디퓨전은 VAE, LoRA, ControlNet 등 다양한 구성요소를 추가하거나 다른 걸로 바꿔서 이미지를 생성할 수 있습니다. 아래는 VAE 노드를 추가하는 방법을 보입니다. 

먼저 바탕화면에서 마우스를 우클릭하고 Add Node->loaders->Load VAE를 선택합니다.

노드 추가 방법
노드 추가 방법

그러면 아래와 같이 VAE 노드가 추가됩니다. 그리고 VAE이름 입력칸을 클릭하면 현재 가용한 VAE가 나열되므로 필요한 것을 선택하면 됩니다.

VAE 노드 추가
VAE 노드 추가

하지만, 이 노드는 아무데도 연결이 되어 있지 않아서 이대로는 아무런 역할도 할 수 없습니다. 아래와 같이 [Load VAE] 노드의 오른쪽에 있는 출력슬롯 VAE를, 위쪽 [VAE Decode] 노드의 입력슬롯 vae에 연결해 주어야 합니다.

아래에서 빨간점을 클릭하고 원하는 위치에서 마우스를 놓아주면 선이 연결됩니다. 

VAE 노드 연결
VAE 노드 연결

이렇게 연결되면 원래 있던 [Load Checkpoint]와 [VAE Decode] 간의 연결이 끊어지면서 체크포인트 파일내에 포함된 기본 VAE를 사용하지 않게 되고 [Load VAE] 노드에서 지정한 VAE가 대신 사용되는 것입니다.

마지막으로... 이와 같은 설정사항은 [Quere Prompt]가 있는 박스에서 [Save]를 누르면 저장할 수 있습니다. 물론 [Load]를 누르면 불러올 수 있구요.

워크플로 저장 및 불러오기
워크플로 저장 및 불러오기

워크플로 변경방법

이런식으로 노드를 변경하면 새로운 방식으로 이미지를 생성할 수 있지만, 수많은 노드를 서로 어디로 연결할지를 판단하는 것은 쉬운 일이 아닙니다. AUTOMATIC1111에서는 txt2img, img2img 등 여러가지 페이지가 있고, 또 여러가지 텝이 있어서 알기가 쉽지만, comfyUI 에서는 직접 자신이 노드를 추가하고 서로 연결 시켜줘야만 작동하기 때문에 상호간의 관계를 잘 알고 있어야 합니다. 특히 스테이블 디퓨전의 이론을 잘 모르는 초보자로서는 전혀 알 방법이 없죠.

하지만, 좋은 방법이 있습니다. ComfyUI_examples에 들어가면 다양한 예제가 있습니다. 보시면 img2img, inpaintingg, LoRA, hypernetworks 등 거의 모든 종류가 들어 있음을 알 수 있습니다. 

예를 들어 LoRA를 추가하고 싶다면 위 사이트에서 Lola를 클릭하고 들어갑니다. 그러면 아래와 같이 LoRA를 사용할 때의 노드 배치 방법을 보여주는 그림이 나타납니다(아래는 LoRA를 두개 사용할 경우입니다),

ComfyUI LoRA 예제 페이지
ComfyUI LoRA 예제 페이지

이 그림을 저장하고, 메뉴에서 [Load]를 눌러 저장한 사진을 클릭하거나, 저장한 그림을 그냥 CompyUI 화면에 Drag&Drop하면 해당 워크플로가 그대로 나타납니다. 아래는 Lora Examples에 들어있는 그림을 불러왔을 때의 화면입니다. 잘 들여다 보시면, 체크포인트 파일, LoRA 파일, 프롬프트, 샘플러 등 모든 설정이 불러진 것을 알 수 있습니다. 각 노드의 위치 및 배치까지도 똑같게 불러집니다. 불러온 후, 모델이라든지, LoRA 파일등은 필요에 따라 다른 것으로 대체해야 할 수도 있습니다. 

ComfyUI LoRA 설정
ComfyUI LoRA 설정

Inpaint Sample에서도 마찬가지입니다. 여기에 들어 있는 어떤 사진이든 저장을 하고 ComfyUI에 불러오면, 인페인트 작업에 관한 설정이 그대로 불러집니다. (물론 필요에 따라 조금 더 수정이 필요할 수도 있습니다.)

ComfyUI 인페인트 설정
ComfyUI 인페인트 설정

이것은 ComfyUI로 생성되는 이미지에 생성과 관련된 설정(메타데이터)가 파일내에 저장되기 때문입니다. 이걸 이용하면 자신이 실행했던 작업내용을 기억하기도 쉽고, 설정도 쉬워질 것 같네요.

이상입니다. 이제는 제 블로그에서 방문자가 많은 글 중 하나가 될 정도로 ComfyUI의 인기가 높아진 것 같습니다. 읽어보시고 마음에 드시면 ComfyUI 투토리얼도 읽어보시기 바랍니다.

민, 푸른하늘