2.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Running the Services
Each service runs independently and must be started separately:
# Shirt-only try-on service (port 8888)
python change2/service2.py
# Shirt + pants try-on service (port 8889)
python change3/service3.py
# Gateway router (port 28888) — requires Flask
python change_app.py
ComfyUI must be running at http://127.0.0.1:8188 before starting the services.
Dependencies
pip install fastapi uvicorn httpx pydantic flask requests
Architecture
This is a three-tier AI virtual try-on system built around ComfyUI.
Client
└─► change_app.py (Flask, port 28888) ← Gateway router
├─► change2/service2.py (FastAPI, port 8888) ← shirt-only
└─► change3/service3.py (FastAPI, port 8889) ← shirt + pants
└─► ComfyUI (port 8188)
Gateway (change_app.py): Accepts POST /change_cloth_base64 with human_img, cloth_img, and optional kuzi_img (pants). Routes to service3 when kuzi_img is present, otherwise to service2. Both backends are called at /do_change_cloth.
service2 (change2/service2.py): Handles shirt-only try-on. Exposes POST /try-on with model_image + shirt_image. Uses ComfyUI workflow change2_1_ex.json.
service3 (change3/service3.py): Handles shirt + pants try-on. Exposes POST /try-on with model_image + shirt_image + pants_image. Uses ComfyUI workflow change2_2_0308.json.
ComfyUI Workflow Integration
Both services dynamically modify a JSON workflow template before submission:
| Node ID | Purpose | service2 | service3 |
|---|---|---|---|
"11" |
Model/person image | ✓ | ✓ |
"10" |
Shirt image | ✓ | ✓ |
"4" |
Pants image | — | ✓ |
"33" |
Output image | ✓ | ✓ |
The request flow within each service:
- Decode base64 images
- Upload images to ComfyUI (
/upload/image) with UUID-prefixed filenames to avoid cache collisions - Inject filenames into workflow node inputs
- Submit workflow to ComfyUI queue (
/prompt) - Poll
/history/{prompt_id}untilstatus.completedis true (max 300s timeout, 2s poll interval) - Download result from
/viewand return as base64
Frontend
Each service has its own test UI at / (served from <service_dir>/static/index.html). The change2 UI accepts 2 images; change3 accepts 3 images. Both POST directly to the service's /try-on endpoint.