Multi Area Conditioning으로 ComfyUI에서 Regional Prompter를 구현해보자

본 글에서는 이미지 영역을 나눠 프롬프트를 작성할 수 있는 Regional Prompter를 ComfyUI에서 비슷하게 구현할 수 있도록 해주는 커스텀 노드인 Multi Area Conditioning을 소개드리고자 합니다.

Regional Prompter

일전에 Automatic1111에서 확장기능인 Regional Prompter를 소개드린 적이 있습니다. 확장기능의 이름답게 사용자가 생성할 이미지의 구역을 임의로 나누고 각 구역별로 적용할 프롬프트를 입력하여 원하는대로 이미지를 생성할 수 있도록 도와주는 역할을 합니다. 예를 들어 인물 그림을 그린다면, 이미지 전체에서 인물이 위치할 구역과 배경속에 위치할 사물의 위치 등을 정하고, 인물의 머리, 상의, 하의 형태와 색상 등을 구역으로 나눠 세세하게 설정할 수 있습니다. Regional Prompter 사용법에 대한 더욱 자세한 내용이 필요하신 분은 아래 글을 참고하시기 바랍니다.

문제는 사용자가 시각적으로 쉽게 조작할 수 있는 WebUI와 달리 ComfyUI는 노드를 연결하여 워크플로우를 구성하는 방식이기 때문에 Regional Prompter를 적용하기 위해서는 이미지 구역별 프롬프트 적용 범위 시각화가 가능한 커스텀 노드가 필요합니다.

Multi Area Conditioning

이러한 불편사항을 해결할 수 있는 커스텀노드가 바로 Multi Area Conditioning 노드입니다. 해당 노드는 Davemae24라는 제작자분이 깃허브에서 공유중인 노드이므로, 깃 클론으로 직접 커스텀 노드를 설치해야 합니다. 깃 클론을 통한 ComfyUI 커스텀 노드 설치 방법이 익숙치 않은 분들은 아래 글을 참고하시기 바랍니다.

https://github.com/Davemane42/ComfyUI_Dave_CustomNode.git

Multi Area Conditioning 깃허브 페이지

Multi Area Conditioning Workflow

워크플로우는 아래와 같이 구성할 수 있습니다. 기본 워크플로우에 생성된 긍정/부정 프롬프트를 이미지 전체에 적용되는 베이스 프롬프트로 사용하고, 필요한만큼 각 영역을 임의로 나눠 3개의 추가 프롬프트를 각각 할당했습니다.

Multi Area Conditioning 워크플로우 구성

위 이미지와 같이 인물, 에펠타워, 파란 하늘을 묘사하는 세부 프롬프트를 원하는 영역에 배치하여 이미지를 세부적으로 제어할 수 있습니다. 좌측의 이미지는 의도한대로 파란 하늘을 위에 두고, 에펠타워를 좌측에, 인물을 우측에 배치한 뒤 생성한 결과입니다. 한편 우측 이미지는 동일한 상태에서 인물과 에펠타워의 위치를 바꾼 것입니다. 워크플로우를 조금 더 자세히 살펴보겠습니다.

Multi Area Conditioning 주요 워크플로우 확대

Multi Area Conditioning 노드에는 총 4개의 입력노드를 설정해뒀는데요, 입력값으 개수도 사용자가 스스로 정할 수 있습니다. 마우스 우클릭 후 필요한만큼 추가한 뒤, 각 입력값에 프롬프트(텍스트 인코더)를 연결해주시면 됩니다. 해당 노드의 설정 가능한 6개 값들은 다음과 같습니다.

예를 들어 위 예시 이미지에 있는 Prompt_03번 텍스트 인코더 노드는 인물을 묘사하는 프롬프트(1girl, solo, long hair, white collared shirt, plaid skirt, full body,)가 작성되어 있습니다. 이 노드를 선택하기 위해 index는 3번 값이 입력되어 있고, 시각적으로는 보라색으로 표현되고 있습니다.

x, y 좌표값은 각각 256, 128인데요, 최종 생성될 이미지의 해상도가 512 x 512인 상태이므로 x축으로 반, y축으로는 위에서 1/4 시점을 가리키고 있습니다. 또한 영역의 너비는 256 x 384가 입력되었으므로 우측 반 영역에서 3/4 높이를 모두 채우게 됩니다. 프롬프트의 적용강도는 1.0으로 되어 있으며, 해당 값은 생성되는 결과 이미지를 한 번 본 뒤 이를 기준으로 다시 조정하시는 것이 좋습니다.

KSampler 연결 방법

주의할 점은 Multi Area Conditioning 노드에는 긍정 프롬프트만 연결해주시면 된다는 점입니다. 부정 프롬프트는 KSampler로 바로 연결합니다. KSampler의 긍정 프롬프트 입력단에는 Multi Area Conditioning의 출력단을 연결해주시면 됩니다.

본 예시에서는 클립 텍스트 인코더(프롬프트) 노드를 총 5개 이용했지만, 필요한 경우 더 많은 수의 프롬프트를 추가적으로 입력해 이미지를 원하는대로 제어할 수 있습니다. 하지만 노드가 많고, 제어 영역이 많이 겹치거나 충분하지 않은 경우 원하는 대로 프롬프트를 다 반영하지 않은 이미지가 생성될 가능성이 있습니다.

이럴 때는 해당 노드를 선택한 뒤 strength를 조정하여 그 반영 정도를 조율할 수 있습니다. 물론 단순한 구도 설정은 컨트롤넷을 사용하는 것이 편할 수도 있습니다. 하지만 컨트롤넷은 레퍼런스 이미지가 있어야 이를 기준으로 구도나 자세, 깊이감 등을 파악하여 그림을 재현해내는 것이 일반적입니다. 따라서 참고할 이미지 없이 디테일을 사용자가 제어하면서도 동시에 프롬프트만으로 스테이블 디퓨전의 표현력을 빌려 상상력을 가미한 그림을 그려야 하는 경우라면 Multi Area Conditioning 노드를 활용해 보는 것도 좋은 방법입니다.

더불어 위와 같은 워크플로우에 업스케일을 추가로 적용하거나, Face Detailer 또는 컨트롤넷 등을 추가로 구성하면 상상 이상으로 세세한 부분까지 사용자의 의도가 정확히 반영된 연출이 가능합니다.

본문의 내용은 애포크 전자책의 일부분을 발췌한 것입니다. 무단 복제, 배포, 2차 저작물 작성 및 상업적 이용을 삼가주세요.