diff --git a/src/stable-diffusion.cpp b/src/stable-diffusion.cpp index e45bd6ba1..11e36fda4 100644 --- a/src/stable-diffusion.cpp +++ b/src/stable-diffusion.cpp @@ -1680,12 +1680,15 @@ class StableDiffusionGGML { const sd::Tensor& init_latent, const sd::Tensor& denoise_mask) { if (diffusion_model->get_desc() == "Wan2.2-TI2V-5B") { - auto new_timesteps = std::vector(static_cast(init_latent.shape()[2]), timesteps[0]); - - if (!denoise_mask.empty()) { - float value = denoise_mask.dim() == 5 ? denoise_mask.index(0, 0, 0, 0, 0) : denoise_mask.index(0, 0, 0, 0); - if (value == 0.f) { - new_timesteps[0] = 0.f; + int64_t frame_count = init_latent.shape()[2]; + auto new_timesteps = std::vector(static_cast(frame_count), timesteps[0]); + + if (!denoise_mask.empty() && denoise_mask.dim() >= 4 && denoise_mask.shape()[2] == frame_count) { + for (int64_t frame = 0; frame < frame_count; ++frame) { + float value = denoise_mask.dim() == 5 ? denoise_mask.index(0, 0, frame, 0, 0) : denoise_mask.index(0, 0, frame, 0); + if (value == 0.f) { + new_timesteps[static_cast(frame)] = 0.f; + } } } return new_timesteps;