@@ -858,7 +858,7 @@ class StableDiffusionGGML {
858858 int step,
859859 struct ggml_tensor * latents,
860860 enum SDVersion version,
861- sd_preview_policy_t preview_mode,
861+ sd_preview_t preview_mode,
862862 ggml_tensor* result,
863863 std::function<void (int , sd_image_t )> step_callback) {
864864 const uint32_t channel = 3 ;
@@ -969,10 +969,7 @@ class StableDiffusionGGML {
969969 int start_merge_step,
970970 SDCondition id_cond,
971971 std::vector<ggml_tensor*> ref_latents = {},
972- ggml_tensor* denoise_mask = nullptr ,
973- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
974- int preview_interval = 1 ,
975- std::function<void (int , sd_image_t )> step_callback = nullptr) {
972+ ggml_tensor* denoise_mask = nullptr ) {
976973 std::vector<int > skip_layers (guidance.slg .layers , guidance.slg .layers + guidance.slg .layer_count );
977974
978975 float cfg_scale = guidance.txt_cfg ;
@@ -1034,7 +1031,8 @@ class StableDiffusionGGML {
10341031 struct ggml_tensor * denoised = ggml_dup_tensor (work_ctx, x);
10351032
10361033 struct ggml_tensor * preview_tensor = NULL ;
1037- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
1034+ auto sd_preview_mode = sd_get_preview_mode ();
1035+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
10381036 preview_tensor = ggml_new_tensor_4d (work_ctx, GGML_TYPE_F32,
10391037 (denoised->ne [0 ] * 8 ),
10401038 (denoised->ne [1 ] * 8 ),
@@ -1216,10 +1214,11 @@ class StableDiffusionGGML {
12161214 pretty_progress (step, (int )steps, (t1 - t0) / 1000000 .f );
12171215 // LOG_INFO("step %d sampling completed taking %.2fs", step, (t1 - t0) * 1.0f / 1000000);
12181216 }
1219-
1220- if (step_callback != nullptr ) {
1221- if (step % preview_interval == 0 ) {
1222- preview_image (work_ctx, step, denoised, version, preview_mode, preview_tensor, step_callback);
1217+ auto sd_preview_cb = sd_get_preview_callback ();
1218+ auto sd_preview_mode = sd_get_preview_mode ();
1219+ if (sd_preview_cb != NULL ) {
1220+ if (step % sd_get_preview_interval () == 0 ) {
1221+ preview_image (work_ctx, step, denoised, version, sd_preview_mode, preview_tensor, sd_preview_cb);
12231222 }
12241223 }
12251224 return denoised;
@@ -1671,10 +1670,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
16711670 std::string input_id_images_path,
16721671 std::vector<ggml_tensor*> ref_latents,
16731672 ggml_tensor* concat_latent = NULL ,
1674- ggml_tensor* denoise_mask = NULL ,
1675- sd_preview_policy_t preview_mode = SD_PREVIEW_NONE,
1676- int preview_interval = 1 ,
1677- std::function<void (int , sd_image_t )> step_callback = nullptr) {
1673+ ggml_tensor* denoise_mask = NULL ) {
16781674 if (seed < 0 ) {
16791675 // Generally, when using the provided command line, the seed is always >0.
16801676 // However, to prevent potential issues if 'stable-diffusion.cpp' is invoked as a library
@@ -1943,10 +1939,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
19431939 start_merge_step,
19441940 id_cond,
19451941 ref_latents,
1946- denoise_mask,
1947- preview_mode,
1948- preview_interval,
1949- step_callback);
1942+ denoise_mask);
19501943
19511944 // struct ggml_tensor* x_0 = load_tensor_from_file(ctx, "samples_ddim.bin");
19521945 // print_ggml_tensor(x_0);
@@ -2020,7 +2013,7 @@ ggml_tensor* generate_init_latent(sd_ctx_t* sd_ctx,
20202013 return init_latent;
20212014}
20222015
2023- sd_image_t * generate_image (sd_ctx_t * sd_ctx, const sd_img_gen_params_t * sd_img_gen_params, sd_preview_policy_t preview_mode, int preview_interval, step_callback_t step_callback ) {
2016+ sd_image_t * generate_image (sd_ctx_t * sd_ctx, const sd_img_gen_params_t * sd_img_gen_params) {
20242017 int width = sd_img_gen_params->width ;
20252018 int height = sd_img_gen_params->height ;
20262019 LOG_DEBUG (" generate_image %dx%d" , width, height);
@@ -2039,7 +2032,8 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
20392032 if (sd_ctx->sd ->stacked_id ) {
20402033 params.mem_size += static_cast <size_t >(10 * 1024 * 1024 ); // 10 MB
20412034 }
2042- if (preview_mode != SD_PREVIEW_NONE && preview_mode != SD_PREVIEW_PROJ) {
2035+ auto sd_preview_mode = sd_get_preview_mode ();
2036+ if (sd_preview_mode != SD_PREVIEW_NONE && sd_preview_mode != SD_PREVIEW_PROJ) {
20432037 params.mem_size *= 2 ;
20442038 }
20452039 params.mem_size += width * height * 3 * sizeof (float ) * 3 ;
@@ -2223,10 +2217,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
22232217 sd_img_gen_params->input_id_images_path ,
22242218 ref_latents,
22252219 concat_latent,
2226- denoise_mask,
2227- preview_mode,
2228- preview_interval,
2229- step_callback);
2220+ denoise_mask);
22302221
22312222 size_t t2 = ggml_time_ms ();
22322223
@@ -2235,7 +2226,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
22352226 return result_images;
22362227}
22372228
2238- SD_API sd_image_t * generate_video (sd_ctx_t * sd_ctx, const sd_vid_gen_params_t * sd_vid_gen_params, step_callback_t step_callback ) {
2229+ SD_API sd_image_t * generate_video (sd_ctx_t * sd_ctx, const sd_vid_gen_params_t * sd_vid_gen_params) {
22392230 if (sd_ctx == NULL || sd_vid_gen_params == NULL ) {
22402231 return NULL ;
22412232 }
@@ -2319,8 +2310,6 @@ SD_API sd_image_t* generate_video(sd_ctx_t* sd_ctx, const sd_vid_gen_params_t* s
23192310 -1 ,
23202311 SDCondition (NULL , NULL , NULL ),
23212312 {},
2322- NULL ,
2323- (sd_preview_policy_t )0 , 1 ,
23242313 NULL );
23252314
23262315 int64_t t2 = ggml_time_ms ();
0 commit comments