@@ -858,7 +858,7 @@ class StableDiffusionGGML {
858
858
int step,
859
859
struct ggml_tensor * latents,
860
860
enum SDVersion version,
861
- sd_preview_policy_t preview_mode,
861
+ sd_preview_t preview_mode,
862
862
ggml_tensor* result,
863
863
std::function<void (int , sd_image_t )> step_callback) {
864
864
const uint32_t channel = 3 ;
@@ -969,10 +969,7 @@ class StableDiffusionGGML {
969
969
int start_merge_step,
970
970
SDCondition id_cond,
971
971
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 ) {
976
973
std::vector<int > skip_layers (guidance.slg .layers , guidance.slg .layers + guidance.slg .layer_count );
977
974
978
975
float cfg_scale = guidance.txt_cfg ;
@@ -1034,7 +1031,8 @@ class StableDiffusionGGML {
1034
1031
struct ggml_tensor * denoised = ggml_dup_tensor (work_ctx, x);
1035
1032
1036
1033
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) {
1038
1036
preview_tensor = ggml_new_tensor_4d (work_ctx, GGML_TYPE_F32,
1039
1037
(denoised->ne [0 ] * 8 ),
1040
1038
(denoised->ne [1 ] * 8 ),
@@ -1216,10 +1214,11 @@ class StableDiffusionGGML {
1216
1214
pretty_progress (step, (int )steps, (t1 - t0) / 1000000 .f );
1217
1215
// LOG_INFO("step %d sampling completed taking %.2fs", step, (t1 - t0) * 1.0f / 1000000);
1218
1216
}
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);
1223
1222
}
1224
1223
}
1225
1224
return denoised;
@@ -1671,10 +1670,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
1671
1670
std::string input_id_images_path,
1672
1671
std::vector<ggml_tensor*> ref_latents,
1673
1672
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 ) {
1678
1674
if (seed < 0 ) {
1679
1675
// Generally, when using the provided command line, the seed is always >0.
1680
1676
// 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,
1943
1939
start_merge_step,
1944
1940
id_cond,
1945
1941
ref_latents,
1946
- denoise_mask,
1947
- preview_mode,
1948
- preview_interval,
1949
- step_callback);
1942
+ denoise_mask);
1950
1943
1951
1944
// struct ggml_tensor* x_0 = load_tensor_from_file(ctx, "samples_ddim.bin");
1952
1945
// print_ggml_tensor(x_0);
@@ -2020,7 +2013,7 @@ ggml_tensor* generate_init_latent(sd_ctx_t* sd_ctx,
2020
2013
return init_latent;
2021
2014
}
2022
2015
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) {
2024
2017
int width = sd_img_gen_params->width ;
2025
2018
int height = sd_img_gen_params->height ;
2026
2019
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
2039
2032
if (sd_ctx->sd ->stacked_id ) {
2040
2033
params.mem_size += static_cast <size_t >(10 * 1024 * 1024 ); // 10 MB
2041
2034
}
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) {
2043
2037
params.mem_size *= 2 ;
2044
2038
}
2045
2039
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
2223
2217
sd_img_gen_params->input_id_images_path ,
2224
2218
ref_latents,
2225
2219
concat_latent,
2226
- denoise_mask,
2227
- preview_mode,
2228
- preview_interval,
2229
- step_callback);
2220
+ denoise_mask);
2230
2221
2231
2222
size_t t2 = ggml_time_ms ();
2232
2223
@@ -2235,7 +2226,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
2235
2226
return result_images;
2236
2227
}
2237
2228
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) {
2239
2230
if (sd_ctx == NULL || sd_vid_gen_params == NULL ) {
2240
2231
return NULL ;
2241
2232
}
@@ -2319,8 +2310,6 @@ SD_API sd_image_t* generate_video(sd_ctx_t* sd_ctx, const sd_vid_gen_params_t* s
2319
2310
-1 ,
2320
2311
SDCondition (NULL , NULL , NULL ),
2321
2312
{},
2322
- NULL ,
2323
- (sd_preview_policy_t )0 , 1 ,
2324
2313
NULL );
2325
2314
2326
2315
int64_t t2 = ggml_time_ms ();
0 commit comments