File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3120,7 +3120,25 @@ sd_image_t* generate_image_internal(sd_ctx_t* sd_ctx,
31203120 }
31213121 cond.c_concat = concat_latent;
31223122 uncond.c_concat = empty_latent;
3123- denoise_mask = nullptr ;
3123+ // inflate the masked area by taking the max of the surrounding latent pixels, to avoid the edge artifacts
3124+ auto orig_denoise_mask = ggml_ext_dup_and_cpy_tensor (work_ctx, denoise_mask);
3125+ for (int ix = 0 ; ix < denoise_mask->ne [0 ]; ix++) {
3126+ for (int iy = 0 ; iy < denoise_mask->ne [1 ]; iy++) {
3127+ float max = ggml_ext_tensor_get_f32 (orig_denoise_mask, ix, iy);
3128+ for (int x = ix - 1 ; x <= ix + 1 ; x++) {
3129+ for (int y = iy - 1 ; y <= iy + 1 ; y++) {
3130+ if (x >= 0 && x < denoise_mask->ne [0 ] && y >= 0 && y < denoise_mask->ne [1 ]) {
3131+ float v = ggml_ext_tensor_get_f32 (orig_denoise_mask, x, y);
3132+ if (v > max) {
3133+ max = v;
3134+ }
3135+ }
3136+ }
3137+ }
3138+ ggml_ext_tensor_set_f32 (denoise_mask, max, ix, iy);
3139+ }
3140+ }
3141+ // denoise_mask = nullptr;
31243142 } else if (sd_version_is_unet_edit (sd_ctx->sd ->version )) {
31253143 auto empty_latent = ggml_dup_tensor (work_ctx, init_latent);
31263144 ggml_set_f32 (empty_latent, 0 );
You can’t perform that action at this time.
0 commit comments