| | --- |
| | title: FaceForge |
| | emoji: π§βπ¨ |
| | colorFrom: indigo |
| | colorTo: pink |
| | sdk: gradio |
| | sdk_version: "4.44.1" |
| | app_file: app.py |
| | pinned: false |
| | --- |
| | |
| | # faceforge |
| | Interactive latent space editor for face generation using pretrained GANs and diffusion models. |
| |
|
| | ## π Deploy on Hugging Face Spaces (Recommended) |
| |
|
| | FaceForge is ready to run as a Gradio app on [Hugging Face Spaces](https://huggingface.co/spaces): |
| |
|
| | 1. **Push your code to a public GitHub repository.** |
| | 2. **Create a new Space** at https://huggingface.co/spaces (choose the Gradio SDK or Docker SDK). |
| | 3. **Add your `requirements.txt` and the provided `Dockerfile` to your repo.** |
| | 4. **Set the entrypoint to `app.py`** (which integrates both the API and UI components). |
| | 5. **Deploy!** Your app will be live at `https://<your-username>.hf.space`. |
| |
|
| | ### Example Dockerfile (already included): |
| | ```Dockerfile |
| | FROM huggingface/transformers:latest |
| | WORKDIR /app |
| | COPY requirements.txt ./ |
| | RUN pip install --no-cache-dir -r requirements.txt |
| | RUN pip install --no-cache-dir transformers |
| | COPY . . |
| | EXPOSE 7860 |
| | ENV PYTHONPATH="/app" |
| | ENV PYTHONUNBUFFERED=1 |
| | ENV API_URL="/api" |
| | ENV MOCK_API="true" |
| | ENV BASE_URL="" |
| | CMD ["python", "app.py"] |
| | ``` |
| |
|
| | ## Local Development (Optional) |
| |
|
| | You can still run FaceForge locally: |
| |
|
| | ```bash |
| | pip install -r requirements.txt |
| | python main.py |
| | ``` |
| |
|
| | This will start the integrated application with both the API and UI components available: |
| | - UI accessible at http://localhost:7860/ |
| | - API accessible at http://localhost:7860/api/ |
| |
|
| | ## Architecture |
| |
|
| | FaceForge uses a modular architecture: |
| |
|
| | 1. **Core Components** (`faceforge_core/`): Core algorithms and utilities |
| | 2. **API Layer** (`faceforge_api/`): FastAPI endpoints for model interaction |
| | 3. **UI Layer** (`faceforge_ui/`): Gradio interface for user interaction |
| |
|
| | The main application integrates these components into a single FastAPI application where: |
| | - The API is mounted at `/api/` |
| | - The Gradio UI is mounted at the root path `/` |
| |
|
| | ## Features |
| | - Latent space exploration and manipulation |
| | - Attribute direction discovery (PCA/classifier) |
| | - Custom attribute-preserving loss |
| | - Modular, testable core |
| | - Gradio UI for interactive exploration |
| |
|
| | ## Controls (Gradio UI) |
| | - Enter prompts (comma-separated) |
| | - Choose sampling mode (distance/circle) |
| | - Adjust player position sliders |
| | - Click "Generate" to see results |
| |
|
| | ## Testing |
| | Run all tests with: |
| | ```bash |
| | pytest tests/ |
| | ``` |
| |
|
| | ## Debugging |
| |
|
| | If you encounter Gradio schema-related errors like: |
| | ``` |
| | TypeError: argument of type 'bool' is not iterable |
| | ``` |
| |
|
| | The application includes a patch that should fix the issue automatically. This patch addresses a known issue with schema processing in older Gradio versions. |
| |
|
| | ### Common Issues: |
| |
|
| | #### API Connection Errors |
| |
|
| | If you see errors like: |
| | ``` |
| | Invalid URL '/api/generate': No scheme supplied. Perhaps you meant https:///api/generate? |
| | ``` |
| |
|
| | This indicates an issue with URL formatting. The application should handle this automatically with the following settings: |
| |
|
| | 1. For the integrated app, set `BASE_URL=""` in the environment |
| | 2. For separate UI/API components, set `BASE_URL="http://localhost:7860"` (or your server URL) |
| | 3. Using relative URLs within the same server requires the correct base URL configuration |
| |
|
| | The updated app uses proper URL formatting that works in both integrated and separated modes. |
| |
|
| | #### Missing Dependencies |
| |
|
| | If you see errors about missing Python packages like `transformers`, you have options: |
| |
|
| | 1. Install the missing package: `pip install transformers` |
| | 2. Use mock mode: Set `MOCK_API="true"` in environment variables |
| | 3. Use the Docker image which includes all dependencies: `docker build -t faceforge .` |
| |
|
| | #### Environment Variables |
| |
|
| | - `MOCK_API`: Set to "true" to use mock API responses (for testing without ML dependencies) |
| | - `API_URL`: Override the API endpoint URL |
| | - `BASE_URL`: Base URL for relative API paths (leave empty for integrated deployment) |
| | - `PORT`: Set the port for the server (default: 7860) |
| |
|
| | ## Notes |
| | - The backend and frontend are fully integrated for Spaces deployment. |
| | - The application will use the actual ML framework when dependencies are available, and fall back to mock implementations when they're missing. |
| | - For custom model integration, edit the core and backend modules as needed. |
| |
|