Skip to content

Commit 06b97ba

Browse files
authored
Merge pull request #64 from DarthAffe/sdcppUpdate
updated sd.cpp
2 parents b147a7a + 1fbe0de commit 06b97ba

File tree

12 files changed

+138
-41
lines changed

12 files changed

+138
-41
lines changed

Header/stable-diffusion.h

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,39 @@ extern "C" {
3131
enum rng_type_t {
3232
STD_DEFAULT_RNG,
3333
CUDA_RNG,
34+
CPU_RNG,
3435
RNG_TYPE_COUNT
3536
};
3637

3738
enum sample_method_t {
38-
SAMPLE_METHOD_DEFAULT,
39-
EULER,
40-
HEUN,
41-
DPM2,
42-
DPMPP2S_A,
43-
DPMPP2M,
44-
DPMPP2Mv2,
45-
IPNDM,
46-
IPNDM_V,
47-
LCM,
48-
DDIM_TRAILING,
49-
TCD,
50-
EULER_A,
39+
EULER_SAMPLE_METHOD,
40+
EULER_A_SAMPLE_METHOD,
41+
HEUN_SAMPLE_METHOD,
42+
DPM2_SAMPLE_METHOD,
43+
DPMPP2S_A_SAMPLE_METHOD,
44+
DPMPP2M_SAMPLE_METHOD,
45+
DPMPP2Mv2_SAMPLE_METHOD,
46+
IPNDM_SAMPLE_METHOD,
47+
IPNDM_V_SAMPLE_METHOD,
48+
LCM_SAMPLE_METHOD,
49+
DDIM_TRAILING_SAMPLE_METHOD,
50+
TCD_SAMPLE_METHOD,
51+
5152
SAMPLE_METHOD_COUNT
5253
};
5354

5455
enum scheduler_t {
55-
DEFAULT,
56-
DISCRETE,
57-
KARRAS,
58-
EXPONENTIAL,
59-
AYS,
60-
GITS,
61-
SGM_UNIFORM,
62-
SIMPLE,
63-
SMOOTHSTEP,
64-
SCHEDULE_COUNT
56+
57+
DISCRETE_SCHEDULER,
58+
KARRAS_SCHEDULER,
59+
EXPONENTIAL_SCHEDULER,
60+
AYS_SCHEDULER,
61+
GITS_SCHEDULER,
62+
SGM_UNIFORM_SCHEDULER,
63+
SIMPLE_SCHEDULER,
64+
SMOOTHSTEP_SCHEDULER,
65+
LCM_SCHEDULER,
66+
SCHEDULER_COUNT
6567
};
6668

6769
enum prediction_t {
@@ -166,11 +168,13 @@ typedef struct {
166168
const char* lora_model_dir;
167169
const char* embedding_dir;
168170
const char* photo_maker_path;
171+
const char* tensor_type_rules;
169172
bool vae_decode_only;
170173
bool free_params_immediately;
171174
int n_threads;
172175
enum sd_type_t wtype;
173176
enum rng_type_t rng_type;
177+
enum rng_type_t sampler_rng_type;
174178
enum prediction_t prediction;
175179
enum lora_apply_mode_t lora_apply_mode;
176180
bool offload_params_to_cpu;
@@ -226,6 +230,13 @@ typedef struct {
226230
float style_strength;
227231
} sd_pm_params_t; // photo maker
228232

233+
typedef struct {
234+
bool enabled;
235+
float reuse_threshold;
236+
float start_percent;
237+
float end_percent;
238+
} sd_easycache_params_t;
239+
229240
typedef struct {
230241
const char* prompt;
231242
const char* negative_prompt;
@@ -246,6 +257,7 @@ typedef struct {
246257
float control_strength;
247258
sd_pm_params_t pm_params;
248259
sd_tiling_params_t vae_tiling_params;
260+
sd_easycache_params_t easycache;
249261
} sd_img_gen_params_t;
250262

251263
typedef struct {
@@ -265,6 +277,7 @@ typedef struct {
265277
int64_t seed;
266278
int video_frames;
267279
float vace_strength;
280+
sd_easycache_params_t easycache;
268281
} sd_vid_gen_params_t;
269282

270283
typedef struct sd_ctx_t sd_ctx_t;
@@ -285,25 +298,30 @@ SD_API const char* sd_rng_type_name(enum rng_type_t rng_type);
285298
SD_API enum rng_type_t str_to_rng_type(const char* str);
286299
SD_API const char* sd_sample_method_name(enum sample_method_t sample_method);
287300
SD_API enum sample_method_t str_to_sample_method(const char* str);
288-
SD_API const char* sd_schedule_name(enum scheduler_t scheduler);
289-
SD_API enum scheduler_t str_to_schedule(const char* str);
301+
SD_API const char* sd_scheduler_name(enum scheduler_t scheduler);
302+
SD_API enum scheduler_t str_to_scheduler(const char* str);
290303
SD_API const char* sd_prediction_name(enum prediction_t prediction);
291304
SD_API enum prediction_t str_to_prediction(const char* str);
292305
SD_API const char* sd_preview_name(enum preview_t preview);
293306
SD_API enum preview_t str_to_preview(const char* str);
294307
SD_API const char* sd_lora_apply_mode_name(enum lora_apply_mode_t mode);
295308
SD_API enum lora_apply_mode_t str_to_lora_apply_mode(const char* str);
296309

310+
SD_API void sd_easycache_params_init(sd_easycache_params_t* easycache_params);
311+
297312
SD_API void sd_ctx_params_init(sd_ctx_params_t* sd_ctx_params);
298313
SD_API char* sd_ctx_params_to_str(const sd_ctx_params_t* sd_ctx_params);
299314

300315
SD_API sd_ctx_t* new_sd_ctx(const sd_ctx_params_t* sd_ctx_params);
301316
SD_API void free_sd_ctx(sd_ctx_t* sd_ctx);
302-
SD_API enum sample_method_t sd_get_default_sample_method(const sd_ctx_t* sd_ctx);
317+
303318

304319
SD_API void sd_sample_params_init(sd_sample_params_t* sample_params);
305320
SD_API char* sd_sample_params_to_str(const sd_sample_params_t* sample_params);
306321

322+
SD_API enum sample_method_t sd_get_default_sample_method(const sd_ctx_t* sd_ctx);
323+
SD_API enum scheduler_t sd_get_default_scheduler(const sd_ctx_t* sd_ctx);
324+
307325
SD_API void sd_img_gen_params_init(sd_img_gen_params_t* sd_img_gen_params);
308326
SD_API char* sd_img_gen_params_to_str(const sd_img_gen_params_t* sd_img_gen_params);
309327
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,
342360
}
343361
#endif
344362

345-
#endif // __STABLE_DIFFUSION_H__
363+
#endif // __STABLE_DIFFUSION_H__

StableDiffusion.NET/Enums/RngType.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum RngType
44
{
55
Standard,
6-
Cuda
6+
Cuda,
7+
Cpu
78
}

StableDiffusion.NET/Enums/Sampler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
public enum Sampler
44
{
5-
Default,
65
Euler,
6+
Euler_A,
77
Heun,
88
DPM2,
99
DPMPP2SA,
@@ -14,5 +14,5 @@ public enum Sampler
1414
LCM,
1515
DDIM_Trailing,
1616
TCD,
17-
Euler_A,
17+
Default
1818
}

StableDiffusion.NET/Enums/Schedule.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
public enum Scheduler
44
{
5-
Default,
65
Discrete,
76
Karras,
87
Exponential,
98
AYS,
109
GITS,
1110
SGM_Uniform,
1211
Simple,
13-
Smoothstep
12+
Smoothstep,
13+
LCM,
14+
Default
1415
}

StableDiffusion.NET/Models/Parameter/DiffusionModelParameter.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ public sealed class DiffusionModelParameter
9191
/// </summary>
9292
public RngType RngType { get; set; } = RngType.Standard;
9393

94+
public RngType SamplerRngType { get; set; } = RngType.Standard;
95+
9496
public Prediction Prediction { get; set; } = Prediction.Default;
9597

9698
public LoraApplyMode LoraApplyMode { get; set; } = LoraApplyMode.Auto;
@@ -110,6 +112,8 @@ public sealed class DiffusionModelParameter
110112
/// </summary>
111113
public string StackedIdEmbeddingsDirectory { get; set; } = string.Empty;
112114

115+
public string TensorTypeRules { get; set; } = string.Empty;
116+
113117
/// <summary>
114118
/// path to full model
115119
/// </summary>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace StableDiffusion.NET;
2+
3+
public sealed class EasyCache
4+
{
5+
public bool IsEnabled { get; set; }
6+
public float ReuseThreshold { get; set; }
7+
public float StartPercent { get; set; }
8+
public float EndPercent { get; set; }
9+
10+
internal EasyCache() { }
11+
}

StableDiffusion.NET/Models/Parameter/ImageGenerationParameter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public sealed class ImageGenerationParameter
5959

6060
public TilingParameter VaeTiling { get; } = new();
6161

62+
public EasyCache EasyCache { get; } = new();
63+
6264
#endregion
6365

6466
public static ImageGenerationParameter Create() => new();

StableDiffusion.NET/Models/Parameter/VideoGenerationParameter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public sealed class VideoGenerationParameter
3838

3939
public float VaceStrength { get; set; }
4040

41+
public EasyCache EasyCache { get; } = new();
42+
4143
#endregion
4244

4345
public static VideoGenerationParameter Create() => new();

StableDiffusion.NET/Native/Marshaller/DiffusionModelParameterMarshaller.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ public static Native.Types.sd_ctx_params_t ConvertToUnmanaged(DiffusionModelPara
2424
lora_model_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.LoraModelDirectory),
2525
embedding_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.EmbeddingsDirectory),
2626
photo_maker_path = AnsiStringMarshaller.ConvertToUnmanaged(managed.StackedIdEmbeddingsDirectory),
27+
tensor_type_rules = AnsiStringMarshaller.ConvertToUnmanaged(managed.TensorTypeRules),
2728
vae_decode_only = (sbyte)(managed.VaeDecodeOnly ? 1 : 0),
2829
free_params_immediately = (sbyte)(managed.FreeParamsImmediately ? 1 : 0),
2930
n_threads = managed.ThreadCount,
3031
wtype = managed.Quantization,
3132
rng_type = managed.RngType,
33+
sampler_rng_type = managed.SamplerRngType,
3234
prediction = managed.Prediction,
3335
lora_apply_mode = managed.LoraApplyMode,
3436
offload_params_to_cpu = (sbyte)(managed.OffloadParamsToCPU ? 1 : 0),
@@ -64,11 +66,13 @@ public static DiffusionModelParameter ConvertToManaged(Native.Types.sd_ctx_param
6466
LoraModelDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.lora_model_dir) ?? string.Empty,
6567
EmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.embedding_dir) ?? string.Empty,
6668
StackedIdEmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.photo_maker_path) ?? string.Empty,
69+
TensorTypeRules = AnsiStringMarshaller.ConvertToManaged(unmanaged.tensor_type_rules) ?? string.Empty,
6770
VaeDecodeOnly = unmanaged.vae_decode_only == 1,
6871
FreeParamsImmediately = unmanaged.free_params_immediately == 1,
6972
ThreadCount = unmanaged.n_threads,
7073
Quantization = unmanaged.wtype,
7174
RngType = unmanaged.rng_type,
75+
SamplerRngType = unmanaged.sampler_rng_type,
7276
Prediction = unmanaged.prediction,
7377
LoraApplyMode = unmanaged.lora_apply_mode,
7478
OffloadParamsToCPU = unmanaged.offload_params_to_cpu == 1,
@@ -101,5 +105,6 @@ public static void Free(Native.Types.sd_ctx_params_t unmanaged)
101105
AnsiStringMarshaller.Free(unmanaged.lora_model_dir);
102106
AnsiStringMarshaller.Free(unmanaged.embedding_dir);
103107
AnsiStringMarshaller.Free(unmanaged.photo_maker_path);
108+
AnsiStringMarshaller.Free(unmanaged.tensor_type_rules);
104109
}
105110
}

StableDiffusion.NET/Native/Marshaller/ImageGenerationParameterMarshaller.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ public static unsafe ImageGenerationParameter ConvertToManaged(Native.Types.sd_i
4646
TargetOverlap = unmanaged.vae_tiling_params.target_overlap,
4747
RelSizeX = unmanaged.vae_tiling_params.rel_size_x,
4848
RelSizeY = unmanaged.vae_tiling_params.rel_size_y
49+
},
50+
EasyCache =
51+
{
52+
IsEnabled = unmanaged.easycache.enabled == 1,
53+
ReuseThreshold = unmanaged.easycache.reuse_threshold,
54+
StartPercent = unmanaged.easycache.start_percent,
55+
EndPercent = unmanaged.easycache.end_percent
4956
}
5057
};
5158

@@ -126,6 +133,14 @@ public void FromManaged(ImageGenerationParameter managed)
126133
rel_size_y = managed.VaeTiling.RelSizeY
127134
};
128135

136+
Native.Types.sd_easycache_params_t easyCache = new()
137+
{
138+
enabled = (sbyte)(managed.EasyCache.IsEnabled ? 1 : 0),
139+
reuse_threshold = managed.EasyCache.ReuseThreshold,
140+
start_percent = managed.EasyCache.StartPercent,
141+
end_percent = managed.EasyCache.EndPercent,
142+
};
143+
129144
_imgGenParams = new Native.Types.sd_img_gen_params_t
130145
{
131146
prompt = AnsiStringMarshaller.ConvertToUnmanaged(managed.Prompt),
@@ -145,7 +160,8 @@ public void FromManaged(ImageGenerationParameter managed)
145160
control_image = _controlNetImage,
146161
control_strength = managed.ControlNet.Strength,
147162
pm_params = photoMakerParams,
148-
vae_tiling_params = tilingParams
163+
vae_tiling_params = tilingParams,
164+
easycache = easyCache
149165
};
150166
}
151167

0 commit comments

Comments
 (0)