Spaces:
Running
on
L40S
Running
on
L40S
title: FaceEnhance | |
emoji: 😎 | |
colorFrom: red | |
colorTo: green | |
sdk: gradio | |
sdk_version: 5.25.2 | |
app_file: demo.py | |
pinned: false | |
# FaceEnhance | |
A tool for improving facial consistency and quality in AI-generated images. Dramatically enhance facial fidelity while preserving the original image's background, lighting, and composition. | |
<div style="text-align: center;"> | |
<img src="examples/elon_compare.gif" alt="Elon Comparison" width="600"/> | |
</div> | |
## Installation | |
### Prerequisites | |
- Python 3.11 or higher | |
- 1 GPU with 48GB VRAM | |
- At least 60GB of free disk space | |
### Setup | |
1. Log into Hugging Face and accept their terms of service to download [Flux.1-dev](https://huggingface.co./black-forest-labs/FLUX.1-dev) | |
2. Create the virtual environment: | |
```bash | |
python -m venv venv | |
source venv/bin/activate | |
python -m pip install -r requirements.txt | |
``` | |
<details> | |
<summary>If you want a specific PyTorch+CUDA version</summary> | |
```bash | |
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 | |
python -m pip install xformers --index-url https://download.pytorch.org/whl/cu124 | |
``` | |
</details> | |
3. Run the install script: | |
```bash | |
python install.py | |
``` | |
This will | |
- Install ComfyUI, custom nodes, and remaining dependencies to your venv | |
- Download all models to `HF_HOME` and create symlinks to `FaceEnhance/ComfyUI/models/` | |
4. Run inference on one example: | |
```bash | |
python test.py --input examples/dany_gpt_1.png --ref examples/dany_face.jpg --out examples/dany_enhanced.png | |
``` | |
<details> | |
<summary>Arguments</summary> | |
- `--input` (str): Path to the input image. | |
- `--ref` (str): Path to the reference face image. | |
- `--output` (str): Path to save the output image. | |
- `--id_weight` (float): Face ID weight. Default: 0.75. | |
</details> | |
## Gradio Demo | |
A simple web interface for the face enhancement workflow. Run `python demo.py` | |
## ComfyUI | |
Run `python run_comfy.py`. There are two workflows: | |
- `FaceEnhance/workflows/FaceEnhancementProd.json` for face enhancement | |
- `FaceEnhance/workflows/FaceEmbedDist.json` for computing the [face embedding distance](https://github.com/cubiq/ComfyUI_FaceAnalysis) | |
### Notes | |
- The script and demo run a ComfyUI server ephemerally | |
- Gradio demo is faster than the script because the models remain loaded in memory and ComfyUI server is booted up. | |
- Images are saved in `FaceEnhance/ComfyUI/input/scratch/` | |
- `face_enhance.py` was created with the [ComfyUI-to-Python-Extension](https://github.com/pydn/ComfyUI-to-Python-Extension) and re-engineered for efficiency and function. | |
- Face cropping, upscaling, and captioning are unavailable; these will be added in an update. | |
### Troubleshooting | |
- **Out of memory errors**: If your GPU has less than 48 GB VRAM, install [Flux.1-dev at fp8 precision](https://huggingface.co./Comfy-Org/flux1-dev). | |
- **Face detection issues**: This method works for photorealistic images of people. It may not work on cartoons, anime characters, or non-human subjects. | |
- **Downloading models fails**: Check your Hugging Face token has proper permissions. | |
### Examples | |
<table> | |
<tr> | |
<th>Target image</th> | |
<th>Face image</th> | |
<th>Enhanced image</th> | |
</tr> | |
<tr> | |
<td><img src="examples/dany_gpt_1.png" alt="Dany Target 1" width="200"/></td> | |
<td><img src="examples/dany_face.jpg" alt="Dany Face" width="200"/></td> | |
<td><img src="examples/dany_enhanced_1.png" alt="Dany Enhanced 1" width="200"/></td> | |
</tr> | |
<tr> | |
<td><img src="examples/dany_gpt_2.png" alt="Dany Target 2" width="200"/></td> | |
<td><img src="examples/dany_face.jpg" alt="Dany Face" width="200"/></td> | |
<td><img src="examples/dany_enhanced_2.png" alt="Dany Enhanced 2" width="200"/></td> | |
</tr> | |
<tr> | |
<td><img src="examples/elon_gpt.png" alt="Elon Target" width="200"/></td> | |
<td><img src="examples/elon_face.png" alt="Elon Face" width="200"/></td> | |
<td><img src="examples/elon_enhanced.png" alt="Elon Enhanced" width="200"/></td> | |
</tr> | |
<tr> | |
<td><img src="examples/tim_gpt_1.png" alt="Tim Target 1" width="200"/></td> | |
<td><img src="examples/tim_face.jpg" alt="Tim Face" width="200"/></td> | |
<td><img src="examples/tim_enhanced_1.png" alt="Tim Enhanced 1" width="200"/></td> | |
</tr> | |
<tr> | |
<td><img src="examples/tim_gpt_2.png" alt="Tim Target 2" width="200"/></td> | |
<td><img src="examples/tim_face.jpg" alt="Tim Face" width="200"/></td> | |
<td><img src="examples/tim_enhanced_2.png" alt="Tim Enhanced 2" width="200"/></td> | |
</tr> | |
</table> | |