AI 기반 가상 피팅(Virtual Try-On) 솔루션을 위한 Flask API 서버입니다. ComfyUI를 백엔드로 활용하여 IDM-VTON과 CatVTON 모델을 통해 고품질의 가상 착용 이미지를 생성합니다.
- IDM-VTON: 고품질 사람+옷 합성
- CatVTON: 빠르고 정확한 착용 이미지 생성
- 다중 이미지 동시 처리 지원
- 텍스트 프롬프트만으로 웨딩드레스 생성
- 사람 이미지 + 프롬프트로 맞춤형 드레스 착용 이미지 생성
- 6장 동시 생성으로 다양한 옵션 제공
- VGG16 기반 특징 추출
- 코사인 유사도 계산으로 유사 드레스 추천
- 실시간 배경 제거 기능
- Flask 서버 시작 시 ComfyUI 자동 실행
- 워크플로우 큐 모니터링
- 메모리 자동 정리 (CUDA + ComfyUI 캐시)
┌─────────────┐ HTTP/WebSocket ┌──────────────┐
│ Frontend │ ◄──────────────────────► │ Flask API │
│ (Web UI) │ │ Server │
└─────────────┘ └──────┬───────┘
│
│ WebSocket
▼
┌──────────────┐
│ ComfyUI │
│ Backend │
└──────┬───────┘
│
┌────────────────────────┼────────────────────┐
│ │ │
┌────▼─────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ IDM-VTON │ │ CatVTON │ │ VGG16 │
│ Model │ │ Model │ │ Model │
└──────────┘ └─────────────┘ └─────────────┘
- Python 3.8 이상
- NVIDIA GPU (CUDA 지원)
- ComfyUI 0.2.2 설치
- 10GB 이상의 여유 디스크 공간
# ComfyUI 설치 (E:\ComfyUI_0.2.2\ComfyUI 경로 예시)
git clone https://github.com/comfyanonymous/ComfyUI.git
# 필수 커스텀 노드 설치
cd ComfyUI/custom_nodes
# IDM-VTON
git clone https://github.com/neuralninja22/IDM-VTON.git
# CatVTON Wrapper
git clone https://github.com/chflame163/ComfyUI_CatVTON_Wrapper.git
# 기타 필수 노드
git clone https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git comfyui_controlnet_aux
git clone https://github.com/storyicon/comfyui_segment_anything.git
git clone https://github.com/pythongosssss/ComfyUI-Custom-Scripts.gitgit clone https://github.com/Me-in-U/VTON_ComfyUI_API.git
cd VTON_ComfyUI_API
# 필수 패키지 설치
pip install flask flask-cors pillow numpy scipy tensorflow numba psutil requests-toolbeltCheckpoint:
- Beautiful Realistic Asians 다운로드
ComfyUI/models/checkpoints/폴더에 배치
VAE:
- vae-ft-mse-840000-ema-pruned 다운로드
ComfyUI/models/vae/폴더에 배치
__init__.py 파일에서 경로를 시스템에 맞게 수정:
COMFYUI_API_BASE_DIRECTORY = "E:\\Languages\\Apache24\\ComfyUI_API"
COMFYUI_BASE_DIRECTORY = "E:\\ComfyUI_0.2.2\\ComfyUI"
SERVER_ADDRESS = "127.0.0.1:8188"python __init__.py서버가 http://0.0.0.0:1557에서 실행되며, ComfyUI가 자동으로 시작됩니다.
브라우저에서 http://localhost:1557로 접속하면 테스트 UI가 표시됩니다.
POST /new_dress
Content-Type: multipart/form-data
positive_prompt: "elegant wedding dress, lace details, long train"
negative_prompt: "low quality, blurry"응답:
{
"message": "Image processed successfully",
"results": ["base64_image_1", "base64_image_2", ...],
"imageMapKeys": [0, 1, 2, 3, 4, 5]
}POST /human_plus_dress
Content-Type: multipart/form-data
image1: [사람 이미지 파일]
positive_prompt: "white wedding dress"
negative_prompt: "dark colors"POST /vton_dress
Content-Type: multipart/form-data
image1: [사람 이미지]
image2: [옷 이미지]POST /vton_dress_multi_cat
Content-Type: multipart/form-data
myPic: [사람 이미지]
ImageFileIndexArray: "0,1,2,3,4,5" # 선택된 드레스 인덱스POST /get_similar_dresses
Content-Type: multipart/form-data
imageData: "data:image/jpeg;base64,..."GET /queue_size응답:
{
"queue_remaining": 2,
"queue_pending": 1
}GET /terminate특징:
- 사람 이미지와 텍스트 프롬프트 입력
- KSampler를 통한 이미지 생성
- Beautiful Realistic Asians 체크포인트 활용
특징:
- 순수 텍스트 프롬프트만으로 생성
- 랜덤 시드를 통한 다양성 확보
- 웨딩드레스에 최적화된 프롬프트 템플릿
특징:
- CatVTON 모델 기반
- 빠른 처리 속도
- 옷의 디테일 보존
특징:
- IDM-VTON diffusers 모델
- 최고 품질의 착용 결과
- 신체 포즈 보존
VTON_ComfyUI_API/
├── __init__.py # Flask 메인 서버
├── clean_memory.py # 메모리 정리 유틸리티
├── README.md
│
├── api/ # ComfyUI API 통신
│ ├── api_helpers.py # 이미지 생성 헬퍼 함수
│ ├── open_websocket.py # WebSocket 연결
│ └── websocket_api.py # ComfyUI API 래퍼
│
├── similarity/ # 이미지 유사도 검색
│ ├── getSimilarity.py # VGG16 기반 유사도 계산
│ └── removeBackground/ # 배경 제거 모듈
│ ├── removeBG.py
│ └── removeBG thread.py
│
├── static/ # 프론트엔드 리소스
│ ├── css/
│ │ ├── faker.css
│ │ └── style.css
│ ├── js/
│ │ ├── faker.js
│ │ ├── fetchQueueSize.js # 큐 상태 모니터링
│ │ ├── load_three_gltf.js
│ │ └── script-241104085800.js
│ └── models/
│
├── templates/ # HTML 템플릿
│ ├── faker.html
│ ├── index.html
│ └── loading.html
│
├── utils/ # 유틸리티 함수
│ ├── actions/
│ │ ├── getImagePath.py # 이미지 경로 관리
│ │ ├── human_plus_dress.py # 사람+프롬프트 워크플로우
│ │ ├── load_workflow.py # 워크플로우 로더
│ │ ├── new_dress.py # 순수 생성 워크플로우
│ │ ├── vton_dress.py # IDM-VTON 워크플로우
│ │ └── vton_dress_cat.py # CatVTON 워크플로우
│ └── helpers/
│ └── randomize_seed.py # 랜덤 시드 생성
│
└── workflows/ # ComfyUI 워크플로우 JSON
├── cat_vton_api.json
├── human_plus_dress_api.json
├── new_dress_api.json
├── vton_api.json
└── 일반 워크플로우/
├── asdaasdasd.json
├── human_plus_dress.json
├── multi.json
├── new_dress.json
├── SanAI_CatVTON.json
└── vton-yisol.json
- Flask: 웹 서버 프레임워크
- ComfyUI: 이미지 생성 백엔드
- NumPy/SciPy: 수치 연산 및 유사도 계산
- TensorFlow/Keras: VGG16 모델 실행
- Pillow: 이미지 처리
- psutil: 프로세스 관리
- CUDA (Numba): GPU 메모리 관리
- IDM-VTON: 가상 피팅 모델
- CatVTON: 빠른 가상 피팅 모델
- VGG16: 이미지 특징 추출
- Beautiful Realistic Asians: SD 체크포인트
- HTML5/CSS3/JavaScript
- Three.js (3D 모델 렌더링)
- WebSocket (실시간 통신)
def clear_memory():
clear_comfy_cache(SERVER_ADDRESS, unload_models=True, free_memory=True)
device = cuda.get_current_device()
device.reset()각 이미지 생성 후 자동으로 CUDA 메모리와 ComfyUI 캐시를 정리하여 안정적인 운영을 보장합니다.
VGG16의 fc2 레이어 출력을 특징 벡터로 사용하며, 코사인 유사도로 유사 이미지를 검색합니다:
similarity = 1 - distance.cosine(target_features, features)ComfyUI와 WebSocket으로 통신하여 실시간으로 이미지 생성 진행 상태를 모니터링합니다.
__init__.py에서 ComfyUI 경로 확인:
COMFYUI_BASE_DIRECTORY = "E:\\ComfyUI_0.2.2\\ComfyUI"- 배치 크기 줄이기
- 이미지 해상도 낮추기
clear_memory()함수가 정상 작동하는지 확인
- 필수 커스텀 노드가 모두 설치되었는지 확인
- 모델 파일이 올바른 경로에 있는지 확인
- ComfyUI 로그 확인 (
comfyui.log)
이 프로젝트는 개인 및 교육 목적으로 사용할 수 있습니다.
- ComfyUI Revision: 2652 [0c7c98a9] | Released on '2024-09-05'
0.0 seconds: websocket_image_save.py
0.0 seconds: ComfyUI-Custom-Scripts
0.0 seconds: ComfyUI_essentials
0.0 seconds: rgthree-comfy
0.1 seconds: comfyui_controlnet_aux
0.1 seconds: comfyui_segment_anything
0.3 seconds: ComfyUI_CatVTON_Wrapper
0.3 seconds: ComfyUI-Manager
0.6 seconds: ComfyUI-tbox
1.1 seconds: ComfyUI-Impact-Pack
2.1 seconds: IDM-VTON
3.6 seconds: ComfyUI_LayerStyle



