


이미지 생성 작업을 하다 보면 결국 같은 문제를 반복해서 만나게 된다. 프롬프트를 매번 새로 쓰는 일이 생각보다 번거롭다는 점이다.
카메라 구도, 인물 묘사, 헤어, 의상, 포즈, 배경, 조명, 품질 태그, 네거티브 프롬프트까지 매번 기억해서 조합해야 한다. 처음에는 복사해서 붙여넣으면 된다고 생각했지만, 이미지 생성 횟수가 늘어날수록 프롬프트는 단순한 문장이 아니라 관리해야 할 데이터에 가까워졌다.
그래서 만들기 시작한 것이 Prompt Builder다.
프롬프트를 한 번 쓰고 버리는 문장이 아니라, 저장하고, 조합하고, 다시 불러오고, 회수할 수 있는 자산으로 만들자.
처음에는 단순히 프롬프트를 쉽게 조립하는 도구 정도로 생각했다.
하지만 만들다 보니 구조가 점점 명확해졌다.
프롬프트를 만드는 화면, 템플릿으로 빠르게 시작하는 화면, 내가 만든 프롬프트를 저장하는 화면, 공유된 프롬프트를 보는 화면, 그리고 이미지에서 메타데이터를 다시 읽어오는 Exif Reader까지 필요했다.
전체 구성
- Component Builder 프롬프트 요소를 카테고리별로 선택해서 직접 조립
- Template Builder 자주 쓰는 조합을 템플릿으로 빠르게 생성
- User Created Builder 사용자가 만든 프롬프트를 저장하고 다시 관리
- Shared 공유된 프롬프트를 확인하고 참고
- Exif Reader 생성된 이미지에서 프롬프트와 설정값을 다시 읽어오기
Exif Reader
아카라이브 AI 반실사 그림 채널의 나이스맨님께서 제작하신 소스를 기반으로, 일부 기능을 수정하여 구성한 페이지입니다.
소스 사용 및 변경은 나이스맨님의 허락을 받고 진행하였습니다.
소스가 필요하신 경우 아래 아카라이브 원본 게시글을 확인해 주시기 바랍니다.
왜 만들었나
처음 문제는 단순했다. 이미지 생성 프롬프트를 매번 손으로 쓰기 귀찮았다.
예를 들어 애니메이션 스타일 이미지를 만들 때도 생각보다 많은 요소가 필요하다. 인물의 나이대, 표정, 헤어스타일, 의상, 포즈, 배경, 카메라 앵글, 조명, 분위기, 품질 태그를 매번 넣어야 한다.
여기에 모델마다 잘 먹히는 표현도 다르다. SDXL 계열에서 잘 맞는 표현이 있고, Illustrious 계열에서 더 잘 반응하는 표현이 있고, 특정 모델에서는 짧고 강한 태그식 프롬프트가 더 잘 먹히기도 한다.
결국 프롬프트 작성은 단순히 문장을 쓰는 일이 아니었다. 여러 요소를 조합하고, 결과를 보고, 다시 수정하는 반복 작업이었다.
그래서 프롬프트를 “텍스트 입력”이 아니라 “부품 조립” 방식으로 바꿔보고 싶었다.
Component Builder: 프롬프트를 부품처럼 조립하기
가장 먼저 만든 것은 Component Builder였다.
Component Builder는 프롬프트를 구성하는 요소를 카테고리별로 나누고, 사용자가 필요한 항목을 선택하면 최종 프롬프트가 조립되는 방식이다.
예를 들어 카메라 쪽에는 렌즈, 화각, 구도, 앵글 같은 항목을 둘 수 있다. 인물 쪽에는 인원 구성, 연령대, 표정, 눈 스타일, 피부톤 같은 항목이 들어간다. 헤어, 메이크업, 의상, 액세서리, 포즈, 배경, 이펙트, 품질 태그도 각각 독립된 요소로 나눴다.
이렇게 나누면 프롬프트 작성 방식이 완전히 달라진다.
예전에는 긴 문장을 머릿속에서 직접 만들어야 했다. 하지만 Component Builder에서는 질문에 답하듯이 하나씩 선택하면 된다.
- 어떤 구도로 찍을 것인가?
- 인물은 어떤 분위기인가?
- 헤어와 의상은 어떻게 할 것인가?
- 배경은 실내인가, 야외인가?
- 품질 태그는 어떤 것을 붙일 것인가?
사용자는 프롬프트 문법을 모두 외울 필요가 없다. 필요한 요소를 고르면 Builder가 하나의 프롬프트로 합쳐준다.
이 구조의 장점은 명확했다. 프롬프트를 더 빠르게 만들 수 있고, 빠진 요소도 줄일 수 있다. 또한 잘 만든 요소들은 나중에 다시 재사용할 수 있다.
Template Builder: 자주 쓰는 조합을 빠르게 시작하기
Component Builder를 만들고 나니 또 다른 문제가 보였다. 모든 요소를 하나씩 고르는 것도 반복되면 귀찮아진다는 점이다.
자주 쓰는 스타일은 어느 정도 정해져 있다. 예를 들어 특정 애니메이션 스타일, 특정 인물 구도, 특정 촬영 분위기, 특정 배경 조합은 계속 반복해서 사용하게 된다.
그래서 만든 것이 Template Builder다.
Template Builder는 자주 쓰는 프롬프트 조합을 템플릿으로 묶고, 사용자가 분류와 스타일을 선택하면 빠르게 기본 프롬프트를 만들 수 있게 하는 도구다.
Component Builder가 세부 조립 도구라면, Template Builder는 빠른 시작점에 가깝다.
처음부터 모든 요소를 직접 고르지 않아도 된다. 먼저 템플릿으로 큰 방향을 잡고, 필요하면 세부 항목만 수정하면 된다.
이 방식은 실제 사용 흐름과 잘 맞았다. 이미지를 만들 때 매번 완전히 새로운 조합을 만드는 경우는 많지 않다. 대부분은 기존에 잘 나온 스타일을 바탕으로 조금씩 바꿔가며 테스트한다.
Template Builder는 바로 그 반복 작업을 줄이기 위한 기능이었다.
User Created Builder: 내가 만든 프롬프트를 자산으로 쌓기
Prompt Builder에서 중요한 부분 중 하나가 User Created Builder였다.
프롬프트는 만들고 끝나는 것이 아니다. 잘 나온 프롬프트는 다시 써야 하고, 조금 바꿔서 다른 모델에 적용할 수도 있고, 나중에 비슷한 스타일을 만들 때 출발점으로 삼을 수도 있다.
그래서 사용자가 직접 만든 프롬프트를 저장하고 관리하는 영역이 필요했다.
Shared: 좋은 조합을 공유하고 참고하기
프롬프트는 혼자만 쓰는 것보다 다른 사람의 조합을 참고할 때 더 빨리 발전한다. 어떤 사람은 카메라 구도를 잘 잡고, 어떤 사람은 의상 태그를 잘 쓰고, 또 다른 사람은 네거티브 프롬프트를 잘 정리한다.
Shared 영역은 이런 조합을 모아두고 참고할 수 있는 공간으로 생각했다.
단순히 결과 프롬프트만 보여주는 것이 아니라, 어떤 스타일인지, 어떤 용도인지, 어떤 모델에 어울리는지도 함께 볼 수 있으면 좋다.
결국 Shared는 프롬프트를 개인 작업물에서 공동 자산으로 확장하는 영역이다.
Exif Reader: 잘 나온 이미지에서 설정을 다시 회수하기
Prompt Builder를 만들면서 빠질 수 없었던 기능이 Exif Reader였다.
이미지를 생성하다 보면 이런 일이 자주 생긴다. 결과물이 마음에 드는데, 나중에 다시 보니 어떤 설정으로 만들었는지 기억이 안 난다.
Positive Prompt는 무엇이었는지, Negative Prompt는 어떻게 넣었는지, 어떤 모델을 썼는지, Steps와 CFG는 얼마였는지, Sampler와 Scheduler는 무엇이었는지, Seed는 어떤 값이었는지 다시 찾고 싶어진다.
그래서 Exif Reader를 붙였다.
DB 기반으로 만든 이유
처음에는 선택지를 코드 안에 배열로 넣어도 된다고 생각했다. 하지만 프롬프트 요소는 계속 늘어난다.
카메라 옵션이 늘어나고, 헤어스타일이 늘어나고, 의상 태그가 늘어나고, 배경과 조명 표현도 계속 추가된다.
이걸 코드 안에 하드코딩하면 나중에 관리가 어려워진다. 선택지 하나를 추가할 때마다 코드를 수정해야 하고, 카테고리 구조가 바뀌면 화면과 로직을 계속 건드려야 한다.
그래서 주요 요소는 DB 기반으로 관리하는 방향으로 잡았다.
카메라, 인물, 메이크업, 헤어, 의상, 포즈, 배경 같은 요소를 각각 분리해서 관리하면 나중에 확장하기 쉽다.
템플릿도 마찬가지다. 프리셋, 슬롯, 슬롯 옵션을 나눠두면 하나의 템플릿 안에서도 여러 선택지를 유연하게 구성할 수 있다.
DB 기반 구조의 장점은 명확했다.
프롬프트 요소를 코드 수정 없이 추가할 수 있다.
카테고리별 관리가 쉬워진다.
템플릿과 사용자 저장 프롬프트를 분리할 수 있다.
나중에 관리자 화면을 붙이기 좋다.
공유 기능이나 검색 기능으로 확장하기 쉽다.
결국 Prompt Builder는 단순한 화면 하나가 아니라, 프롬프트 데이터를 관리하는 작은 시스템이 됐다.
만들면서 어려웠던 점
가장 어려웠던 건 선택지를 얼마나 잘게 나눌 것인가였다.
프롬프트 요소를 너무 크게 묶으면 세부 조정이 어렵다. 반대로 너무 잘게 나누면 화면이 복잡해지고 사용자가 지친다.
예를 들어 의상만 해도 상의, 하의, 색상, 소재, 핏, 장식, 신발까지 나눌 수 있다. 배경도 장소, 시간, 날씨, 조명, 분위기, 소품으로 나눌 수 있다.
기술적으로 나누는 것은 어렵지 않다. 진짜 어려운 것은 사용자가 실제로 쓰기 좋은 단위로 나누는 것이다.
또 하나 어려웠던 부분은 프롬프트 결과물의 자연스러움이었다.
선택지를 단순히 쉼표로 이어붙이면 프롬프트는 만들어진다. 하지만 좋은 프롬프트가 되려면 순서와 그룹이 중요하다.
인물 설명이 먼저 나와야 할지, 카메라 표현이 먼저 나와야 할지, 품질 태그는 앞에 둘지 뒤에 둘지, 네거티브 프롬프트는 어느 정도까지 자동으로 넣을지 계속 조정이 필요했다.
모델별 차이도 있었다. 어떤 모델은 짧은 태그식 프롬프트에 잘 반응하고, 어떤 모델은 자연어 문장에 더 잘 반응한다.
그래서 Prompt Builder는 단순히 선택지를 많이 넣는 것보다, 모델별로 잘 맞는 구조를 나누는 방향으로 더 발전해야 한다고 느꼈다.