Commit 8904e008 authored by AUTOMATIC1111's avatar AUTOMATIC1111 Committed by GitHub

Merge pull request #15148 from continue-revolution/conrevo/fix-soft-inpaint

Fix Soft Inpaint for AnimateDiff
parents ecd5fa9c 7d59b3b5
...@@ -57,10 +57,14 @@ def latent_blend(settings, a, b, t): ...@@ -57,10 +57,14 @@ def latent_blend(settings, a, b, t):
# NOTE: We use inplace operations wherever possible. # NOTE: We use inplace operations wherever possible.
if len(t.shape) == 3:
# [4][w][h] to [1][4][w][h] # [4][w][h] to [1][4][w][h]
t2 = t.unsqueeze(0) t2 = t.unsqueeze(0)
# [4][w][h] to [1][1][w][h] - the [4] seem redundant. # [4][w][h] to [1][1][w][h] - the [4] seem redundant.
t3 = t[0].unsqueeze(0).unsqueeze(0) t3 = t[0].unsqueeze(0).unsqueeze(0)
else:
t2 = t
t3 = t[:, 0][:, None]
one_minus_t2 = 1 - t2 one_minus_t2 = 1 - t2
one_minus_t3 = 1 - t3 one_minus_t3 = 1 - t3
...@@ -135,7 +139,10 @@ def apply_adaptive_masks( ...@@ -135,7 +139,10 @@ def apply_adaptive_masks(
from PIL import Image, ImageOps, ImageFilter from PIL import Image, ImageOps, ImageFilter
# TODO: Bias the blending according to the latent mask, add adjustable parameter for bias control. # TODO: Bias the blending according to the latent mask, add adjustable parameter for bias control.
if len(nmask.shape) == 3:
latent_mask = nmask[0].float() latent_mask = nmask[0].float()
else:
latent_mask = nmask[:, 0].float()
# convert the original mask into a form we use to scale distances for thresholding # convert the original mask into a form we use to scale distances for thresholding
mask_scalar = 1 - (torch.clamp(latent_mask, min=0, max=1) ** (settings.mask_blend_scale / 2)) mask_scalar = 1 - (torch.clamp(latent_mask, min=0, max=1) ** (settings.mask_blend_scale / 2))
mask_scalar = (0.5 * (1 - settings.composite_mask_influence) mask_scalar = (0.5 * (1 - settings.composite_mask_influence)
...@@ -157,7 +164,14 @@ def apply_adaptive_masks( ...@@ -157,7 +164,14 @@ def apply_adaptive_masks(
percentile_min=0.25, percentile_max=0.75, min_width=1) percentile_min=0.25, percentile_max=0.75, min_width=1)
# The distance at which opacity of original decreases to 50% # The distance at which opacity of original decreases to 50%
if len(mask_scalar.shape) == 3:
if mask_scalar.shape[0] > i:
half_weighted_distance = settings.composite_difference_threshold * mask_scalar[i]
else:
half_weighted_distance = settings.composite_difference_threshold * mask_scalar[0]
else:
half_weighted_distance = settings.composite_difference_threshold * mask_scalar half_weighted_distance = settings.composite_difference_threshold * mask_scalar
converted_mask = converted_mask / half_weighted_distance converted_mask = converted_mask / half_weighted_distance
converted_mask = 1 / (1 + converted_mask ** settings.composite_difference_contrast) converted_mask = 1 / (1 + converted_mask ** settings.composite_difference_contrast)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment