DAY 08작업 8일째
설치 한 번으로 생성까지 준비되는 Windows 평가판
내 PC의 ComfyUI와 Python에 기대던 작업실을, 첫 실행에 생성 환경과 고정 모델을 받아 오고 이미 있는 엔진은 재사용하는 설치형 앱으로 묶었다.
웹 작업실은 내 PC에서만 온전히 돌았다. Python, ComfyUI, 이미지 생성 모델이 이미 깔려 있다는 전제가 있었기 때문이다. 다른 PC에서 써 보려면 그 셋을 직접 설치하고 맞춰야 했다. 설치 파일 하나로 시작해서 생성까지 준비되는 평가판을 만들기로 했다.
편집기는 그대로, 엔진은 첫 실행에 받는다
기존 편집기를 Electron 앱에 그대로 담았다. 설치 파일에는 앱만 들어가고, 무거운 생성 환경은 첫 실행에서 받는다. 받는 것은 공식 ComfyUI 휴대용 패키지(약 1.9GB)와 모델 파일 세 개(약 17.3GB)다. 모델은 지금 작업실에서 쓰는 Qwen Image 2.1 구성으로 고정하고, 고르거나 다른 모델로 바꾸는 기능은 두지 않았다. 어떤 PC에서 받든 같은 결과가 나오게 하려는 것이다.
받은 파일이 정말 그 파일인지는 크기와 SHA-256으로 확인한다. 모든 다운로드의 크기와 해시를 매니페스트 파일에 고정해 두고, 확인이 끝나기 전의 .part 파일은 모델로 쓰지 않는다. 20GB 가까이 받다가 끊기는 일이 흔해서, 중단된 다운로드는 다음 실행에서 이어 받는다.
이미 있는 엔진은 다시 띄우지 않는다
이 PC처럼 ComfyUI가 이미 돌고 있는 곳에서는 엔진을 하나 더 띄우면 그래픽카드 메모리를 두 배로 쓴다. 그래서 앱이 시작할 때 정해진 포트들을 차례로 확인한다. 필요한 모델과 노드를 갖춘 ComfyUI가 있으면 그 엔진에 연결 서버만 붙이고, 아무것도 없을 때만 앱 전용 엔진을 띄운다. 포트를 쓰는 무언가가 있는데 호환을 확인할 수 없으면, 겹쳐 띄우지 않고 오류를 보여 준다.
앱이 띄운 프로세스는 Windows Job Object로 묶었다. 앱을 닫거나 앱이 비정상 종료되면 앱이 시작한 엔진과 연결 서버도 같이 내려간다. 다른 곳에서 띄운 엔진을 빌려 쓰는 경우에는 연결 서버만 관리하므로, 앱을 닫아도 그 엔진은 계속 돈다.
편집기 화면에는 Node 기능을 열지 않고 격리와 샌드박스를 켰다. 로컬 연결 서버는 실행할 때마다 만든 세션 토큰이 있어야 요청을 받는다.
감수한 것
쓰는 모델의 공개 라이선스가 연구·평가용이라 이 앱은 상업적으로 쓸 수 없고, 화면에도 그렇게 표시한다. NVIDIA 그래픽카드가 있는 Windows 10/11만 대상이고, 생성 성능은 이 PC의 RTX 5070 Ti 16GB에서만 확인했다. 설치 파일은 서명하지 않은 내부 평가판이다. 다운로드, 폴더, 포트, 프로세스 격리, 그래프 구조는 테스트로 확인했지만, 깨끗한 새 PC에서 설치부터 생성까지 끝까지 해 본 검증은 아직 남아 있다. 기존 작업실의 투명 배경 기능에 쓰던 배경 제거 모델은 배포 조건 때문에 아직 넣지 않았다.