@@ -789,7 +789,8 @@ static std::pair<float, float> get_ancestral_step(float sigma_from,
789789static sd::Tensor<float > sample_euler_ancestral (denoise_cb_t model,
790790 sd::Tensor<float > x,
791791 const std::vector<float >& sigmas,
792- std::shared_ptr<RNG> rng) {
792+ std::shared_ptr<RNG> rng,
793+ float eta) {
793794 int steps = static_cast <int >(sigmas.size ()) - 1 ;
794795 for (int i = 0 ; i < steps; i++) {
795796 float sigma = sigmas[i];
@@ -799,7 +800,7 @@ static sd::Tensor<float> sample_euler_ancestral(denoise_cb_t model,
799800 }
800801 sd::Tensor<float > denoised = std::move (denoised_opt);
801802 sd::Tensor<float > d = (x - denoised) / sigma;
802- auto [sigma_down, sigma_up] = get_ancestral_step (sigmas[i], sigmas[i + 1 ]);
803+ auto [sigma_down, sigma_up] = get_ancestral_step (sigmas[i], sigmas[i + 1 ], eta );
803804 x += d * (sigma_down - sigmas[i]);
804805 if (sigmas[i + 1 ] > 0 ) {
805806 x += sd::Tensor<float >::randn_like (x, rng) * sigma_up;
@@ -885,7 +886,8 @@ static sd::Tensor<float> sample_dpm2(denoise_cb_t model,
885886static sd::Tensor<float > sample_dpmpp_2s_ancestral (denoise_cb_t model,
886887 sd::Tensor<float > x,
887888 const std::vector<float >& sigmas,
888- std::shared_ptr<RNG> rng) {
889+ std::shared_ptr<RNG> rng,
890+ float eta) {
889891 auto t_fn = [](float sigma) -> float { return -log (sigma); };
890892 auto sigma_fn = [](float t) -> float { return exp (-t); };
891893
@@ -896,7 +898,7 @@ static sd::Tensor<float> sample_dpmpp_2s_ancestral(denoise_cb_t model,
896898 return {};
897899 }
898900 sd::Tensor<float > denoised = std::move (denoised_opt);
899- auto [sigma_down, sigma_up] = get_ancestral_step (sigmas[i], sigmas[i + 1 ]);
901+ auto [sigma_down, sigma_up] = get_ancestral_step (sigmas[i], sigmas[i + 1 ], eta );
900902
901903 if (sigma_down == 0 ) {
902904 x = denoised;
@@ -1371,15 +1373,15 @@ static sd::Tensor<float> sample_k_diffusion(sample_method_t method,
13711373 float eta) {
13721374 switch (method) {
13731375 case EULER_A_SAMPLE_METHOD:
1374- return sample_euler_ancestral (model, std::move (x), sigmas, rng);
1376+ return sample_euler_ancestral (model, std::move (x), sigmas, rng, eta );
13751377 case EULER_SAMPLE_METHOD:
13761378 return sample_euler (model, std::move (x), sigmas);
13771379 case HEUN_SAMPLE_METHOD:
13781380 return sample_heun (model, std::move (x), sigmas);
13791381 case DPM2_SAMPLE_METHOD:
13801382 return sample_dpm2 (model, std::move (x), sigmas);
13811383 case DPMPP2S_A_SAMPLE_METHOD:
1382- return sample_dpmpp_2s_ancestral (model, std::move (x), sigmas, rng);
1384+ return sample_dpmpp_2s_ancestral (model, std::move (x), sigmas, rng, eta );
13831385 case DPMPP2M_SAMPLE_METHOD:
13841386 return sample_dpmpp_2m (model, std::move (x), sigmas);
13851387 case DPMPP2Mv2_SAMPLE_METHOD:
0 commit comments