LogicGoInfotechSpaces's picture
Add project files
0ed44c0
# Nano Banana Image Edit API
A FastAPI-based REST API for the Qwen Image Edit model that allows you to upload images, edit them with text prompts, and retrieve results.
## Features
- **Upload Images**: Upload image files via POST request
- **Edit Images**: Submit image ID and text prompt to edit images
- **Get Results**: Retrieve edited images by task ID
- **Multiple Formats**: Get results as files or base64-encoded strings
## Installation
1. Install dependencies:
```bash
pip install -r requirements_api.txt
```
2. Run the API server:
```bash
python api.py
```
Or using uvicorn directly:
```bash
uvicorn api:app --reload --host 0.0.0.0 --port 8000
```
## API Endpoints
### 1. Upload Image
**POST** `/upload`
Upload an image file.
**Request:**
- Content-Type: `multipart/form-data`
- Body: `file` (image file)
**Response:**
```json
{
"image_id": "uuid-string",
"message": "Image uploaded successfully",
"timestamp": "2024-01-01T12:00:00"
}
```
**Example using curl:**
```bash
curl -X POST "http://localhost:8000/upload" \
-F "file=@/path/to/image.jpg"
```
### 2. Edit Image
**POST** `/edit`
Edit an uploaded image using a text prompt.
**Request:**
- Content-Type: `multipart/form-data`
- Body:
- `image_id`: ID of uploaded image
- `prompt`: Text description of desired edit
**Response:**
```json
{
"task_id": "uuid-string",
"status": "completed",
"message": "Image edited successfully",
"timestamp": "2024-01-01T12:00:00"
}
```
**Example using curl:**
```bash
curl -X POST "http://localhost:8000/edit" \
-F "image_id=your-image-id" \
-F "prompt=make the sky more blue"
```
### 3. Get Result
**GET** `/result/{task_id}`
Get the status and result information for an editing task.
**Response:**
```json
{
"task_id": "uuid-string",
"status": "completed",
"result_image_id": "uuid-string",
"result_image_url": "/result/image/uuid-string",
"timestamp": "2024-01-01T12:00:00"
}
```
### 4. Get Result Image (File)
**GET** `/result/image/{result_image_id}`
Download the edited image as a file.
**Response:** Image file (PNG)
### 5. Get Result Image (Base64)
**GET** `/result/image/{result_image_id}/base64`
Get the edited image as a base64-encoded string.
**Response:**
```json
{
"result_image_id": "uuid-string",
"image_base64": "base64-encoded-string",
"format": "png"
}
```
### 6. Health Check
**GET** `/health`
Check API health and model status.
**Response:**
```json
{
"status": "healthy",
"model_loaded": true,
"model_available": true
}
```
## Usage Example (Python)
```python
import requests
# Upload image
with open("image.jpg", "rb") as f:
response = requests.post(
"http://localhost:8000/upload",
files={"file": f}
)
upload_data = response.json()
image_id = upload_data["image_id"]
# Edit image
response = requests.post(
"http://localhost:8000/edit",
data={
"image_id": image_id,
"prompt": "make the background sunset orange"
}
)
edit_data = response.json()
task_id = edit_data["task_id"]
# Get result
response = requests.get(f"http://localhost:8000/result/{task_id}")
result_data = response.json()
result_image_id = result_data["result_image_id"]
# Download edited image
response = requests.get(f"http://localhost:8000/result/image/{result_image_id}")
with open("edited_image.png", "wb") as f:
f.write(response.content)
```
## Notes
- The current implementation uses in-memory storage for tasks. For production, consider using:
- Redis or database for task storage
- S3, Azure Blob Storage, or similar for image storage
- Proper authentication and rate limiting
- Async task processing with Celery or similar
- The model loading code is a placeholder. You'll need to adjust it based on the actual Qwen-Image-Edit model interface and requirements.
## API Documentation
Once the server is running, visit:
- Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`