diff options
Diffstat (limited to 'src/mcp_sd15/pipeline_factory.py')
| -rw-r--r-- | src/mcp_sd15/pipeline_factory.py | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/mcp_sd15/pipeline_factory.py b/src/mcp_sd15/pipeline_factory.py index 12d95ba..b0525ea 100644 --- a/src/mcp_sd15/pipeline_factory.py +++ b/src/mcp_sd15/pipeline_factory.py @@ -64,7 +64,7 @@ class PipelineFactory: adapter_weights.append(item.weight) if adapter_names: pipeline.set_adapters(adapter_names, adapter_weights=adapter_weights) - pipeline.scheduler = self._scheduler(pipeline.scheduler, diffusers) + pipeline.scheduler = self._create_scheduler(pipeline.scheduler, diffusers) pipeline.set_progress_bar_config(disable=True) return pipeline.to("cuda") except ConfigError: @@ -130,14 +130,29 @@ class PipelineFactory: pipeline.set_progress_bar_config(disable=True) return pipeline.to("cuda") - def _scheduler(self, scheduler: Any, diffusers: Any) -> Any: + def _create_scheduler(self, current: Any, diffusers: Any) -> Any: + name = self.config.generation.scheduler + if name == "dpmpp_2m_karras": + return diffusers.DPMSolverMultistepScheduler.from_config( + current.config, + algorithm_type="dpmsolver++", + solver_order=2, + use_karras_sigmas=True, + ) + if name == "dpmpp_2m_sde_karras": + return diffusers.DPMSolverMultistepScheduler.from_config( + current.config, + algorithm_type="sde-dpmsolver++", + solver_order=2, + use_karras_sigmas=True, + ) classes = { - "dpmpp_2m": diffusers.DPMSolverMultistepScheduler, - "ddim": diffusers.DDIMScheduler, - "euler": diffusers.EulerDiscreteScheduler, "euler_a": diffusers.EulerAncestralDiscreteScheduler, + "ddim": diffusers.DDIMScheduler, + "lcm": diffusers.LCMScheduler, } - options = dict(scheduler.config) - if self.config.generation.scheduler == "dpmpp_2m": - options.update(algorithm_type="dpmsolver++", solver_order=2) - return classes[self.config.generation.scheduler].from_config(options) + try: + scheduler_class = classes[name] + except KeyError as exc: + raise ConfigError(f"unsupported scheduler: {name}") from exc + return scheduler_class.from_config(current.config) |
