Skip to content

Commit 426088e

Browse files
committed
Added Image-2-Image Scale slider, UI optimizations
1 parent 143a1cd commit 426088e

File tree

6 files changed

+82
-46
lines changed

6 files changed

+82
-46
lines changed

modules/async_worker.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def handler(task):
7070
sharpness, sampler_name, scheduler, custom_steps, custom_switch, cfg, \
7171
base_model_name, refiner_model_name, base_clip_skip, refiner_clip_skip, \
7272
l1, w1, l2, w2, l3, w3, l4, w4, l5, w5, save_metadata_json, save_metadata_image, \
73-
img2img_mode, img2img_start_step, img2img_denoise, \
73+
img2img_mode, img2img_start_step, img2img_denoise, img2img_scale, \
7474
revision_mode, positive_prompt_strength, negative_prompt_strength, revision_strength_1, revision_strength_2, \
7575
revision_strength_3, revision_strength_4, same_seed_for_all, output_format, \
7676
control_lora_canny, canny_edge_low, canny_edge_high, canny_start, canny_stop, canny_strength, canny_model, \
@@ -249,11 +249,6 @@ def handler(task):
249249
resolution = default_settings['resolution']
250250
width, height = string_to_dimensions(resolution)
251251

252-
img2img_megapixels = width * height / 2**20
253-
if img2img_megapixels < constants.MIN_MEGAPIXELS:
254-
img2img_megapixels = constants.MIN_MEGAPIXELS
255-
elif img2img_megapixels > constants.MAX_MEGAPIXELS:
256-
img2img_megapixels = constants.MAX_MEGAPIXELS
257252

258253
pipeline.clear_all_caches() # save memory
259254

@@ -290,6 +285,11 @@ def callback(step, x0, x, total_steps, y):
290285

291286
input_image = None
292287
if input_image_path != None:
288+
img2img_megapixels = width * height * img2img_scale ** 2 / 2**20
289+
if img2img_megapixels < constants.MIN_MEGAPIXELS:
290+
img2img_megapixels = constants.MIN_MEGAPIXELS
291+
elif img2img_megapixels > constants.MAX_MEGAPIXELS:
292+
img2img_megapixels = constants.MAX_MEGAPIXELS
293293
input_image = get_image(input_image_path, img2img_megapixels)
294294

295295
execution_start_time = time.perf_counter()
@@ -320,7 +320,7 @@ def callback(step, x0, x, total_steps, y):
320320
}
321321
if img2img_mode:
322322
metadata |= {
323-
'start_step': start_step, 'denoise': denoise, 'input_image': input_image_filename
323+
'start_step': start_step, 'denoise': denoise, 'scale': img2img_scale, 'input_image': input_image_filename
324324
}
325325
if revision_mode:
326326
metadata |= {
@@ -356,7 +356,7 @@ def callback(step, x0, x, total_steps, y):
356356
('CFG & CLIP Skips', (cfg, base_clip_skip, refiner_clip_skip)),
357357
('Base Model', base_model_name),
358358
('Refiner Model', refiner_model_name),
359-
('Image-2-Image', (img2img_mode, start_step, denoise, input_image_filename) if img2img_mode else (img2img_mode)),
359+
('Image-2-Image', (img2img_mode, start_step, denoise, img2img_scale, input_image_filename) if img2img_mode else (img2img_mode)),
360360
('Revision', (revision_mode, revision_strength_1, revision_strength_2, revision_strength_3,
361361
revision_strength_4, revision_images_filenames) if revision_mode else (revision_mode)),
362362
('Prompt Strengths', (positive_prompt_strength, negative_prompt_strength)),

modules/settings.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def load_settings():
2525
settings['img2img_mode'] = False
2626
settings['img2img_start_step'] = 0.06
2727
settings['img2img_denoise'] = 0.94
28+
settings['img2img_scale'] = 1.0
2829
settings['control_lora_canny'] = False
2930
settings['canny_edge_low'] = 0.2
3031
settings['canny_edge_high'] = 0.8

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ Below things are already inside the software, and **users do not need to do anyt
182182
24. Support for playing audio when generation is finished (ported from SD web UI - use notification.ogg or notification.mp3).
183183
25. Starting generation via Ctrl-ENTER hotkey (ported from SD web UI).
184184
26. Support for loading models from subfolders (ported from RuinedFooocus).
185-
27. Support for authentication in --share mode (credentials loaded from auth.json - use auth-examle.json as a template).
185+
27. Support for authentication in --share mode (credentials loaded from auth.json - use auth-example.json as a template).
186186

187187
## Thanks
188188

settings-example.json

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"img2img_mode": false,
1818
"img2img_start_step": 0.06,
1919
"img2img_denoise": 0.94,
20+
"img2img_scale": 1.0,
2021
"control_lora_canny": false,
2122
"canny_edge_low": 0.2,
2223
"canny_edge_high": 0.8,

update_log_mre.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
### 2.0.18 MRE
22

33
* Added support for authentication in --share mode (via auth.json).
4+
* Added Image-2-Image Scale slider.
5+
* Displaying Revision and Control-LoRAs controls only when needed.
46

57
### 2.0.14 MRE
68

webui.py

+69-37
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def metadata_to_ctrls(metadata, ctrls):
8888
# image_number
8989
if 'seed' in metadata:
9090
ctrls[6] = metadata['seed']
91-
ctrls[54] = False
91+
ctrls[55] = False
9292
if 'sharpness' in metadata:
9393
ctrls[7] = metadata['sharpness']
9494
if 'sampler_name' in metadata:
@@ -156,54 +156,56 @@ def metadata_to_ctrls(metadata, ctrls):
156156
ctrls[30] = round(metadata['start_step'] / ctrls[10], 2)
157157
if 'denoise' in metadata:
158158
ctrls[31] = metadata['denoise']
159+
if 'scale' in metadata:
160+
ctrls[32] = metadata['scale']
159161
if 'revision' in metadata:
160-
ctrls[32] = metadata['revision']
162+
ctrls[33] = metadata['revision']
161163
if 'positive_prompt_strength' in metadata:
162-
ctrls[33] = metadata['positive_prompt_strength']
164+
ctrls[34] = metadata['positive_prompt_strength']
163165
elif 'zero_out_positive' in metadata:
164-
ctrls[33] = 0.0 if metadata['zero_out_positive'] else 1.0
166+
ctrls[34] = 0.0 if metadata['zero_out_positive'] else 1.0
165167
if 'negative_prompt_strength' in metadata:
166-
ctrls[34] = metadata['negative_prompt_strength']
168+
ctrls[35] = metadata['negative_prompt_strength']
167169
elif 'zero_out_negative' in metadata:
168-
ctrls[34] = 0.0 if metadata['zero_out_negative'] else 1.0
170+
ctrls[35] = 0.0 if metadata['zero_out_negative'] else 1.0
169171
if 'revision_strength_1' in metadata:
170-
ctrls[35] = metadata['revision_strength_1']
172+
ctrls[36] = metadata['revision_strength_1']
171173
if 'revision_strength_2' in metadata:
172-
ctrls[36] = metadata['revision_strength_2']
174+
ctrls[37] = metadata['revision_strength_2']
173175
if 'revision_strength_3' in metadata:
174-
ctrls[37] = metadata['revision_strength_3']
176+
ctrls[38] = metadata['revision_strength_3']
175177
if 'revision_strength_4' in metadata:
176-
ctrls[38] = metadata['revision_strength_4']
178+
ctrls[39] = metadata['revision_strength_4']
177179
# same_seed_for_all
178180
# output_format
179181
if 'control_lora_canny' in metadata:
180-
ctrls[41] = metadata['control_lora_canny']
182+
ctrls[42] = metadata['control_lora_canny']
181183
if 'canny_edge_low' in metadata:
182-
ctrls[42] = metadata['canny_edge_low']
184+
ctrls[43] = metadata['canny_edge_low']
183185
if 'canny_edge_high' in metadata:
184-
ctrls[43] = metadata['canny_edge_high']
186+
ctrls[44] = metadata['canny_edge_high']
185187
if 'canny_start' in metadata:
186-
ctrls[44] = metadata['canny_start']
188+
ctrls[45] = metadata['canny_start']
187189
if 'canny_stop' in metadata:
188-
ctrls[45] = metadata['canny_stop']
190+
ctrls[46] = metadata['canny_stop']
189191
if 'canny_strength' in metadata:
190-
ctrls[46] = metadata['canny_strength']
192+
ctrls[47] = metadata['canny_strength']
191193
if 'canny_model' in metadata:
192-
ctrls[47] = metadata['canny_model']
194+
ctrls[48] = metadata['canny_model']
193195
if 'control_lora_depth' in metadata:
194-
ctrls[48] = metadata['control_lora_depth']
196+
ctrls[49] = metadata['control_lora_depth']
195197
if 'depth_start' in metadata:
196-
ctrls[49] = metadata['depth_start']
198+
ctrls[50] = metadata['depth_start']
197199
if 'depth_stop' in metadata:
198-
ctrls[50] = metadata['depth_stop']
200+
ctrls[51] = metadata['depth_stop']
199201
if 'depth_strength' in metadata:
200-
ctrls[51] = metadata['depth_strength']
202+
ctrls[52] = metadata['depth_strength']
201203
if 'depth_model' in metadata:
202-
ctrls[52] = metadata['depth_model']
204+
ctrls[53] = metadata['depth_model']
203205
if 'prompt_expansion' in metadata:
204-
ctrls[53] = metadata['prompt_expansion']
206+
ctrls[54] = metadata['prompt_expansion']
205207
elif 'software' in metadata and metadata['software'].startswith('Fooocus 1.'):
206-
ctrls[53] = False
208+
ctrls[54] = False
207209
# seed_random
208210
return ctrls
209211

@@ -342,16 +344,27 @@ def performance_changed(value):
342344

343345
with gr.Tab(label='Image-2-Image'):
344346
revision_mode = gr.Checkbox(label='Revision (prompting with images)', value=settings['revision_mode'])
345-
revision_strength_1 = gr.Slider(label='Revision Strength for Image 1', minimum=-2, maximum=2, step=0.01, value=settings['revision_strength_1'])
346-
revision_strength_2 = gr.Slider(label='Revision Strength for Image 2', minimum=-2, maximum=2, step=0.01, value=settings['revision_strength_2'])
347-
revision_strength_3 = gr.Slider(label='Revision Strength for Image 3', minimum=-2, maximum=2, step=0.01, value=settings['revision_strength_3'])
348-
revision_strength_4 = gr.Slider(label='Revision Strength for Image 4', minimum=-2, maximum=2, step=0.01, value=settings['revision_strength_4'])
347+
revision_strength_1 = gr.Slider(label='Revision Strength for Image 1', minimum=-2, maximum=2, step=0.01,
348+
value=settings['revision_strength_1'], visible=settings['revision_mode'])
349+
revision_strength_2 = gr.Slider(label='Revision Strength for Image 2', minimum=-2, maximum=2, step=0.01,
350+
value=settings['revision_strength_2'], visible=settings['revision_mode'])
351+
revision_strength_3 = gr.Slider(label='Revision Strength for Image 3', minimum=-2, maximum=2, step=0.01,
352+
value=settings['revision_strength_3'], visible=settings['revision_mode'])
353+
revision_strength_4 = gr.Slider(label='Revision Strength for Image 4', minimum=-2, maximum=2, step=0.01,
354+
value=settings['revision_strength_4'], visible=settings['revision_mode'])
355+
356+
def revision_changed(value):
357+
return gr.update(visible=value == True), gr.update(visible=value == True), gr.update(visible=value == True), gr.update(visible=value == True)
358+
359+
revision_mode.change(fn=revision_changed, inputs=[revision_mode], outputs=[revision_strength_1, revision_strength_2, revision_strength_3, revision_strength_4])
349360

350361
positive_prompt_strength = gr.Slider(label='Positive Prompt Strength', minimum=0, maximum=1, step=0.01, value=settings['positive_prompt_strength'])
351362
negative_prompt_strength = gr.Slider(label='Negative Prompt Strength', minimum=0, maximum=1, step=0.01, value=settings['negative_prompt_strength'])
352363

353364
img2img_start_step = gr.Slider(label='Image-2-Image Start Step', minimum=0.0, maximum=0.8, step=0.01, value=settings['img2img_start_step'])
354365
img2img_denoise = gr.Slider(label='Image-2-Image Denoise', minimum=0.2, maximum=1.0, step=0.01, value=settings['img2img_denoise'])
366+
img2img_scale = gr.Slider(label='Image-2-Image Scale', minimum=1.0, maximum=2.0, step=0.25, value=settings['img2img_scale'],
367+
info='For upscaling - use with low denoise values')
355368

356369
keep_input_names = gr.Checkbox(label='Keep Input Names', value=settings['keep_input_names'], elem_classes='type_small_row')
357370
with gr.Row():
@@ -366,7 +379,7 @@ def performance_changed(value):
366379
output_to_input_button.click(output_to_input_handler, inputs=output_gallery, outputs=[input_gallery, gallery_tabs])
367380
output_to_revision_button.click(output_to_revision_handler, inputs=output_gallery, outputs=[revision_mode, revision_gallery, gallery_tabs])
368381

369-
img2img_ctrls = [img2img_mode, img2img_start_step, img2img_denoise, revision_mode, positive_prompt_strength, negative_prompt_strength,
382+
img2img_ctrls = [img2img_mode, img2img_start_step, img2img_denoise, img2img_scale, revision_mode, positive_prompt_strength, negative_prompt_strength,
370383
revision_strength_1, revision_strength_2, revision_strength_3, revision_strength_4]
371384

372385
def verify_revision(rev, gallery_in, gallery_rev, gallery_out):
@@ -385,16 +398,35 @@ def verify_revision(rev, gallery_in, gallery_rev, gallery_out):
385398

386399
with gr.Tab(label='CN'):
387400
control_lora_canny = gr.Checkbox(label='Control-LoRA: Canny', value=settings['control_lora_canny'])
388-
canny_edge_low = gr.Slider(label='Edge Detection Low', minimum=0.0, maximum=1.0, step=0.01, value=settings['canny_edge_low'])
389-
canny_edge_high = gr.Slider(label='Edge Detection High', minimum=0.0, maximum=1.0, step=0.01, value=settings['canny_edge_high'])
390-
canny_start = gr.Slider(label='Canny Start', minimum=0.0, maximum=1.0, step=0.01, value=settings['canny_start'])
391-
canny_stop = gr.Slider(label='Canny Stop', minimum=0.0, maximum=1.0, step=0.01, value=settings['canny_stop'])
392-
canny_strength = gr.Slider(label='Canny Strength', minimum=0.0, maximum=2.0, step=0.01, value=settings['canny_strength'])
401+
canny_edge_low = gr.Slider(label='Edge Detection Low', minimum=0.0, maximum=1.0, step=0.01,
402+
value=settings['canny_edge_low'], visible=settings['control_lora_canny'])
403+
canny_edge_high = gr.Slider(label='Edge Detection High', minimum=0.0, maximum=1.0, step=0.01,
404+
value=settings['canny_edge_high'], visible=settings['control_lora_canny'])
405+
canny_start = gr.Slider(label='Canny Start', minimum=0.0, maximum=1.0, step=0.01,
406+
value=settings['canny_start'], visible=settings['control_lora_canny'])
407+
canny_stop = gr.Slider(label='Canny Stop', minimum=0.0, maximum=1.0, step=0.01,
408+
value=settings['canny_stop'], visible=settings['control_lora_canny'])
409+
canny_strength = gr.Slider(label='Canny Strength', minimum=0.0, maximum=2.0, step=0.01,
410+
value=settings['canny_strength'], visible=settings['control_lora_canny'])
411+
412+
def canny_changed(value):
413+
return gr.update(visible=value == True), gr.update(visible=value == True), gr.update(visible=value == True), \
414+
gr.update(visible=value == True), gr.update(visible=value == True)
415+
416+
control_lora_canny.change(fn=canny_changed, inputs=[control_lora_canny], outputs=[canny_edge_low, canny_edge_high, canny_start, canny_stop, canny_strength])
393417

394418
control_lora_depth = gr.Checkbox(label='Control-LoRA: Depth', value=settings['control_lora_depth'])
395-
depth_start = gr.Slider(label='Depth Start', minimum=0.0, maximum=1.0, step=0.01, value=settings['depth_start'])
396-
depth_stop = gr.Slider(label='Depth Stop', minimum=0.0, maximum=1.0, step=0.01, value=settings['depth_stop'])
397-
depth_strength = gr.Slider(label='Depth Strength', minimum=0.0, maximum=2.0, step=0.01, value=settings['depth_strength'])
419+
depth_start = gr.Slider(label='Depth Start', minimum=0.0, maximum=1.0, step=0.01,
420+
value=settings['depth_start'], visible=settings['control_lora_depth'])
421+
depth_stop = gr.Slider(label='Depth Stop', minimum=0.0, maximum=1.0, step=0.01,
422+
value=settings['depth_stop'], visible=settings['control_lora_depth'])
423+
depth_strength = gr.Slider(label='Depth Strength', minimum=0.0, maximum=2.0, step=0.01,
424+
value=settings['depth_strength'], visible=settings['control_lora_depth'])
425+
426+
def depth_changed(value):
427+
return gr.update(visible=value == True), gr.update(visible=value == True), gr.update(visible=value == True)
428+
429+
control_lora_depth.change(fn=depth_changed, inputs=[control_lora_depth], outputs=[depth_start, depth_stop, depth_strength])
398430

399431
with gr.Tab(label='Models'):
400432
with gr.Row():

0 commit comments

Comments
 (0)