여기서 언급할건 가장 기초적으로 만드는 방법과 가장 기초적인 사용 방법입니다.




1. 사용 가능하도록 확장 프로그램 설치~!!

와일드 카드는 일단 확장 프로그램을 통해서 동작하는 겁니다.


https://github.com/AUTOMATIC1111/stable-diffusion-webui-wildcards

보통 가장 기본적인 와일드 카드 사용 확장 주소 입니다.
다만, 이 주소의 경우는 진짜 와일드카드만 사용할 수 있도록 하기 때문에...


https://github.com/adieyal/sd-dynamic-prompts
다이나믹 프롬프트라는 확장을 추천드립니다.

이 확장은 와일드카드를 다양하게 사용할수 있도록 여러 문법이 가능한 확장입니다.


만약 위의 기본적인 와일드카드를 설치하신 분이 계시다면...

삭제후에 아래 다이나믹 프롬프트를 설치 하시기 바랍니다.


2. 텍스트 파일 만들기~!!

와일드 카드는 기본적으로 txt 즉, 텍스트 파일로 작성된 문서에서 하나씩 랜덤으로 뽑아서 프롬에 입력을 해주는겁니다.

그래서, txt파일을 만들어서 내가 원하는 내용을 적고, 그대로 동작하게 만들면 됩니다.


여기서 제작시 가급적이면 한글은 피해주세요. 인식은 되지만, 한글을 %/%^&*이런식으로 변형이 되면서 들어가기 때문에,

추후 exif를 보면서 관리하기 어렵기 때문에...

예를 들어 hair.txt, eyes.txt, color.txt 이렇게 텍스트 파일을 만들어주세요~!


다른 사람의 와일드 카드를 가져온다고 했을때... 만약 한글이나 중문, 일어 등등이 있다면, 바로 영어로 바꿔주시기 바랍니다.


3. 텍스트 파일 열고, 작성하기...

와일드 카드는 한줄에 하나의 프롬프트로 인식합니다.

즉, 한줄 한줄을 랜덤으로 불러온다고 생각하시면 됩니다.


그래서, 텍스트 파일에 작성할때...

예를 들어 color.txt 파일로 색상 와일드 카드를 만들때...

red

green

blue

black

이렇게 나눠 주셔야 합니다.


red, green

blue

black

이렇게 된다면, 빨강과 녹색이 이중으로 들어가기 때문에, 프롬에 혼동을 줄 수 있습니다.


그래서, 하나의 프롬에 다양하게 넣으실때는 ',' 콤마를 넣어서, 보통 프롬프트 작성하듯이 입력해주시면 됩니다.

red hair, blue eyes

orange hair, black eyes



특히 문장으로 넣으실때는... 콤마와 띄어쓰기를 잘 구분해서 작성하셔야 합니다.

문장으로 넣을때 중간에 콤마가 있다면, 그건 따로 구분을 짓기 때문에,

하나의 연결된 문장이면 띄어쓰기로 하시고,

구분이 필요하다면 쉼표인 콤마로 하시면 됩니다.

A woman in a red bikini, man, beach

women in yellow towels, bathroom


이런 식으로 콤마와 띄어쓰기를 잘 쓰셔야 합니다.


그리고, 각 줄 마지막에 콤마는 사용자가 판단을 잘 하셔야 합니다.

각 줄에 콤마를 작성해서 끝을 맺었다면,

와일드카드를 프롬프트 창에 넣을때 콤마를 넣으시면 안됩니다.


예를 들면...

red,

black,

이렇게 작성했다면,

프롬프트 창에는 __color__ 이렇게만 쓰셔야 하고...


red

black

이렇게 작성하셨다면,

프롬프트 창에는 __color__, 이렇게 작성하셔야 합니다.


그래서 가급적이면, 마지막에 콤마를 넣지 말고, 그냥 단어 위주로 작성하시면 됩니다.


메모장도 좋지만, 긴~~~~줄이라면, 단락 구분이 되지 않아서...

엑셀로 작성하시면 한줄 한줄 명확하게 보실수 있습니다.


만약 다른 사람이 만든 와일드카드를 열어보면, 이렇게 마지막에 콤마가 들어가 있는 경우가 있습니다.

이걸 그냥 넣고 돌리면, ',,' 콤마가 두번 찍히는 경우가 있습니다.

물론 두번 찍힌다고 인식이 안되는건 아닌데...

추후 프롬 정리하거나 할때 깔끔하지 않고, 이걸로 인해서, 복잡하거나 프롬이 길다면, 제대로 인식이 안될수도 있다보니...

가급적이면 받은 와일드 카드도 꼼꼼하게 살펴보실 필요가 있습니다.


이건 그냥 참고용으로만 생각하세요~

저는 가급적이면 대문자를 잘 쓰지 않습니다.

보통 영어는 시작을 대문자로 하기 때문에,

중간 중간 대명사가 들어가 있는 경우를 제외하고 대문자가 들어가면,

작성된 문서를 볼때 내가~!! 햇갈리는 경향이 있어서, 저는 대문자를 잘 쓰지 않습니다.


3. 와일드카드 넣기~!!

위에서 작성된 와일드 카드는 

여러분이 설치된 automatic1111 폴더 안의

stable-diffusion-webui\extensions\sd-dynamic-prompts\wildcards

여기에 넣어주시면 됩니다.


나는 와일드카드를 각 분야별로 구분해서 넣고 싶다면, 폴더를 만들어서 그 안에 넣으시면 됩니다.

stable-diffusion-webui\extensions\sd-dynamic-prompts\wildcards\food

stable-diffusion-webui\extensions\sd-dynamic-prompts\wildcards\color

이런식으로 폴더를 만들어서 넣으시면 됩니다.


4. 와일드카드 프롬프트창에 작성하기~!!

이제 작성하고, 넣었으니, 프롬프트창에서 와일드 카드를 불러와보자구요~


프롬프트 창에 기본적으로 __color__, 이런식으로 기입하게 됩니다.

언더바 2개 텍스트 이름 언더바 2개, 그리고, 콤마로 마무리...

여러개를 작성한다면 __color__, __hair__, 이렇게 작성하시면 됩니다.


폴더 안에 있는 와일드카드를 불러오고 싶다면...

예를 들어 food 폴더 안에 dessert 텍스트 파일을 불러오고 싶다면...

__food/dessert__, 입니다.

__color/red__, __color/orange__, 이렇게 넣으시면 됩니다.


많이 혼동하시는게...

보통 폴더를 구분하려면 \를 많이 사용하는데, 일명 백슬래쉬

하지만, \는 문법에서 다른거랑 혼동되기 쉽기 때문에, 사용이 안되서 일반적인 슬래쉬 / 를 사용해주시면 됩니다.

그래서, __food\__dessert__, 이렇게 보통 윈도우에서 탐색기 들어가듯이 이렇게 작성하면 안됩니다.


그리고, 특정 폴더안에 있는 모든 와일드 카드를 불러오려면...

__color/red*__, 이렇게 하면, red1, red2, red3 같은 앞글자가 동일한 와일드카드를 다불러오는거고,

__color/*__, 또는 __color/**/*__,이렇게 하면 color 폴더안에 있는 모든 폴더와 파일을 다 불러오는겁니다.


그리고, 특정 프롬에 와일드카드를 적용하고 싶다.

예를 들면, 나는 color 와일드 카드를 eyes에 적용하고 싶다고 한다면...

__color__ eyes, 로 와일드카드와 프롬 단어를 띄어씌기 해주셔야 합니다.

붙여서 쓰면, redeyes로 인식을 합니다. red eyes로 인식 할 수 있도록 말이죠~!!


5. 여러 와일드 카드에서 랜덤하게 뽑기...

와일드카드 자체가 랜덤하게 뽑는거라고 했는데...

그러면 여러개의 와일드카드에서 랜덤하게 뽑는건 어떻게 하느냐??


바로 중괄호를 이용하면 됩니다.

먼저 사용방법은

{__food/dessert__|__food/koreanfood__},

이렇게 사용하시면 됩니다.

구분을 짓는 | 이거를 잘 쓰셔야하고, 띄어쓰기가 되면 안됩니다.


위에 와카 내용을 보면,

food 폴더에 dessert파일에 있는 항목을 불러오거나, food 폴더의 koreanfood에 있는 항목을 불러오거나...

둘중에 하나만 불러와라 라는 의미입니다.


여러개의 와일드카드를 죽~~~~ 나열해서 쓰면, 그 수많은 와일드 카드의 내용물에서 딱~ 한개만 가져오는겁니다.

그러니, 경우의 수가 어마어마 하겠죠~ㅋㅋㅋ


이 중괄호는 {day|night|evening}, 같이 일반적인 프롬 단어들도 사용이 가능합니다.


그리고, 와일드카드를 연속해서 사용이 가능합니다.

{day|night|evening} {walk|cycle|run} 이렇게 쉽표로 구분하지 말고 띄어쓰기로 써주시면 됩니다.

그러면, day walk, day run, 같이 중괄호 및 와일드카드안에 있는게 연속으로 사용됩니다.


그리고, 중괄호는 다이나믹 프롬프트를 설치하지 않으면 사용이 안됩니다.


6. 가중치를 넣어보자~!!

가중치도 동일하게 적용됩니다.

{2::__food/dessert__|8::__food/koreanfood__},

{7::__food/dessert__|3::__color__ eyes}

이렇게 하면, 

첫째줄은 20%를 앞쪽 와카에서 나머지 80%를 뒤쪽 와카에서 가져오겠다는겁니다.

두번째줄은 70%를 앞쪽 와카에서 나머지 30%를 뒤쪽 와카에서 가져오겠다는겁니다.


이런식으로 여러개의 와일드카드가 총 100% 가 되도록 해주셔야 합니다.


{2::__food/dessert__|5::__food/koreanfood__|3::__color__ eyes},

2개던 3개던 10개던 총 합이 100%가 되어야 하고, 그러지 못하면 동작하지 않습니다.




7. 랜덤 규칙을 바꿔보자~~!!

중괄호중 3개 이상 사용시에...

A 또는 B 또는 C중에서 가져와라~ 라는 의미가 됩니다.

집합 OR를 뜻하기 때문에, 셋중 한개가 될수도 있고,

A와 B중 한개 C와 B중 한개 등등 이런식으로 인식될수 있습니다.


첫번째  여러개 중에서 특정 개수만 사용하기...

명확하게 딱~ 정해주면 좋겠다 싶으시다면...

앞부분에 '숫자$$' 이렇게 붙여주시면, 이중에 숫자만큼만 사용한다는 의미가 됩니다.

예를들면 {day|night|evening}여기에

{1$$day|night|evening}을 쓰면, 이 항목중에 1개 적용,

{2$$day|night|evening}을 쓰면, 이 항목중에 2개 적용,

한다는 의미입니다.

와카도 동일하게 하시면 됩니다. {1$$__와카1__|__와카2__|__와카3__} 


변수를 선언해서 하는 방법도 있습니다.

프롬 앞줄에 해당 변수를 선언해주시고, 불러오시면 됩니다.


예를 들어 날씨 변수를 선언하고...

${weather=!{Sunny|cloudy|rain}, 

${weather=!__날씨__},

희망하시는 프롬으로 가셔서... 

${weather} evening, 라고 불러와주시면, 밤 하늘이 맑음, 흐림, 비중 하나로 표현됩니다.


해당 수식은 반드시 변수를 선언해줘야 하기 때문에,

특정 조건에서 발동할수 있도록 하는데 사용하시면 좋습니다.


두번째  확률을 조정해보기...

랜덤에도 특정 범위를 지정해줄수 있습니다.

{1-2$$day|night|evening},

이렇게 하면, 각 항목중에서 1개에서 2개까지 적용한다 라는 의미입니다.

여기에 0-1을 넣어주면, 확률적 50%로 안넣거나 넣거나가 가능한거죠~


세번째  규칙을 만들기...

먼저 순차 랜덤입니다.

순서대로 하나씩 번갈아가면서 적용하는거죠~

{@day|night|evening},

이렇게 골뱅이무늬를 넣어주면, 첫번째는 day, 두번째는 night, 세번째는 evenig을 순차적으로 뽑습니다.

{@day|night|evening}, {@fine|rain|cloudy}
이렇게 하면, 첫번째는 day fine, 두번째는 night rain, 세번째는 evenig coludy 이렇게 순차적으로 뽑아줍니다.

와카 안에서도 순차적으로 해야할 경우에는 {__@와카__), 이렇게 하시면 됩니다.


네번째  그래도 난 랜덤이다...

기존에 와일드 카드 처럼 랜덤인데...

특정 규칙성 없이 완전 무작위 랜덤으로 뽑고 싶다면...

앞쪽에 물결 무늬를 넣어주시면 됩니다.

{~day|night|evening},



※ 번외: 대괄호를 알아보자~

이건 확장 없이도 사용이 가능합니다.

그리고, 이 대괄호는 이미지가 생성되는 과정을 컨트롤 한다고 생각하시면 됩니다.

전체 이미지가 생성되는걸 100%로 본다면...


[day:night:0.5]

이렇게 하면 day로 50%까지 만들고, 그다음은 night로 바꿔라 입니다.


[day:0.5]

이렇게 하면, 50%완성될때 부터 day 프롬을 사용해라...


[day::0.5]

이렇게 하면, 0%에서 50%까지만 day를 써라...


[day|night]

샘플링 단계(스탭)마다 day와 night를 번갈아 만들어라 입니다.


대괄호는 이미지 생성중에 주는 명령이기 때문에,

위의 보통 명령과는 성격이 다른 방식입니다.


사용하는데, 상당히 까다롭기 때문에,

다양한 테스트가 필요로 하기도 합니다.




여기까지 와일드카드의 가장 기초적인 사용방법을 알아봤습니다.

왠만한건 제가 다 정리를 했고, 좀 더 복잡하거나, 여기에 없는건 

https://github.com/adieyal/sd-dynamic-prompts/blob/main/docs/SYNTAX.md#wildcards-in-variants

여기서 확인이 가능합니다.


사실 위에 언급한 정도만 하셔도 기본은 먹고 들어갑니다.


제가 사용하는 와카 입니다.

https://arca.live/b/aiartreal/88664661

이거 보시고, 작성하는데 도움이 되셨으면 싶습니다.


이상입니다.