AI 이미지/ComfyUI

편리한 ComfyUI 워크플로 모음

하늘이푸른오늘 2023. 10. 28. 01:47

ComfyUI 를 사용하면 워크플로를 아주 자유롭게 설정할 수 있습니다. 그냥 노드들의 위치를 원하는 대로 바꾸는 정도가 아니라, 아얘 다른 노드로 바꿔서 형태는 완전히 다르지만, 내용상으로는 완전히 동일한 워크플로를 만드는 것도 가능합니다. 그러다보니 (그 이외에도 여러가지 이유가 많지만) 형태가 거의 변하지 않는 AUTOMATIC1111과는 달리 ComfyUI는 사용하기 힘들다는 푸념이 나오기 마련입니다. 저도 처음엔 아주 힘들었고, 사용하기 시작한지 두어 달이 지난 지금도 잘 알지 못하는 부분이 많습니다.

그래도 지금은 그럭저럭 적응하고 있고, AUTOMATIC1111보다 ComfyUI를 사용하는 시간이 더 늘어나고 있는 편입니다.

아래는 제가 자주 사용하고 있는 워크플로 몇가지를 정리해봤습니다. 

SDXL 기본 워크플로

아래는 제가 가장 많이 사용하던 워크플로입니다. 기본적인 base 모델 + refiner 모델에 LoRA를 사용할 수 있도록 구성한 워크플로입니다. 이 워크플로는 이 글에 나온 워크플로가 너무 복잡해서 제 나름대로 쉽게 수정한 버전입니다. 이 그림을 다운로드 받아 ComfyUI에 불러들이면 그대로 사용할 수 있습니다. 불러들이면서 에러가 보이면 이 글을 참조하세요.

SDXL 기본 워크플로

이 워크플로에서 중요한 부분 몇 군데만 소개시켜 드리면 아래와 같습니다.

프롬프트는 아래와 같이 [SDXL Prompt Styler] 를 사용하여 생성합니다. 제가 입력하는 프롬프트와, 아래쪽에 있는 style 에서 지정하는 추가적인 (장식) 프롬프트를 결합하는 방식으로 작동합니다. 예를 들어 아래와 같이 프롬프트를 입력하고  스타일을 enhance로 지정하면 "breathtaking futuristic motorcycle concept inspired by Egyptian Pharaoh Osiris Horus style . award-winning, professional, highly detailed" 과 같이 프롬프트가 확장되고, 부정적 프롬프트는 "ugly, deformed, noisy, blurry, distorted, grainy"가 자동 추가됩니다. 자세한 내용은 이 글을 읽어보시면 됩니다.

프롬프트

잠재 이미지의 크기는 아래와 같이 [CR SDXL Aspect Ratio] 노드를 사용해서 지정합니다. 위쪽에 있는 width/height를 사용해 지정해도 되지만, 가운데 있는 aspect_ratio를 누르면 SDXL 모델에 가장 적절한 이미지 크기가 미리 지정되어 있어 클릭만 하면 이미지 크기를 쉽게 변경할 수 있습니다.

이미지 크기

아래는 base 모델과 refiner모델의 단계수를 지정하는 부분입니다. 총 단계수는 25로 지정해 둬었고, Base Propotion의 동그라미를 눌러보면 0.7로 지정되어 있습니다. 필요하면 수정하시면 됩니다.

샘플링 단계수 설정

LoRA는 아래에서 보시는 것처럼 [CR Load LoRA] 노드 4개를 사용해서 최대 4개까지의 LoRA를 지정할 수 있도록 했습니다. 위쪽에 있는 switch를 사용해서 on/off 할 수 있어 편리합니다. 

LoRA

Efficient Node를 사용한 SDXL 기본 워크플로

저는 위의 워크플로를 자주 사용하다보니 익숙해서 편하지만, 처음 보시면 엄청나게 복잡하다고 생각하실 겁니다. 저도 이 글에 나온 워크플로를 나름대로 줄이긴 줄였는데도 불구하고, 원래 너무 복잡하다보니 한계가 있었습니다. 

그런데, Efficient 노드를 알게 되어 이와 동일한 내용을 아래와 같이 아주 간단하게 줄일 수 있게 되었습니다. 자세한 내용은 Efficient Nodes for ComfyUI에 설명이 들어있는데, 여기에서는 간단히만 설명합니다.

Efficient 노드를 사용한 SDXL+LoRA 워크플로

아래쪽에는 [SDXL Prompt Styler] 노드와 [CR SDXL Aspect Ratio] 노드가 있는데, 위에서 설명한 것과 동일합니다.

[SDXL Prompt Styler] 노드와 [CR SDXL Aspect Ratio] 노드

[LoRA Staker] 노드는 LoRA를 불러들이는 노드로, lora_count를 바꾸면 LoRA를 얼마든지 추가할 수 있습니다. [Eff. Loader SDXL] 노드는 base 모델/refiner 모델/VAE 등을 지정하고, 관련 설정을 할 수 있는 노드입니다. 기본 노드 5개의 기능을 한꺼번에 수행합니다.

[LoRA Staker] 노드와 [Eff. Loader SDXL] 노드

참고로 현재 이 워크플로에는 ControlNet이 없지만, [ControlNet Stacker]노드를 사용하면 비교적 쉽게 추가할 수 있습니다. 

SD1.5 기본 워크플로

SD 1.5 기본 워크플로도 Efficiency Nodes를 사용해 구성하였습니다. 기본적인 형태는 바로 위에서 설명한 워크플로와 거의 비슷합니다. 모델을 불러오는 노드가 [Efficient Loader]로, 잡음 제거 샘플링 노드가 [KSampler (Efficiet)]로 바꿨고, [HighRes-Fix Script] 노드를 추가했습니다. HighRes-Fix는 생성한 이미지를 확대하면서 다시 잡음 제거하는, 2 pass txt2img 기법으로 여기를 읽어보시면 됩니다.

SD1.5 기본 워크플로

결과적으로 저는 대부분 이 두개의 워크플로를 사용해서 필요한 이미지를 생성합니다. 아마도 이 워크플로만 사용해도 거의 90% 이상을 지원할 거라고 생각합니다.

아래에 있는 워크플로들은 보다 특수한 워크플로로서, 그때 그때 필요할 때만 불러서 사용합니다. 이러한 워크플로는 대부분 별도의 글로 설명되어 있으니 참고하세요.

구역 분할 프롬프트(Regional Prompt) 워크플로

스테이블 디퓨전으로 이미지를 생성하다보면, 구도를 정확하게 지정하기 힘들다는 것을 알게 됩니다. 예를 들면 검은 머리 남자가 왼쪽에, 금발 여성이 오른쪽에 있고, 오른쪽 구석에 화분이 있게 그림을 그리려면 적절한 프롬프트를 만들기도 힘들고, 생성된 결과가 프롬프트를 따르지 않는 경우가 많습니다.

이럴 때, 어떤 프롬프트는 어디에만 적용되도록 지정할 수 있으면 편리합니다. AUTOMATIC1111에서는 구역 분할 프롬프트(Regional Prompter)라는 확장을 사용하여 구현하는데, ComfyUI에서는 아래의 워크플로를 사용하면 쉽게 사용할 수 있습니다.

ComfyUI 구역 분할 프롬프트 워크플로

무엇보다 이 워크플로를 사용하면 어느 구역에 어떤 프롬프트를 적용할지 시각적으로 확인할 수 있어서 편리합니다. 자세한 사용방법은 ComfyUI - 구역 분할 프롬프트를 읽어보세요. 아래는 위의 워크플로로 생성된 이미지입니다.

아름다운 마녀

QR코드 이미지 생성 워크플로

단순한 QR 코드가 아니라 아래와 같이 QR코드가 이미지와 잘 섞여 있는 QR 코드를 만들 수 있습니다.  

QR 코드 이미지

워크플로는 아래와 같습니다. 생성된 이미지가 마음에 드는데 QR코드를 잘 읽어들이지 못할 경우, 가운데 있는 [CR Apply ControlNet]노드에서 "strength"값을 약간(0.02 정도) 올려주시면 됩니다. 

QR 코드 워크플로

바탕화면용 판타지 월페이퍼

바탕화면에 사용할 수 있는 판타지 스타일의 월페이퍼를 다양한 스타일로 자동 제작할 수 있는 워크플로입니다. 보시는 것처럼, 클릭할 때 마다 다른 스타일로 만들어줍니다.

아래는 워크플로입니다. 위쪽에 있는 Efficient SDXL 워크플로를 약간 수정한 겁니다. 자세한 내용은 이 글을 읽어보세요.

이상입니다.

민, 푸른하늘

====