tryonapi / README.md
sync19's picture
Upload 8 files
98ffc6a verified
|
raw
history blame
4.7 kB
---
title: Virtual Try-On API
emoji: ๐Ÿ‘•
colorFrom: blue
colorTo: purple
sdk: docker
pinned: false
license: apache-2.0
---
# Virtual Try-On API ๐Ÿ‘•
A FastAPI-based virtual try-on service using Stable Diffusion XL with IP-Adapters for realistic clothing transfer.
## Features
- โœ… REST API for virtual clothing try-on
- โœ… CPU-optimized for Hugging Face Spaces
- โœ… Support for file upload and base64 encoding
- โœ… Automatic body segmentation
- โœ… Customizable generation parameters
- โœ… CORS enabled for mobile app integration
## API Endpoints
### 1. Health Check
```
GET /
GET /health
```
Returns the status of the API and loaded models.
### 2. Virtual Try-On (File Upload)
```
POST /tryon
```
**Parameters:**
- `person_image` (file): Image of the person
- `clothing_image` (file): Image of the clothing
- `prompt` (optional): Generation prompt
- `negative_prompt` (optional): Negative prompt
- `ip_scale` (optional, 0.0-1.0): IP-Adapter influence, default: 0.8
- `strength` (optional, 0.0-1.0): Inpainting strength, default: 0.99
- `guidance_scale` (optional): CFG scale, default: 7.5
- `num_steps` (optional): Inference steps, default: 50
- `return_format` (optional): "base64" or "image", default: "base64"
**Response (base64 format):**
```json
{
"success": true,
"image": "base64_encoded_image_string",
"processing_time": 45.23,
"parameters": {
"prompt": "...",
"ip_scale": 0.8,
"strength": 0.99,
"guidance_scale": 7.5,
"num_steps": 50
}
}
```
### 3. Virtual Try-On (Base64)
```
POST /tryon-base64
```
**Parameters:**
- `person_image_base64` (string): Base64 encoded person image
- `clothing_image_base64` (string): Base64 encoded clothing image
- Other parameters same as `/tryon`
**Response:** Same as `/tryon`
## React Native Integration Example
```javascript
import * as ImagePicker from 'expo-image-picker';
import * as FileSystem from 'expo-file-system';
const API_URL = 'https://your-space-name.hf.space';
async function virtualTryOn(personUri, clothingUri) {
try {
// Convert images to base64
const personBase64 = await FileSystem.readAsStringAsync(personUri, {
encoding: FileSystem.EncodingType.Base64,
});
const clothingBase64 = await FileSystem.readAsStringAsync(clothingUri, {
encoding: FileSystem.EncodingType.Base64,
});
// Create form data
const formData = new FormData();
formData.append('person_image_base64', personBase64);
formData.append('clothing_image_base64', clothingBase64);
// Make API request
const response = await fetch(`${API_URL}/tryon-base64`, {
method: 'POST',
body: formData,
});
const result = await response.json();
if (result.success) {
// Display the generated image
const imageUri = `data:image/png;base64,${result.image}`;
console.log('Processing time:', result.processing_time);
return imageUri;
}
} catch (error) {
console.error('Error:', error);
}
}
```
## Alternative: File Upload Method
```javascript
async function virtualTryOnWithFiles(personUri, clothingUri) {
const formData = new FormData();
formData.append('person_image', {
uri: personUri,
type: 'image/jpeg',
name: 'person.jpg',
});
formData.append('clothing_image', {
uri: clothingUri,
type: 'image/jpeg',
name: 'clothing.jpg',
});
formData.append('return_format', 'base64');
const response = await fetch(`${API_URL}/tryon`, {
method: 'POST',
body: formData,
headers: {
'Content-Type': 'multipart/form-data',
},
});
const result = await response.json();
return `data:image/png;base64,${result.image}`;
}
```
## Local Development
```bash
# Install dependencies
pip install -r requirements.txt
# Clone body segmentation tool
git clone https://github.com/TonyAssi/Segment-Body.git
cp Segment-Body/SegBody.py .
# Run the API
python app.py
```
The API will be available at `http://localhost:7860`
## Deployment to Hugging Face Spaces
1. Create a new Space on Hugging Face
2. Choose "Docker" as the SDK
3. Upload these files:
- `app.py`
- `requirements.txt`
- `Dockerfile`
- `README.md`
4. Wait for the Space to build and deploy
## Notes
- First request may take longer as models are loaded
- CPU inference is slower than GPU (expect 30-60 seconds per generation)
- Recommended image size: 512x512 pixels
- For production use, consider adding authentication and rate limiting
## License
Apache 2.0