From 55e810efa3c8c99a857afef939283aa0fccce5da Mon Sep 17 00:00:00 2001 From: Sergey Borisov Date: Mon, 29 Jul 2024 22:52:15 +0300 Subject: [PATCH] Add dpmpp_3 schedulers --- .../stable_diffusion/schedulers/schedulers.py | 20 +++++++++++++------ .../web/src/features/nodes/types/common.ts | 4 ++++ .../web/src/features/nodes/types/v2/common.ts | 4 ++++ .../features/parameters/types/constants.ts | 4 ++++ .../frontend/web/src/services/api/schema.ts | 10 +++++----- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/invokeai/backend/stable_diffusion/schedulers/schedulers.py b/invokeai/backend/stable_diffusion/schedulers/schedulers.py index 52e4145672..d5d445a79c 100644 --- a/invokeai/backend/stable_diffusion/schedulers/schedulers.py +++ b/invokeai/backend/stable_diffusion/schedulers/schedulers.py @@ -43,6 +43,10 @@ SCHEDULER_NAME_VALUES = Literal[ "dpmpp_2m_k", "dpmpp_2m_sde", "dpmpp_2m_sde_k", + "dpmpp_3s", + "dpmpp_3s_k", + "dpmpp_3m", + "dpmpp_3m_k", "dpmpp_sde", "dpmpp_sde_k", "unipc", @@ -68,12 +72,16 @@ SCHEDULER_MAP: dict[SCHEDULER_NAME_VALUES, tuple[Type[SchedulerMixin], dict[str, "kdpm_2_k": (KDPM2DiscreteScheduler, {"use_karras_sigmas": True}), "kdpm_2_a": (KDPM2AncestralDiscreteScheduler, {"use_karras_sigmas": False}), "kdpm_2_a_k": (KDPM2AncestralDiscreteScheduler, {"use_karras_sigmas": True}), - "dpmpp_2s": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": False}), - "dpmpp_2s_k": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": True}), - "dpmpp_2m": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False}), - "dpmpp_2m_k": (DPMSolverMultistepScheduler, {"use_karras_sigmas": True}), - "dpmpp_2m_sde": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False, "algorithm_type": "sde-dpmsolver++"}), - "dpmpp_2m_sde_k": (DPMSolverMultistepScheduler, {"use_karras_sigmas": True, "algorithm_type": "sde-dpmsolver++"}), + "dpmpp_2s": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": False, "solver_order": 2}), + "dpmpp_2s_k": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": True, "solver_order": 2}), + "dpmpp_2m": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False, "solver_order": 2}), + "dpmpp_2m_k": (DPMSolverMultistepScheduler, {"use_karras_sigmas": True, "solver_order": 2}), + "dpmpp_2m_sde": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False, "solver_order": 2, "algorithm_type": "sde-dpmsolver++"}), + "dpmpp_2m_sde_k": (DPMSolverMultistepScheduler, {"use_karras_sigmas": True, "solver_order": 2, "algorithm_type": "sde-dpmsolver++"}), + "dpmpp_3s": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": False, "solver_order": 3}), + "dpmpp_3s_k": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": True, "solver_order": 3}), + "dpmpp_3m": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False, "solver_order": 3}), + "dpmpp_3m_k": (DPMSolverMultistepScheduler, {"use_karras_sigmas": True, "solver_order": 3}), "dpmpp_sde": (DPMSolverSDEScheduler, {"use_karras_sigmas": False, "noise_sampler_seed": 0}), "dpmpp_sde_k": (DPMSolverSDEScheduler, {"use_karras_sigmas": True, "noise_sampler_seed": 0}), "unipc": (UniPCMultistepScheduler, {"use_karras_sigmas": False, "cpu_only": True}), diff --git a/invokeai/frontend/web/src/features/nodes/types/common.ts b/invokeai/frontend/web/src/features/nodes/types/common.ts index 8f28562387..76f769f8e7 100644 --- a/invokeai/frontend/web/src/features/nodes/types/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/common.ts @@ -32,6 +32,8 @@ export const zSchedulerField = z.enum([ 'ddpm', 'dpmpp_2s', 'dpmpp_2m', + 'dpmpp_3s', + 'dpmpp_3m', 'dpmpp_2m_sde', 'dpmpp_sde', 'heun', @@ -43,6 +45,8 @@ export const zSchedulerField = z.enum([ 'deis_k', 'dpmpp_2s_k', 'dpmpp_2m_k', + 'dpmpp_3s_k', + 'dpmpp_3m_k', 'dpmpp_2m_sde_k', 'dpmpp_sde_k', 'heun_k', diff --git a/invokeai/frontend/web/src/features/nodes/types/v2/common.ts b/invokeai/frontend/web/src/features/nodes/types/v2/common.ts index c67a0690d5..59da18f706 100644 --- a/invokeai/frontend/web/src/features/nodes/types/v2/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/v2/common.ts @@ -23,6 +23,8 @@ export const zSchedulerField = z.enum([ 'ddpm', 'dpmpp_2s', 'dpmpp_2m', + 'dpmpp_3s', + 'dpmpp_3m', 'dpmpp_2m_sde', 'dpmpp_sde', 'heun', @@ -34,6 +36,8 @@ export const zSchedulerField = z.enum([ 'deis_k', 'dpmpp_2s_k', 'dpmpp_2m_k', + 'dpmpp_3s_k', + 'dpmpp_3m_k', 'dpmpp_2m_sde_k', 'dpmpp_sde_k', 'heun_k', diff --git a/invokeai/frontend/web/src/features/parameters/types/constants.ts b/invokeai/frontend/web/src/features/parameters/types/constants.ts index 462ab050a8..45ffa76786 100644 --- a/invokeai/frontend/web/src/features/parameters/types/constants.ts +++ b/invokeai/frontend/web/src/features/parameters/types/constants.ts @@ -59,6 +59,8 @@ export const SCHEDULER_OPTIONS: ComboboxOption[] = [ { value: 'dpmpp_sde', label: 'DPM++ SDE' }, { value: 'dpmpp_2s', label: 'DPM++ 2S' }, { value: 'dpmpp_2m', label: 'DPM++ 2M' }, + { value: 'dpmpp_3s', label: 'DPM++ 3S' }, + { value: 'dpmpp_3m', label: 'DPM++ 3M' }, { value: 'dpmpp_2m_sde', label: 'DPM++ 2M SDE' }, { value: 'heun', label: 'Heun' }, { value: 'kdpm_2', label: 'KDPM 2' }, @@ -70,6 +72,8 @@ export const SCHEDULER_OPTIONS: ComboboxOption[] = [ { value: 'dpmpp_sde_k', label: 'DPM++ SDE Karras' }, { value: 'dpmpp_2s_k', label: 'DPM++ 2S Karras' }, { value: 'dpmpp_2m_k', label: 'DPM++ 2M Karras' }, + { value: 'dpmpp_3s_k', label: 'DPM++ 3S Karras' }, + { value: 'dpmpp_3m_k', label: 'DPM++ 3M Karras' }, { value: 'dpmpp_2m_sde_k', label: 'DPM++ 2M SDE Karras' }, { value: 'heun_k', label: 'Heun Karras' }, { value: 'kdpm_2_k', label: 'KDPM 2 Karras' }, diff --git a/invokeai/frontend/web/src/services/api/schema.ts b/invokeai/frontend/web/src/services/api/schema.ts index 0db435ab1c..de2f841f40 100644 --- a/invokeai/frontend/web/src/services/api/schema.ts +++ b/invokeai/frontend/web/src/services/api/schema.ts @@ -3553,7 +3553,7 @@ export type components = { * @default euler * @enum {string} */ - scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd"; + scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd" | "dpmpp_3s" | "dpmpp_3s_k" | "dpmpp_3m" | "dpmpp_3m_k"; /** * UNet * @description UNet (scheduler, LoRAs) @@ -8553,7 +8553,7 @@ export type components = { * Scheduler * @description Default scheduler for this model */ - scheduler?: ("ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd") | null; + scheduler?: ("ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd" | "dpmpp_3s" | "dpmpp_3s_k" | "dpmpp_3m" | "dpmpp_3m_k") | null; /** * Steps * @description Default number of steps for this model @@ -11467,7 +11467,7 @@ export type components = { * @default euler * @enum {string} */ - scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd"; + scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd" | "dpmpp_3s" | "dpmpp_3s_k" | "dpmpp_3m" | "dpmpp_3m_k"; /** * type * @default scheduler @@ -11483,7 +11483,7 @@ export type components = { * @description Scheduler to use during inference * @enum {string} */ - scheduler: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd"; + scheduler: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd" | "dpmpp_3s" | "dpmpp_3s_k" | "dpmpp_3m" | "dpmpp_3m_k"; /** * type * @default scheduler_output @@ -13261,7 +13261,7 @@ export type components = { * @default euler * @enum {string} */ - scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd"; + scheduler?: "ddim" | "ddpm" | "deis" | "deis_k" | "lms" | "lms_k" | "pndm" | "heun" | "heun_k" | "euler" | "euler_k" | "euler_a" | "kdpm_2" | "kdpm_2_k" | "kdpm_2_a" | "kdpm_2_a_k" | "dpmpp_2s" | "dpmpp_2s_k" | "dpmpp_2m" | "dpmpp_2m_k" | "dpmpp_2m_sde" | "dpmpp_2m_sde_k" | "dpmpp_sde" | "dpmpp_sde_k" | "unipc" | "unipc_k" | "lcm" | "tcd" | "dpmpp_3s" | "dpmpp_3s_k" | "dpmpp_3m" | "dpmpp_3m_k"; /** * UNet * @description UNet (scheduler, LoRAs)