@@ -810,7 +810,7 @@ class StableDiffusionGGML {
810810 int step,
811811 struct ggml_tensor * latents,
812812 enum SDVersion version,
813- sd_preview_policy_t preview_mode,
813+ sd_preview_t preview_mode,
814814 ggml_tensor* result,
815815 std::function<void (int , sd_image_t )> step_callback) {
816816 const uint32_t channel = 3 ;
@@ -922,14 +922,11 @@ class StableDiffusionGGML {
922922 const std::vector<float >& sigmas,
923923 int start_merge_step,
924924 SDCondition id_cond,
925- std::vector<int > skip_layers = {},
926- float slg_scale = 0 ,
927- float skip_layer_start = 0.01 ,
928- float skip_layer_end = 0.2 ,
929- ggml_tensor* noise_mask = nullptr ,
930- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
931- int preview_interval = 1 ,
932- std::function<void (int , sd_image_t )> step_callback = nullptr ) {
925+ std::vector<int > skip_layers = {},
926+ float slg_scale = 0 ,
927+ float skip_layer_start = 0.01 ,
928+ float skip_layer_end = 0.2 ,
929+ ggml_tensor* noise_mask = nullptr ) {
933930 size_t steps = sigmas.size () - 1 ;
934931 // noise = load_tensor_from_file(work_ctx, "./rand0.bin");
935932 // print_ggml_tensor(noise);
@@ -961,7 +958,8 @@ class StableDiffusionGGML {
961958 struct ggml_tensor * denoised = ggml_dup_tensor (work_ctx, x);
962959
963960 struct ggml_tensor * preview_tensor = NULL ;
964- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
961+ auto sd_preview_mode = sd_get_preview_mode ();
962+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
965963 preview_tensor = ggml_new_tensor_4d (work_ctx, GGML_TYPE_F32,
966964 (denoised->ne [0 ] * 8 ),
967965 (denoised->ne [1 ] * 8 ),
@@ -1109,10 +1107,11 @@ class StableDiffusionGGML {
11091107 pretty_progress (step, (int )steps, (t1 - t0) / 1000000 .f );
11101108 // LOG_INFO("step %d sampling completed taking %.2fs", step, (t1 - t0) * 1.0f / 1000000);
11111109 }
1112-
1113- if (step_callback != nullptr ) {
1114- if (step % preview_interval == 0 ) {
1115- preview_image (work_ctx, step, denoised, version, preview_mode, preview_tensor, step_callback);
1110+ auto sd_preview_cb = sd_get_preview_callback ();
1111+ auto sd_preview_mode = sd_get_preview_mode ();
1112+ if (sd_preview_cb != NULL ) {
1113+ if (step % sd_get_preview_interval () == 0 ) {
1114+ preview_image (work_ctx, step, denoised, version, sd_preview_mode, preview_tensor, sd_preview_cb);
11161115 }
11171116 }
11181117 return denoised;
@@ -1338,14 +1337,11 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx,
13381337 float style_ratio,
13391338 bool normalize_input,
13401339 std::string input_id_images_path,
1341- std::vector<int > skip_layers = {},
1342- float slg_scale = 0 ,
1343- float skip_layer_start = 0.01 ,
1344- float skip_layer_end = 0.2 ,
1345- ggml_tensor* masked_image = NULL ,
1346- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1347- int preview_interval = 1 ,
1348- std::function<void (int , sd_image_t )> step_callback = nullptr) {
1340+ std::vector<int > skip_layers = {},
1341+ float slg_scale = 0 ,
1342+ float skip_layer_start = 0.01 ,
1343+ float skip_layer_end = 0.2 ,
1344+ ggml_tensor* masked_image = NULL ) {
13491345 if (seed < 0 ) {
13501346 // Generally, when using the provided command line, the seed is always >0.
13511347 // However, to prevent potential issues if 'stable-diffusion.cpp' is invoked as a library
@@ -1602,10 +1598,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx,
16021598 slg_scale,
16031599 skip_layer_start,
16041600 skip_layer_end,
1605- noise_mask,
1606- preview_mode,
1607- preview_interval,
1608- step_callback);
1601+ noise_mask);
16091602
16101603 // struct ggml_tensor* x_0 = load_tensor_from_file(ctx, "samples_ddim.bin");
16111604 // print_ggml_tensor(x_0);
@@ -1674,14 +1667,11 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
16741667 float style_ratio,
16751668 bool normalize_input,
16761669 const char * input_id_images_path_c_str,
1677- int * skip_layers = NULL ,
1678- size_t skip_layers_count = 0 ,
1679- float slg_scale = 0 ,
1680- float skip_layer_start = 0.01 ,
1681- float skip_layer_end = 0.2 ,
1682- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1683- int preview_interval = 1 ,
1684- step_callback_t step_callback = NULL ) {
1670+ int * skip_layers = NULL ,
1671+ size_t skip_layers_count = 0 ,
1672+ float slg_scale = 0 ,
1673+ float skip_layer_start = 0.01 ,
1674+ float skip_layer_end = 0.2 ) {
16851675 std::vector<int > skip_layers_vec (skip_layers, skip_layers + skip_layers_count);
16861676 LOG_DEBUG (" txt2img %dx%d" , width, height);
16871677 if (sd_ctx == NULL ) {
@@ -1699,7 +1689,8 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
16991689 if (sd_ctx->sd ->stacked_id ) {
17001690 params.mem_size += static_cast <size_t >(10 * 1024 * 1024 ); // 10 MB
17011691 }
1702- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
1692+ auto sd_preview_mode = sd_get_preview_mode ();
1693+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
17031694 params.mem_size *= 2 ;
17041695 }
17051696 params.mem_size += width * height * 3 * sizeof (float );
@@ -1763,10 +1754,7 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
17631754 slg_scale,
17641755 skip_layer_start,
17651756 skip_layer_end,
1766- NULL ,
1767- preview_mode,
1768- preview_interval,
1769- step_callback);
1757+ NULL );
17701758
17711759 size_t t1 = ggml_time_ms ();
17721760
@@ -1796,14 +1784,11 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
17961784 float style_ratio,
17971785 bool normalize_input,
17981786 const char * input_id_images_path_c_str,
1799- int * skip_layers = NULL ,
1800- size_t skip_layers_count = 0 ,
1801- float slg_scale = 0 ,
1802- float skip_layer_start = 0.01 ,
1803- float skip_layer_end = 0.2 ,
1804- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1805- int preview_interval = 1 ,
1806- step_callback_t step_callback = NULL ) {
1787+ int * skip_layers = NULL ,
1788+ size_t skip_layers_count = 0 ,
1789+ float slg_scale = 0 ,
1790+ float skip_layer_start = 0.01 ,
1791+ float skip_layer_end = 0.2 ) {
18071792 std::vector<int > skip_layers_vec (skip_layers, skip_layers + skip_layers_count);
18081793 LOG_DEBUG (" img2img %dx%d" , width, height);
18091794 if (sd_ctx == NULL ) {
@@ -1950,10 +1935,7 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
19501935 slg_scale,
19511936 skip_layer_start,
19521937 skip_layer_end,
1953- masked_image,
1954- preview_mode,
1955- preview_interval,
1956- step_callback);
1938+ masked_image);
19571939
19581940 size_t t2 = ggml_time_ms ();
19591941
@@ -2057,9 +2039,7 @@ SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
20572039 -1 ,
20582040 SDCondition (NULL , NULL , NULL ),
20592041 {},
2060- 0 , 0 , 0 , NULL ,
2061- (sd_preview_policy_t )0 , 1 ,
2062- NULL );
2042+ 0 , 0 , 0 , NULL );
20632043
20642044 int64_t t2 = ggml_time_ms ();
20652045 LOG_INFO (" sampling completed, taking %.2fs" , (t2 - t1) * 1 .0f / 1000 );
0 commit comments