AI 이미지/Stable Diffusion

다이내믹 프롬프트 사용법

하늘이푸른오늘 2024. 1. 1. 14:05

이 글에서는 다이내믹 프롬프트를 사용하는 방법에 대해 말씀드립니다. 먼저 다이내믹 프롬프트가 무엇인지 간단하게 소개하고 AUTOMATIC1111에서 사용하는 방법, 그리고 ComfyUI에서 사용하는 방법을 설명합니다. 목차는 아래와 같습니다.

Dynamic Prompt 란?

다이내믹 프롬프트란, 프롬프트내의 일부 단어를 여러가지로 조합하여 사용할 수 있는 프롬프트를 말합니다. 예를 들어 "a {blue|yellow|red} flower" 이라는 프롬프트는 a blue flower/a yellow flower/a red flower 등 세 가지 프롬프트를 생성해 줍니다. 

원래 프롬프트를 조합하는 방법은 EasyDiffusionComfyUI에서는 기본으로 지원합니다. 즉, 위와 같이 "a {blue|yellow|red} flower"  라고 입력하면 3가지 조합중 한 가지가 무작위로 사용됩니다. 즉, 어떤 때는 노란색 꽃이 나오기도 하고 어떤 때는 파란색이 나오기도 합니다.

예를 들어 AUTOMATIC1111의 경우에는 아래처럼 여러가지 색이 섞인 정원이 출력되지만....

ComfyUI에서 "a picture of a garden filled with beautiful {blue|yellow|red} flowers"라고 입력하면 아래와 같이 여러 조합으로 이미지가 생성됩니다.

이렇게 매번 프롬프트를 바꿔쓰는 게 아니라, 알아서 조합한 프롬프트를 만들어주는 것이 다이내믹 프롬프트(Dynamic Prompt) 입니다.

예를 들어 "Combinational Generation" 옵션을 사용하면 이러한 조합을 무작위로 출력하는 것이 아니라, 모든 경우를 한꺼번에 생성할 수 있습니다. 예를 들면 "A girl with {gold|black|amber} hair in {jeans|skirt} "라고 한다면 3가지 머리색, 2가지 하의를 조합해서 총 6가지를 한꺼번에 생성할 수 있습니다. 

이렇게 다이내믹 프롬프트를 사용하면 여러가지 조합을 한꺼번에 시험할 수 있어서 여러가지 아이디어를 얻고자 할 때 유용하게 사용할 수 있습니다. 

물론 이것보다 기능이 더 많습니다. https://github.com/adieyal/sd-dynamic-prompts 에 들어가면 조합을 중첩시켜 사용할 수도 있고, 파일에 미리 지정했다가 불러들이는 방법등 다양한 기능이 있지만, 이 글에서는 생략합니다.

AUTOMATIC1111 다이내믹 프롬프트 사용법

먼저 AUTOMATIC1111에 대해 잘 모르시는 분은 설치 방법초보자 가이드를 확인해보세요.

AUTOMATIC1111에서 다이내믹 프롬프트를 사용하기 위해서는 Dynamic prompt 확장(extension)을 설치해야 합니다. 확장을 설치하는 방법은 유용한 AUTOMATIC1111 확장을 읽어보시면 됩니다.

따라하기

txt2img 페이지에서 아래와 같이 설정합니다.

모델 : RealvisxlV20
프롬프트 : cinematic film still of a translucent (cybernetic-like:1.3) (dog:1.2), {orange|red|blue|green|rainbow-colored} (glowing veins cables:1.1), circuits, titanium transparent body, biomechanical, extremely detailed, vignette, bokeh, moody, epic, gorgeous, film grain, grainy <lora:xl_more_art-full_v1:0.7>
부정적 프롬프트 : anime, cartoon, graphic, text, painting, crayon, graphite, ugly, oversaturated, blur, blurry
샘플링 방법 : DPM++ 2M Karras
샘플링 단계 : 30
Refiner : 사용하지 않음
CFG 척도 : 7
씨드 : -1
이미지 크기 : 1216x832

조금 아래로 내려가면 Dynamic Prompt 영역이 있는데 이것을 펼쳐보면 아래와 같이 기본으로 적용이 되도록 설정되어 있습니다. 사실 이렇게 펼치지 않아도 자동으로 적용됩니다.

이제 [Generate] 버튼을 누르면 아래와 같은 영상들이 생성됩니다. Batch Size=1, Batch Count=4로 두고 출력한 이미지 모두를 모은 것입니다. 순서대로 Orange/Orange/Rainbow-colored/Red로 생성되었습니다.

이번엔 Combination Generation 옵션을 켜보겠습니다. 

이렇게 설정하고 [Generate] 버튼을 누르면 프롬프트에 있는 {orange|red|blue|green|rainbow-colored} 에 따라 총 5가지 색으로 생성됩니다. 저는 지면의 한계상^^ Orange 색은 제외하고 뒷쪽 4가지 종류만 보여드립니다.

ComfyUI 다이내믹 프롬프트 사용법

ComfyUI가 처음이신 분은 설치 및 기초 사용법초보자 가이드를 읽어보시기 바랍니다.

아래는 위의 내용을 그대로 옮긴 ComfyUI 워크플로입니다. 다운로드 받아 ComfyUI 캔버스에 Drag&Drop하면 이 워크플로를 사용할 수 있습니다.

이 워크플로를 실행시키기 위해서는 다음과 같은 작업이 필요할 수 있습니다.

이 워크플로는 메뉴에서 [Load Default]를 누를 때 나오는 기본 워크플로에 [Combinational Prompts]를 넣은, 매우 간단한 워크플로입니다. 프롬프트를 입력하는 [CLIP Text Encode(Prompt] 노드에서 text widget을 input으로 바꾸고(노드에서 우클릭한 한 후 "convert text widget to input"을 클릭하면 됩니다),  [Combinational Prompts]와 연결한 것 뿐입니다.

다만, 이 워크플로에서 5가지 (orange|red|blue|green|rainbow-colored)를 모두 생성하려면, [Empty Latent Image]의 batch_size는 1로 두고, [Queue Prompt] 버튼을 5번 눌러줘야 합니다.

또는 [Queue Prompt] 버튼 아래에 있는 Extra options를 누르면 아래와 같이 확대되는데, 여기에서 Batch count를 원하는 대로 설정해주시면 됩니다.

조금 더 시험해 보기 위해 프롬프트를 아래와 같이 dog -> {dog|frog|tiger}로 바꾸고, 색은 4가지로 줄였습니다.

프롬프트: cinematic film still of a translucent (cybernetic-like:1.3) {dog|frog|tiger}, {red|blue|green|rainbow-colored} (glowing veins cables:1.1), circuits, titanium transparent body, biomechanical, extremely detailed, vignette, bokeh, moody, epic, gorgeous, film grain, grainy

그러면 총 12가지 종류가 나와야겠죠. 아래는 Batch count를 12로 설정하고 돌려본 결과입니다. 잘 나오네요 ㅎㅎㅎ

다이내믹 프롬프트 문법

이상에서는 다이내믹 프롬프트의 {orange|red|blue}와 같은 행태로 사용하는 가장 간단한 문법만 사용했습니다. 

그런데, https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md 에 들어가 보시면 다이내믹 프롬프트의 문법이 매우 복잡함을 알 수 있습니다. 여기에서는 간단한 몇가지만 설명드리기로 하겠습니다.

가중치

아래와 같이 입력하면 다이내믹 프롬프트에도 가중치를 부여할 수 있습니다. summer가 사용될 때에는 가중치를 0.5로 두고, autumn이 사용될 때에는 가중치를 0.1로 두라는 뜻입니다.

{0.5::summer|0.1::autumn|0.3::winter|0.1::spring}

여러개의 값 사용

{orange|red|blue|green}과 같이 사용하면 매번 1개만 사용되는데, 2개 이상을 사용하는 방법도 있습니다. 예를 들어 아래와 같은 프롬프트는... 

My favourite ice-cream flavours are {2$$chocolate|vanilla|strawberry}

3가지 아이스크림 중에서 2가지를 골라서 사용하라는 뜻이므로...

  • My favourite ice-cream flavours are chocolate, vanilla
  • My favourite ice-cream flavours are chocolate, strawberry
  • My favourite ice-cream flavours are vanilla, chocolate
  • ...

과 같이 총 6가지의 프롬프트가 만들어지게 됩니다. 

와일드카드

프롬프트 내에 {orange|red|blue|green}과 같이 지정하는 게 아니라, 구체적인 값은 따로 txt파일로 저장하고, 프롬프트에서는 __color__와 같이 와일드카드로 작성하는 방법입니다.

예를 들면 프롬프트가 "translucent (cybernetic-like:1.3) {dog|frog|tiger}, {red|blue|green|rainbow-colored}"일 경우, 동물이름을 animal.txt,  색을 color.txt로 지정하여 [ComfyUI\custom_nodes\comfyui-dynamicprompts\wildcards] 폴더에 저장합니다. 내용은 아래와 같습니다. 첫줄은 코멘트로서 없어도 관계없습니다. 

#animal.txt
dog
frog
tiger
#color.txt
red
blue
green
rainbow-color
animal.txt #color.txt

그 다음 프롬프트로는 "translucent (cybernetic-like:1.3) __animal__, __color__"로 두면 됩니다. 

이상입니다.

====

이 글은 https://stable-diffusion-art.com/biomechanical-animal/ 을 참고로 하여 작성하였습니다.