From e3f06734d04bec232ddf234e9fa550375fde9638 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 3 Dec 2024 08:52:53 -0500 Subject: [PATCH] samplers add custom sigma Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + installer.py | 2 +- modules/processing_args.py | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 748ac6f04..51d61aa46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,7 @@ - **OpenVINO**: update to 2024.5.0 - **Sampler** improvements - Euler FlowMatch: add sigma methods (*karras/exponential/betas*) + - Euler FlowMatch: allow using timestep presets to set sigmas - DPM FlowMatch: update all and add sigma methods - BDIA-DDIM: *experimental* diff --git a/installer.py b/installer.py index c849ac5b6..e03512301 100644 --- a/installer.py +++ b/installer.py @@ -459,7 +459,7 @@ def check_python(supported_minors=[9, 10, 11, 12], reason=None): def check_diffusers(): if args.skip_all or args.skip_requirements: return - sha = 'c96bfa5c80eca798d555a79a491043c311d0f608' + sha = '63b631f38336f56755fb5cf15d9b0fb70bbf6323' # diffusers commit hash pkg = pkg_resources.working_set.by_key.get('diffusers', None) minor = int(pkg.version.split('.')[1] if pkg is not None else 0) cur = opts.get('diffusers_version', '') if minor > 0 else '' diff --git a/modules/processing_args.py b/modules/processing_args.py index 4ce552825..d73762d29 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -186,6 +186,21 @@ def set_pipeline_args(p, model, prompts: list, negative_prompts: list, prompts_2 shared.log.error(f'Sampler timesteps: {e}') else: shared.log.warning(f'Sampler: sampler={model.scheduler.__class__.__name__} timesteps not supported') + if 'sigmas' in possible: + sigmas = re.split(',| ', shared.opts.schedulers_timesteps) + sigmas = [float(x)/1000.0 for x in sigmas if x.isdigit()] + if len(sigmas) > 0: + if hasattr(model.scheduler, 'set_timesteps') and "sigmas" in set(inspect.signature(model.scheduler.set_timesteps).parameters.keys()): + try: + args['sigmas'] = sigmas + p.steps = len(sigmas) + p.timesteps = sigmas + steps = p.steps + shared.log.debug(f'Sampler: steps={len(sigmas)} sigmas={sigmas}') + except Exception as e: + shared.log.error(f'Sampler sigmas: {e}') + else: + shared.log.warning(f'Sampler: sampler={model.scheduler.__class__.__name__} sigmas not supported') if hasattr(model, 'scheduler') and hasattr(model.scheduler, 'noise_sampler_seed') and hasattr(model.scheduler, 'noise_sampler'): model.scheduler.noise_sampler = None # noise needs to be reset instead of using cached values