WEBUI - 스테이블 디퓨젼의 다이나믹 프롬프트

다이나믹 프롬프트는 기본 프롬프트를 조정하여 수십 또는 수백 개의 프롬프트를 동시에 테스트할 수 있는 webui의 확장기능입니다. 그래서 이걸 가지고 뭐를 할 수 있느냐 하면
와일드 카드를 이용하여 혹은 하나의 주제에 관련된 여러가지 프롬프트(태그)를 형식에 맞춰서 적으면 한번 생성할 때 다양한 결과를 보는 것입니다.





AI작품




다이나믹 프롬프트


역할

그림을 생성하다 보면 똑같은 포즈와 똑같은 시점이 계속 나와서 변화를 주고 싶다는 생각이 듭니다.
그럴 때 마다 그림을 생성하고 바꾸고 싶었던 포즈나 시점 혹은 의상, 배경 등을 하나하나 바꾸면 신경도 쓰이고 힘듭니다.

애초에 미리 다양한 결과값이 나올 수 있게 하면 '생성'버튼 한번만 누르고 쉬고있으면 되는데 말이죠.
다아나믹 프롬프트는 다양한 결과가 나오게 도와주는 역할을 합니다.

또한 저희가 흔히 쓰는 와일드카드 __wildcards__ 기능을 쓸 수 있게 해주기도 하죠.




사용방법 
어렵습니다. 익숙해지려면 시간이 조금 걸릴 겁니다.




1. wildcards

흔히 "__" 이렇게 치면 와일드카드 선택하는 창이 뜨는데 (와일드카드가 있으면) 이런 기능이 다이나믹 프롬프트의 첫번째 기능입니다.



2. 간단한 다이나믹 프롬프트 사용방법


다이나믹 프롬프트의 문법인데 복잡한 건 뒤에 설명하도록 하고, 간단한 것부터 살펴보겠습니다.

밑에서 설명하는 { A | B }에서
A혹은 B에는 일반 프롬프트, 와일드카드가 들어갈 수 있습니다. 때문에 응용하려고 하면 끝도 없습니다.






기본 원리



기본적인 원리 : { A | B }라고 치면 A or B를 뽑음

예) a man wearing a { sunglasses | helmet } 이렇게 치면,

  • a man wearing a sunglasses
  • a man wearing a helmet

    이렇게 두 가지 결과가 나오는 형식입니다.


여기서 더 나아가면,


a man wearing a { {black|white|red} sunglasses | helmet }
{black|white|red}를 추가하여 


  • black sunglasses
  • white sunglasses
  • red sunglasses
  • helmet

이런 네 가지의 결과가 나오게 됩니다. 

간단하게  { A | B }를 덩어리 안에 덩어리가 있다고 생각하시고 문법으로 따지면  관형절 혹은 관형어 느낌으로 받아들이시면 되겠습니다.



처음 사용하실 때는 하나의 완성된 문장에서 시작하시면 편합니다. 말하듯이 문장을 짜면 되니까 시작하시기 편할겁니다.



예)  "a man wearing cloth playing a basketball"에서 꾸며준다고 생각하고 {A|B}를 더하면

  • a {short|tall} man wearing {{white|yellow|black}sports|casual}cloth playing a basketball





참고 : 프롬프트에서 공백은 WEBUI가 인식을 안 하기 때문에 너무 길어지거나 복잡하면 공백으로 칸을 나눠서 보기 쉽게 만들 수 있습니다.

  • a {short|tall} man wearing
    {
    {white|yellow|black} sports | casual}
    } cloth
    playing a basketball





복잡한 다이나믹 프롬프트 : 


1.$$ 활용


$$는 { } 안에서 쓰이면서 '선택'한다는 의미를 가지고 있습니다. 

1. { }에 $$ 없을때

자동적으로 1$$가 인식되어서 {A|B|C} 세가지 중에 하나가 선택되어 인식되는 원리입니다. A,B,C 중에 아무거나



2.  { }에 $$ 있을때 

  • 2$$

    2가지를 선택

  • 1~3$$

    1~3 중에 아무거나 선택

  • 3$$and$$

    3가지를 선택하고 ,(프롬프트를 나누는 기본적인 문자)대신 and 선택

    예)

    {2$$and$$opt1|opt2|opt3|opt4|opt5}
    주어진 집합에서 두 개의 옵션을 무작위로 선택(2$$)하고 'and'와(and$$) 결합. 따라서 나오는 프롬프트 값은 "opt2 및 opt4",
     "opt1 and opt5", "opt3 and opt4" 등의 다른 조합을 얻을 수 있습니다. 
    즉, 항상 두 가지 옵션을 선택하고 "and"로 구분합니다


  • {A$$ 및 $opt1|opt2|opt3|opt4|opt5}

    A가 적혀있는 옵션 개수보다 클 때 (여기서 옵션은 5개) 

    A > 5 : 그냥 랜덤으로 옵션을 선택해서 그림을 생성함 그리고 그 옵션이 반복될 수 있습니다.

    예) 

    {6$$ 및 $opt1|opt2|opt3|opt4|opt5})를 지정한 경우 결과에 몇 가지 옵션이 반복될 수 있습니다. 때문에
    임의 선택에 따라 "opt1, opt2, opt3, opt1" 또는 "opt4, opt2, opt5, opt2"와 같이 프롬프트가 선택되어 입력됩니다.




2. :: 활용


:: 접두사 연산자를 사용하는 것은 $$보다 간단합니다.

{A|B}에서 A 혹은 B에 가중치를 할당하는 것입니다.


A대신 2::A를 넣어서 {2::A|B}가 된다면 생성하는 3개 그림 중에 2개를 A로 뽑고 1개를 B로 뽑으라는 명령어 입니다. 반대로 {A|2::B}로 하면 B를 A보다 2배로 뽑겠다는 것입니다.


이 명령어는 소수점에도 적용이 됩니다. 
위에서 예를 들은{2::A|B}를 소수점으로 바꾼다면 대략 {0.33::A|B}이 되겠습니다. 




예)  

{59::white|21::latino|14::black|8::asian} man 

{0.59::white|0.21::latino|0.14::black|0.8::asian} man 

= 사진 100장을 뽑으면 59장은 백인 21장은 라틴 14장은 흑인 8장은 아시아인이 뽑힙니다.




응용


  1. 와일드카드를 다이나믹 프롬프트 형식에 집어넣기


  2. 와일드카드 프롬 "__wildcard__"을 Text. 파일에 넣어서 와일드카드 프롬이  담긴 텍스트 파일 만들기


  3. $$문법을 사용해서 와일드카드 프롬프트에 있는 프롬프트(태그)들을 선택해서 사용하기

    예) 

    a {2~5$$and$$__color__} shirts 의 뜻

    color.txt(와일드카드)에서 2번째와 4번째 사이에 있는 프롬을 선택해서 "and"로 결합하여 그림을 생성. 
    만약 color.txt의 2~4번째 색이 red,blue,white 라고 하면 

    a red and blue and white shirts 가 됩니다.



내용이 조금 어려운데 도움이 되셨으면 좋겠습니다.


다이나믹 프롬프트에 매직 프롬프트와 프롬프트 조합생성이 있는데 

일반적인 상황에서 쓸 기능은 아닙니다. 

조합 생성은 시도해볼 수 있지만 그림 생성 시간이 기하급수적으로 늘기 때문에 연구를 하지 않는 이상 쓸 기능이 아닙니다. 차라리 반복생성이 낫다고 생각합니다.

(반복생성은 생성버튼 오른쪽 클릭하시면 나옵니다)



더 유익한 정보로 찾아오겠습니다.

감사합니다.



참고 글 : 기본적인 프롬프트 작성법


이 블로그의 인기 게시물