
지난 글 「Prompt Builder 리뉴얼 및 제작기」에서 웹 버전 Prompt Builder를 어떻게 만들었는지 정리했습니다.
그 글에서 가장 어려웠던 부분으로 꼽은 것이 인터넷에 있는 웹사이트와 이용자 컴퓨터의 ComfyUI를 연결하는 일이었습니다.
서버가 직접 접근할 수 없으니 브라우저를 작업자로 세워 중계하는 구조까지 만들어야 했습니다.
그런데 프롬프트 빌더와 ComfyUI가 같은 컴퓨터에서 돌면 이 문제는 처음부터 생기지 않습니다.
그래서 이번에는 Prompt Builder를 내 컴퓨터에서만 동작하는 로컬 앱으로 새로 만들었습니다.
로컬 앱은 무엇이 다른가?
- 로컬용이니 로그인도 없음
- 웹을 그대로 따라 할 필요 없음, 앱으로 바뀌면서 더 편리하고 직관적인 구조로
그래서 웹 버전에 있던 AI 프롬프트 보정(OpenAI·Gemini·Ollama), 게시판, 회원·초대코드, EXIF 분석, 작업 이력은 모두 뺐습니다. 남긴 것은 네 가지입니다.
- 빌더: 템플릿 → 인물 → 의상·포즈 → 배경 → 카메라·LoRA 순서로 고르면 오른쪽에 프롬프트가 바로 조합되고, 그 자리에서 ComfyUI로 생성(⌘↵)
- 갤러리: 생성 결과와 진행·대기 작업, '빌더에서 열기'로 그때의 선택값 되살리기
- 템플릿 만들기: 템플릿 편집기와 스타일 관리
- 설정: ComfyUI 서버(최대 3개), Workflow, LoRA, 데이터
웹의 데이터를 그대로 옮기기
- 먼저 웹 버전 DB 덤프(MariaDB, 테이블 21개)를 앱 전용 SQLite로 옮겼습니다.
- "웹과는 절대 연동하지 않는다"고 정한 뒤로는 이 변환기도 지우고, 그 자리를 DB 백업·복원 기능으로 바꿨습니다.
소스 폴더 없이 혼자 도는 앱
처음 만든 앱은 소스 폴더를 실행하는 얇은 껍데기였습니다. 그래서 "prompt 폴더를 이용하지 않고 완전히 독립적인 앱으로, 데이터는 기본으로 내 문서에, 기존 DB가 있으면 자동으로 옮기기"를 요청했습니다.
- PyInstaller로 Python과 코드, 화면 파일을 모두 담은 독립 앱(515MB)을 만들었습니다.
- 앱을 처음 켜면 기존 데이터 340MB가 내 문서의 'Prompt Builder' 폴더로 자동으로 옮겨집니다.
- 저장 위치는 설정에서 바꿀 수 있고, 바꾸면 앱을 다시 시작할 때 데이터가 옮겨집니다.
막혔던 순간들
앱이 두 번 켜지면 생성이 두 번 된다
앱이 두 개 떠 있으면 같은 생성 대기열을 둘이 동시에 처리할 수 있습니다. 잠금 파일로 한 번에 하나만 실행되게 하고, 두 번째로 실행하면 이미 떠 있는 창을 앞으로 가져오게 했습니다. 그런데 이 잠금 때문에 Claude가 점검용으로 띄운 서버가 막히는 일이 생겨, 실제 데이터를 건드리지 않는 별도의 점검 모드도 만들었습니다.
실행 중에는 데이터를 옮길 수 없다
쓰고 있는 DB를 옮기면 망가질 수 있습니다. 그래서 위치를 바꾸면 '이동 예약'만 해 두고, 다음에 앱을 켤 때 DB를 열기 전에 옮깁니다.
- 비어 있지 않은 폴더를 고르면 그 안에 'Prompt Builder' 폴더를 만들고,
- 고른 곳에 이미 데이터가 있으면 그 데이터를 쓸지 묻고,
- 다른 디스크라면 남은 공간을 먼저 확인하고,
- 옮기다 실패하면 원래 위치를 그대로 씁니다.
같은 데이터를 두 번 가져오면?
데이터를 종류별로 내보내고 가져오는 기능을 만들면서 중복 규칙을 정했습니다.
스타일은 이름이 같으면 이미 있는 것을 쓰고, 템플릿은 제목이 겹치면 '제목 (1)', '제목 (2)'로 넣습니다. 프롬프트 요소·의상·유명 배경은 같은 항목이 있으면 건너뜁니다.

배포는 어떻게?
GitHub에는 소스와 함께 프롬프트 요소와 유명 배경만 기본 데이터로 넣었습니다. 앱을 처음 켜면 이 데이터가 자동으로 들어갑니다.
템플릿과 의상 프리셋은 따로 묶어서 나눠 드릴 생각입니다. 받은 zip 파일을 설정 → 데이터 → 가져오기로 넣으면 됩니다.

아직 남은 숙제
- 앱에 서명이 없어서 다른 컴퓨터에서 실행하면 경고가 뜹니다. 그래서 아직 실행 파일은 올리지 않았고, 소스를 받아 직접 실행하거나 빌드해야 합니다.
- 생성 대기열은 앱이 켜져 있을 때만 처리됩니다.
- LoRA 목록은 비어 있는 상태로 시작합니다.
- 템플릿 묶음을 두 번 가져오면 '(1)'이 붙은 사본이 한 벌 더 들어갑니다.
마치며
웹 버전에서는 서버와 브라우저, 그리고 내 컴퓨터의 ComfyUI 사이를 오가는 구조를 만드느라 공이 많이 들었습니다.
로컬 앱은 그 모든 것이 한 컴퓨터 안에 있어서 훨씬 단순해졌고, 로그인 없이 켜자마자 바로 만들 수 있습니다.
웹 버전은 지금처럼 prompt.mifplus.com에서 계속 쓸 수 있습니다.
소스는 GitHub에 있습니다: github.com/mifplus-git/PromptBuilder