From ae46f1419c115bb0a2194d315d4be006c36744be Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 4 Oct 2026 09:23:45 +0200 Subject: [PATCH] update schedulers init signature Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 6 ++++++ extensions-builtin/sdnq | 2 +- modules/res4lyf/deis_scheduler_alt.py | 2 ++ modules/res4lyf/gauss_legendre_scheduler.py | 2 ++ modules/res4lyf/linear_rk_scheduler.py | 2 ++ modules/res4lyf/lobatto_scheduler.py | 2 ++ modules/res4lyf/radau_iia_scheduler.py | 2 ++ modules/res4lyf/rungekutta_44s_scheduler.py | 2 ++ modules/res4lyf/rungekutta_57s_scheduler.py | 2 ++ modules/res4lyf/rungekutta_67s_scheduler.py | 2 ++ modules/res4lyf/specialized_rk_scheduler.py | 2 ++ modules/schedulers/scheduler_ersde.py | 2 ++ modules/schedulers/scheduler_unipc_flowmatch.py | 4 +++- requirements.txt | 2 +- 14 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71549e016..5ec9b24a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log for SD.Next +## Update for 2026-10-04 + +- sdnq: support double-quant, including `nvfp4` +- schedulers: update init signature for new configuration options +- rocm: remove incompatible env flags + ## Update for 2026-10-01 ### Highlights for 2026-10-01 diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index 9f5282b0f..cc2e5b900 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit 9f5282b0fb9669c48e45e730d79668e80a42a6c5 +Subproject commit cc2e5b9002d537d1431d9f94088f72d42ee47b0a diff --git a/modules/res4lyf/deis_scheduler_alt.py b/modules/res4lyf/deis_scheduler_alt.py index f2b00a925..27e2f91db 100644 --- a/modules/res4lyf/deis_scheduler_alt.py +++ b/modules/res4lyf/deis_scheduler_alt.py @@ -57,6 +57,8 @@ class RESDEISMultistepScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/gauss_legendre_scheduler.py b/modules/res4lyf/gauss_legendre_scheduler.py index 7486515be..c8aeee992 100644 --- a/modules/res4lyf/gauss_legendre_scheduler.py +++ b/modules/res4lyf/gauss_legendre_scheduler.py @@ -45,6 +45,8 @@ class GaussLegendreScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/linear_rk_scheduler.py b/modules/res4lyf/linear_rk_scheduler.py index 48fd17fb8..301facd6e 100644 --- a/modules/res4lyf/linear_rk_scheduler.py +++ b/modules/res4lyf/linear_rk_scheduler.py @@ -45,6 +45,8 @@ class LinearRKScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/lobatto_scheduler.py b/modules/res4lyf/lobatto_scheduler.py index b66e36a40..2c48c58a5 100644 --- a/modules/res4lyf/lobatto_scheduler.py +++ b/modules/res4lyf/lobatto_scheduler.py @@ -46,6 +46,8 @@ class LobattoScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/radau_iia_scheduler.py b/modules/res4lyf/radau_iia_scheduler.py index f7efe07d2..79fda699b 100644 --- a/modules/res4lyf/radau_iia_scheduler.py +++ b/modules/res4lyf/radau_iia_scheduler.py @@ -46,6 +46,8 @@ class RadauIIAScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/rungekutta_44s_scheduler.py b/modules/res4lyf/rungekutta_44s_scheduler.py index 20be7b564..1a4b7e608 100644 --- a/modules/res4lyf/rungekutta_44s_scheduler.py +++ b/modules/res4lyf/rungekutta_44s_scheduler.py @@ -45,6 +45,8 @@ class RungeKutta44Scheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/rungekutta_57s_scheduler.py b/modules/res4lyf/rungekutta_57s_scheduler.py index 97443bfd1..62707b0c6 100644 --- a/modules/res4lyf/rungekutta_57s_scheduler.py +++ b/modules/res4lyf/rungekutta_57s_scheduler.py @@ -43,6 +43,8 @@ class RungeKutta57Scheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/rungekutta_67s_scheduler.py b/modules/res4lyf/rungekutta_67s_scheduler.py index 861e13487..74fe74d15 100644 --- a/modules/res4lyf/rungekutta_67s_scheduler.py +++ b/modules/res4lyf/rungekutta_67s_scheduler.py @@ -44,6 +44,8 @@ class RungeKutta67Scheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/res4lyf/specialized_rk_scheduler.py b/modules/res4lyf/specialized_rk_scheduler.py index 75820e3cb..a645911b2 100644 --- a/modules/res4lyf/specialized_rk_scheduler.py +++ b/modules/res4lyf/specialized_rk_scheduler.py @@ -46,6 +46,8 @@ class SpecializedRKScheduler(SchedulerMixin, ConfigMixin): timestep_type: str = "discrete", rescale_betas_zero_snr: bool = False, final_sigmas_type: str = "zero", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if trained_betas is not None: self.betas = torch.tensor(trained_betas, dtype=torch.float32) diff --git a/modules/schedulers/scheduler_ersde.py b/modules/schedulers/scheduler_ersde.py index fc10afc1b..d47f4aba7 100644 --- a/modules/schedulers/scheduler_ersde.py +++ b/modules/schedulers/scheduler_ersde.py @@ -128,6 +128,8 @@ class ERSDEScheduler(SchedulerMixin, ConfigMixin): use_dynamic_shifting: bool = False, base_shift: float = 0.5, max_shift: float = 1.15, + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if solver_order not in (1, 2, 3): raise ValueError(f"solver_order must be 1, 2, or 3, got {solver_order}") diff --git a/modules/schedulers/scheduler_unipc_flowmatch.py b/modules/schedulers/scheduler_unipc_flowmatch.py index b25b57c2d..98949d955 100644 --- a/modules/schedulers/scheduler_unipc_flowmatch.py +++ b/modules/schedulers/scheduler_unipc_flowmatch.py @@ -96,7 +96,9 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin): rescale_betas_zero_snr: bool = False, timestep_spacing: str = "linspace", steps_offset: int = 0, - final_sigmas_type: Optional[str] = "zero", # "zero", "sigma_min" + final_sigmas_type: Optional[str] = "zero", # "zero", "sigma_min", + base_image_seq_len: int = 256, + max_image_seq_len: int = 4096, ): if solver_type not in ["bh1", "bh2"]: diff --git a/requirements.txt b/requirements.txt index eda4b287e..e33a9604a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ fastapi==0.124.4 uvicorn==0.52.4 rich==15.0.0 safetensors==0.8.0 -peft==0.21.1 +peft==0.21.2 httpx==0.28.1 requests==2.34.2 tqdm==4.70.1