@@ -94,6 +94,7 @@ class StableDiffusionGGML {
9494 std::shared_ptr<RNG> rng = std::make_shared<STDDefaultRNG>();
9595 int n_threads = -1 ;
9696 float scale_factor = 0 .18215f ;
97+ float shift_factor = 0 .f;
9798
9899 std::shared_ptr<Conditioner> cond_stage_model;
99100 std::shared_ptr<FrozenCLIPVisionEmbedder> clip_vision; // for svd or wan2.1 i2v
@@ -324,9 +325,10 @@ class StableDiffusionGGML {
324325 scale_factor = 0 .13025f ;
325326 } else if (sd_version_is_sd3 (version)) {
326327 scale_factor = 1 .5305f ;
328+ shift_factor = 0 .0609f ;
327329 } else if (sd_version_is_flux (version)) {
328330 scale_factor = 0 .3611f ;
329- // TODO: shift_factor
331+ shift_factor = 0 . 1159f ;
330332 } else if (sd_version_is_wan (version) || sd_version_is_qwen_image (version)) {
331333 scale_factor = 1 .0f ;
332334 }
@@ -1404,7 +1406,11 @@ class StableDiffusionGGML {
14041406 }
14051407 }
14061408 } else {
1407- ggml_tensor_scale (latent, scale_factor);
1409+ ggml_tensor_iter (latent, [&](ggml_tensor* latent, int64_t i0, int64_t i1, int64_t i2, int64_t i3) {
1410+ float value = ggml_tensor_get_f32 (latent, i0, i1, i2, i3);
1411+ value = (value - shift_factor) * scale_factor;
1412+ ggml_tensor_set_f32 (latent, value, i0, i1, i2, i3);
1413+ });
14081414 }
14091415 }
14101416
@@ -1444,7 +1450,11 @@ class StableDiffusionGGML {
14441450 }
14451451 }
14461452 } else {
1447- ggml_tensor_scale (latent, 1 .0f / scale_factor);
1453+ ggml_tensor_iter (latent, [&](ggml_tensor* latent, int64_t i0, int64_t i1, int64_t i2, int64_t i3) {
1454+ float value = ggml_tensor_get_f32 (latent, i0, i1, i2, i3);
1455+ value = (value / scale_factor) + shift_factor;
1456+ ggml_tensor_set_f32 (latent, value, i0, i1, i2, i3);
1457+ });
14481458 }
14491459 }
14501460
0 commit comments