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
f81a6fad
Commit
f81a6fad
authored
May 01, 2024
by
comfyanonymous
Browse files
Fix some edge cases with samplers and arrays with a single sigma.
parent
94d5a128
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
0 deletions
+23
-0
comfy/k_diffusion/sampling.py
comfy/k_diffusion/sampling.py
+17
-0
comfy/samplers.py
comfy/samplers.py
+6
-0
No files found.
comfy/k_diffusion/sampling.py
View file @
f81a6fad
...
@@ -527,6 +527,9 @@ def sample_dpmpp_2s_ancestral(model, x, sigmas, extra_args=None, callback=None,
...
@@ -527,6 +527,9 @@ def sample_dpmpp_2s_ancestral(model, x, sigmas, extra_args=None, callback=None,
@
torch
.
no_grad
()
@
torch
.
no_grad
()
def
sample_dpmpp_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
r
=
1
/
2
):
def
sample_dpmpp_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
r
=
1
/
2
):
"""DPM-Solver++ (stochastic)."""
"""DPM-Solver++ (stochastic)."""
if
len
(
sigmas
)
<=
1
:
return
x
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
seed
=
extra_args
.
get
(
"seed"
,
None
)
seed
=
extra_args
.
get
(
"seed"
,
None
)
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
seed
,
cpu
=
True
)
if
noise_sampler
is
None
else
noise_sampler
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
seed
,
cpu
=
True
)
if
noise_sampler
is
None
else
noise_sampler
...
@@ -595,6 +598,8 @@ def sample_dpmpp_2m(model, x, sigmas, extra_args=None, callback=None, disable=No
...
@@ -595,6 +598,8 @@ def sample_dpmpp_2m(model, x, sigmas, extra_args=None, callback=None, disable=No
@
torch
.
no_grad
()
@
torch
.
no_grad
()
def
sample_dpmpp_2m_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
solver_type
=
'midpoint'
):
def
sample_dpmpp_2m_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
solver_type
=
'midpoint'
):
"""DPM-Solver++(2M) SDE."""
"""DPM-Solver++(2M) SDE."""
if
len
(
sigmas
)
<=
1
:
return
x
if
solver_type
not
in
{
'heun'
,
'midpoint'
}:
if
solver_type
not
in
{
'heun'
,
'midpoint'
}:
raise
ValueError
(
'solver_type must be
\'
heun
\'
or
\'
midpoint
\'
'
)
raise
ValueError
(
'solver_type must be
\'
heun
\'
or
\'
midpoint
\'
'
)
...
@@ -642,6 +647,9 @@ def sample_dpmpp_2m_sde(model, x, sigmas, extra_args=None, callback=None, disabl
...
@@ -642,6 +647,9 @@ def sample_dpmpp_2m_sde(model, x, sigmas, extra_args=None, callback=None, disabl
def
sample_dpmpp_3m_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
):
def
sample_dpmpp_3m_sde
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
):
"""DPM-Solver++(3M) SDE."""
"""DPM-Solver++(3M) SDE."""
if
len
(
sigmas
)
<=
1
:
return
x
seed
=
extra_args
.
get
(
"seed"
,
None
)
seed
=
extra_args
.
get
(
"seed"
,
None
)
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
seed
,
cpu
=
True
)
if
noise_sampler
is
None
else
noise_sampler
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
seed
,
cpu
=
True
)
if
noise_sampler
is
None
else
noise_sampler
...
@@ -690,18 +698,27 @@ def sample_dpmpp_3m_sde(model, x, sigmas, extra_args=None, callback=None, disabl
...
@@ -690,18 +698,27 @@ def sample_dpmpp_3m_sde(model, x, sigmas, extra_args=None, callback=None, disabl
@
torch
.
no_grad
()
@
torch
.
no_grad
()
def
sample_dpmpp_3m_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
):
def
sample_dpmpp_3m_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
):
if
len
(
sigmas
)
<=
1
:
return
x
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
return
sample_dpmpp_3m_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
)
return
sample_dpmpp_3m_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
)
@
torch
.
no_grad
()
@
torch
.
no_grad
()
def
sample_dpmpp_2m_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
solver_type
=
'midpoint'
):
def
sample_dpmpp_2m_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
solver_type
=
'midpoint'
):
if
len
(
sigmas
)
<=
1
:
return
x
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
return
sample_dpmpp_2m_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
,
solver_type
=
solver_type
)
return
sample_dpmpp_2m_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
,
solver_type
=
solver_type
)
@
torch
.
no_grad
()
@
torch
.
no_grad
()
def
sample_dpmpp_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
r
=
1
/
2
):
def
sample_dpmpp_sde_gpu
(
model
,
x
,
sigmas
,
extra_args
=
None
,
callback
=
None
,
disable
=
None
,
eta
=
1.
,
s_noise
=
1.
,
noise_sampler
=
None
,
r
=
1
/
2
):
if
len
(
sigmas
)
<=
1
:
return
x
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
sigma_min
,
sigma_max
=
sigmas
[
sigmas
>
0
].
min
(),
sigmas
.
max
()
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
noise_sampler
=
BrownianTreeNoiseSampler
(
x
,
sigma_min
,
sigma_max
,
seed
=
extra_args
.
get
(
"seed"
,
None
),
cpu
=
False
)
if
noise_sampler
is
None
else
noise_sampler
return
sample_dpmpp_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
,
r
=
r
)
return
sample_dpmpp_sde
(
model
,
x
,
sigmas
,
extra_args
=
extra_args
,
callback
=
callback
,
disable
=
disable
,
eta
=
eta
,
s_noise
=
s_noise
,
noise_sampler
=
noise_sampler
,
r
=
r
)
...
...
comfy/samplers.py
View file @
f81a6fad
...
@@ -539,6 +539,9 @@ class KSAMPLER(Sampler):
...
@@ -539,6 +539,9 @@ class KSAMPLER(Sampler):
def
ksampler
(
sampler_name
,
extra_options
=
{},
inpaint_options
=
{}):
def
ksampler
(
sampler_name
,
extra_options
=
{},
inpaint_options
=
{}):
if
sampler_name
==
"dpm_fast"
:
if
sampler_name
==
"dpm_fast"
:
def
dpm_fast_function
(
model
,
noise
,
sigmas
,
extra_args
,
callback
,
disable
):
def
dpm_fast_function
(
model
,
noise
,
sigmas
,
extra_args
,
callback
,
disable
):
if
len
(
sigmas
)
<=
1
:
return
noise
sigma_min
=
sigmas
[
-
1
]
sigma_min
=
sigmas
[
-
1
]
if
sigma_min
==
0
:
if
sigma_min
==
0
:
sigma_min
=
sigmas
[
-
2
]
sigma_min
=
sigmas
[
-
2
]
...
@@ -547,6 +550,9 @@ def ksampler(sampler_name, extra_options={}, inpaint_options={}):
...
@@ -547,6 +550,9 @@ def ksampler(sampler_name, extra_options={}, inpaint_options={}):
sampler_function
=
dpm_fast_function
sampler_function
=
dpm_fast_function
elif
sampler_name
==
"dpm_adaptive"
:
elif
sampler_name
==
"dpm_adaptive"
:
def
dpm_adaptive_function
(
model
,
noise
,
sigmas
,
extra_args
,
callback
,
disable
,
**
extra_options
):
def
dpm_adaptive_function
(
model
,
noise
,
sigmas
,
extra_args
,
callback
,
disable
,
**
extra_options
):
if
len
(
sigmas
)
<=
1
:
return
noise
sigma_min
=
sigmas
[
-
1
]
sigma_min
=
sigmas
[
-
1
]
if
sigma_min
==
0
:
if
sigma_min
==
0
:
sigma_min
=
sigmas
[
-
2
]
sigma_min
=
sigmas
[
-
2
]
...
...
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