@@ -845,7 +845,7 @@ class StableDiffusionGGML {
845845 int step,
846846 struct ggml_tensor * latents,
847847 enum SDVersion version,
848- sd_preview_policy_t preview_mode,
848+ sd_preview_t preview_mode,
849849 ggml_tensor* result,
850850 std::function<void (int , sd_image_t )> step_callback) {
851851 const uint32_t channel = 3 ;
@@ -958,14 +958,11 @@ class StableDiffusionGGML {
958958 int start_merge_step,
959959 SDCondition id_cond,
960960 std::vector<ggml_tensor*> ref_latents = {},
961- std::vector<int > skip_layers = {},
962- float slg_scale = 0 ,
963- float skip_layer_start = 0.01 ,
964- float skip_layer_end = 0.2 ,
965- ggml_tensor* noise_mask = nullptr ,
966- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
967- int preview_interval = 1 ,
968- std::function<void (int , sd_image_t )> step_callback = nullptr ) {
961+ std::vector<int > skip_layers = {},
962+ float slg_scale = 0 ,
963+ float skip_layer_start = 0.01 ,
964+ float skip_layer_end = 0.2 ,
965+ ggml_tensor* noise_mask = nullptr ) {
969966 size_t steps = sigmas.size () - 1 ;
970967 // noise = load_tensor_from_file(work_ctx, "./rand0.bin");
971968 // print_ggml_tensor(noise);
@@ -997,7 +994,8 @@ class StableDiffusionGGML {
997994 struct ggml_tensor * denoised = ggml_dup_tensor (work_ctx, x);
998995
999996 struct ggml_tensor * preview_tensor = NULL ;
1000- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
997+ auto sd_preview_mode = sd_get_preview_mode ();
998+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
1001999 preview_tensor = ggml_new_tensor_4d (work_ctx, GGML_TYPE_F32,
10021000 (denoised->ne [0 ] * 8 ),
10031001 (denoised->ne [1 ] * 8 ),
@@ -1149,10 +1147,11 @@ class StableDiffusionGGML {
11491147 pretty_progress (step, (int )steps, (t1 - t0) / 1000000 .f );
11501148 // LOG_INFO("step %d sampling completed taking %.2fs", step, (t1 - t0) * 1.0f / 1000000);
11511149 }
1152-
1153- if (step_callback != nullptr ) {
1154- if (step % preview_interval == 0 ) {
1155- preview_image (work_ctx, step, denoised, version, preview_mode, preview_tensor, step_callback);
1150+ auto sd_preview_cb = sd_get_preview_callback ();
1151+ auto sd_preview_mode = sd_get_preview_mode ();
1152+ if (sd_preview_cb != NULL ) {
1153+ if (step % sd_get_preview_interval () == 0 ) {
1154+ preview_image (work_ctx, step, denoised, version, sd_preview_mode, preview_tensor, sd_preview_cb);
11561155 }
11571156 }
11581157 return denoised;
@@ -1385,14 +1384,11 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx,
13851384 bool normalize_input,
13861385 std::string input_id_images_path,
13871386 std::vector<ggml_tensor*> ref_latents,
1388- std::vector<int > skip_layers = {},
1389- float slg_scale = 0 ,
1390- float skip_layer_start = 0.01 ,
1391- float skip_layer_end = 0.2 ,
1392- ggml_tensor* masked_image = NULL ,
1393- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1394- int preview_interval = 1 ,
1395- std::function<void (int , sd_image_t )> step_callback = nullptr) {
1387+ std::vector<int > skip_layers = {},
1388+ float slg_scale = 0 ,
1389+ float skip_layer_start = 0.01 ,
1390+ float skip_layer_end = 0.2 ,
1391+ ggml_tensor* masked_image = NULL ) {
13961392 if (seed < 0 ) {
13971393 // Generally, when using the provided command line, the seed is always >0.
13981394 // However, to prevent potential issues if 'stable-diffusion.cpp' is invoked as a library
@@ -1650,10 +1646,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx,
16501646 slg_scale,
16511647 skip_layer_start,
16521648 skip_layer_end,
1653- noise_mask,
1654- preview_mode,
1655- preview_interval,
1656- step_callback);
1649+ noise_mask);
16571650
16581651 // struct ggml_tensor* x_0 = load_tensor_from_file(ctx, "samples_ddim.bin");
16591652 // print_ggml_tensor(x_0);
@@ -1745,14 +1738,11 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
17451738 float style_ratio,
17461739 bool normalize_input,
17471740 const char * input_id_images_path_c_str,
1748- int * skip_layers = NULL ,
1749- size_t skip_layers_count = 0 ,
1750- float slg_scale = 0 ,
1751- float skip_layer_start = 0.01 ,
1752- float skip_layer_end = 0.2 ,
1753- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1754- int preview_interval = 1 ,
1755- step_callback_t step_callback = NULL ) {
1741+ int * skip_layers = NULL ,
1742+ size_t skip_layers_count = 0 ,
1743+ float slg_scale = 0 ,
1744+ float skip_layer_start = 0.01 ,
1745+ float skip_layer_end = 0.2 ) {
17561746 std::vector<int > skip_layers_vec (skip_layers, skip_layers + skip_layers_count);
17571747 LOG_DEBUG (" txt2img %dx%d" , width, height);
17581748 if (sd_ctx == NULL ) {
@@ -1770,7 +1760,8 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
17701760 if (sd_ctx->sd ->stacked_id ) {
17711761 params.mem_size += static_cast <size_t >(10 * 1024 * 1024 ); // 10 MB
17721762 }
1773- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
1763+ auto sd_preview_mode = sd_get_preview_mode ();
1764+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
17741765 params.mem_size *= 2 ;
17751766 }
17761767 params.mem_size += width * height * 3 * sizeof (float );
@@ -1820,10 +1811,7 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
18201811 slg_scale,
18211812 skip_layer_start,
18221813 skip_layer_end,
1823- NULL ,
1824- preview_mode,
1825- preview_interval,
1826- step_callback);
1814+ NULL );
18271815
18281816 size_t t1 = ggml_time_ms ();
18291817
@@ -1853,14 +1841,11 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
18531841 float style_ratio,
18541842 bool normalize_input,
18551843 const char * input_id_images_path_c_str,
1856- int * skip_layers = NULL ,
1857- size_t skip_layers_count = 0 ,
1858- float slg_scale = 0 ,
1859- float skip_layer_start = 0.01 ,
1860- float skip_layer_end = 0.2 ,
1861- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1862- int preview_interval = 1 ,
1863- step_callback_t step_callback = NULL ) {
1844+ int * skip_layers = NULL ,
1845+ size_t skip_layers_count = 0 ,
1846+ float slg_scale = 0 ,
1847+ float skip_layer_start = 0.01 ,
1848+ float skip_layer_end = 0.2 ) {
18641849 std::vector<int > skip_layers_vec (skip_layers, skip_layers + skip_layers_count);
18651850 LOG_DEBUG (" img2img %dx%d" , width, height);
18661851 if (sd_ctx == NULL ) {
@@ -2008,10 +1993,7 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
20081993 slg_scale,
20091994 skip_layer_start,
20101995 skip_layer_end,
2011- masked_image,
2012- preview_mode,
2013- preview_interval,
2014- step_callback);
1996+ masked_image);
20151997
20161998 size_t t2 = ggml_time_ms ();
20171999
@@ -2117,8 +2099,6 @@ SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
21172099 {},
21182100 {},
21192101 0 , 0 , 0 ,
2120- NULL ,
2121- (sd_preview_policy_t )0 , 1 ,
21222102 NULL );
21232103
21242104 int64_t t2 = ggml_time_ms ();
0 commit comments