Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
ComfyUI
Commits
57eea0ef
"test/srt/vscode:/vscode.git/clone" did not exist on "4814ecaff988c26f16d7eb270d93a9034ac0b689"
Commit
57eea0ef
authored
Nov 14, 2023
by
comfyanonymous
Browse files
heunpp2 sampler.
parent
728613bb
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
1 deletion
+59
-1
comfy/k_diffusion/sampling.py
comfy/k_diffusion/sampling.py
+58
-0
comfy/samplers.py
comfy/samplers.py
+1
-1
No files found.
comfy/k_diffusion/sampling.py
View file @
57eea0ef
...
...
@@ -750,3 +750,61 @@ def sample_lcm(model, x, sigmas, extra_args=None, callback=None, disable=None, n
if
sigmas
[
i
+
1
]
>
0
:
x
+=
sigmas
[
i
+
1
]
*
noise_sampler
(
sigmas
[
i
],
sigmas
[
i
+
1
])
return
x
@
torch
.
no_grad
()
def
sample_heunpp2
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
s_churn
=
0.
,
s_tmin
=
0.
,
s_tmax
=
float
(
'inf'
),
s_noise
=
1.
):
# From MIT licensed: https://github.com/Carzit/sd-webui-samplers-scheduler/
extra_args
=
{}
if
extra_args
is
None
else
extra_args
s_in
=
x
.
new_ones
([
x
.
shape
[
0
]])
s_end
=
sigmas
[
-
1
]
for
i
in
trange
(
len
(
sigmas
)
-
1
,
disable
=
disable
):
gamma
=
min
(
s_churn
/
(
len
(
sigmas
)
-
1
),
2
**
0.5
-
1
)
if
s_tmin
<=
sigmas
[
i
]
<=
s_tmax
else
0.
eps
=
torch
.
randn_like
(
x
)
*
s_noise
sigma_hat
=
sigmas
[
i
]
*
(
gamma
+
1
)
if
gamma
>
0
:
x
=
x
+
eps
*
(
sigma_hat
**
2
-
sigmas
[
i
]
**
2
)
**
0.5
denoised
=
model
(
x
,
sigma_hat
*
s_in
,
**
extra_args
)
d
=
to_d
(
x
,
sigma_hat
,
denoised
)
if
callback
is
not
None
:
callback
({
'x'
:
x
,
'i'
:
i
,
'sigma'
:
sigmas
[
i
],
'sigma_hat'
:
sigma_hat
,
'denoised'
:
denoised
})
dt
=
sigmas
[
i
+
1
]
-
sigma_hat
if
sigmas
[
i
+
1
]
==
s_end
:
# Euler method
x
=
x
+
d
*
dt
elif
sigmas
[
i
+
2
]
==
s_end
:
# Heun's method
x_2
=
x
+
d
*
dt
denoised_2
=
model
(
x_2
,
sigmas
[
i
+
1
]
*
s_in
,
**
extra_args
)
d_2
=
to_d
(
x_2
,
sigmas
[
i
+
1
],
denoised_2
)
w
=
2
*
sigmas
[
0
]
w2
=
sigmas
[
i
+
1
]
/
w
w1
=
1
-
w2
d_prime
=
d
*
w1
+
d_2
*
w2
x
=
x
+
d_prime
*
dt
else
:
# Heun++
x_2
=
x
+
d
*
dt
denoised_2
=
model
(
x_2
,
sigmas
[
i
+
1
]
*
s_in
,
**
extra_args
)
d_2
=
to_d
(
x_2
,
sigmas
[
i
+
1
],
denoised_2
)
dt_2
=
sigmas
[
i
+
2
]
-
sigmas
[
i
+
1
]
x_3
=
x_2
+
d_2
*
dt_2
denoised_3
=
model
(
x_3
,
sigmas
[
i
+
2
]
*
s_in
,
**
extra_args
)
d_3
=
to_d
(
x_3
,
sigmas
[
i
+
2
],
denoised_3
)
w
=
3
*
sigmas
[
0
]
w2
=
sigmas
[
i
+
1
]
/
w
w3
=
sigmas
[
i
+
2
]
/
w
w1
=
1
-
w2
-
w3
d_prime
=
w1
*
d
+
w2
*
d_2
+
w3
*
d_3
x
=
x
+
d_prime
*
dt
return
x
comfy/samplers.py
View file @
57eea0ef
...
...
@@ -518,7 +518,7 @@ class UNIPCBH2(Sampler):
def
sample
(
self
,
model_wrap
,
sigmas
,
extra_args
,
callback
,
noise
,
latent_image
=
None
,
denoise_mask
=
None
,
disable_pbar
=
False
):
return
uni_pc
.
sample_unipc
(
model_wrap
,
noise
,
latent_image
,
sigmas
,
max_denoise
=
self
.
max_denoise
(
model_wrap
,
sigmas
),
extra_args
=
extra_args
,
noise_mask
=
denoise_mask
,
callback
=
callback
,
variant
=
'bh2'
,
disable
=
disable_pbar
)
KSAMPLER_NAMES
=
[
"euler"
,
"euler_ancestral"
,
"heun"
,
"dpm_2"
,
"dpm_2_ancestral"
,
KSAMPLER_NAMES
=
[
"euler"
,
"euler_ancestral"
,
"heun"
,
"heunpp2"
,
"dpm_2"
,
"dpm_2_ancestral"
,
"lms"
,
"dpm_fast"
,
"dpm_adaptive"
,
"dpmpp_2s_ancestral"
,
"dpmpp_sde"
,
"dpmpp_sde_gpu"
,
"dpmpp_2m"
,
"dpmpp_2m_sde"
,
"dpmpp_2m_sde_gpu"
,
"dpmpp_3m_sde"
,
"dpmpp_3m_sde_gpu"
,
"ddpm"
,
"lcm"
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment