Skip to content

Commit 1a39ac1

Browse files
committed
Latent preview support for img2img and img2vid
1 parent a12ef46 commit 1a39ac1

File tree

3 files changed

+27
-17
lines changed

3 files changed

+27
-17
lines changed

examples/cli/main.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,8 @@ int main(int argc, const char* argv[]) {
996996
params.sample_method,
997997
params.sample_steps,
998998
params.strength,
999-
params.seed);
999+
params.seed,
1000+
(step_callback_t)step_callback);
10001001
if (results == NULL) {
10011002
printf("generate failed\n");
10021003
free_sd_ctx(sd_ctx);
@@ -1042,7 +1043,8 @@ int main(int argc, const char* argv[]) {
10421043
params.skip_layers.size(),
10431044
params.slg_scale,
10441045
params.skip_layer_start,
1045-
params.skip_layer_end);
1046+
params.skip_layer_end,
1047+
(step_callback_t)step_callback);
10461048
}
10471049
}
10481050

stable-diffusion.cpp

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -779,10 +779,10 @@ class StableDiffusionGGML {
779779
const std::vector<float>& sigmas,
780780
int start_merge_step,
781781
SDCondition id_cond,
782-
std::vector<int> skip_layers = {},
783-
float slg_scale = 0,
784-
float skip_layer_start = 0.01,
785-
float skip_layer_end = 0.2,
782+
std::vector<int> skip_layers = {},
783+
float slg_scale = 0,
784+
float skip_layer_start = 0.01,
785+
float skip_layer_end = 0.2,
786786
std::function<void(int, ggml_tensor*, SDVersion)> step_callback = nullptr) {
787787
size_t steps = sigmas.size() - 1;
788788
// noise = load_tensor_from_file(work_ctx, "./rand0.bin");
@@ -1165,10 +1165,10 @@ sd_image_t* generate_image(sd_ctx_t* sd_ctx,
11651165
float style_ratio,
11661166
bool normalize_input,
11671167
std::string input_id_images_path,
1168-
std::vector<int> skip_layers = {},
1169-
float slg_scale = 0,
1170-
float skip_layer_start = 0.01,
1171-
float skip_layer_end = 0.2,
1168+
std::vector<int> skip_layers = {},
1169+
float slg_scale = 0,
1170+
float skip_layer_start = 0.01,
1171+
float skip_layer_end = 0.2,
11721172
std::function<void(int, ggml_tensor*, SDVersion)> step_callback = nullptr) {
11731173
if (seed < 0) {
11741174
// Generally, when using the provided command line, the seed is always >0.
@@ -1464,7 +1464,7 @@ sd_image_t* txt2img(sd_ctx_t* sd_ctx,
14641464
float slg_scale = 0,
14651465
float skip_layer_start = 0.01,
14661466
float skip_layer_end = 0.2,
1467-
step_callback_t step_callback) {
1467+
step_callback_t step_callback = NULL) {
14681468
std::vector<int> skip_layers_vec(skip_layers, skip_layers + skip_layers_count);
14691469
LOG_DEBUG("txt2img %dx%d", width, height);
14701470
if (sd_ctx == NULL) {
@@ -1570,7 +1570,8 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
15701570
size_t skip_layers_count = 0,
15711571
float slg_scale = 0,
15721572
float skip_layer_start = 0.01,
1573-
float skip_layer_end = 0.2) {
1573+
float skip_layer_end = 0.2,
1574+
step_callback_t step_callback = NULL) {
15741575
std::vector<int> skip_layers_vec(skip_layers, skip_layers + skip_layers_count);
15751576
LOG_DEBUG("img2img %dx%d", width, height);
15761577
if (sd_ctx == NULL) {
@@ -1649,7 +1650,8 @@ sd_image_t* img2img(sd_ctx_t* sd_ctx,
16491650
skip_layers_vec,
16501651
slg_scale,
16511652
skip_layer_start,
1652-
skip_layer_end);
1653+
skip_layer_end,
1654+
step_callback);
16531655

16541656
size_t t2 = ggml_time_ms();
16551657

@@ -1671,7 +1673,8 @@ SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
16711673
enum sample_method_t sample_method,
16721674
int sample_steps,
16731675
float strength,
1674-
int64_t seed) {
1676+
int64_t seed,
1677+
step_callback_t step_callback = NULL) {
16751678
if (sd_ctx == NULL) {
16761679
return NULL;
16771680
}
@@ -1750,7 +1753,10 @@ SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
17501753
sample_method,
17511754
sigmas,
17521755
-1,
1753-
SDCondition(NULL, NULL, NULL));
1756+
SDCondition(NULL, NULL, NULL),
1757+
{},
1758+
0, 0, 0,
1759+
step_callback);
17541760

17551761
int64_t t2 = ggml_time_ms();
17561762
LOG_INFO("sampling completed, taking %.2fs", (t2 - t1) * 1.0f / 1000);

stable-diffusion.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ SD_API sd_image_t* img2img(sd_ctx_t* sd_ctx,
198198
size_t skip_layers_count,
199199
float slg_scale,
200200
float skip_layer_start,
201-
float skip_layer_end);
201+
float skip_layer_end,
202+
step_callback_t step_callback);
202203

203204
SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
204205
sd_image_t init_image,
@@ -213,7 +214,8 @@ SD_API sd_image_t* img2vid(sd_ctx_t* sd_ctx,
213214
enum sample_method_t sample_method,
214215
int sample_steps,
215216
float strength,
216-
int64_t seed);
217+
int64_t seed,
218+
step_callback_t step_callback);
217219

218220
typedef struct upscaler_ctx_t upscaler_ctx_t;
219221

0 commit comments

Comments
 (0)