@@ -1148,7 +1148,8 @@ class StableDiffusionGGML {
11481148 enum SDVersion version,
11491149 preview_t preview_mode,
11501150 ggml_tensor* result,
1151- std::function<void (int , int , sd_image_t *)> step_callback) {
1151+ std::function<void (int , int , sd_image_t *, bool )> step_callback,
1152+ bool is_noisy) {
11521153 const uint32_t channel = 3 ;
11531154 uint32_t width = latents->ne [0 ];
11541155 uint32_t height = latents->ne [1 ];
@@ -1218,7 +1219,7 @@ class StableDiffusionGGML {
12181219 for (int i = 0 ; i < frames; i++) {
12191220 images[i] = {width, height, channel, data + i * width * height * channel};
12201221 }
1221- step_callback (step, frames, images);
1222+ step_callback (step, frames, images, is_noisy );
12221223 free (data);
12231224 free (images);
12241225 } else {
@@ -1272,7 +1273,7 @@ class StableDiffusionGGML {
12721273 images[i].data = sd_tensor_to_image (result, i, ggml_n_dims (latents) == 4 );
12731274 }
12741275
1275- step_callback (step, frames, images);
1276+ step_callback (step, frames, images, is_noisy );
12761277
12771278 ggml_tensor_scale (result, 0 );
12781279 for (int i = 0 ; i < frames; i++) {
@@ -1384,6 +1385,8 @@ class StableDiffusionGGML {
13841385 }
13851386
13861387 auto denoise = [&](ggml_tensor* input, float sigma, int step) -> ggml_tensor* {
1388+ auto sd_preview_cb = sd_get_preview_callback ();
1389+ auto sd_preview_mode = sd_get_preview_mode ();
13871390 if (step == 1 || step == -1 ) {
13881391 pretty_progress (0 , (int )steps, 0 );
13891392 }
@@ -1418,6 +1421,11 @@ class StableDiffusionGGML {
14181421 if (denoise_mask != nullptr && version == VERSION_WAN2_2_TI2V) {
14191422 apply_mask (noised_input, init_latent, denoise_mask);
14201423 }
1424+ if (sd_preview_cb != NULL && sd_should_preview_noisy ()) {
1425+ if (step % sd_get_preview_interval () == 0 ) {
1426+ preview_image (work_ctx, step, noised_input, version, sd_preview_mode, preview_tensor, sd_preview_cb, true );
1427+ }
1428+ }
14211429
14221430 std::vector<struct ggml_tensor *> controls;
14231431
@@ -1542,14 +1550,13 @@ class StableDiffusionGGML {
15421550 if (denoise_mask != nullptr ) {
15431551 apply_mask (denoised, init_latent, denoise_mask);
15441552 }
1545- auto sd_preview_cb = sd_get_preview_callback ();
1546- auto sd_preview_mode = sd_get_preview_mode ();
1547- if (sd_preview_cb != NULL ) {
1553+
1554+ if (sd_preview_cb != NULL && sd_should_preview_denoised ()) {
15481555 if (step % sd_get_preview_interval () == 0 ) {
1549- preview_image (work_ctx, step, denoised, version, sd_preview_mode, preview_tensor, sd_preview_cb);
1556+ preview_image (work_ctx, step, denoised, version, sd_preview_mode, preview_tensor, sd_preview_cb, false );
15501557 }
15511558 }
1552-
1559+
15531560 int64_t t1 = ggml_time_us ();
15541561 if (step > 0 || step == -(int )steps) {
15551562 int showstep = std::abs (step);
0 commit comments