AI 이미지/ComfyUI

ComfyUI용 SDXL Prompt Styler

하늘이푸른오늘 2023. 8. 29. 16:12

SDXL - nautical  themed woman

엊그제 쓴 SDXL 모델 스타일 106가지라는 글에서는, AUTOMATIC1111 확장인 StyleSelectorSDXL 1.0을 소개했습니다. 사실상, 이 106가지 스타일이란, StyleSelectorSDXL 확장에서 제공하는 스타일을 하나씩 나열한 것에 불과했습니다. 즉, "woman" 또는 "city"와 같이 간단한 프롬프트만 입력한 상태에서 StyleSelector가 제공하는 스타일을 선택하면 다른 스타일과는 완전히 다른 새로운 이미지가 만들어졌습니다.

이 StyleSelector를 ComfyUI에서도 사용할 수 있습니다. 커스톰 노드인 SDXL Prompt Styler를 설치하면 됩니다(사실 Style Selector for SDXL 1.0 도 이 SDXL Prompt Styler를 따라한 것 같습니다). 설치하는 방법은 아래와 같습니다.

1. 명령 프롬프트(cmd)룰 실행하고, 아래와 같이 custome_nodes 디렉토리로 이동합니다. 아래서 실제 폴더 위치는 자신의 환경에 맞춰 적당히 수정하세요.

cd C:\ComfyUI\ComfyUI_windows_portable\ComfyUI\custom_nodes

2. 다음 명령을 실행합니다.

git clone https://github.com/twri/sdxl_prompt_styler.git

3. 설치가 완료되면 ComfyUI를 완전히 새로 시작합니다.

사용방법은 간단합니다. 아래 그림과 같이, Add node -> utils -> SDXL Prompt  Styler (또는 SDXL Prompt Styler Advanced)를 선택하면 됩니다.

SDXL Prompt Styler
SDXL Prompt Styler

이제부터 직접 활용하는 방법을 보여드리겠습니다. 우선 저는 아래와 같은 기본적인 워크플로에서 시작하겠습니다. 아래 그림을 저장한 뒤 ComfyUI 캔버스에 드래그&드롭하면 이 워크플로를 불러들일 수 있습니다.

SDXL  base+refiner 기본 워크플로
SDXL  base+refiner 기본 워크플로

여기에서 프롬프트와 관련된 부분만 확대시켜보겠습니다. 

SDXL  base+refiner 기본 워크플로중 프롬프트 관련 부분
SDXL base+refiner 기본 워크플로중 프롬프트 관련 부분

  • 왼쪽 두개는 그냥 프롬프트와 부정적 프롬프트를 입력하는 노드입니다. 
  • 오른쪽의 위 두개는 SDXL base 모델에대한 CLIP Text Encoder 로서, 앞쪽은 긍정적 뒤쪽은 부정적 프롬프트를 처리합니다.
  • 이 두 노드에는 텍스트를 2개 입력받습니다. text_g는 OpenCLIP ViT-bigG 모델, text_l 은 CLIP ViT-L 모델에 대한 입력입니다. 대부분 동일한 값을 사용해야 하기 때문에 왼쪽 프롬프트와 오른쪽 CLIP Text Encoder 에 두개씩 연결합니다.
  • 오른쪽 아래 두개는 SDXL refiner 모델에 대한 CLIP Text Encoder입니다. 이 노드들은 부정적 프롬프트는 없이 긍정적 프롬프트만 입력으로 받습니다.

우리는 여기에서 Prompt(Pos)  및 Prompt(Neg)를 SDXL Prompt  Styler 를 대체하는 것이 목표입니다.

우선 빈 캔버스에서 Add node -> utils -> SDXL Prompt  Styler를 선택해 SD Prompt Styler 노드를 하나 추가합니다. (프롬프트는 그냥 복사해 두었습니다)

SD Prompt Styler 노드 추가
SD Prompt Styler 노드 추가

이제 Prompt 노드 두개는 삭제합니다. 그리고 SD Prompt Styler 노드의 text_positive 슬롯을 CLIPTextSDXL(Pos) 노드의 text_g/text_l 슬롯, 그리고 CLIPTextRefiner(Pos) 노드의 text 슬롯에 연결합니다. 

SDXL Prompt Styler 노드 연결1
SDXL Prompt Styler 노드 연결1

마찬가지로 SD Prompt Styler 노드의 text_negative 슬롯을 CLIPTextSDXL(Neg) 노드의 text_g/text_l 슬롯, 그리고 CLIPTextRefiner(Neg) 노드의 text 슬롯에 연결하면 완성입니다.

SDXL Prompt Styler 노드 연결2
SDXL Prompt Styler 노드 연결2

이제 시험해 보겠습니다. SDXL 모델 스타일 106가지의 첫번째 예를 해보죠. 아래와 같이 SDXL Prompt Styler를 입력합니다. 

  • SD Prompt Styler 노드의 긍정적 프롬프트 : woman
  • SD Prompt Styler 노드의 긍정적 프롬프트 : (비워둡니다)
  • <style> 위젯 : sai-3d-model
  • log_prompt : Yes

참고로 맨아래에 있는 log_prompt 를 yes로 설정하면, ComfyUI가 실행되는 명령 프롬프트 창에 탬플릿까지 적용된 최종 프롬프트들이 출력됩니다. 예를 들어 위의 예에서 프롬프트에는 "woman"만 입력했지만, 명령 프롬프트에는 아래와 같이 출력됩니다.

text_positive: woman
text_negative:
text_positive_styled: professional 3d model woman . octane render, highly detailed, volumetric, dramatic lighting
text_negative_styled: ugly, deformed, noisy, low poly, blurry, painting

아래는 실행 결과입니다. 잘 됩니다. ㅎㅎㅎ

SDXL - professional 3D woman
SDXL - professional 3D woman
SDXL - professional 3D woman
SDXL - professional 3D woman

===

스타일 설정은 ComfyUI_windows_portable\ComfyUI\custom_nodes\sdxl_prompt_styler 에 들어있는 jason파일에 의해 결정됩니다. 이 JSON  파일들은 아래와 같은 형식으로 만들어야 하며, 원하는대로 추가하거나 수정할 수도 있습니다.

[
    {
        "name": "base",
        "prompt": "{prompt}",
        "negative_prompt": ""
    },
    {
        "name": "sai-enhance",
        "prompt": "breathtaking {prompt} . award-winning, professional, highly detailed",
        "negative_prompt": "ugly, deformed, noisy, blurry, distorted, grainy"
    }
]

또한 자신이 잘 사용하는 스타일이 있다면 이런 형식으로 별도의 JSON 파일을 생성하여 이 폴더에 함께 넣어주면 같이 사용할 수 있습니다. 여러개의 JSON 파일을 함께 읽어서 사용하기 떄문입니다. 

만약 이 폴더에 있는 JSON 파일을 모두 지우고  SDXL 모델 스타일 106가지에 들어있는 파일을 넣으면, AUTOMATIC1111과 동일하게 사용할 수 있을 겁니다. 사실 내용상으로는 거의 동일하기 떄문에 구지 그럴 필요는 없겠지만요. ㅎㅎ

아래는 최종적으로 만든 워크플로입니다. 필요하시면 가져다 쓰세요~

SDXL_base+refiner+styler 워크플로
SDXL_base+refiner+styler 워크플로

이상입니다.