@@ -95,6 +95,7 @@ class StableDiffusionGGML {
9595 std::shared_ptr<RNG> rng = std::make_shared<STDDefaultRNG>();
9696 int n_threads = -1 ;
9797 float scale_factor = 0 .18215f ;
98+ float shift_factor = 0 .f;
9899
99100 std::shared_ptr<Conditioner> cond_stage_model;
100101 std::shared_ptr<FrozenCLIPVisionEmbedder> clip_vision; // for svd or wan2.1 i2v
@@ -325,9 +326,10 @@ class StableDiffusionGGML {
325326 scale_factor = 0 .13025f ;
326327 } else if (sd_version_is_sd3 (version)) {
327328 scale_factor = 1 .5305f ;
329+ shift_factor = 0 .0609f ;
328330 } else if (sd_version_is_flux (version)) {
329331 scale_factor = 0 .3611f ;
330- // TODO: shift_factor
332+ shift_factor = 0 . 1159f ;
331333 } else if (sd_version_is_wan (version) || sd_version_is_qwen_image (version)) {
332334 scale_factor = 1 .0f ;
333335 }
@@ -1463,7 +1465,11 @@ class StableDiffusionGGML {
14631465 } else if (version == VERSION_CHROMA_RADIANCE) {
14641466 // pass
14651467 } else {
1466- ggml_tensor_scale (latent, scale_factor);
1468+ ggml_tensor_iter (latent, [&](ggml_tensor* latent, int64_t i0, int64_t i1, int64_t i2, int64_t i3) {
1469+ float value = ggml_tensor_get_f32 (latent, i0, i1, i2, i3);
1470+ value = (value - shift_factor) * scale_factor;
1471+ ggml_tensor_set_f32 (latent, value, i0, i1, i2, i3);
1472+ });
14671473 }
14681474 }
14691475
@@ -1505,7 +1511,11 @@ class StableDiffusionGGML {
15051511 } else if (version == VERSION_CHROMA_RADIANCE) {
15061512 // pass
15071513 } else {
1508- ggml_tensor_scale (latent, 1 .0f / scale_factor);
1514+ ggml_tensor_iter (latent, [&](ggml_tensor* latent, int64_t i0, int64_t i1, int64_t i2, int64_t i3) {
1515+ float value = ggml_tensor_get_f32 (latent, i0, i1, i2, i3);
1516+ value = (value / scale_factor) + shift_factor;
1517+ ggml_tensor_set_f32 (latent, value, i0, i1, i2, i3);
1518+ });
15091519 }
15101520 }
15111521
0 commit comments