diff --git a/configs/sdxl/scheduler/scheduler_config.json b/configs/sdxl/scheduler/scheduler_config.json index e5bc8421e..4b974f7ca 100644 --- a/configs/sdxl/scheduler/scheduler_config.json +++ b/configs/sdxl/scheduler/scheduler_config.json @@ -1,18 +1,19 @@ { - "_class_name": "EulerDiscreteScheduler", - "_diffusers_version": "0.19.0.dev0", + "_class_name": "EulerAncestralDiscreteScheduler", + "_diffusers_version": "0.35.1", "beta_end": 0.012, - "beta_schedule": "scaled_linear", + "beta_schedule": "linear", "beta_start": 0.00085, "clip_sample": false, "interpolation_type": "linear", "num_train_timesteps": 1000, "prediction_type": "epsilon", + "rescale_betas_zero_snr": false, "sample_max_value": 1.0, "set_alpha_to_one": false, "skip_prk_steps": true, "steps_offset": 1, - "timestep_spacing": "leading", + "timestep_spacing": "trailing", "trained_betas": null, "use_karras_sigmas": false } diff --git a/installer.py b/installer.py index d930851a5..4474d414e 100644 --- a/installer.py +++ b/installer.py @@ -1287,7 +1287,7 @@ def install_optional(): install('hf_xet', ignore=True, quiet=True) install('nvidia-ml-py', ignore=True, quiet=True) install('optimum-quanto==0.2.7', ignore=True, quiet=True) - install('pillow-jxl-plugin==1.3.4', ignore=True, quiet=True) + install('pillow-jxl-plugin==1.3.5', ignore=True, quiet=True) install('torchao==0.10.0', ignore=True, quiet=True) install('ultralytics==8.3.40', ignore=True, quiet=True) try: diff --git a/modules/sd_models.py b/modules/sd_models.py index 6696c7d23..e1844f495 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -567,18 +567,30 @@ def load_sdnq_model(checkpoint_info, pipeline, diffusers_load_config, op): return sd_model -def set_overrides(sd_model, checkpoint_info): +def set_overrides(sd_model, checkpoint_info, model_type): checkpoint_info_name = checkpoint_info.name.lower() + if "Kandinsky" in sd_model.__class__.__name__: + sd_model.scheduler.name = 'DDIM' + elif ( + checkpoint_info.path.lower().endswith('.safetensors') + and model_type.startswith("Stable Diffusion") and model_type != "Stable Diffusion 3" + ): # SDXL and SD 1.5 + scheduler_config = sd_model.scheduler.config + scheduler_config['beta_schedule'] = 'linear' + scheduler_config['timestep_spacing'] = 'trailing' + sd_model.scheduler = diffusers.EulerAncestralDiscreteScheduler.from_config(scheduler_config) + if 'bigaspv25' in checkpoint_info_name or ('flow' in checkpoint_info_name and 'flower' not in checkpoint_info_name): scheduler_config = sd_model.scheduler.config scheduler_config['prediction_type'] = 'flow_prediction' - scheduler_config['use_flow_sigmas'] = True scheduler_config['beta_schedule'] = 'linear' + scheduler_config['use_flow_sigmas'] = True sd_model.scheduler = diffusers.UniPCMultistepScheduler.from_config(scheduler_config) shared.log.info(f'Setting override: model="{checkpoint_info.name}" component=scheduler prediction="flow-prediction"') elif 'vpred' in checkpoint_info_name or 'v-pred' in checkpoint_info_name or 'v_pred' in checkpoint_info_name: scheduler_config = sd_model.scheduler.config scheduler_config['prediction_type'] = 'v_prediction' + scheduler_config['beta_schedule'] = 'scaled_linear' scheduler_config['rescale_betas_zero_snr'] = True sd_model.scheduler = diffusers.EulerDiscreteScheduler.from_config(scheduler_config) shared.log.info(f'Setting override: model="{checkpoint_info.name}" component=scheduler prediction="v-prediction" rescale=True') @@ -590,6 +602,7 @@ def set_overrides(sd_model, checkpoint_info): if 'v_pred' in keys: # NoobAI VPred models added empty v_pred and ztsnr keys scheduler_config = sd_model.scheduler.config scheduler_config['prediction_type'] = 'v_prediction' + scheduler_config['beta_schedule'] = 'scaled_linear' if 'ztsnr' in keys: scheduler_config['rescale_betas_zero_snr'] = True sd_model.scheduler = diffusers.EulerDiscreteScheduler.from_config(scheduler_config) @@ -713,12 +726,9 @@ def load_diffuser(checkpoint_info=None, op='model', revision=None): # pylint: di shared.log.error(f'Load {op}: name="{checkpoint_info.name if checkpoint_info is not None else None}" not loaded') return - set_overrides(sd_model, checkpoint_info) + set_overrides(sd_model, checkpoint_info, model_type) set_defaults(sd_model, checkpoint_info) - if "Kandinsky" in sd_model.__class__.__name__: # need a special case - sd_model.scheduler.name = 'DDIM' - if hasattr(sd_model, "unet") and model_type not in ['Stable Cascade']: # others calls load_diffuser again sd_unet.load_unet(sd_model, checkpoint_info.path) diff --git a/modules/ui_guidance.py b/modules/ui_guidance.py index 72ca8500d..b409749e9 100644 --- a/modules/ui_guidance.py +++ b/modules/ui_guidance.py @@ -15,7 +15,7 @@ def create_guidance_inputs(tab): guidance_btn = ui_components.ToolButton(value=ui_symbols.book, elem_id=f"{tab}_guider_docs") guidance_btn.click(fn=None, _js='getGuidanceDocs', inputs=[guidance_name], outputs=[]) with gr.Row(visible=shared.opts.model_modular_enable): - guidance_scale = gr.Slider(minimum=1.0, maximum=30.0, step=0.1, label='_Guidance scale', value=6.0, elem_id=f"{tab}_guidance_scale") + guidance_scale = gr.Slider(minimum=1.0, maximum=30.0, step=0.1, label='_Guidance scale', value=4.0, elem_id=f"{tab}_guidance_scale") guidance_rescale = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='_Guidance rescale', value=0.0, elem_id=f"{tab}_guidance_rescale") with gr.Row(visible=shared.opts.model_modular_enable): guidance_start = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label='_Guidance start', value=0.0, elem_id=f"{tab}_guidance_start")