updated sd.cpp

This commit is contained in:
DarthAffe 2025-11-23 11:54:20 +01:00
parent b147a7a63e
commit 1fbe0de7c6
12 changed files with 138 additions and 41 deletions

View File

@ -31,37 +31,39 @@ extern "C" {
enum rng_type_t { enum rng_type_t {
STD_DEFAULT_RNG, STD_DEFAULT_RNG,
CUDA_RNG, CUDA_RNG,
CPU_RNG,
RNG_TYPE_COUNT RNG_TYPE_COUNT
}; };
enum sample_method_t { enum sample_method_t {
SAMPLE_METHOD_DEFAULT, EULER_SAMPLE_METHOD,
EULER, EULER_A_SAMPLE_METHOD,
HEUN, HEUN_SAMPLE_METHOD,
DPM2, DPM2_SAMPLE_METHOD,
DPMPP2S_A, DPMPP2S_A_SAMPLE_METHOD,
DPMPP2M, DPMPP2M_SAMPLE_METHOD,
DPMPP2Mv2, DPMPP2Mv2_SAMPLE_METHOD,
IPNDM, IPNDM_SAMPLE_METHOD,
IPNDM_V, IPNDM_V_SAMPLE_METHOD,
LCM, LCM_SAMPLE_METHOD,
DDIM_TRAILING, DDIM_TRAILING_SAMPLE_METHOD,
TCD, TCD_SAMPLE_METHOD,
EULER_A,
SAMPLE_METHOD_COUNT SAMPLE_METHOD_COUNT
}; };
enum scheduler_t { enum scheduler_t {
DEFAULT,
DISCRETE, DISCRETE_SCHEDULER,
KARRAS, KARRAS_SCHEDULER,
EXPONENTIAL, EXPONENTIAL_SCHEDULER,
AYS, AYS_SCHEDULER,
GITS, GITS_SCHEDULER,
SGM_UNIFORM, SGM_UNIFORM_SCHEDULER,
SIMPLE, SIMPLE_SCHEDULER,
SMOOTHSTEP, SMOOTHSTEP_SCHEDULER,
SCHEDULE_COUNT LCM_SCHEDULER,
SCHEDULER_COUNT
}; };
enum prediction_t { enum prediction_t {
@ -166,11 +168,13 @@ typedef struct {
const char* lora_model_dir; const char* lora_model_dir;
const char* embedding_dir; const char* embedding_dir;
const char* photo_maker_path; const char* photo_maker_path;
const char* tensor_type_rules;
bool vae_decode_only; bool vae_decode_only;
bool free_params_immediately; bool free_params_immediately;
int n_threads; int n_threads;
enum sd_type_t wtype; enum sd_type_t wtype;
enum rng_type_t rng_type; enum rng_type_t rng_type;
enum rng_type_t sampler_rng_type;
enum prediction_t prediction; enum prediction_t prediction;
enum lora_apply_mode_t lora_apply_mode; enum lora_apply_mode_t lora_apply_mode;
bool offload_params_to_cpu; bool offload_params_to_cpu;
@ -226,6 +230,13 @@ typedef struct {
float style_strength; float style_strength;
} sd_pm_params_t; // photo maker } sd_pm_params_t; // photo maker
typedef struct {
bool enabled;
float reuse_threshold;
float start_percent;
float end_percent;
} sd_easycache_params_t;
typedef struct { typedef struct {
const char* prompt; const char* prompt;
const char* negative_prompt; const char* negative_prompt;
@ -246,6 +257,7 @@ typedef struct {
float control_strength; float control_strength;
sd_pm_params_t pm_params; sd_pm_params_t pm_params;
sd_tiling_params_t vae_tiling_params; sd_tiling_params_t vae_tiling_params;
sd_easycache_params_t easycache;
} sd_img_gen_params_t; } sd_img_gen_params_t;
typedef struct { typedef struct {
@ -265,6 +277,7 @@ typedef struct {
int64_t seed; int64_t seed;
int video_frames; int video_frames;
float vace_strength; float vace_strength;
sd_easycache_params_t easycache;
} sd_vid_gen_params_t; } sd_vid_gen_params_t;
typedef struct sd_ctx_t sd_ctx_t; typedef struct sd_ctx_t sd_ctx_t;
@ -285,8 +298,8 @@ SD_API const char* sd_rng_type_name(enum rng_type_t rng_type);
SD_API enum rng_type_t str_to_rng_type(const char* str); SD_API enum rng_type_t str_to_rng_type(const char* str);
SD_API const char* sd_sample_method_name(enum sample_method_t sample_method); SD_API const char* sd_sample_method_name(enum sample_method_t sample_method);
SD_API enum sample_method_t str_to_sample_method(const char* str); SD_API enum sample_method_t str_to_sample_method(const char* str);
SD_API const char* sd_schedule_name(enum scheduler_t scheduler); SD_API const char* sd_scheduler_name(enum scheduler_t scheduler);
SD_API enum scheduler_t str_to_schedule(const char* str); SD_API enum scheduler_t str_to_scheduler(const char* str);
SD_API const char* sd_prediction_name(enum prediction_t prediction); SD_API const char* sd_prediction_name(enum prediction_t prediction);
SD_API enum prediction_t str_to_prediction(const char* str); SD_API enum prediction_t str_to_prediction(const char* str);
SD_API const char* sd_preview_name(enum preview_t preview); SD_API const char* sd_preview_name(enum preview_t preview);
@ -294,16 +307,21 @@ SD_API enum preview_t str_to_preview(const char* str);
SD_API const char* sd_lora_apply_mode_name(enum lora_apply_mode_t mode); SD_API const char* sd_lora_apply_mode_name(enum lora_apply_mode_t mode);
SD_API enum lora_apply_mode_t str_to_lora_apply_mode(const char* str); SD_API enum lora_apply_mode_t str_to_lora_apply_mode(const char* str);
SD_API void sd_easycache_params_init(sd_easycache_params_t* easycache_params);
SD_API void sd_ctx_params_init(sd_ctx_params_t* sd_ctx_params); SD_API void sd_ctx_params_init(sd_ctx_params_t* sd_ctx_params);
SD_API char* sd_ctx_params_to_str(const sd_ctx_params_t* sd_ctx_params); SD_API char* sd_ctx_params_to_str(const sd_ctx_params_t* sd_ctx_params);
SD_API sd_ctx_t* new_sd_ctx(const sd_ctx_params_t* sd_ctx_params); SD_API sd_ctx_t* new_sd_ctx(const sd_ctx_params_t* sd_ctx_params);
SD_API void free_sd_ctx(sd_ctx_t* sd_ctx); SD_API void free_sd_ctx(sd_ctx_t* sd_ctx);
SD_API enum sample_method_t sd_get_default_sample_method(const sd_ctx_t* sd_ctx);
SD_API void sd_sample_params_init(sd_sample_params_t* sample_params); SD_API void sd_sample_params_init(sd_sample_params_t* sample_params);
SD_API char* sd_sample_params_to_str(const sd_sample_params_t* sample_params); SD_API char* sd_sample_params_to_str(const sd_sample_params_t* sample_params);
SD_API enum sample_method_t sd_get_default_sample_method(const sd_ctx_t* sd_ctx);
SD_API enum scheduler_t sd_get_default_scheduler(const sd_ctx_t* sd_ctx);
SD_API void sd_img_gen_params_init(sd_img_gen_params_t* sd_img_gen_params); SD_API void sd_img_gen_params_init(sd_img_gen_params_t* sd_img_gen_params);
SD_API char* sd_img_gen_params_to_str(const sd_img_gen_params_t* sd_img_gen_params); SD_API char* sd_img_gen_params_to_str(const sd_img_gen_params_t* sd_img_gen_params);
SD_API sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_gen_params); SD_API sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_gen_params);
@ -342,4 +360,4 @@ SD_API bool preprocess_canny(sd_image_t image,
} }
#endif #endif
#endif // __STABLE_DIFFUSION_H__ #endif // __STABLE_DIFFUSION_H__

View File

@ -3,5 +3,6 @@
public enum RngType public enum RngType
{ {
Standard, Standard,
Cuda Cuda,
Cpu
} }

View File

@ -2,8 +2,8 @@
public enum Sampler public enum Sampler
{ {
Default,
Euler, Euler,
Euler_A,
Heun, Heun,
DPM2, DPM2,
DPMPP2SA, DPMPP2SA,
@ -14,5 +14,5 @@ public enum Sampler
LCM, LCM,
DDIM_Trailing, DDIM_Trailing,
TCD, TCD,
Euler_A, Default
} }

View File

@ -2,7 +2,6 @@
public enum Scheduler public enum Scheduler
{ {
Default,
Discrete, Discrete,
Karras, Karras,
Exponential, Exponential,
@ -10,5 +9,7 @@ public enum Scheduler
GITS, GITS,
SGM_Uniform, SGM_Uniform,
Simple, Simple,
Smoothstep Smoothstep,
LCM,
Default
} }

View File

@ -91,6 +91,8 @@ public sealed class DiffusionModelParameter
/// </summary> /// </summary>
public RngType RngType { get; set; } = RngType.Standard; public RngType RngType { get; set; } = RngType.Standard;
public RngType SamplerRngType { get; set; } = RngType.Standard;
public Prediction Prediction { get; set; } = Prediction.Default; public Prediction Prediction { get; set; } = Prediction.Default;
public LoraApplyMode LoraApplyMode { get; set; } = LoraApplyMode.Auto; public LoraApplyMode LoraApplyMode { get; set; } = LoraApplyMode.Auto;
@ -110,6 +112,8 @@ public sealed class DiffusionModelParameter
/// </summary> /// </summary>
public string StackedIdEmbeddingsDirectory { get; set; } = string.Empty; public string StackedIdEmbeddingsDirectory { get; set; } = string.Empty;
public string TensorTypeRules { get; set; } = string.Empty;
/// <summary> /// <summary>
/// path to full model /// path to full model
/// </summary> /// </summary>

View File

@ -0,0 +1,11 @@
namespace StableDiffusion.NET;
public sealed class EasyCache
{
public bool IsEnabled { get; set; }
public float ReuseThreshold { get; set; }
public float StartPercent { get; set; }
public float EndPercent { get; set; }
internal EasyCache() { }
}

View File

@ -59,6 +59,8 @@ public sealed class ImageGenerationParameter
public TilingParameter VaeTiling { get; } = new(); public TilingParameter VaeTiling { get; } = new();
public EasyCache EasyCache { get; } = new();
#endregion #endregion
public static ImageGenerationParameter Create() => new(); public static ImageGenerationParameter Create() => new();

View File

@ -38,6 +38,8 @@ public sealed class VideoGenerationParameter
public float VaceStrength { get; set; } public float VaceStrength { get; set; }
public EasyCache EasyCache { get; } = new();
#endregion #endregion
public static VideoGenerationParameter Create() => new(); public static VideoGenerationParameter Create() => new();

View File

@ -24,11 +24,13 @@ internal static unsafe class DiffusionModelParameterMarshaller
lora_model_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.LoraModelDirectory), lora_model_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.LoraModelDirectory),
embedding_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.EmbeddingsDirectory), embedding_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.EmbeddingsDirectory),
photo_maker_path = AnsiStringMarshaller.ConvertToUnmanaged(managed.StackedIdEmbeddingsDirectory), photo_maker_path = AnsiStringMarshaller.ConvertToUnmanaged(managed.StackedIdEmbeddingsDirectory),
tensor_type_rules = AnsiStringMarshaller.ConvertToUnmanaged(managed.TensorTypeRules),
vae_decode_only = (sbyte)(managed.VaeDecodeOnly ? 1 : 0), vae_decode_only = (sbyte)(managed.VaeDecodeOnly ? 1 : 0),
free_params_immediately = (sbyte)(managed.FreeParamsImmediately ? 1 : 0), free_params_immediately = (sbyte)(managed.FreeParamsImmediately ? 1 : 0),
n_threads = managed.ThreadCount, n_threads = managed.ThreadCount,
wtype = managed.Quantization, wtype = managed.Quantization,
rng_type = managed.RngType, rng_type = managed.RngType,
sampler_rng_type = managed.SamplerRngType,
prediction = managed.Prediction, prediction = managed.Prediction,
lora_apply_mode = managed.LoraApplyMode, lora_apply_mode = managed.LoraApplyMode,
offload_params_to_cpu = (sbyte)(managed.OffloadParamsToCPU ? 1 : 0), offload_params_to_cpu = (sbyte)(managed.OffloadParamsToCPU ? 1 : 0),
@ -64,11 +66,13 @@ internal static unsafe class DiffusionModelParameterMarshaller
LoraModelDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.lora_model_dir) ?? string.Empty, LoraModelDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.lora_model_dir) ?? string.Empty,
EmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.embedding_dir) ?? string.Empty, EmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.embedding_dir) ?? string.Empty,
StackedIdEmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.photo_maker_path) ?? string.Empty, StackedIdEmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.photo_maker_path) ?? string.Empty,
TensorTypeRules = AnsiStringMarshaller.ConvertToManaged(unmanaged.tensor_type_rules) ?? string.Empty,
VaeDecodeOnly = unmanaged.vae_decode_only == 1, VaeDecodeOnly = unmanaged.vae_decode_only == 1,
FreeParamsImmediately = unmanaged.free_params_immediately == 1, FreeParamsImmediately = unmanaged.free_params_immediately == 1,
ThreadCount = unmanaged.n_threads, ThreadCount = unmanaged.n_threads,
Quantization = unmanaged.wtype, Quantization = unmanaged.wtype,
RngType = unmanaged.rng_type, RngType = unmanaged.rng_type,
SamplerRngType = unmanaged.sampler_rng_type,
Prediction = unmanaged.prediction, Prediction = unmanaged.prediction,
LoraApplyMode = unmanaged.lora_apply_mode, LoraApplyMode = unmanaged.lora_apply_mode,
OffloadParamsToCPU = unmanaged.offload_params_to_cpu == 1, OffloadParamsToCPU = unmanaged.offload_params_to_cpu == 1,
@ -101,5 +105,6 @@ internal static unsafe class DiffusionModelParameterMarshaller
AnsiStringMarshaller.Free(unmanaged.lora_model_dir); AnsiStringMarshaller.Free(unmanaged.lora_model_dir);
AnsiStringMarshaller.Free(unmanaged.embedding_dir); AnsiStringMarshaller.Free(unmanaged.embedding_dir);
AnsiStringMarshaller.Free(unmanaged.photo_maker_path); AnsiStringMarshaller.Free(unmanaged.photo_maker_path);
AnsiStringMarshaller.Free(unmanaged.tensor_type_rules);
} }
} }

View File

@ -46,6 +46,13 @@ internal static class ImageGenerationParameterMarshaller
TargetOverlap = unmanaged.vae_tiling_params.target_overlap, TargetOverlap = unmanaged.vae_tiling_params.target_overlap,
RelSizeX = unmanaged.vae_tiling_params.rel_size_x, RelSizeX = unmanaged.vae_tiling_params.rel_size_x,
RelSizeY = unmanaged.vae_tiling_params.rel_size_y RelSizeY = unmanaged.vae_tiling_params.rel_size_y
},
EasyCache =
{
IsEnabled = unmanaged.easycache.enabled == 1,
ReuseThreshold = unmanaged.easycache.reuse_threshold,
StartPercent = unmanaged.easycache.start_percent,
EndPercent = unmanaged.easycache.end_percent
} }
}; };
@ -126,6 +133,14 @@ internal static class ImageGenerationParameterMarshaller
rel_size_y = managed.VaeTiling.RelSizeY rel_size_y = managed.VaeTiling.RelSizeY
}; };
Native.Types.sd_easycache_params_t easyCache = new()
{
enabled = (sbyte)(managed.EasyCache.IsEnabled ? 1 : 0),
reuse_threshold = managed.EasyCache.ReuseThreshold,
start_percent = managed.EasyCache.StartPercent,
end_percent = managed.EasyCache.EndPercent,
};
_imgGenParams = new Native.Types.sd_img_gen_params_t _imgGenParams = new Native.Types.sd_img_gen_params_t
{ {
prompt = AnsiStringMarshaller.ConvertToUnmanaged(managed.Prompt), prompt = AnsiStringMarshaller.ConvertToUnmanaged(managed.Prompt),
@ -145,7 +160,8 @@ internal static class ImageGenerationParameterMarshaller
control_image = _controlNetImage, control_image = _controlNetImage,
control_strength = managed.ControlNet.Strength, control_strength = managed.ControlNet.Strength,
pm_params = photoMakerParams, pm_params = photoMakerParams,
vae_tiling_params = tilingParams vae_tiling_params = tilingParams,
easycache = easyCache
}; };
} }

View File

@ -27,7 +27,14 @@ internal static class VideoGenerationParameterMarshaller
Strength = unmanaged.strength, Strength = unmanaged.strength,
Seed = unmanaged.seed, Seed = unmanaged.seed,
FrameCount = unmanaged.video_frames, FrameCount = unmanaged.video_frames,
VaceStrength = unmanaged.vace_strength VaceStrength = unmanaged.vace_strength,
EasyCache =
{
IsEnabled = unmanaged.easycache.enabled == 1,
ReuseThreshold = unmanaged.easycache.reuse_threshold,
StartPercent = unmanaged.easycache.start_percent,
EndPercent = unmanaged.easycache.end_percent
}
}; };
return parameter; return parameter;
@ -68,6 +75,14 @@ internal static class VideoGenerationParameterMarshaller
_initImage = managed.InitImage?.ToSdImage() ?? new Native.Types.sd_image_t(); _initImage = managed.InitImage?.ToSdImage() ?? new Native.Types.sd_image_t();
_endImage = managed.EndImage?.ToSdImage() ?? new Native.Types.sd_image_t(); _endImage = managed.EndImage?.ToSdImage() ?? new Native.Types.sd_image_t();
_controlFrames = managed.ControlFrames == null ? null : managed.ControlFrames.ToSdImage(); _controlFrames = managed.ControlFrames == null ? null : managed.ControlFrames.ToSdImage();
Native.Types.sd_easycache_params_t easyCache = new()
{
enabled = (sbyte)(managed.EasyCache.IsEnabled ? 1 : 0),
reuse_threshold = managed.EasyCache.ReuseThreshold,
start_percent = managed.EasyCache.StartPercent,
end_percent = managed.EasyCache.EndPercent,
};
_vidGenParams = new Native.Types.sd_vid_gen_params_t _vidGenParams = new Native.Types.sd_vid_gen_params_t
{ {
@ -87,6 +102,7 @@ internal static class VideoGenerationParameterMarshaller
seed = managed.Seed, seed = managed.Seed,
video_frames = managed.FrameCount, video_frames = managed.FrameCount,
vace_strength = managed.VaceStrength, vace_strength = managed.VaceStrength,
easycache = easyCache,
}; };
} }

View File

@ -25,6 +25,7 @@ using sd_type_t = Quantization;
using sd_vid_gen_params_t = VideoGenerationParameter; using sd_vid_gen_params_t = VideoGenerationParameter;
using lora_apply_mode_t = LoraApplyMode; using lora_apply_mode_t = LoraApplyMode;
using preview_t = Preview; using preview_t = Preview;
using sd_easycache_params_t = Native.Types.sd_easycache_params_t;
using size_t = nuint; using size_t = nuint;
using uint32_t = uint; using uint32_t = uint;
using uint8_t = byte; using uint8_t = byte;
@ -69,11 +70,13 @@ internal unsafe partial class Native
public byte* lora_model_dir; public byte* lora_model_dir;
public byte* embedding_dir; public byte* embedding_dir;
public byte* photo_maker_path; public byte* photo_maker_path;
public byte* tensor_type_rules;
public sbyte vae_decode_only; public sbyte vae_decode_only;
public sbyte free_params_immediately; public sbyte free_params_immediately;
public int n_threads; public int n_threads;
public sd_type_t wtype; public sd_type_t wtype;
public rng_type_t rng_type; public rng_type_t rng_type;
public rng_type_t sampler_rng_type;
public prediction_t prediction; public prediction_t prediction;
public lora_apply_mode_t lora_apply_mode; public lora_apply_mode_t lora_apply_mode;
public sbyte offload_params_to_cpu; public sbyte offload_params_to_cpu;
@ -131,6 +134,7 @@ internal unsafe partial class Native
public int shifted_timestep; public int shifted_timestep;
} }
[StructLayout(LayoutKind.Sequential)]
internal struct sd_pm_params_t internal struct sd_pm_params_t
{ {
public sd_image_t* id_images; public sd_image_t* id_images;
@ -139,6 +143,15 @@ internal unsafe partial class Native
public float style_strength; public float style_strength;
} }
[StructLayout(LayoutKind.Sequential)]
internal struct sd_easycache_params_t
{
public sbyte enabled;
public float reuse_threshold;
public float start_percent;
public float end_percent;
}
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
internal struct sd_img_gen_params_t internal struct sd_img_gen_params_t
{ {
@ -161,6 +174,7 @@ internal unsafe partial class Native
public float control_strength; public float control_strength;
public sd_pm_params_t pm_params; public sd_pm_params_t pm_params;
public sd_tiling_params_t vae_tiling_params; public sd_tiling_params_t vae_tiling_params;
public sd_easycache_params_t easycache;
} }
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
@ -182,6 +196,7 @@ internal unsafe partial class Native
public int64_t seed; public int64_t seed;
public int video_frames; public int video_frames;
public float vace_strength; public float vace_strength;
public sd_easycache_params_t easycache;
} }
internal struct sd_ctx_t; internal struct sd_ctx_t;
@ -237,12 +252,12 @@ internal unsafe partial class Native
[LibraryImport(LIB_NAME, EntryPoint = "str_to_sample_method")] [LibraryImport(LIB_NAME, EntryPoint = "str_to_sample_method")]
internal static partial sample_method_t str_to_sample_method([MarshalAs(UnmanagedType.LPStr)] string str); internal static partial sample_method_t str_to_sample_method([MarshalAs(UnmanagedType.LPStr)] string str);
[LibraryImport(LIB_NAME, EntryPoint = "sd_schedule_name")] [LibraryImport(LIB_NAME, EntryPoint = "sd_scheduler_name")]
[return: MarshalAs(UnmanagedType.LPStr)] [return: MarshalAs(UnmanagedType.LPStr)]
internal static partial string sd_schedule_name(scheduler_t schedule); internal static partial string sd_scheduler_name(scheduler_t schedule);
[LibraryImport(LIB_NAME, EntryPoint = "str_to_schedule")] [LibraryImport(LIB_NAME, EntryPoint = "str_to_scheduler")]
internal static partial scheduler_t str_to_schedule([MarshalAs(UnmanagedType.LPStr)] string str); internal static partial scheduler_t str_to_scheduler([MarshalAs(UnmanagedType.LPStr)] string str);
[LibraryImport(LIB_NAME, EntryPoint = "sd_prediction_name")] [LibraryImport(LIB_NAME, EntryPoint = "sd_prediction_name")]
[return: MarshalAs(UnmanagedType.LPStr)] [return: MarshalAs(UnmanagedType.LPStr)]
@ -265,6 +280,9 @@ internal unsafe partial class Native
[LibraryImport(LIB_NAME, EntryPoint = "str_to_lora_apply_mode")] [LibraryImport(LIB_NAME, EntryPoint = "str_to_lora_apply_mode")]
internal static partial lora_apply_mode_t str_to_lora_apply_mode([MarshalAs(UnmanagedType.LPStr)] string str); internal static partial lora_apply_mode_t str_to_lora_apply_mode([MarshalAs(UnmanagedType.LPStr)] string str);
[LibraryImport(LIB_NAME, EntryPoint = "sd_easycache_params_init")]
internal static partial void sd_easycache_params_init(ref sd_easycache_params_t easycache_params);
// //
[LibraryImport(LIB_NAME, EntryPoint = "sd_ctx_params_init")] [LibraryImport(LIB_NAME, EntryPoint = "sd_ctx_params_init")]
@ -282,9 +300,6 @@ internal unsafe partial class Native
[LibraryImport(LIB_NAME, EntryPoint = "free_sd_ctx")] [LibraryImport(LIB_NAME, EntryPoint = "free_sd_ctx")]
internal static partial void free_sd_ctx(sd_ctx_t* sd_ctx); internal static partial void free_sd_ctx(sd_ctx_t* sd_ctx);
[LibraryImport(LIB_NAME, EntryPoint = "sd_get_default_sample_method")]
internal static partial sample_method_t sd_get_default_sample_method(sd_ctx_t* sd_ctx);
// //
[LibraryImport(LIB_NAME, EntryPoint = "sd_sample_params_init")] [LibraryImport(LIB_NAME, EntryPoint = "sd_sample_params_init")]
@ -301,6 +316,12 @@ internal unsafe partial class Native
[return: MarshalAs(UnmanagedType.LPStr)] [return: MarshalAs(UnmanagedType.LPStr)]
internal static partial string sd_img_gen_params_to_str([MarshalUsing(typeof(ImageGenerationParameterMarshaller))] in sd_img_gen_params_t sd_img_gen_params); internal static partial string sd_img_gen_params_to_str([MarshalUsing(typeof(ImageGenerationParameterMarshaller))] in sd_img_gen_params_t sd_img_gen_params);
[LibraryImport(LIB_NAME, EntryPoint = "sd_get_default_sample_method")]
internal static partial sample_method_t sd_get_default_sample_method(sd_ctx_t* sd_ctx);
[LibraryImport(LIB_NAME, EntryPoint = "sd_get_default_scheduler")]
internal static partial scheduler_t sd_get_default_scheduler(sd_ctx_t* sd_ctx);
[LibraryImport(LIB_NAME, EntryPoint = "generate_image")] [LibraryImport(LIB_NAME, EntryPoint = "generate_image")]
internal static partial sd_image_t* generate_image(sd_ctx_t* sd_ctx, [MarshalUsing(typeof(ImageGenerationParameterMarshaller))] in sd_img_gen_params_t sd_img_gen_params); internal static partial sd_image_t* generate_image(sd_ctx_t* sd_ctx, [MarshalUsing(typeof(ImageGenerationParameterMarshaller))] in sd_img_gen_params_t sd_img_gen_params);