GastinoKuros commited on
Commit
7139c6f
1 Parent(s): ce70ce9

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +182 -0
  2. requirements.txt +5 -0
app.py ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # import gradio as gr
2
+ # import requests
3
+ # import io
4
+ # import os
5
+ # from PIL import Image, ImageEnhance
6
+
7
+ # API_URL = "https://api-inference.huggingface.co/models/sd-community/sdxl-flash"
8
+ # API_KEY = os.getenv("HF_API_KEY")
9
+ # headers = {"Authorization": f"Bearer {API_KEY}"} # Corrected to use f-string
10
+
11
+ # def query(payload):
12
+ # response = requests.post(API_URL, headers=headers, json=payload)
13
+ # if response.status_code != 200:
14
+ # return None
15
+ # return response.content
16
+
17
+ # def gen_img(prompt, num_inference_steps, guidance_scale, contrast):
18
+ # payload = {
19
+ # "inputs": prompt,
20
+ # "parameters": {
21
+ # "num_inference_steps": num_inference_steps,
22
+ # "guidance_scale": guidance_scale
23
+ # }
24
+ # }
25
+ # image_bytes = query(payload)
26
+ # if image_bytes is None:
27
+ # return None
28
+ # image = Image.open(io.BytesIO(image_bytes))
29
+
30
+ # enhancer = ImageEnhance.Contrast(image)
31
+ # image = enhancer.enhance(contrast)
32
+
33
+ # return image
34
+
35
+ # with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.lime, spacing_size="md", radius_size="lg",
36
+ # font=[gr.themes.GoogleFont("Copperplate"), "Fantasy", "sans-serif"])) as demo:
37
+
38
+ # gr.Markdown("""
39
+ # <div style='text-align: center;
40
+ # font-size: 36px;
41
+ # font-family: Copperplate, Fantasy;
42
+ # color: orange;
43
+ # /* background-color: green;
44
+ # padding: 5px;
45
+ # border-radius: 30px; */ '>
46
+ # Pencil Vision (a holofote product)
47
+ # </div>
48
+ # """)
49
+ # with gr.Row():
50
+ # prompt = gr.Textbox(label="Enter your prompt to generate the image")
51
+
52
+ # with gr.Row():
53
+ # num_inference_steps = gr.Slider(minimum=1, maximum=15, value=6, step=3, label="Number of Inference Steps")
54
+ # guidance_scale = gr.Slider(minimum=1.0, maximum=5.0, value=2.5, step=1, label="Guidance Scale")
55
+ # contrast_scale = gr.Slider(minimum=1.0, maximum=3.0, value=1.0, step=0.1, label="Contrast Scale")
56
+
57
+ # with gr.Row():
58
+ # generate_button = gr.Button("Generate Image")
59
+
60
+ # output_image = gr.Image(label="Generated Image")
61
+ # error_message = gr.Markdown(visible=False)
62
+
63
+ # def handle_click(prompt, num_inference_steps, guidance_scale, contrast_scale):
64
+ # image = gen_img(prompt, num_inference_steps, guidance_scale, contrast_scale)
65
+ # if image is None:
66
+ # return None, gr.update(visible=True, value="Error generating image. Please try again.")
67
+ # return image, gr.update(visible=False)
68
+
69
+ # generate_button.click(handle_click, inputs=[prompt, num_inference_steps, guidance_scale, contrast_scale], outputs=[output_image, error_message])
70
+
71
+ # demo.launch(share=True)
72
+
73
+ #------------------------------------------------------------------------------------------------------------------------------------------------------------
74
+ import gradio as gr
75
+ import requests
76
+ import io
77
+ import os
78
+ import logging
79
+ from PIL import Image, ImageEnhance
80
+ from gradio_client import Client
81
+
82
+ # API URLs and headers
83
+ API_URL_1 = "https://api-inference.huggingface.co/models/sd-community/sdxl-flash"
84
+
85
+ API_KEY = os.getenv("HF_API_KEY")
86
+ headers = {"Authorization": f"Bearer {API_KEY}"}
87
+
88
+ client = Client("AP123/SDXL-Lightning")
89
+
90
+ def query(api_url, payload):
91
+ try:
92
+ response = requests.post(api_url, headers=headers, json=payload)
93
+ response.raise_for_status()
94
+ return response.content
95
+ except requests.exceptions.HTTPError as http_err:
96
+ logging.error(f"HTTP error occurred: {http_err}")
97
+ print(f"HTTP error occurred: {http_err}")
98
+ except Exception as err:
99
+ logging.error(f"An error occurred: {err}")
100
+ print(f"An error occurred: {err}")
101
+ return None
102
+
103
+ def map_inference_steps(steps):
104
+ if steps <= 1:
105
+ return "1-Step"
106
+ elif steps <= 2:
107
+ return "2-Step"
108
+ elif steps <= 4:
109
+ return "4-Step"
110
+ else:
111
+ return "8-Step"
112
+
113
+ def gen_img(prompt, num_inference_steps, guidance_scale, contrast):
114
+ payload = {
115
+ "inputs": prompt,
116
+ "parameters": {
117
+ "num_inference_steps": num_inference_steps,
118
+ "guidance_scale": guidance_scale
119
+ }
120
+ }
121
+
122
+ # Try generating image with the first model
123
+ image_bytes = query(API_URL_1, payload)
124
+ if image_bytes is None:
125
+ # print("First model failed, trying second model...")
126
+ try:
127
+ mapped_steps = map_inference_steps(num_inference_steps)
128
+ result = client.predict(prompt, mapped_steps, api_name="/generate_image")
129
+ with open(result, "rb") as img_file:
130
+ image = Image.open(img_file)
131
+ enhancer = ImageEnhance.Contrast(image)
132
+ image = enhancer.enhance(contrast)
133
+ return image, "Image generated by the second model"
134
+ except Exception as e:
135
+ # logging.error(f"Error with the second model: {e}")
136
+ # print(f"Error with the second model: {e}")
137
+ return None, "Error with the second model"
138
+
139
+ try:
140
+ image = Image.open(io.BytesIO(image_bytes))
141
+ enhancer = ImageEnhance.Contrast(image)
142
+ image = enhancer.enhance(contrast)
143
+ return image, "Image generated by the first model"
144
+ except Exception as e:
145
+ # logging.error(f"Error processing image: {e}")
146
+ return None, "Error processing image"
147
+
148
+ with gr.Blocks(theme=gr.themes.Soft(primary_hue=gr.themes.colors.lime, spacing_size="md", radius_size="lg",
149
+ font=[gr.themes.GoogleFont("Copperplate"), "Fantasy", "sans-serif"])) as demo:
150
+
151
+ gr.Markdown("""
152
+ <div style='text-align: center;
153
+ font-size: 36px;
154
+ font-family: Copperplate, Fantasy;
155
+ color: orange;'>
156
+ Pencil Vision (early beta 1.3)
157
+ </div>
158
+ """)
159
+ with gr.Row():
160
+ prompt = gr.Textbox(label="Enter your prompt to generate the image", placeholder="A fantasy landscape with mountains and a river")
161
+
162
+ with gr.Row():
163
+ num_inference_steps = gr.Slider(minimum=1, maximum=15, value=6, step=1, label="Number of Inference Steps")
164
+ guidance_scale = gr.Slider(minimum=1.0, maximum=5.0, value=2.5, step=0.1, label="Guidance Scale")
165
+ contrast_scale = gr.Slider(minimum=1.0, maximum=3.0, value=1.0, step=0.1, label="Contrast Scale")
166
+
167
+ with gr.Row():
168
+ generate_button = gr.Button("Generate Image")
169
+
170
+ output_image = gr.Image(label="Generated Image")
171
+ # model_info = gr.Textbox(label="Model Info", interactive=False)
172
+ error_message = gr.Markdown(visible=False)
173
+
174
+ def handle_click(prompt, num_inference_steps, guidance_scale, contrast_scale):
175
+ image, info = gen_img(prompt, num_inference_steps, guidance_scale, contrast_scale)
176
+ if image is None:
177
+ return None, info, gr.update(visible=True, value="Error generating image. Please try again.")
178
+ return image, info, gr.update(visible=True)
179
+
180
+ generate_button.click(handle_click, inputs=[prompt, num_inference_steps, guidance_scale, contrast_scale], outputs=[output_image, error_message])
181
+
182
+ demo.launch(share=True)
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio
2
+ requests
3
+ Pillow
4
+ transformers
5
+ huggingface_hub