Skip to content

Commit 7dbd895

Browse files
committed
fix latent noise mask
1 parent 317c2f1 commit 7dbd895

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

nodes/flatten_ksampler_node.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import comfy.sd
33
import comfy.model_base
44
import comfy.samplers
5+
import comfy.sample
56
import comfy.k_diffusion.sampling
67

78
from ..utils.injection_utils import inject_features, clear_injections
@@ -16,7 +17,7 @@ def INPUT_TYPES(s):
1617
"add_noise": (["disable", "enable"], ),
1718
"noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
1819
"steps": ("INT", {"default": 10, "min": 1, "max": 10000}),
19-
"injection_steps": ("INT", {"default": 8, "min": 1, "max": 10000}),
20+
"injection_steps": ("INT", {"default": 8, "min": 0, "max": 10000}),
2021
"old_qk": ("INT", {"default": 0, "min": 0, "max": 1}),
2122
"trajectories": ("TRAJECTORY",),
2223
"cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}),
@@ -51,8 +52,7 @@ def sample(self, model, add_noise, noise_seed, steps, injection_steps, old_qk, t
5152
# SETUP NOISE
5253
noise_mask = None
5354
if "noise_mask" in latent:
54-
noise_mask = comfy.sample.prepare_mask(
55-
latent["noise_mask"], latent_image.shape, device)
55+
noise_mask = latent["noise_mask"]
5656

5757
add_noise = add_noise == 'enable'
5858
if not add_noise:

nodes/flatten_unsampler_node.py

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
1+
from tqdm import trange
12
import comfy.samplers
23
import torch
34
import comfy.k_diffusion.sampling
5+
import comfy.sample
46

57
from ..utils.injection_utils import get_blank_injection_dict, clear_injections, update_injections
68
from ..utils.flow_noise import create_noise_generator
79

810

11+
@torch.no_grad()
12+
def sample_inversed_euler(model, x, sigmas, extra_args=None, callback=None, disable=None, s_churn=0., s_tmin=0., s_tmax=float('inf'), s_noise=1.):
13+
"""Implements Algorithm 2 (Euler steps) from Karras et al. (2022)."""
14+
extra_args = {} if extra_args is None else extra_args
15+
s_in = x.new_ones([x.shape[0]])
16+
latents = []
17+
for i in trange(1, len(sigmas), disable=disable):
18+
sigma_in = sigmas[i-1]
19+
20+
if i == 1:
21+
sigma_t = sigmas[i]
22+
else:
23+
sigma_t = sigma_in
24+
25+
denoised = model(x, sigma_t * s_in, **extra_args)
26+
27+
if i == 1:
28+
d = (x - denoised) / (2 * sigmas[i])
29+
else:
30+
d = (x - denoised) / sigmas[i-1]
31+
32+
dt = sigmas[i] - sigmas[i-1]
33+
x = x + d * dt
34+
if callback is not None:
35+
callback(
36+
{'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised})
37+
38+
return x / sigmas[-1]
39+
40+
941
class UnsamplerFlattenNode:
1042
@classmethod
1143
def INPUT_TYPES(s):
@@ -71,15 +103,21 @@ def save_injections_handler(context_start):
71103

72104
noise_mask = None
73105
if "noise_mask" in latent:
74-
noise_mask = comfy.sample.prepare_mask(
75-
latent["noise_mask"], latent_image.shape, device)
106+
noise_mask = latent["noise_mask"]
76107

77108
# SETUP SAMPLING
109+
inversed_euler = sampler_name == 'inverse_euler'
110+
if inversed_euler:
111+
sampler_name = 'euler'
78112
sampler = comfy.samplers.KSampler(model, steps=steps, device=device, sampler=sampler_name,
79113
scheduler=scheduler, denoise=1.0, model_options=model.model_options)
80114
ksampler = comfy.samplers.ksampler(sampler_name)
81115

82-
sigmas = sigmas = sampler.sigmas.flip(0) + 0.0001
116+
if inversed_euler:
117+
ksampler.sampler_function = sample_inversed_euler
118+
sigmas = sampler.sigmas.flip(0)
119+
else:
120+
sigmas = sampler.sigmas.flip(0) + 0.0001
83121

84122
pbar = comfy.utils.ProgressBar(steps)
85123

0 commit comments

Comments
 (0)