일상생활/AI

Stable Diffusion(스테이블 디퓨전) WebUI 04. 프롬프트 사용법

LeePorter 2024. 7. 26. 19:49

저번 포스팅까지 진행하였다면 이미지를 생성해보셨을 겁니다. 이제 본격적으로 프롬프트를 사용해서 적절한 이미지를 생성해보겠습니다. 

 

🟧 이전글 보기

Stable Diffusion(스테이블 디퓨전) WebUI 01. 준비하기

Stable Diffusion(스테이블 디퓨전) WebUI 02. 기본설정

Stable Diffusion(스테이블 디퓨전) WebUI 03. 이미지 생성하기(Embeddings, Hires 적용)


🔷 프롬프트 사용법

- 프롬프트를 작성할 때 중요한 것은 우선순위와 어떤 이미지를 만들지에 대한 단어나 문장을 적절하게 중복되지 않게 적어주는 것이 중요합니다.

- 프롬프트는 앞쪽에 위치할수록 우선순위가 높습니다.

- 프롬프트는 영어 단어나 문장을 통해서 입력합니다.

- 프롬프트를 배치하는 순서에 따라서 같은 Seed여도 다른 이미지가 생성됩니다.

- 프롬프트는 가중치를 주어서 해당 프롬프트를 강조하여 이미지를 생성시킬 수 있습니다. (반대로 낮출 수도 있습니다)

- 가중치 사용법은 프롬프트로 괄호로 감싸면 10% 상승. 프롬프트 뒤에 콜론(:)을 붙이고 숫자를 넣으면 가중치가 적용됩니다.

- 가중치 값은 1이 기본값(가중치를 적용하지 않으면 1)이고, 소수점 이하로 높이거나 낮추면 가중치가 적용됩니다.

- 너무 높게 가중치를 적용하면 기괴하게 나올 수 있으므로 적당하게 사용하시면 됩니다. (1.2, 1.3 등)

 

프롬프트 순서에 따른 결과 이미지 차이는 아래 예시를 통해 확인해 보도록 하겠습니다.

사용한 체크포인트 모델은 DreamShaper v8입니다.

 

[설정값]

  - CFG : 7

  - Steps : 30

  - Sampling method : Euler a

  - Size : 768 x 768

  - Seed : 3584528701

  - Hires 적용 : 2배 크기 / Denoising strength : 0.3 / Upscaler : R-ESRGAN 4x+

 

 

🟧 예시1

(masterpiece, best quality:1.4), high detailed, (ultra high res:0.9), (extremely intricate:1.3), photorealistic, (realistic), hdr, 8k, dramatic, award winning, cinematic lighting, octane render unreal engine, volumetrics dtx, film grain, bokeh, depth of field, sunset, motion blur, blurry background, blurry foreground, sharp focus, outdoors, the most beautiful in the world, far away castle, portrait of a girl, (medieval armor), chainmail, metal reflections, upper body, long hair, blonde hair, blue eyes, sidelocks, parted lips, light smile

 

🟧  부정 프롬프트

BadDream, (UnrealistickDream:1.3)

 

※ 부정 프롬프트의 Bad DreamUnrealisticDreamTextual Inversion (=Embeddings)을 사용한 것이므로 그냥 작성할 경우 적용이 되지 않습니다. 이전에 작성한 포스팅에 추천하는 Embeddings 링크를 올려놓았으니 혹시 없으신 분들은 다운로드 받아주세요.

Stable Diffusion(스테이블 디퓨전) WebUI 03. 이미지 생성하기(Embeddings, Hires 적용)

 

- 위 예시에서 사용한 프롬프트에서 아래 밑줄이 그어진 부분을 중간에 있던 위치를 뒤로 옮겨서 생성해보겠습니다. 다른 설정은 동일합니다. Seed값도 동일하게 적용

 

🟧 예시2

(masterpiece, best quality:1.4), high detailed, (ultra high res:0.9), (extremely intricate:1.3), photorealistic, (realistic), hdr, 8k, outdoors, the most beautiful in the world, far away castle, portrait of a girl, (medieval armor), chainmail, metal reflections, upper body, long hair, blonde hair, blue eyes, sidelocks, parted lips, light smile, dramatic, award winning, cinematic lighting, octane render unreal engine, volumetrics dtx, film grain, bokeh, depth of field, sunset, motion blur, blurry background, blurry foreground, sharp focus

 

 

프롬프트 사용에 관해서 딱 이거다 하는 정답은 없습니다. 본인이 만들고 싶은 이미지를 만들기 위해서 수많은 프롬프트 수정과 가중치, 설정값 조작 등을 통해 이미지를 생성하면서 만드시면 됩니다.

 

예시1(좌) / 예시2(우) 비교. 단순 프롬프트 순서만 변경해도 다른 느낌의 이미지가 생성됩니다

 

 

🔷 프롬프트 설명

사용한 프롬프트에 대해서 간단하게 짚어보고 가겠습니다. 사실 100% 정확하진 않지만 나름 생성해보고 터득한? 굉장히 주관적이므로 본인이 다르게 해석해서 사용해보셔도 됩니다 ㅎㅎ 위에서도 말했지만 100% 정답은 없습니다. 

(masterpiece, best quality:1.4), high detailed, (ultra high res:0.9), (extremely intricate:1.3), photorealistic, (realistic), hdr, 8k, dramatic, award winning, cinematic lighting, octane render unreal engine, volumetrics dtx, film grain, bokeh, depth of field, sunset, motion blur, blurry background, blurry foreground, sharp focus, outdoors, the most beautiful in the world, far away castle, portrait of a girl, (medieval armor), chainmail, metal reflections, upper body, long hair, blonde hair, blue eyes, sidelocks, parted lips, light smile

 

일단 색으로 구분해보았는데 정확하진 않습니다 ㅋㅋ; 약간 비슷한 것들로 최대한 묶어봤습니다.

 

1. 품질 관련 프롬프트

- 주로 생성되는 이미지의 퀄리티, 이미지의 세세한 부분의 정교함, 리얼한 이미지인지 애니메이션 스타일(카툰, 1990년대 애니메이션 스타일 등등) 설정 등 전체적인 품질에 영향을 주는 프롬프트입니다.

- 저의 경우 주로 가장 앞단에 위치시켜서 AI에게 내가 생성하려는 이미지의 품질은 좋아야돼! 를 어필하는 방식으로 사용합니다.

- 사용하는 사람마다 또는 체크포인트 모델에 따라 품질처리를 뒤에 놓기도 합니다. 

 

2. 후보정, 이펙트 관련 프롬프트

- 전체적인 이미지의 분위기를 담당하는 프롬프트입니다.

- 게임으로 따지자면 포스트 프로세스와 같은 후보정 매커니즘으로 라이팅, 그림자 효과나 DOF, 블러, 간접광 , 파티클 등의 효과를 적용하여 이미지를 생성합니다.

- 후보정이기 때문에 앞쪽에 배치할 때와 뒤쪽에 배치할 때 다른 느낌의 이미지가 생성되는 것을 확인할 수 있습니다. (위 예시1과 예시2의 차이)

 

3. 환경 및 배경 관련 프롬프트

- 실내인지, 실외인지 장소와 배경과 관련된 프롬프트입니다.

- 실내일 때 Indoors, 실외일 때는 Outdoors 라는 프롬프트를 사용합니다. 

- 그리고 화면상에 보이는 배경이미지(인물이 있든 없든, 장소 그 자체)를 생성해냅니다.

 

4. 인물 또는 사물에 대한 자세한 내용의 프롬프트

- 인물이라면 생김새, 복장, 자세, 구도 등등 가장 중요한 피사체에 대한 프롬프트입니다.

- 이 부분은 만들고자하는 이미지가 무엇인지에 따라 무궁무진한 프롬프트를 만들 수 있으므로 이미지 생성하면서 계속 추가, 삭제가 빈번하게 이뤄지므로 해당 스타일을 따로 저장해서 사용하기도 합니다. (다음 포스팅에서 추가적으로 설명하겠습니다)

- 이 부분은 복잡한 이미지를 생성할 때는 단어 단위의 프롬프트보다는 자세하게 적은 문장이 좀 더 정확한 이미지 생성하는데 도움이 됩니다.

 

🔷 토큰 : 프롬프트 해석 단위(=단어, 띄어쓰기로 구분됨)

추가로 저번 포스팅에서 프롬프트의 토큰에 대해서 설명했었는데 75개의 단어 단위로 쪼개서 AI가 이를 분석하여 이미지를 생성하는 방식이라고 말씀드렸습니다. 75개를 초과하면 다시 75개의 프롬프트 단위를 더해 총 150개의 토큰을 해석합니다. 계속 해당 최대 토큰을 초과하는 프롬프트를 적으면 75씩 확장됩니다.

 

즉, 이미지 생성할 때 가급적 75개의 토큰 단위로 구분하여 프롬프트를 작성하고 이미지를 생성하는 것이 비교적 정확한 이미지를 생성할 수 있습니다. 물론 비교적이라는 것이 기준이 애매모호하긴 하지만 가급적 75개를 구분하면서 프롬프트를 배치하여 생성하면 꽤 괜찮은 이미지가 나오는 것 같습니다.

 

아래는 위의 예시에서 후보정 프롬프트들을 모두 제거하여 75 이하로 토큰을 맞추고 생성한 이미지입니다.

 

만약 강제로 75토큰을 다 채우지 않고 프롬프트를 구분하고 싶다면 BREAK 라는 명령어를 넣으면 자동으로 BREAK 이전 프롬프트 내용을 75 토큰 단위로 해석하고, 이후부터 76~150 단위로 새로 해석합니다.

 

(masterpiece, best quality:1.4), high detailed, (ultra high res:0.9), (extremely intricate:1.3), photorealistic, (realistic), hdr, 8k, outdoors, the most beautiful in the world, far away castle, BREAK portrait of a girl, (medieval armor), chainmail, metal reflections, upper body, long hair, blonde hair, blue eyes, sidelocks, parted lips, light smile, dramatic, award winning, cinematic lighting, octane render unreal engine, volumetrics dtx, film grain, bokeh, depth of field, sunset, motion blur, blurry background, blurry foreground, sharp focus

 

위의 예시처럼 BREAK를 넣으면 far away castle 까지는 75 토큰 단위로 해석하고, portrait of a girl 부터는 다시 새로운 토큰단위(76)부터 해석합니다. 이렇게 하면 일단 첫 번째 해석단위를 먼저 그려넣고, 이후의 내용을 추가로 덮어쓰는 방식이 됩니다. 다만 이렇게 BREAK를 사용할 때 잘 구분지어야 되는데 BREAK 앞 뒤로 비슷한 내용이 적혀 있으면 서로 중첩되서 우선 순위에 따라 하나만 적용되거나, 아니면 섞이거나 중첩된 이미지를 생성할 수 있습니다.

 

예시로 BREAK 이전에 머리 색을 파란색으로 했는데, BREAK 이후에 금발을 적을 경우, 우선 순위가 앞쪽이므로 파란색 머리를 먼저 해석해서 그려넣을 수도 있고, 아니면 투톤헤어처럼 만들 수도 있습니다. 그래서 BREAK를 넣을 때는 잘 구분짓는 것이 중요합니다.

 

1️⃣ 2️⃣ 3️⃣

 

위 예시 이미지는 예시2의 이미지의 프롬프트에 특정 부분에 BREAK를 넣고 생성한 이미지입니다.

왼쪽부터 순서대로 설명하자면

 

1️⃣ 번 이미지는 마지막 후보정 프롬프트 전 단계에 BREAK를 넣은 이미지

  - 예시 2보다 후보정이 잘 들어간 느낌입니다.

2️⃣ 번 이미지는 인물 관련 프롬프트 전 단계(장소와 배경 프롬프트 다음)에 BREAK를 넣은 이미지

  - 예시 2와 같은 Seed이지만 확실히 인물과 배경이 다른 느낌으로 생성되었습니다.

3️⃣ 번 이미지는 2번 이미지처럼 BREAK를 넣고 BREAK 이전에는 blue hair를 넣고, BREAK 이후에 pink hair를 넣은 이미지

 

  - 처음 토큰 해석으로 파란색으로 머리색을 그렸지만, 이후 토큰 해석 시 다시 분홍색으로 덮어쓰기하여 투톤컬러의 머리색으로 이미지를 생성한 것을 볼 수 있습니다.

 

3번처럼 BREAK를 잘못배치하면 머리가 두개 달린 사람이라든지, 팔다리가 여러 개라든지 괴상하게 나올 수 있습니다. 또한 마찬가지로 BREAK를 구분하지 않더라도 75개 토큰 구분을 넘어가서 이전과 이후에 비슷한 프롬프트가 있다면 섞일 수 있습니다.


이상 프롬프트에 대한 설명과 사용법에 대해서 소개해드렸습니다.

다음 포스팅에서는 Script의 X/Y/Z plot이라는 일종의 그리드 표처럼 이미지를 설정값에 따라 다양하게 생성하는 방법과 Lora 기능에 대해서 설명하도록 하겠습니다.

감사합니다.

 

다음글 : Stable Diffusion(스테이블 디퓨전) WebUI 05. 프롬프트 Style 저장 및 사용