diff --git a/invokeai/backend/stable_diffusion/schedulers/schedulers.py b/invokeai/backend/stable_diffusion/schedulers/schedulers.py index c824d94dca..86eae84f85 100644 --- a/invokeai/backend/stable_diffusion/schedulers/schedulers.py +++ b/invokeai/backend/stable_diffusion/schedulers/schedulers.py @@ -14,6 +14,8 @@ from diffusers import ( LMSDiscreteScheduler, PNDMScheduler, UniPCMultistepScheduler, + EDMDPMSolverMultistepScheduler, + EDMEulerScheduler ) SCHEDULER_MAP = { @@ -32,7 +34,7 @@ SCHEDULER_MAP = { "kdpm_2_a": (KDPM2AncestralDiscreteScheduler, {}), "dpmpp_2s": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": False}), "dpmpp_2s_k": (DPMSolverSinglestepScheduler, {"use_karras_sigmas": True}), - "dpmpp_2m": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False}), + "dpmpp_2m": (DPMSolverMultistepScheduler, {"use_karras_sigmas": False, "euler_at_final": True}), "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++"}), @@ -40,4 +42,6 @@ SCHEDULER_MAP = { "dpmpp_sde_k": (DPMSolverSDEScheduler, {"use_karras_sigmas": True, "noise_sampler_seed": 0}), "unipc": (UniPCMultistepScheduler, {"cpu_only": True}), "lcm": (LCMScheduler, {}), + "edm_euler": (EDMEulerScheduler, {}), + "edm_dpmpp_2m": (EDMDPMSolverMultistepScheduler, {}), } diff --git a/invokeai/frontend/web/.eslintrc.js b/invokeai/frontend/web/.eslintrc.js index 18a6e3a9b9..981b1aef13 100644 --- a/invokeai/frontend/web/.eslintrc.js +++ b/invokeai/frontend/web/.eslintrc.js @@ -9,7 +9,7 @@ module.exports = { // https://github.com/qdanik/eslint-plugin-path 'path/no-relative-imports': ['error', { maxDepth: 0 }], // https://github.com/edvardchen/eslint-plugin-i18next/blob/HEAD/docs/rules/no-literal-string.md - 'i18next/no-literal-string': 'error', + 'i18next/no-literal-string': 'warn', }, overrides: [ /** diff --git a/invokeai/frontend/web/src/features/nodes/types/common.ts b/invokeai/frontend/web/src/features/nodes/types/common.ts index 06d5ecd5c7..b495845180 100644 --- a/invokeai/frontend/web/src/features/nodes/types/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/common.ts @@ -49,6 +49,8 @@ export const zSchedulerField = z.enum([ 'euler_a', 'kdpm_2_a', 'lcm', + 'edm_euler', + 'edm_dpmpp_2m', ]); export type SchedulerField = z.infer; // #endregion diff --git a/invokeai/frontend/web/src/features/parameters/types/constants.ts b/invokeai/frontend/web/src/features/parameters/types/constants.ts index 5bdfe9937b..88ab341169 100644 --- a/invokeai/frontend/web/src/features/parameters/types/constants.ts +++ b/invokeai/frontend/web/src/features/parameters/types/constants.ts @@ -75,4 +75,6 @@ export const SCHEDULER_OPTIONS: ComboboxOption[] = [ { value: 'euler_a', label: 'Euler Ancestral' }, { value: 'kdpm_2_a', label: 'KDPM 2 Ancestral' }, { value: 'lcm', label: 'LCM' }, + { value: 'edm_euler', label: 'EDM Euler' }, + { value: 'edm_dpmpp_2m', label: 'EDM DPM++ 2M' }, ].sort((a, b) => a.label.localeCompare(b.label));