Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -74,7 +74,7 @@ def generate_image(
|
|
74 |
|
75 |
if opts.seed is None:
|
76 |
opts.seed = torch.Generator(device="cpu").seed()
|
77 |
-
|
78 |
t0 = time.perf_counter()
|
79 |
|
80 |
use_true_cfg = abs(true_cfg - 1.0) > 1e-2
|
@@ -86,8 +86,6 @@ def generate_image(
|
|
86 |
id_embeddings = None
|
87 |
uncond_id_embeddings = None
|
88 |
|
89 |
-
print(id_embeddings)
|
90 |
-
|
91 |
# prepare input
|
92 |
x = get_noise(
|
93 |
1,
|
@@ -97,7 +95,6 @@ def generate_image(
|
|
97 |
dtype=torch.bfloat16,
|
98 |
seed=opts.seed,
|
99 |
)
|
100 |
-
print(x)
|
101 |
timesteps = get_schedule(
|
102 |
opts.num_steps,
|
103 |
x.shape[-1] * x.shape[-2] // 4,
|
@@ -142,10 +139,8 @@ def generate_image(
|
|
142 |
|
143 |
t1 = time.perf_counter()
|
144 |
|
145 |
-
print(f"Done in {t1 - t0:.1f}s.")
|
146 |
# bring into PIL format
|
147 |
x = x.clamp(-1, 1)
|
148 |
-
# x = embed_watermark(x.float())
|
149 |
x = rearrange(x[0], "c h w -> h w c")
|
150 |
|
151 |
img = Image.fromarray((127.5 * (x + 1.0)).cpu().byte().numpy())
|
@@ -167,55 +162,31 @@ def create_demo(args, model_name: str, device: str = "cuda" if torch.cuda.is_ava
|
|
167 |
with gr.Column():
|
168 |
prompt = gr.Textbox(label="Prompt", value="portrait, color, cinematic")
|
169 |
id_image = gr.Image(label="ID Image")
|
170 |
-
id_weight = gr.Slider(0.0, 3.0, 1, step=0.05, label="id weight")
|
171 |
-
|
172 |
-
width = gr.Slider(256, 1536, 896, step=16, label="Width")
|
173 |
-
height = gr.Slider(256, 1536, 1152, step=16, label="Height")
|
174 |
-
num_steps = gr.Slider(1, 20, 20, step=1, label="Number of steps")
|
175 |
-
start_step = gr.Slider(0, 10, 0, step=1, label="timestep to start inserting ID")
|
176 |
-
guidance = gr.Slider(1.0, 10.0, 4, step=0.1, label="Guidance")
|
177 |
-
seed = gr.Textbox(-1, label="Seed (-1 for random)")
|
178 |
-
max_sequence_length = gr.Slider(128, 512, 128, step=128,
|
179 |
-
label="max_sequence_length for prompt (T5), small will be faster")
|
180 |
-
|
181 |
-
with gr.Accordion("Advanced Options (True CFG, true_cfg_scale=1 means use fake CFG, >1 means use true CFG, if using true CFG, we recommend set the guidance scale to 1)", open=False): # noqa E501
|
182 |
-
neg_prompt = gr.Textbox(
|
183 |
-
label="Negative Prompt",
|
184 |
-
value="bad quality, worst quality, text, signature, watermark, extra limbs")
|
185 |
-
true_cfg = gr.Slider(1.0, 10.0, 1, step=0.1, label="true CFG scale")
|
186 |
-
timestep_to_start_cfg = gr.Slider(0, 20, 1, step=1, label="timestep to start cfg", visible=args.dev)
|
187 |
-
|
188 |
generate_btn = gr.Button("Generate")
|
189 |
|
190 |
with gr.Column():
|
191 |
output_image = gr.Image(label="Generated Image")
|
192 |
-
seed_output = gr.Textbox(label="Used Seed")
|
193 |
-
intermediate_output = gr.Gallery(label='Output', elem_id="gallery", visible=args.dev)
|
194 |
-
|
195 |
|
196 |
with gr.Row():
|
197 |
with gr.Column():
|
198 |
gr.Markdown("## Examples")
|
199 |
|
200 |
-
# λͺ¨λ μμλ₯Ό νλμ 리μ€νΈλ‘ ν©μΉ©λλ€
|
201 |
all_examples = [
|
202 |
-
['a woman holding sign with glowing green text \"PuLID for FLUX\"', 'example_inputs/liuyifei.png'
|
203 |
-
['portrait, side view', 'example_inputs/liuyifei.png'
|
204 |
-
['white-haired woman with vr technology atmosphere
|
205 |
-
['a young child is eating Icecream', 'example_inputs/liuyifei.png'
|
206 |
-
['a man is holding a sign with text \"PuLID for FLUX\", winter, snowing
|
207 |
-
['portrait, candle light', 'example_inputs/pengwei.jpg'
|
208 |
-
['profile shot dark photo of a 25-year-old male with smoke
|
209 |
-
['American Comics, 1boy', 'example_inputs/pengwei.jpg'
|
210 |
-
['portrait, pixar', 'example_inputs/pengwei.jpg'
|
211 |
-
['portrait, made of ice sculpture', 'example_inputs/lecun.jpg'
|
212 |
]
|
213 |
|
214 |
-
# μμ μ΄λ―Έμ§μ μΊ‘μ
μ μ€λΉν©λλ€
|
215 |
example_images = [example[1] for example in all_examples]
|
216 |
example_captions = [example[0] for example in all_examples]
|
217 |
|
218 |
-
# Gallery μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ κ·Έλ¦¬λ ννλ‘ μμλ€μ νμν©λλ€
|
219 |
gallery = gr.Gallery(
|
220 |
value=list(zip(example_images, example_captions)),
|
221 |
label="Example Gallery",
|
@@ -227,21 +198,33 @@ def create_demo(args, model_name: str, device: str = "cuda" if torch.cuda.is_ava
|
|
227 |
height="auto"
|
228 |
)
|
229 |
|
230 |
-
# μμ ν΄λ¦ μ μ
λ ₯ νλμ κ°μ μ±μ°λ ν¨μ
|
231 |
def fill_example(evt: gr.SelectData):
|
232 |
-
return [all_examples[evt.index][i] for i in [0, 1
|
233 |
|
234 |
gallery.select(
|
235 |
fill_example,
|
236 |
None,
|
237 |
-
[prompt, id_image
|
238 |
)
|
239 |
|
240 |
generate_btn.click(
|
241 |
fn=generate_image,
|
242 |
-
inputs=[
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
)
|
246 |
|
247 |
return demo
|
|
|
74 |
|
75 |
if opts.seed is None:
|
76 |
opts.seed = torch.Generator(device="cpu").seed()
|
77 |
+
|
78 |
t0 = time.perf_counter()
|
79 |
|
80 |
use_true_cfg = abs(true_cfg - 1.0) > 1e-2
|
|
|
86 |
id_embeddings = None
|
87 |
uncond_id_embeddings = None
|
88 |
|
|
|
|
|
89 |
# prepare input
|
90 |
x = get_noise(
|
91 |
1,
|
|
|
95 |
dtype=torch.bfloat16,
|
96 |
seed=opts.seed,
|
97 |
)
|
|
|
98 |
timesteps = get_schedule(
|
99 |
opts.num_steps,
|
100 |
x.shape[-1] * x.shape[-2] // 4,
|
|
|
139 |
|
140 |
t1 = time.perf_counter()
|
141 |
|
|
|
142 |
# bring into PIL format
|
143 |
x = x.clamp(-1, 1)
|
|
|
144 |
x = rearrange(x[0], "c h w -> h w c")
|
145 |
|
146 |
img = Image.fromarray((127.5 * (x + 1.0)).cpu().byte().numpy())
|
|
|
162 |
with gr.Column():
|
163 |
prompt = gr.Textbox(label="Prompt", value="portrait, color, cinematic")
|
164 |
id_image = gr.Image(label="ID Image")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
generate_btn = gr.Button("Generate")
|
166 |
|
167 |
with gr.Column():
|
168 |
output_image = gr.Image(label="Generated Image")
|
|
|
|
|
|
|
169 |
|
170 |
with gr.Row():
|
171 |
with gr.Column():
|
172 |
gr.Markdown("## Examples")
|
173 |
|
|
|
174 |
all_examples = [
|
175 |
+
['a woman holding sign with glowing green text \"PuLID for FLUX\"', 'example_inputs/liuyifei.png'],
|
176 |
+
['portrait, side view', 'example_inputs/liuyifei.png'],
|
177 |
+
['white-haired woman with vr technology atmosphere', 'example_inputs/liuyifei.png'],
|
178 |
+
['a young child is eating Icecream', 'example_inputs/liuyifei.png'],
|
179 |
+
['a man is holding a sign with text \"PuLID for FLUX\", winter, snowing', 'example_inputs/pengwei.jpg'],
|
180 |
+
['portrait, candle light', 'example_inputs/pengwei.jpg'],
|
181 |
+
['profile shot dark photo of a 25-year-old male with smoke', 'example_inputs/pengwei.jpg'],
|
182 |
+
['American Comics, 1boy', 'example_inputs/pengwei.jpg'],
|
183 |
+
['portrait, pixar', 'example_inputs/pengwei.jpg'],
|
184 |
+
['portrait, made of ice sculpture', 'example_inputs/lecun.jpg'],
|
185 |
]
|
186 |
|
|
|
187 |
example_images = [example[1] for example in all_examples]
|
188 |
example_captions = [example[0] for example in all_examples]
|
189 |
|
|
|
190 |
gallery = gr.Gallery(
|
191 |
value=list(zip(example_images, example_captions)),
|
192 |
label="Example Gallery",
|
|
|
198 |
height="auto"
|
199 |
)
|
200 |
|
|
|
201 |
def fill_example(evt: gr.SelectData):
|
202 |
+
return [all_examples[evt.index][i] for i in [0, 1]]
|
203 |
|
204 |
gallery.select(
|
205 |
fill_example,
|
206 |
None,
|
207 |
+
[prompt, id_image],
|
208 |
)
|
209 |
|
210 |
generate_btn.click(
|
211 |
fn=generate_image,
|
212 |
+
inputs=[
|
213 |
+
gr.Slider(256, 1536, 896, step=16, visible=False), # width
|
214 |
+
gr.Slider(256, 1536, 1152, step=16, visible=False), # height
|
215 |
+
gr.Slider(1, 20, 20, step=1, visible=False), # num_steps
|
216 |
+
gr.Slider(0, 10, 0, step=1, visible=False), # start_step
|
217 |
+
gr.Slider(1.0, 10.0, 4, step=0.1, visible=False), # guidance
|
218 |
+
gr.Textbox(-1, visible=False), # seed
|
219 |
+
prompt,
|
220 |
+
id_image,
|
221 |
+
gr.Slider(0.0, 3.0, 1, step=0.05, visible=False), # id_weight
|
222 |
+
gr.Textbox("bad quality, worst quality, text, signature, watermark, extra limbs", visible=False), # neg_prompt
|
223 |
+
gr.Slider(1.0, 10.0, 1, step=0.1, visible=False), # true_cfg
|
224 |
+
gr.Slider(0, 20, 1, step=1, visible=False), # timestep_to_start_cfg
|
225 |
+
gr.Slider(128, 512, 128, step=128, visible=False), # max_sequence_length
|
226 |
+
],
|
227 |
+
outputs=[output_image],
|
228 |
)
|
229 |
|
230 |
return demo
|