가능한 사람의 손을 거치지 않고 다음과 같은 형식의 배너 광고를 생성하는 것이 나의 목표였다.
사실 이 첨부사진은 자동으로 만들어낸 이미지다!
입력으로는 게임 일러스트 사진을주고, 광고 문구를 제공해주었다.
이 광고 배너를 만든 ComfyUI 워크플로우를 하나하나 뜯어보면서 어떻게 구성했는지 설명해보겠다.
Step1. 배너 크기만큼 늘리기
어떤 AspectRatio를 가진 이미지라도 가로배너 이미지로 만들어주기 위해 좌측의 Padding 값을 계산하는 단계다. 세로형 이미지의 경우 이미지가 정방형이라고 가정했을때 생기는 좌우 패딩만큼의 간격을 오른쪽에 추가해준다. <Pad Image for Outpainting>을 하게되면 패딩한 만큼 이미지 옆에 회색 공간이 생기고, 마스크도 그에 맞춰서 생성된다.
Step2. 마스킹된 영역 흐리게 채우기
이전 단계에서 마스크된 부분을 채워주는 부분이다.
<Fill Masked Area>의 fill 정책에따라 결과물이 다른데, 위쪽의 telea의 경우 그라디언트가 들어가서 끝으로 갈수록 약간 밝게 처리되고, 아래쪽의 navier-strokes의 경우에는 처음부터 끝까지 균일하게 늘려버린다.
너무 밝아져도 생성한 배너들의 끝이 전부 흰색이라 보는 재미가 없어질것같고,
너무 배경과 똑같이 늘려도 글자를 쓸만한 밝기가 확보되지 않을 것같았다.
따라서 둘 사이의 적절한 값이 나왔으면 좋을 것 같아 결과물을 <Image Blend>를 이용해 Blend했다.
Step3. 흐린 배경을 생성형 AI를 통해 구체화하기
다음은 이렇게 억지로 늘려서 뭉게진 이미지를 생성형 AI를 통해서 자연스럽게 생성하는 부분이다. Fooocus Inpaint 모델을 사용했다.
프롬프트로는 "concept art, simple background"정도 밖에 주지않았는데, 여러 이미지로 테스트 해봤는데 쓸만한 것 같다.
이렇게하면 꽤나 그럴듯한 확장된 이미지를 만들어낼 수 있지만, 원래 이미지도 같이 프로세싱되기 때문에 얼굴이 뭉게지거나 글자가 이상해지는 등 디테일이 흐트러진다! 광고는 IP 이미지가 아주 중요해서 조금이라도 뭉게지면 안된다.
Step4. 원래 이미지와 합성하기
어떻게 해결할까…고민하다 클라이언트 개발자 짬바로 좋은 잔꾀를 생각해냈다. ㅋㅋㅋ
<Image Blend by Mask>로 Pad한 원본 이미지 + 마스크와 생성된 이미지를 합치면 원본 부분은 그대로 두고, 나머지 부분만 생성한것같은 효과를 줄 수 있다.
Step5. 텍스트 오버레이 올리기
마지막으로는 <CR Overlay Text>를 이용해 텍스트를 그려주는 작업이다. 이 띠배너의 경우 게임이름, 내용, 확률형 아이템이 있는경우 추가 문구까지 최대 3개다. <CR Split String>으로 입력에서 받아온 텍스트를 | 기준으로 나눠서 각각 넣어주었다.
배경색이 어두우면 흰색글자를, 밝으면 검은색글자를 쓰고싶었지만 그렇게 구현하는데는 실패했고, 대신에 Input 입력시에 글자 색상 HEX 코드를 직접 입력하도록 했다.
<글자 색상 HEX>|
<게임 이름>|
<배너 문구>|
*확률형 아이템 포함
워크플로우 json파일과 함꼐
생성한 몇가지 예시를 더 올려두겠다.
'프로그래밍 > AI,ML' 카테고리의 다른 글
[ComfyUI] Workflow를 Python API로 만들기 (0) | 2025.01.21 |
---|---|
CivitAI 모델 wget으로 다운받는법 (0) | 2025.01.17 |
[LangChain] LLM Workflow: Routing 구현 (0) | 2025.01.14 |
[LangChain] LLM Workflow : 병렬처리 구현 (0) | 2025.01.14 |
[LangChain] LLM Workflow : Chaining 구현 (0) | 2025.01.13 |