From 1f9ee88e09c258053fa59d5e05e23dfb10fa0b13 Mon Sep 17 00:00:00 2001 From: leejet Date: Wed, 3 Jun 2026 23:32:31 +0800 Subject: [PATCH] fix: zero Wan2.2 TI2V timesteps for fixed frames (#1604) --- src/stable-diffusion.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/stable-diffusion.cpp b/src/stable-diffusion.cpp index e45bd6ba..11e36fda 100644 --- a/src/stable-diffusion.cpp +++ b/src/stable-diffusion.cpp @@ -1680,12 +1680,15 @@ public: 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]); + int64_t frame_count = init_latent.shape()[2]; + auto new_timesteps = std::vector(static_cast(frame_count), 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; + 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;