@@ -845,6 +845,7 @@ class StableDiffusionGGML {
845
845
float eta,
846
846
sample_method_t method,
847
847
const std::vector<float >& sigmas,
848
+ int initial_step,
848
849
int start_merge_step,
849
850
SDCondition id_cond,
850
851
std::vector<ggml_tensor*> ref_latents = {},
@@ -1083,7 +1084,7 @@ class StableDiffusionGGML {
1083
1084
return denoised;
1084
1085
};
1085
1086
1086
- sample_k_diffusion (method, denoise, work_ctx, x, sigmas, rng, eta);
1087
+ sample_k_diffusion (method, denoise, work_ctx, x, sigmas, initial_step, rng, eta);
1087
1088
1088
1089
x = denoiser->inverse_noise_scaling (sigmas[sigmas.size () - 1 ], x);
1089
1090
@@ -1520,6 +1521,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
1520
1521
int height,
1521
1522
enum sample_method_t sample_method,
1522
1523
const std::vector<float >& sigmas,
1524
+ int initial_step,
1523
1525
int64_t seed,
1524
1526
int batch_count,
1525
1527
const sd_image_t * control_cond,
@@ -1530,6 +1532,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
1530
1532
std::vector<ggml_tensor*> ref_latents,
1531
1533
ggml_tensor* concat_latent = NULL ,
1532
1534
ggml_tensor* denoise_mask = NULL ) {
1535
+
1533
1536
if (seed < 0 ) {
1534
1537
// Generally, when using the provided command line, the seed is always >0.
1535
1538
// However, to prevent potential issues if 'stable-diffusion.cpp' is invoked as a library
@@ -1795,6 +1798,7 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
1795
1798
eta,
1796
1799
sample_method,
1797
1800
sigmas,
1801
+ initial_step,
1798
1802
start_merge_step,
1799
1803
id_cond,
1800
1804
ref_latents,
@@ -1917,6 +1921,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
1917
1921
ggml_tensor* concat_latent = NULL ;
1918
1922
ggml_tensor* denoise_mask = NULL ;
1919
1923
std::vector<float > sigmas = sd_ctx->sd ->denoiser ->get_sigmas (sd_img_gen_params->sample_steps );
1924
+ int initial_step = 0 ;
1920
1925
1921
1926
if (sd_img_gen_params->init_image .data ) {
1922
1927
LOG_INFO (" IMG2IMG" );
@@ -1926,7 +1931,8 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
1926
1931
t_enc--;
1927
1932
LOG_INFO (" target t_enc is %zu steps" , t_enc);
1928
1933
std::vector<float > sigma_sched;
1929
- sigma_sched.assign (sigmas.begin () + sd_img_gen_params->sample_steps - t_enc - 1 , sigmas.end ());
1934
+ initial_step = sd_img_gen_params->sample_steps - t_enc - 1 ;
1935
+ sigma_sched.assign (sigmas.begin () + initial_step, sigmas.end ());
1930
1936
sigmas = sigma_sched;
1931
1937
1932
1938
ggml_tensor* init_img = ggml_new_tensor_4d (work_ctx, GGML_TYPE_F32, width, height, 3 , 1 );
@@ -2063,6 +2069,7 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx, const sd_img_gen_params_t* sd_img_g
2063
2069
height,
2064
2070
sd_img_gen_params->sample_method ,
2065
2071
sigmas,
2072
+ initial_step,
2066
2073
seed,
2067
2074
sd_img_gen_params->batch_count ,
2068
2075
sd_img_gen_params->control_cond ,
@@ -2162,6 +2169,7 @@ SD_API sd_image_t* generate_video(sd_ctx_t* sd_ctx, const sd_vid_gen_params_t* s
2162
2169
0 .f ,
2163
2170
sd_vid_gen_params->sample_method ,
2164
2171
sigmas,
2172
+ 0 ,
2165
2173
-1 ,
2166
2174
SDCondition (NULL , NULL , NULL ));
2167
2175
0 commit comments