From 0661226c8e8fdfd95788b666e4ceae00e450b295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20du=20Hamel?= Date: Sat, 23 Nov 2024 16:25:05 +0100 Subject: [PATCH 1/3] Remove default variables in c code --- examples/cli/main.cpp | 6 +++++- stable-diffusion.cpp | 16 ++++++++-------- stable-diffusion.h | 16 ++++++++-------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index 9f25245e3..cd64a3f6c 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -991,7 +991,11 @@ int main(int argc, const char* argv[]) { params.control_strength, params.style_ratio, params.normalize_input, - params.input_id_images_path.c_str()); + params.input_id_images_path.c_str(), + params.skip_layers, + params.slg_scale, + params.skip_layer_start, + params.skip_layer_end); } } diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index 5024b5f27..066a5f614 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -1453,10 +1453,10 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx, float style_ratio, bool normalize_input, const char* input_id_images_path_c_str, - std::vector skip_layers, - float slg_scale, - float skip_layer_start, - float skip_layer_end) { + std::vector skip_layers = {}, + float slg_scale = 2.5, + float skip_layer_start = 0.01, + float skip_layer_end = 0.2) { LOG_DEBUG("txt2img %dx%d", width, height); if (sd_ctx == NULL) { return NULL; @@ -1556,10 +1556,10 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx, float style_ratio, bool normalize_input, const char* input_id_images_path_c_str, - std::vector skip_layers, - float slg_scale, - float skip_layer_start, - float skip_layer_end) { + std::vector skip_layers = {}, + float slg_scale = 2.5, + float skip_layer_start = 0.01, + float skip_layer_end = 0.2) { LOG_DEBUG("img2img %dx%d", width, height); if (sd_ctx == NULL) { return NULL; diff --git a/stable-diffusion.h b/stable-diffusion.h index 3604e716b..cb1ebccf7 100644 --- a/stable-diffusion.h +++ b/stable-diffusion.h @@ -166,10 +166,10 @@ SD_API sd_image_t* txt2img(sd_ctx_t* sd_ctx, float style_strength, bool normalize_input, const char* input_id_images_path, - std::vector skip_layers = {}, - float slg_scale = 2.5, - float skip_layer_start = 0.01, - float skip_layer_end = 0.2); + std::vector skip_layers, + float slg_scale, + float skip_layer_start, + float skip_layer_end); SD_API sd_image_t* img2img(sd_ctx_t* sd_ctx, sd_image_t init_image, @@ -190,10 +190,10 @@ SD_API sd_image_t* img2img(sd_ctx_t* sd_ctx, float style_strength, bool normalize_input, const char* input_id_images_path, - std::vector skip_layers = {}, - float slg_scale = 2.5, - float skip_layer_start = 0.01, - float skip_layer_end = 0.2); + std::vector skip_layers, + float slg_scale, + float skip_layer_start, + float skip_layer_end); SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx, sd_image_t init_image, From f6be53b9ac4adf00ee4960e62f9b8bc9bed7540e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20du=20Hamel?= Date: Sat, 23 Nov 2024 16:31:01 +0100 Subject: [PATCH 2/3] set default slg_scale arg to 0 --- stable-diffusion.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index 066a5f614..f5ab7d411 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -780,7 +780,7 @@ class StableDiffusionGGML { int start_merge_step, SDCondition id_cond, std::vector skip_layers = {}, - float slg_scale = 2.5, + float slg_scale = 0, float skip_layer_start = 0.01, float skip_layer_end = 0.2) { size_t steps = sigmas.size() - 1; @@ -1162,7 +1162,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, bool normalize_input, std::string input_id_images_path, std::vector skip_layers = {}, - float slg_scale = 2.5, + float slg_scale = 0, float skip_layer_start = 0.01, float skip_layer_end = 0.2) { if (seed < 0) { @@ -1454,7 +1454,7 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx, bool normalize_input, const char* input_id_images_path_c_str, std::vector skip_layers = {}, - float slg_scale = 2.5, + float slg_scale = 0, float skip_layer_start = 0.01, float skip_layer_end = 0.2) { LOG_DEBUG("txt2img %dx%d", width, height); @@ -1557,7 +1557,7 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx, bool normalize_input, const char* input_id_images_path_c_str, std::vector skip_layers = {}, - float slg_scale = 2.5, + float slg_scale = 0, float skip_layer_start = 0.01, float skip_layer_end = 0.2) { LOG_DEBUG("img2img %dx%d", width, height); From b9aa29accc91f5bd0d1ffdfe8720b5068b023ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20du=20Hamel?= Date: Sat, 23 Nov 2024 18:26:43 +0100 Subject: [PATCH 3/3] Use C arrays instead of cpp vectors in C API --- examples/cli/main.cpp | 6 ++++-- stable-diffusion.cpp | 24 ++++++++++++++---------- stable-diffusion.h | 6 ++++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index cd64a3f6c..59b325504 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -926,7 +926,8 @@ int main(int argc, const char* argv[]) { params.style_ratio, params.normalize_input, params.input_id_images_path.c_str(), - params.skip_layers, + params.skip_layers.data(), + params.skip_layers.size(), params.slg_scale, params.skip_layer_start, params.skip_layer_end); @@ -992,7 +993,8 @@ int main(int argc, const char* argv[]) { params.style_ratio, params.normalize_input, params.input_id_images_path.c_str(), - params.skip_layers, + params.skip_layers.data(), + params.skip_layers.size(), params.slg_scale, params.skip_layer_start, params.skip_layer_end); diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index f5ab7d411..a276bff5c 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -1453,10 +1453,12 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx, float style_ratio, bool normalize_input, const char* input_id_images_path_c_str, - std::vector skip_layers = {}, - float slg_scale = 0, - float skip_layer_start = 0.01, - float skip_layer_end = 0.2) { + int* skip_layers = NULL, + size_t skip_layers_count = 0, + float slg_scale = 0, + float skip_layer_start = 0.01, + float skip_layer_end = 0.2) { + std::vector skip_layers_vec(skip_layers, skip_layers + skip_layers_count); LOG_DEBUG("txt2img %dx%d", width, height); if (sd_ctx == NULL) { return NULL; @@ -1525,7 +1527,7 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx, style_ratio, normalize_input, input_id_images_path_c_str, - skip_layers, + skip_layers_vec, slg_scale, skip_layer_start, skip_layer_end); @@ -1556,10 +1558,12 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx, float style_ratio, bool normalize_input, const char* input_id_images_path_c_str, - std::vector skip_layers = {}, - float slg_scale = 0, - float skip_layer_start = 0.01, - float skip_layer_end = 0.2) { + int* skip_layers = NULL, + size_t skip_layers_count = 0, + float slg_scale = 0, + float skip_layer_start = 0.01, + float skip_layer_end = 0.2) { + std::vector skip_layers_vec(skip_layers, skip_layers + skip_layers_count); LOG_DEBUG("img2img %dx%d", width, height); if (sd_ctx == NULL) { return NULL; @@ -1634,7 +1638,7 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx, style_ratio, normalize_input, input_id_images_path_c_str, - skip_layers, + skip_layers_vec, slg_scale, skip_layer_start, skip_layer_end); diff --git a/stable-diffusion.h b/stable-diffusion.h index cb1ebccf7..1fa328570 100644 --- a/stable-diffusion.h +++ b/stable-diffusion.h @@ -166,7 +166,8 @@ SD_API sd_image_t* txt2img(sd_ctx_t* sd_ctx, float style_strength, bool normalize_input, const char* input_id_images_path, - std::vector skip_layers, + int* skip_layers, + size_t skip_layers_count, float slg_scale, float skip_layer_start, float skip_layer_end); @@ -190,7 +191,8 @@ SD_API sd_image_t* img2img(sd_ctx_t* sd_ctx, float style_strength, bool normalize_input, const char* input_id_images_path, - std::vector skip_layers, + int* skip_layers, + size_t skip_layers_count, float slg_scale, float skip_layer_start, float skip_layer_end);