| --- |
| 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. |
|
|