diff --git a/CHANGELOG.md b/CHANGELOG.md index f7dfbf158..fc5c6ff26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2026-04-10 +## Update for 2026-04-12 - **Models** - [AiArtLab SDXS-1B](https://huggingface.co/AiArtLab/sdxs-1b) Simple Diffusion XS *(training still in progress)* @@ -54,6 +54,7 @@ - fix prompt weighted lists and internal wildcards - improve `path_to_repo` handling for custom paths - eliminate `api` auth security bypass + - multiple `schedulers` signature corrections ## Update for 2026-04-01 diff --git a/modules/res4lyf/langevin_dynamics_scheduler.py b/modules/res4lyf/langevin_dynamics_scheduler.py index af7213b52..2b2c311f8 100644 --- a/modules/res4lyf/langevin_dynamics_scheduler.py +++ b/modules/res4lyf/langevin_dynamics_scheduler.py @@ -141,7 +141,8 @@ class LangevinDynamicsScheduler(SchedulerMixin, ConfigMixin): sigmas = np.array(trajectory) # Force monotonicity to prevent negative h in step() - sigmas = np.sort(sigmas)[::-1] + # Reverse creates a negative-stride view; copy to keep torch.from_numpy compatible. + sigmas = np.sort(sigmas)[::-1].copy() sigmas[-1] = end_sigma if self.config.use_karras_sigmas: diff --git a/modules/sd_samplers_diffusers.py b/modules/sd_samplers_diffusers.py index 870a5dd49..632d584ec 100644 --- a/modules/sd_samplers_diffusers.py +++ b/modules/sd_samplers_diffusers.py @@ -11,6 +11,7 @@ from modules.sd_samplers_common import SamplerData, flow_models debug = os.environ.get('SD_SAMPLER_DEBUG', None) is not None debug_log = log.trace if debug else lambda *args, **kwargs: None scheduler_overrides = {} # set by sd_samplers.create_sampler() before constructor call +flow_exclude = ['PeRFlow'] # Diffusers schedulers try: @@ -91,9 +92,6 @@ try: RungeKutta57Scheduler, RungeKutta67Scheduler, SpecializedRKScheduler, - # RESMultistepSDEScheduler, - # BongTangentScheduler, - # SimpleExponentialScheduler, ) except Exception as e: log.error(f'Sampler import: version={diffusers.__version__} error: {e}') @@ -169,6 +167,7 @@ config.update({ 'KDPM2': { 'use_karras_sigmas': False, 'use_exponential_sigmas': False, 'use_beta_sigmas': False, 'steps_offset': 0, 'timestep_spacing': 'linspace' }, 'KDPM2 a': { 'use_karras_sigmas': False, 'use_exponential_sigmas': False, 'use_beta_sigmas': False, 'steps_offset': 0, 'timestep_spacing': 'linspace' }, 'CMSI': { }, + 'LCM': { }, 'CogX DDIM': { 'beta_schedule': "scaled_linear", 'beta_start': 0.00085, 'beta_end': 0.012, 'set_alpha_to_one': True, 'rescale_betas_zero_snr': False }, 'DDIM Parallel': {}, 'DDPM Parallel': {}, @@ -221,6 +220,7 @@ config.update({ 'Lobatto 4': { 'variant': 'lobatto_iiia_4s', **config['Res4Lyf'] }, 'Radau IIA 2': { 'variant': 'radau_iia_2s', **config['Res4Lyf'] }, 'Radau IIA 3': { 'variant': 'radau_iia_3s', **config['Res4Lyf'] }, + 'Radau IIA 4': { 'variant': 'radau_iia_5s', **config['Res4Lyf'] }, 'Gauss-Legendre 2S': { 'variant': 'gauss-legendre_2s', **config['Res4Lyf'] }, 'Gauss-Legendre 3S': { 'variant': 'gauss-legendre_3s', **config['Res4Lyf'] }, 'Gauss-Legendre 4S': { 'variant': 'gauss-legendre_4s', **config['Res4Lyf'] }, @@ -249,7 +249,7 @@ samplers_data_diffusers = [ SamplerData('DPM++ SDE', lambda model: DiffusionSampler('DPM++ SDE', DPMSolverMultistepScheduler, model), [], {}), SamplerData('DPM++ 2M SDE', lambda model: DiffusionSampler('DPM++ 2M SDE', DPMSolverMultistepScheduler, model), [], {}), SamplerData('DPM++ 2M EDM', lambda model: DiffusionSampler('DPM++ 2M EDM', EDMDPMSolverMultistepScheduler, model), [], {}), - SamplerData('DPM++ Cosine', lambda model: DiffusionSampler('DPM++ 2M EDM', CosineDPMSolverMultistepScheduler, model), [], {}), + SamplerData('DPM++ Cosine', lambda model: DiffusionSampler('DPM++ Cosine', CosineDPMSolverMultistepScheduler, model), [], {}), SamplerData('DPM SDE', lambda model: DiffusionSampler('DPM SDE', DPMSolverSDEScheduler, model), [], {}), SamplerData('DPM++ Inverse', lambda model: DiffusionSampler('DPM++ Inverse', DPMSolverMultistepInverseScheduler, model), [], {}), @@ -284,13 +284,14 @@ samplers_data_diffusers = [ SamplerData('CMSI', lambda model: DiffusionSampler('CMSI', CMStochasticIterativeScheduler, model), [], {}), SamplerData('VDM Solver', lambda model: DiffusionSampler('VDM Solver', VDMScheduler, model), [], {}), - SamplerData('BDIA DDIM', lambda model: DiffusionSampler('BDIA DDIM g=0', BDIA_DDIMScheduler, model), [], {}), + SamplerData('BDIA DDIM', lambda model: DiffusionSampler('BDIA DDIM', BDIA_DDIMScheduler, model), [], {}), SamplerData('ER-SDE', lambda model: DiffusionSampler('ER-SDE', ERSDEScheduler, model), [], {}), SamplerData('ER-SDE 2M', lambda model: DiffusionSampler('ER-SDE 2M', ERSDEScheduler, model), [], {}), SamplerData('ER-SDE 3M', lambda model: DiffusionSampler('ER-SDE 3M', ERSDEScheduler, model), [], {}), SamplerData('ER-SDE FlowMatch', lambda model: DiffusionSampler('ER-SDE FlowMatch', ERSDEScheduler, model), [], {}), SamplerData('ER-SDE 2M FlowMatch', lambda model: DiffusionSampler('ER-SDE 2M FlowMatch', ERSDEScheduler, model), [], {}), SamplerData('ER-SDE 3M FlowMatch', lambda model: DiffusionSampler('ER-SDE 3M FlowMatch', ERSDEScheduler, model), [], {}), + SamplerData('BDIA DDIM', lambda model: DiffusionSampler('BDIA DDIM', BDIA_DDIMScheduler, model), [], {}), SamplerData('LCM', lambda model: DiffusionSampler('LCM', LCMScheduler, model), [], {}), SamplerData('LCM FlowMatch', lambda model: DiffusionSampler('LCM FlowMatch', FlowMatchLCMScheduler, model), [], {}), SamplerData('TCD', lambda model: DiffusionSampler('TCD', TCDScheduler, model), [], {}), @@ -322,7 +323,7 @@ samplers_data_diffusers = [ SamplerData('RES-Multistep 3M', lambda model: DiffusionSampler('RES-Multistep 3M', RESMultistepScheduler, model), [], {}), SamplerData('RES-SDE 2S', lambda model: DiffusionSampler('RES-SDE 2S', RESSinglestepSDEScheduler, model), [], {}), SamplerData('RES-SDE 3S', lambda model: DiffusionSampler('RES-SDE 3S', RESSinglestepSDEScheduler, model), [], {}), - SamplerData('DEIS-Multistep', lambda model: DiffusionSampler('DEIS Multistep', RESDEISMultistepScheduler, model), [], {}), + SamplerData('DEIS-Multistep', lambda model: DiffusionSampler('DEIS-Multistep', RESDEISMultistepScheduler, model), [], {}), SamplerData('DEIS-Unified 1S', lambda model: DiffusionSampler('DEIS-Unified 1S', RESUnifiedScheduler, model), [], {}), SamplerData('DEIS-Unified 2M', lambda model: DiffusionSampler('DEIS-Unified 2M', RESUnifiedScheduler, model), [], {}), SamplerData('Sigmoid Sigma', lambda model: DiffusionSampler('Sigmoid Sigma', CommonSigmaScheduler, model), [], {}), @@ -345,8 +346,8 @@ samplers_data_diffusers = [ SamplerData('Lobatto 3', lambda model: DiffusionSampler('Lobatto 3', LobattoScheduler, model), [], {}), SamplerData('Lobatto 4', lambda model: DiffusionSampler('Lobatto 4', LobattoScheduler, model), [], {}), SamplerData('Radau IIA 2', lambda model: DiffusionSampler('Radau IIA 2', RadauIIAScheduler, model), [], {}), - SamplerData('Radau IIA 3', lambda model: DiffusionSampler('Radau IIA 2', RadauIIAScheduler, model), [], {}), - SamplerData('Radau IIA 4', lambda model: DiffusionSampler('Radau IIA 2', RadauIIAScheduler, model), [], {}), + SamplerData('Radau IIA 3', lambda model: DiffusionSampler('Radau IIA 3', RadauIIAScheduler, model), [], {}), + SamplerData('Radau IIA 4', lambda model: DiffusionSampler('Radau IIA 4', RadauIIAScheduler, model), [], {}), SamplerData('Gauss-Legendre 2S', lambda model: DiffusionSampler('Gauss-Legendre 2S', GaussLegendreScheduler, model), [], {}), SamplerData('Gauss-Legendre 3S', lambda model: DiffusionSampler('Gauss-Legendre 3S', GaussLegendreScheduler, model), [], {}), SamplerData('Gauss-Legendre 4S', lambda model: DiffusionSampler('Gauss-Legendre 4S', GaussLegendreScheduler, model), [], {}), @@ -422,8 +423,8 @@ class DiffusionSampler: timesteps = [int(x) for x in timesteps if x.isdigit()] sched_sigma = get_override('schedulers_sigma') if len(timesteps) == 0: - if 'sigma_schedule' in self.config: - self.config['sigma_schedule'] = sched_sigma if sched_sigma != 'default' else None + if 'sigma_schedule' in self.config and sched_sigma != 'default': + self.config['sigma_schedule'] = sched_sigma if sched_sigma == 'default' and shared.sd_model_type in flow_models and 'use_flow_sigmas' in self.config: self.config['use_flow_sigmas'] = True elif sched_sigma == 'betas' and 'use_beta_sigmas' in self.config: @@ -480,7 +481,7 @@ class DiffusionSampler: del self.config['beta_end'] del self.config['beta_schedule'] del self.config['prediction_type'] - if 'prediction_type' in self.config and 'Flow' in name: + if ('prediction_type' in self.config) and ('Flow' in name) and (name not in flow_exclude): self.config['prediction_type'] = 'flow_prediction' if 'SGM' in name: self.config['timestep_spacing'] = 'trailing' diff --git a/wiki b/wiki index cbbbfc73a..ec043ac17 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit cbbbfc73af2366650cdf8cc71fabbf3a508b607b +Subproject commit ec043ac173a1739c6cee8a2fbd3cde16c2acc326