Spaces:
Running
on
Zero
Running
on
Zero
rishi
commited on
Commit
·
2b8d1f6
1
Parent(s):
2915200
more readme updates; demo cleanup
Browse files
README.md
CHANGED
@@ -21,7 +21,7 @@ A tool for improving facial consistency and quality in AI-generated images. Dram
|
|
21 |
### Prerequisites
|
22 |
- Python 3.11 or higher
|
23 |
- 1 GPU with 48GB VRAM
|
24 |
-
- At least
|
25 |
|
26 |
### Setup
|
27 |
|
@@ -33,7 +33,7 @@ A tool for improving facial consistency and quality in AI-generated images. Dram
|
|
33 |
export HUGGINGFACE_TOKEN=your_token_here
|
34 |
export HF_HOME=/path/to/your/huggingface_cache
|
35 |
```
|
36 |
-
- Models will be downloaded to `$HF_HOME` and symlinked to
|
37 |
|
38 |
2. Create the virtual environment:
|
39 |
```
|
@@ -73,9 +73,6 @@ A tool for improving facial consistency and quality in AI-generated images. Dram
|
|
73 |
- `--input` (str): Path to the input image.
|
74 |
- `--ref` (str): Path to the reference face image.
|
75 |
- `--output` (str): Path to save the output image.
|
76 |
-
- `--crop` (store_true): Flag to face crop the reference image. Default: False.
|
77 |
-
- `--upscale` (store_true): Flag to upscale the (cropped) reference image. Default: False.
|
78 |
-
- `--caption` (store_true): Flag to caption the input image. Default: False.
|
79 |
- `--id_weight` (float): Face ID weight. Default: 0.75.
|
80 |
</details>
|
81 |
|
@@ -89,15 +86,15 @@ A simple web interface for the face enhancement workflow.
|
|
89 |
|
90 |
## Running on ComfyUI
|
91 |
|
92 |
-
|
93 |
-
-
|
94 |
-
-
|
95 |
|
96 |
|
97 |
### Notes
|
98 |
- The script and demo run a ComfyUI server ephemerally
|
99 |
- Gradio demo is faster than the script because the models remain loaded in memory and ComfyUI server is booted up.
|
100 |
-
-
|
101 |
- `FaceEnhancementProd.py` was created with the [ComfyUI-to-Python-Extension](https://github.com/pydn/ComfyUI-to-Python-Extension) and re-engineered for efficiency and function.
|
102 |
- Face cropping, upscaling, and captioning are unavailable; these will be added in an update.
|
103 |
|
|
|
21 |
### Prerequisites
|
22 |
- Python 3.11 or higher
|
23 |
- 1 GPU with 48GB VRAM
|
24 |
+
- At least 60GB of free disk space
|
25 |
|
26 |
### Setup
|
27 |
|
|
|
33 |
export HUGGINGFACE_TOKEN=your_token_here
|
34 |
export HF_HOME=/path/to/your/huggingface_cache
|
35 |
```
|
36 |
+
- Models will be downloaded to `$HF_HOME` and symlinked to `FaceEnhance/ComfyUI/models/`
|
37 |
|
38 |
2. Create the virtual environment:
|
39 |
```
|
|
|
73 |
- `--input` (str): Path to the input image.
|
74 |
- `--ref` (str): Path to the reference face image.
|
75 |
- `--output` (str): Path to save the output image.
|
|
|
|
|
|
|
76 |
- `--id_weight` (float): Face ID weight. Default: 0.75.
|
77 |
</details>
|
78 |
|
|
|
86 |
|
87 |
## Running on ComfyUI
|
88 |
|
89 |
+
Run `python run_comfy.py`. There are two workflows:
|
90 |
+
- `FaceEnhance/workflows/FaceEnhancementProd.json` for face enhancement
|
91 |
+
- `FaceEnhance/workflows/FaceEmbedDist.json` for computing the [face embedding distance](https://github.com/cubiq/ComfyUI_FaceAnalysis)
|
92 |
|
93 |
|
94 |
### Notes
|
95 |
- The script and demo run a ComfyUI server ephemerally
|
96 |
- Gradio demo is faster than the script because the models remain loaded in memory and ComfyUI server is booted up.
|
97 |
+
- Images are saved in `FaceEnhance/ComfyUI/input/scratch/`
|
98 |
- `FaceEnhancementProd.py` was created with the [ComfyUI-to-Python-Extension](https://github.com/pydn/ComfyUI-to-Python-Extension) and re-engineered for efficiency and function.
|
99 |
- Face cropping, upscaling, and captioning are unavailable; these will be added in an update.
|
100 |
|
demo.py
CHANGED
@@ -98,17 +98,15 @@ def enhance_face_gradio(input_image, ref_image):
|
|
98 |
return result_img
|
99 |
|
100 |
def create_gradio_interface():
|
101 |
-
with gr.Blocks(title="Face Enhancement
|
102 |
gr.Markdown("""
|
103 |
-
# Face
|
104 |
### Instructions
|
105 |
1. Upload the target image you want to enhance
|
106 |
-
2. Upload a high-quality
|
107 |
3. Click 'Enhance Face'
|
108 |
|
109 |
-
Processing takes about 60 seconds.
|
110 |
-
|
111 |
-
For more information, check out my [blog post](https://rishidesai.github.io/posts/face-enhancement-techniques/).
|
112 |
""", elem_id="instructions")
|
113 |
|
114 |
gr.Markdown("---")
|
@@ -128,8 +126,10 @@ def create_gradio_interface():
|
|
128 |
outputs=output_image,
|
129 |
queue=True # Enable queue for sequential processing
|
130 |
)
|
131 |
-
|
132 |
-
|
|
|
|
|
133 |
example_inps = [
|
134 |
["examples/dany_gpt_1.png", "examples/dany_face.jpg"],
|
135 |
["examples/dany_gpt_2.png", "examples/dany_face.jpg"],
|
@@ -139,6 +139,13 @@ def create_gradio_interface():
|
|
139 |
]
|
140 |
gr.Examples(examples=example_inps, inputs=[input_image, ref_image], outputs=output_image)
|
141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
# Launch the Gradio app with queue
|
143 |
demo.queue(max_size=99)
|
144 |
|
|
|
98 |
return result_img
|
99 |
|
100 |
def create_gradio_interface():
|
101 |
+
with gr.Blocks(title="Face Enhancement") as demo:
|
102 |
gr.Markdown("""
|
103 |
+
# Face Enhance
|
104 |
### Instructions
|
105 |
1. Upload the target image you want to enhance
|
106 |
+
2. Upload a high-quality face image
|
107 |
3. Click 'Enhance Face'
|
108 |
|
109 |
+
Processing takes about 60 seconds.
|
|
|
|
|
110 |
""", elem_id="instructions")
|
111 |
|
112 |
gr.Markdown("---")
|
|
|
126 |
outputs=output_image,
|
127 |
queue=True # Enable queue for sequential processing
|
128 |
)
|
129 |
+
gr.Markdown("""
|
130 |
+
## Examples
|
131 |
+
Click on an example to load the images into the interface.
|
132 |
+
""")
|
133 |
example_inps = [
|
134 |
["examples/dany_gpt_1.png", "examples/dany_face.jpg"],
|
135 |
["examples/dany_gpt_2.png", "examples/dany_face.jpg"],
|
|
|
139 |
]
|
140 |
gr.Examples(examples=example_inps, inputs=[input_image, ref_image], outputs=output_image)
|
141 |
|
142 |
+
gr.Markdown("""
|
143 |
+
## Notes
|
144 |
+
Check out the code [here](https://github.com/RishiDesai/FaceEnhance) and see my [blog post](https://rishidesai.github.io/posts/face-enhancement-techniques/) for more information.
|
145 |
+
|
146 |
+
Due to the constraints of this demo, face cropping and upscaling are not applied to the reference image.
|
147 |
+
""")
|
148 |
+
|
149 |
# Launch the Gradio app with queue
|
150 |
demo.queue(max_size=99)
|
151 |
|
test.py
CHANGED
@@ -7,8 +7,6 @@ def parse_args():
|
|
7 |
parser = argparse.ArgumentParser(description='Face Enhancement Tool')
|
8 |
parser.add_argument('--input', type=str, required=True, help='Path to the input image')
|
9 |
parser.add_argument('--ref', type=str, required=True, help='Path to the reference image')
|
10 |
-
parser.add_argument('--crop', action='store_true', help='Whether to crop the image')
|
11 |
-
parser.add_argument('--upscale', action='store_true', help='Whether to upscale the image')
|
12 |
parser.add_argument('--output', type=str, required=True, help='Path to save the output image')
|
13 |
parser.add_argument('--id_weight', type=float, default=0.75, help='face ID weight')
|
14 |
args = parser.parse_args()
|
@@ -41,7 +39,7 @@ def create_scratch_dir():
|
|
41 |
|
42 |
return new_dir
|
43 |
|
44 |
-
def process_face(input_path, ref_path,
|
45 |
"""
|
46 |
Process a face image using the given parameters.
|
47 |
|
@@ -83,8 +81,6 @@ def main():
|
|
83 |
return process_face(
|
84 |
input_path=args.input,
|
85 |
ref_path=args.ref,
|
86 |
-
crop=args.crop,
|
87 |
-
upscale=args.upscale,
|
88 |
output_path=args.output,
|
89 |
id_weight=args.id_weight
|
90 |
)
|
|
|
7 |
parser = argparse.ArgumentParser(description='Face Enhancement Tool')
|
8 |
parser.add_argument('--input', type=str, required=True, help='Path to the input image')
|
9 |
parser.add_argument('--ref', type=str, required=True, help='Path to the reference image')
|
|
|
|
|
10 |
parser.add_argument('--output', type=str, required=True, help='Path to save the output image')
|
11 |
parser.add_argument('--id_weight', type=float, default=0.75, help='face ID weight')
|
12 |
args = parser.parse_args()
|
|
|
39 |
|
40 |
return new_dir
|
41 |
|
42 |
+
def process_face(input_path, ref_path, output_path=None, id_weight=0.75):
|
43 |
"""
|
44 |
Process a face image using the given parameters.
|
45 |
|
|
|
81 |
return process_face(
|
82 |
input_path=args.input,
|
83 |
ref_path=args.ref,
|
|
|
|
|
84 |
output_path=args.output,
|
85 |
id_weight=args.id_weight
|
86 |
)
|