diff --git a/modules/processing_class.py b/modules/processing_class.py index 53d6e49e6..60ab33c60 100644 --- a/modules/processing_class.py +++ b/modules/processing_class.py @@ -33,7 +33,7 @@ class StableDiffusionProcessing: self.seed_resize_from_h: int = seed_resize_from_h self.seed_resize_from_w: int = seed_resize_from_w self.sampler_name: str = sampler_name - self.hr_sampler_name: str = hr_sampler_name + self.hr_sampler_name: str = hr_sampler_name if hr_sampler_name != 'Same as primary' else sampler_name self.batch_size: int = batch_size self.n_iter: int = n_iter self.steps: int = steps @@ -142,7 +142,6 @@ class StableDiffusionProcessing: self.negative_embeds = [] self.negative_pooleds = [] - @property def sd_model(self): return shared.sd_model diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 20e58fbb9..ee89a652b 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -1,4 +1,5 @@ import os +import copy from modules import shared from modules.sd_samplers_common import samples_to_image_grid, sample_to_image # pylint: disable=unused-import @@ -47,6 +48,8 @@ def visible_sampler_names(): def create_sampler(name, model): if name == 'Default' and hasattr(model, 'scheduler'): + if getattr(model, "default_scheduler", None) is not None: + model.scheduler = copy.deepcopy(model.default_scheduler) config = {k: v for k, v in model.scheduler.config.items() if not k.startswith('_')} shared.log.debug(f'Sampler default {type(model.scheduler).__name__}: {config}') return model.scheduler diff --git a/modules/sd_samplers_diffusers.py b/modules/sd_samplers_diffusers.py index caf70f66e..5e22c73be 100644 --- a/modules/sd_samplers_diffusers.py +++ b/modules/sd_samplers_diffusers.py @@ -65,6 +65,7 @@ config = { samplers_data_diffusers = [ sd_samplers_common.SamplerData('Default', None, [], {}), + sd_samplers_common.SamplerData('UniPC', lambda model: DiffusionSampler('UniPC', UniPCMultistepScheduler, model), [], {}), sd_samplers_common.SamplerData('DEIS', lambda model: DiffusionSampler('DEIS', DEISMultistepScheduler, model), [], {}), sd_samplers_common.SamplerData('SA Solver', lambda model: DiffusionSampler('SA Solver', SASolverScheduler, model), [], {}), @@ -88,6 +89,8 @@ samplers_data_diffusers = [ sd_samplers_common.SamplerData('LCM', lambda model: DiffusionSampler('LCM', LCMScheduler, model), [], {}), sd_samplers_common.SamplerData('TCD', lambda model: DiffusionSampler('TCD', TCDScheduler, model), [], {}), sd_samplers_common.SamplerData('CMSI', lambda model: DiffusionSampler('CMSI', CMStochasticIterativeScheduler, model), [], {}), + + sd_samplers_common.SamplerData('Same as primary', None, [], {}), ] diff --git a/modules/ui_sections.py b/modules/ui_sections.py index 8d53d41cb..a96bacfdd 100644 --- a/modules/ui_sections.py +++ b/modules/ui_sections.py @@ -202,7 +202,7 @@ def create_correction_inputs(tab): def create_sampler_and_steps_selection(choices, tabname): if choices is None: sd_samplers.set_samplers() - choices = sd_samplers.samplers + choices = [x for x in sd_samplers.samplers if not x.name == 'Same as primary'] with gr.Row(elem_classes=['flex-break']): steps = gr.Slider(minimum=1, maximum=99, step=1, label="Sampling steps", elem_id=f"{tabname}_steps", value=20) sampler_index = gr.Dropdown(label='Sampling method', elem_id=f"{tabname}_sampling", choices=[x.name for x in choices], value='Default', type="index") @@ -260,7 +260,7 @@ def create_hires_inputs(tab): hr_resize_y = gr.Slider(minimum=0, maximum=4096, step=8, label="Height resize", value=0, elem_id=f"{tab}_hr_resize_y") with gr.Row(elem_id=f"{tab}_hires_fix_row2", variant="compact"): hr_force = gr.Checkbox(label='Force HiRes', value=False, elem_id=f"{tab}_hr_force") - hr_sampler_index = gr.Dropdown(label='Secondary sampler', elem_id=f"{tab}_sampling_alt", choices=[x.name for x in sd_samplers.samplers], value='Default', type="index") + hr_sampler_index = gr.Dropdown(label='Secondary sampler', elem_id=f"{tab}_sampling_alt", choices=[x.name for x in sd_samplers.samplers], value='Same as primary', type="index") with gr.Row(elem_id=f"{tab}_hires_row2"): hr_second_pass_steps = gr.Slider(minimum=0, maximum=99, step=1, label='HiRes steps', elem_id=f"{tab}_steps_alt", value=20) denoising_strength = gr.Slider(minimum=0.0, maximum=0.99, step=0.01, label='Strength', value=0.3, elem_id=f"{tab}_denoising_strength")