esmaill1
feat: implement image processing core, FastAPI backend, and full-stack integration tests
f19ba0f | # EL HELAL Studio API Reference | |
| This document provides a comprehensive overview of all available REST API endpoints for the headless EL HELAL Studio image processing backend. | |
| The backend is built with **FastAPI**. All JSON responses follow standard HTTP status codes. By default, the API runs on `http://localhost:8000`. | |
| An interactive Swagger UI is also automatically generated and available at `http://localhost:8000/docs`. | |
| --- | |
| ## Table of Contents | |
| 1. [Core Pipeline](#1-core-pipeline) | |
| 2. [Global Settings](#2-global-settings) | |
| 3. [Frames & Assets](#3-frames--assets) | |
| 4. [State & Utility](#4-state--utility) | |
| 5. [Backup & Restore](#5-backup--restore) | |
| 6. [Static Files](#6-static-files) | |
| --- | |
| ## 1. Core Pipeline | |
| These endpoints manage the actual upload and processing of images through the AI pipeline. | |
| ### Upload Image | |
| Uploads an initial image, corrects EXIF orientation, and generates a lightweight thumbnail for UI previews. | |
| - **URL:** `/upload` | |
| - **Method:** `POST` | |
| - **Content-Type:** `multipart/form-data` | |
| - **Parameters:** | |
| - `file` (File, required): The raw image file (JPG/PNG/etc). | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "id": "uuid-string", | |
| "filename": "original_name.jpg", | |
| "thumb_url": "/static/uploads/uuid-string_thumb.jpg", | |
| "width": 4000, | |
| "height": 3000 | |
| } | |
| ``` | |
| ### Process Image | |
| Passes an uploaded image through the configured AI processing steps (Restoration, Crop, Background Removal, AI Color Correction, Retouching, and Layout Generation). | |
| - **URL:** `/process/{file_id}` | |
| - **Method:** `POST` | |
| - **Content-Type:** `application/x-www-form-urlencoded` or `multipart/form-data` | |
| - **Path Parameters:** | |
| - `file_id` (string, required): The UUID returned from the `/upload` endpoint. | |
| - **Form Parameters (All Optional with defaults):** | |
| - `name` (string): Text string to render in the layout. | |
| - `id_number` (string): ID string to render in the layout. | |
| - `do_restore` (bool, default: `false`): Enable GFPGAN/CodeFormer face restoration. | |
| - `fidelity` (float, default: `0.5`): Restoration fidelity balance. | |
| - `do_rmbg` (bool, default: `true`): Enable BRIA-RMBG-2.0 background removal. | |
| - `do_color` (bool, default: `true`): Enable AI ColorUNet color correction. | |
| - `do_retouch` (bool, default: `true`): Enable skin blemish retouching. | |
| - `do_crop` (bool, default: `true`): Enable auto-cropping to 4x6. | |
| - `add_studio_name` (bool, default: `true`): Render studio name on layout. | |
| - `add_logo` (bool, default: `true`): Render studio logo on layout. | |
| - `add_date` (bool, default: `true`): Render current date on layout. | |
| - `frame_color` (string): Custom hex color for the layout frame (e.g., `#ffffff`). | |
| - `frame_name` (string): Filename of a custom overlay frame. | |
| - `x1`, `y1`, `x2`, `y2` (int): Bounding box coordinates for a manual crop override. | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "id": "uuid-string", | |
| "result_url": "/static/results/uuid-string_layout.jpg", | |
| "preview_url": "/static/results/uuid-string_preview.jpg" | |
| } | |
| ``` | |
| - **Error Responses:** | |
| - `404 Not Found`: If the `file_id` does not exist in the uploads directory. | |
| - `503 Service Unavailable`: If the AI models are still loading (`models["ready"] == False`). | |
| - `500 Internal Server Error`: For pipeline processing exceptions. | |
| --- | |
| ## 2. Global Settings | |
| Manage system-wide configuration such as retouching sensitivity and text defaults. | |
| ### Get Settings | |
| Fetches the current backend configuration. | |
| - **URL:** `/settings` | |
| - **Method:** `GET` | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "retouch": { | |
| "enabled": true, | |
| "sensitivity": 3.0, | |
| "tone_smoothing": 0.6 | |
| }, | |
| "layout": { | |
| "default_frame_color": "#ffffff" | |
| } | |
| } | |
| ``` | |
| ### Update Settings | |
| Merges a JSON payload into the existing `config/settings.json`. | |
| - **URL:** `/settings` | |
| - **Method:** `POST` | |
| - **Content-Type:** `application/json` | |
| - **Body:** A partial or complete settings JSON object. | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "status": "success" | |
| } | |
| ``` | |
| --- | |
| ## 3. Frames & Assets | |
| Manage custom layout overlay frames. | |
| ### List Frames | |
| - **URL:** `/frames` | |
| - **Method:** `GET` | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "frames": [ | |
| { | |
| "filename": "frame-example.png", | |
| "url": "/assets/frame-example.png" | |
| } | |
| ] | |
| } | |
| ``` | |
| ### Upload Frame | |
| - **URL:** `/frames` | |
| - **Method:** `POST` | |
| - **Content-Type:** `multipart/form-data` | |
| - **Parameters:** | |
| - `file` (File, required): A PNG/JPG/WEBP image file. | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "status": "success", | |
| "frame": { | |
| "filename": "frame-1234abcd.png", | |
| "url": "/assets/frame-1234abcd.png" | |
| } | |
| } | |
| ``` | |
| ### Delete Frame | |
| - **URL:** `/frames/{filename}` | |
| - **Method:** `DELETE` | |
| - **Path Parameters:** | |
| - `filename` (string, required): The exact internal filename (must start with `frame-`). | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "status": "success" | |
| } | |
| ``` | |
| --- | |
| ## 4. State & Utility | |
| ### Get API Status | |
| Check if background initialization (like loading the PyTorch machine learning models) is complete. You should ping this endpoint before allowing a user to click "Process". | |
| - **URL:** `/status` | |
| - **Method:** `GET` | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "ai_ready": true | |
| } | |
| ``` | |
| ### Clear All Storage | |
| Manually purges all stored files (`uploads/`, `processed/`, and `results/`). Normally, a background cleanup task does this atomically for files older than 24 hours. | |
| - **URL:** `/clear-all` | |
| - **Method:** `POST` | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "status": "success", | |
| "removed_count": 15 | |
| } | |
| ``` | |
| --- | |
| ## 5. Backup & Restore | |
| ### Export Backup | |
| Packages the configurations, uploaded frames, and an optionally provided frontend client state into a `.zip` archive. | |
| - **URL:** `/backup/export` | |
| - **Method:** `POST` | |
| - **Content-Type:** `application/json` | |
| - **Body:** | |
| - `client_data` (dict, optional): Any frontend state to include in the backup zip. | |
| - **Success Response:** (200 OK) | |
| - Returns a binary `.zip` file download via `StreamingResponse`. | |
| ### Import Backup | |
| Restores configuration and assets from a previously exported `.zip`. | |
| - **URL:** `/backup/import` | |
| - **Method:** `POST` | |
| - **Content-Type:** `multipart/form-data` | |
| - **Parameters:** | |
| - `file` (File, required): The `.zip` backup file. | |
| - **Success Response:** (200 OK) | |
| ```json | |
| { | |
| "status": "success", | |
| "client_data": { ... } | |
| } | |
| ``` | |
| --- | |
| ## 6. Static Files | |
| The FastAPI server mounts internal directories for direct read-only access. | |
| - **Images & Results:** `GET /static/...` | |
| - Maps to the `./storage/` directory. | |
| - _Usage:_ `/static/uploads/{id}_thumb.jpg` or `/static/results/{id}_layout.jpg` | |
| - **App Assets:** `GET /assets/...` | |
| - Maps to the `./assets/` directory. | |
| - _Usage:_ `/assets/frame-custom.png` | |