72 lines
2.3 KiB
Markdown
72 lines
2.3 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is a FastAPI-based virtual try-on service that integrates with ComfyUI for AI-powered clothing try-on. The service accepts base64-encoded images (model photo, shirt, pants) and returns a generated try-on result.
|
|
|
|
## Running the Service
|
|
|
|
Start the server:
|
|
```bash
|
|
python service2.py
|
|
```
|
|
|
|
The server runs on `http://0.0.0.0:47698` by default.
|
|
|
|
## Dependencies
|
|
|
|
Required Python packages (install via pip):
|
|
- fastapi
|
|
- uvicorn
|
|
- httpx
|
|
- pydantic
|
|
|
|
## Architecture
|
|
|
|
### Request Flow
|
|
1. Client sends POST to `/try-on` with base64 images (model_image, shirt_image, pants_image)
|
|
2. Server decodes images and uploads to ComfyUI at `http://127.0.0.1:8188`
|
|
3. Server modifies workflow JSON (change2_1_ex.json) with uploaded image filenames
|
|
4. Workflow submitted to ComfyUI queue
|
|
5. Server polls ComfyUI history endpoint until completion (max 300s timeout)
|
|
6. Result image downloaded from ComfyUI and returned as base64
|
|
|
|
### Key Components
|
|
|
|
**service2.py**: Main FastAPI application
|
|
- `/try-on`: Main endpoint for virtual try-on
|
|
- `/health`: Health check endpoint
|
|
- `/`: Serves static frontend (index.html)
|
|
|
|
**change2_1_ex.json**: ComfyUI workflow configuration
|
|
- Node "11": Model image input (LoadImage)
|
|
- Node "10": Shirt image input (LoadImage)
|
|
- Node "33": Output image (SaveImage)
|
|
- Node "31": Text prompt for image editing
|
|
|
|
**static/index.html**: Frontend interface for testing
|
|
|
|
### ComfyUI Integration
|
|
|
|
The service expects ComfyUI to be running at `http://127.0.0.1:8188` with:
|
|
- FireRed-Image-Edit model loaded
|
|
- Qwen 2.5 VL CLIP model
|
|
- Required custom nodes for QwenEditConfigPreparer, QwenEditOutputExtractor
|
|
|
|
### Workflow Modification
|
|
|
|
When processing requests, the code dynamically updates these workflow nodes:
|
|
- `workflow["11"]["inputs"]["image"]`: Model photo filename
|
|
- `workflow["10"]["inputs"]["image"]`: Shirt photo filename
|
|
- `workflow["31"]["inputs"]["value"]`: Text prompt (currently hardcoded in Chinese)
|
|
|
|
## Important Notes
|
|
|
|
- Images are uploaded with unique filenames (UUID prefix) to avoid caching issues
|
|
- The pants_image parameter is currently unused (commented out in code)
|
|
- Workflow uses 8 sampling steps with euler sampler and beta scheduler
|
|
- Output resolution is 768x1024 pixels
|
|
- CORS is enabled for all origins
|