using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using StabilityMatrix.Core.Models.Api.Comfy; namespace StabilityMatrix.Core.Helper; public static class GenerationParametersConverter { private static readonly ImmutableDictionary< string, ComfySamplerScheduler > ParamsToSamplerSchedulers = new Dictionary { ["DPM++ 2M Karras"] = (ComfySampler.Dpmpp2M, ComfyScheduler.Karras), ["DPM++ SDE Karras"] = (ComfySampler.DpmppSde, ComfyScheduler.Karras), ["DPM++ 2M SDE Exponential"] = (ComfySampler.Dpmpp2MSde, ComfyScheduler.Exponential), ["DPM++ 2M SDE Karras"] = (ComfySampler.Dpmpp2MSde, ComfyScheduler.Karras), ["Euler a"] = (ComfySampler.EulerAncestral, ComfyScheduler.Normal), ["Euler"] = (ComfySampler.Euler, ComfyScheduler.Normal), ["LMS"] = (ComfySampler.LMS, ComfyScheduler.Normal), ["Heun"] = (ComfySampler.Heun, ComfyScheduler.Normal), ["DPM2"] = (ComfySampler.Dpm2, ComfyScheduler.Normal), ["DPM2 Karras"] = (ComfySampler.Dpm2, ComfyScheduler.Karras), ["DPM2 a"] = (ComfySampler.Dpm2Ancestral, ComfyScheduler.Normal), ["DPM2 a Karras"] = (ComfySampler.Dpm2Ancestral, ComfyScheduler.Karras), ["DPM++ 2S a"] = (ComfySampler.Dpmpp2SAncestral, ComfyScheduler.Normal), ["DPM++ 2S a Karras"] = (ComfySampler.Dpmpp2SAncestral, ComfyScheduler.Karras), ["DPM++ 2M"] = (ComfySampler.Dpmpp2M, ComfyScheduler.Normal), ["DPM++ SDE"] = (ComfySampler.DpmppSde, ComfyScheduler.Normal), ["DPM++ 2M SDE"] = (ComfySampler.Dpmpp2MSde, ComfyScheduler.Normal), ["DPM++ 3M SDE"] = (ComfySampler.Dpmpp3MSde, ComfyScheduler.Normal), ["DPM++ 3M SDE Karras"] = (ComfySampler.Dpmpp3MSde, ComfyScheduler.Karras), ["DPM++ 3M SDE Exponential"] = (ComfySampler.Dpmpp3MSde, ComfyScheduler.Exponential), ["DPM fast"] = (ComfySampler.DpmFast, ComfyScheduler.Normal), ["DPM adaptive"] = (ComfySampler.DpmAdaptive, ComfyScheduler.Normal), ["LMS Karras"] = (ComfySampler.LMS, ComfyScheduler.Karras), ["DDIM"] = (ComfySampler.DDIM, ComfyScheduler.Normal), ["UniPC"] = (ComfySampler.UniPC, ComfyScheduler.Normal), }.ToImmutableDictionary(); private static readonly ImmutableDictionary< ComfySamplerScheduler, string > SamplerSchedulersToParams = ParamsToSamplerSchedulers.ToImmutableDictionary( x => x.Value, x => x.Key ); /// /// Converts a parameters-type string to a . /// public static bool TryGetSamplerScheduler( string parameters, out ComfySamplerScheduler samplerScheduler ) { return ParamsToSamplerSchedulers.TryGetValue(parameters, out samplerScheduler); } /// /// Converts a to a parameters-type string. /// public static bool TryGetParameters( ComfySamplerScheduler samplerScheduler, [NotNullWhen(true)] out string? parameters ) { return SamplerSchedulersToParams.TryGetValue(samplerScheduler, out parameters); } }