feat: allow upscaled input for enhance upscaling, correctly calculate steps

This commit is contained in:
Manuel Schmid 2024-06-21 22:42:43 +02:00
parent e0ed94aa6a
commit ebd5e24531
No known key found for this signature in database
GPG Key ID: 32C4F7569B40B84B
1 changed files with 35 additions and 33 deletions

View File

@ -34,6 +34,7 @@ class AsyncTask:
self.performance_selection = Performance(args.pop())
self.steps = self.performance_selection.steps()
self.original_steps = self.steps
self.aspect_ratios_selection = args.pop()
self.image_number = args.pop()
@ -336,21 +337,18 @@ def worker():
('Fooocus V2 Expansion', 'prompt_expansion', task['expansion']),
('Styles', 'styles',
str(task['styles'] if not use_expansion else [fooocus_expansion] + task['styles'])),
('Performance', 'performance', async_task.performance_selection.value)]
if async_task.performance_selection.steps() != async_task.steps:
d.append(('Steps', 'steps', async_task.steps))
d += [('Resolution', 'resolution', str((width, height))),
('Guidance Scale', 'guidance_scale', async_task.cfg_scale),
('Sharpness', 'sharpness', async_task.sharpness),
('ADM Guidance', 'adm_guidance', str((
modules.patch.patch_settings[pid].positive_adm_scale,
modules.patch.patch_settings[pid].negative_adm_scale,
modules.patch.patch_settings[pid].adm_scaler_end))),
('Base Model', 'base_model', async_task.base_model_name),
('Refiner Model', 'refiner_model', async_task.refiner_model_name),
('Refiner Switch', 'refiner_switch', async_task.refiner_switch)]
('Performance', 'performance', async_task.performance_selection.value),
('Steps', 'steps', async_task.steps),
('Resolution', 'resolution', str((width, height))),
('Guidance Scale', 'guidance_scale', async_task.cfg_scale),
('Sharpness', 'sharpness', async_task.sharpness),
('ADM Guidance', 'adm_guidance', str((
modules.patch.patch_settings[pid].positive_adm_scale,
modules.patch.patch_settings[pid].negative_adm_scale,
modules.patch.patch_settings[pid].adm_scaler_end))),
('Base Model', 'base_model', async_task.base_model_name),
('Refiner Model', 'refiner_model', async_task.refiner_model_name),
('Refiner Switch', 'refiner_switch', async_task.refiner_switch)]
if async_task.refiner_model_name != 'None':
if async_task.overwrite_switch > 0:
@ -623,9 +621,9 @@ def worker():
print(f'Final resolution is {str((width, height))}.')
return direct_return, uov_input_image, denoising_strength, initial_latent, tiled, width, height, current_progress
def apply_overrides(async_task, height, width):
def apply_overrides(async_task, steps, height, width):
if async_task.overwrite_step > 0:
async_task.steps = async_task.overwrite_step
steps = async_task.overwrite_step
switch = int(round(async_task.steps * async_task.refiner_switch))
if async_task.overwrite_switch > 0:
switch = async_task.overwrite_switch
@ -633,7 +631,7 @@ def worker():
width = async_task.overwrite_width
if async_task.overwrite_height > 0:
height = async_task.overwrite_height
return height, switch, width
return steps, switch, width, height
def process_prompt(async_task, prompt, negative_prompt, base_model_additional_loras, image_number, disable_seed_increment, use_expansion, use_style,
use_synthetic_refiner, current_progress, advance_progress=False):
@ -1101,7 +1099,7 @@ def worker():
ip_adapter.load_ip_adapter(clip_vision_path, ip_negative_path, ip_adapter_path)
ip_adapter.load_ip_adapter(clip_vision_path, ip_negative_path, ip_adapter_face_path)
height, switch, width = apply_overrides(async_task, height, width)
async_task.steps, switch, width, height = apply_overrides(async_task, async_task.steps, height, width)
print(f'[Parameters] Sampler = {async_task.sampler_name} - {async_task.scheduler_name}')
print(f'[Parameters] Steps = {async_task.steps} - {switch}')
@ -1163,18 +1161,19 @@ def worker():
if async_task.freeu_enabled:
apply_freeu(async_task)
all_steps = async_task.steps * async_task.image_number
steps, _, _, _ = apply_overrides(async_task, async_task.steps, height, width)
all_steps = steps * async_task.image_number
if async_task.enhance_checkbox and len(async_task.enhance_ctrls) != 0:
all_steps += async_task.image_number * len(async_task.enhance_ctrls) * async_task.steps
enhance_upscale_steps = 0
enhance_upscale_steps_total = 0
if 'upscale' not in goals and async_task.enhance_uov_method != flags.disabled:
enhance_upscale_steps = async_task.overwrite_step if async_task.overwrite_step > 0 else async_task.performance_selection.steps_uov()
# enhance_upscale_steps = 0
# enhance_upscale_steps_total = 0
if async_task.enhance_checkbox and async_task.enhance_uov_method != flags.disabled:
enhance_upscale_steps, _, _, _ = apply_overrides(async_task, async_task.performance_selection.steps_uov(), height, width)
enhance_upscale_steps_total = async_task.image_number * enhance_upscale_steps
all_steps += enhance_upscale_steps_total
if async_task.enhance_checkbox and len(async_task.enhance_ctrls) != 0:
all_steps += async_task.image_number * len(async_task.enhance_ctrls) * steps
print(f'[Parameters] Denoising Strength = {denoising_strength}')
@ -1238,7 +1237,7 @@ def worker():
execution_time = time.perf_counter() - execution_start_time
print(f'Generating and saving time: {execution_time:.2f} seconds')
if not async_task.enhance_checkbox or ('upscale' in goals and async_task.enhance_uov_method != flags.disabled) and len(async_task.enhance_ctrls) == 0:
if not async_task.enhance_checkbox or (async_task.enhance_uov_method == flags.disabled and len(async_task.enhance_ctrls) == 0):
print(f'[Enhance] Skipping, preconditions aren\'t met')
stop_processing(async_task, processing_start_time)
return
@ -1246,7 +1245,7 @@ def worker():
progressbar(async_task, current_progress, 'Processing enhance ...')
active_enhance_tabs = len(async_task.enhance_ctrls)
should_process_uov = 'upscale' not in goals and async_task.enhance_uov_method != flags.disabled
should_process_uov = async_task.enhance_uov_method != flags.disabled
if should_process_uov:
active_enhance_tabs += 1
total_count = sum([len(imgs) for _, imgs in generated_imgs.items()]) * active_enhance_tabs
@ -1255,6 +1254,7 @@ def worker():
current_task_id = -1
done_steps_upscaling = 0
done_steps_inpainting = 0
enhance_steps, _, _, _ = apply_overrides(async_task, async_task.original_steps, height, width)
for imgs in generated_imgs.values():
for img in imgs:
enhancement_image_start_time = time.perf_counter()
@ -1267,7 +1267,9 @@ def worker():
img, skip_prompt_processing, steps = prepare_upscale(async_task, goals_enhance, img,
async_task.enhance_uov_method,
async_task.performance_selection,
async_task.steps, current_progress)
enhance_steps, current_progress)
steps, _, _, _ = apply_overrides(async_task, async_task.original_steps, height, width)
if len(goals_enhance) > 0:
try:
@ -1283,7 +1285,7 @@ def worker():
print('User skipped')
async_task.last_stop = False
# also skip all enhance steps for this image, but add the steps to the progress bar
done_steps_inpainting += len(async_task.enhance_ctrls) * async_task.steps
done_steps_inpainting += len(async_task.enhance_ctrls) * enhance_steps
continue
else:
print('User stopped')
@ -1343,7 +1345,7 @@ def worker():
enhance_inpaint_disable_initial_latent, enhance_inpaint_engine,
enhance_inpaint_respective_field, enhance_inpaint_strength, enhance_negative_prompt,
enhance_prompt, final_scheduler_name, goals_enhance, height, img, mask, preparation_steps,
async_task.steps, switch, tiled, total_count, use_expansion, use_style, use_synthetic_refiner, width)
enhance_steps, switch, tiled, total_count, use_expansion, use_style, use_synthetic_refiner, width)
except ldm_patched.modules.model_management.InterruptProcessingException:
if async_task.last_stop == 'skip':
@ -1354,7 +1356,7 @@ def worker():
print('User stopped')
break
finally:
done_steps_inpainting += async_task.steps
done_steps_inpainting += enhance_steps
enhancement_task_time = time.perf_counter() - enhancement_task_start_time
print(f'Enhancement time: {enhancement_task_time:.2f} seconds')