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
bf3fc2f1
Commit
bf3fc2f1
authored
Sep 27, 2023
by
comfyanonymous
Browse files
Refactor sampling related code.
parent
fff491b0
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
25 deletions
+32
-25
comfy/sample.py
comfy/sample.py
+13
-9
latent_preview.py
latent_preview.py
+18
-0
nodes.py
nodes.py
+1
-16
No files found.
comfy/sample.py
View file @
bf3fc2f1
...
@@ -70,25 +70,29 @@ def cleanup_additional_models(models):
...
@@ -70,25 +70,29 @@ def cleanup_additional_models(models):
if
hasattr
(
m
,
'cleanup'
):
if
hasattr
(
m
,
'cleanup'
):
m
.
cleanup
()
m
.
cleanup
()
def
sampl
e
(
model
,
noise
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent_image
,
denoise
=
1.0
,
disable_noise
=
False
,
start_step
=
None
,
last_step
=
None
,
force_full_denoise
=
False
,
noise_mask
=
None
,
sigmas
=
None
,
callback
=
None
,
disable_pbar
=
False
,
seed
=
None
):
def
prepare_
sampl
ing
(
model
,
noise
_shape
,
positive
,
negative
,
noise_mask
):
device
=
comfy
.
model_management
.
get_torch
_device
()
device
=
model
.
load
_device
if
noise_mask
is
not
None
:
if
noise_mask
is
not
None
:
noise_mask
=
prepare_mask
(
noise_mask
,
noise
.
shape
,
device
)
noise_mask
=
prepare_mask
(
noise_mask
,
noise
_
shape
,
device
)
real_model
=
None
real_model
=
None
models
,
inference_memory
=
get_additional_models
(
positive
,
negative
,
model
.
model_dtype
())
models
,
inference_memory
=
get_additional_models
(
positive
,
negative
,
model
.
model_dtype
())
comfy
.
model_management
.
load_models_gpu
([
model
]
+
models
,
comfy
.
model_management
.
batch_area_memory
(
noise
.
shape
[
0
]
*
noise
.
shape
[
2
]
*
noise
.
shape
[
3
])
+
inference_memory
)
comfy
.
model_management
.
load_models_gpu
([
model
]
+
models
,
comfy
.
model_management
.
batch_area_memory
(
noise
_
shape
[
0
]
*
noise
_
shape
[
2
]
*
noise
_
shape
[
3
])
+
inference_memory
)
real_model
=
model
.
model
real_model
=
model
.
model
noise
=
noise
.
to
(
device
)
positive_copy
=
broadcast_cond
(
positive
,
noise_shape
[
0
],
device
)
latent_image
=
latent_image
.
to
(
device
)
negative_copy
=
broadcast_cond
(
negative
,
noise_shape
[
0
],
device
)
return
real_model
,
positive_copy
,
negative_copy
,
noise_mask
,
models
positive_copy
=
broadcast_cond
(
positive
,
noise
.
shape
[
0
],
devic
e
)
def
sample
(
model
,
noise
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent_image
,
denoise
=
1.0
,
disable_noise
=
False
,
start_step
=
None
,
last_step
=
None
,
force_full_denoise
=
False
,
noise_mask
=
None
,
sigmas
=
None
,
callback
=
None
,
disable_pbar
=
False
,
seed
=
Non
e
)
:
negative_copy
=
broadcast_cond
(
negative
,
noise
.
shape
[
0
],
device
)
real_model
,
positive_copy
,
negative_copy
,
noise_mask
,
models
=
prepare_sampling
(
model
,
noise
.
shape
,
positive
,
negative
,
noise_mask
)
noise
=
noise
.
to
(
model
.
load_device
)
latent_image
=
latent_image
.
to
(
model
.
load_device
)
sampler
=
comfy
.
samplers
.
KSampler
(
real_model
,
steps
=
steps
,
device
=
device
,
sampler
=
sampler_name
,
scheduler
=
scheduler
,
denoise
=
denoise
,
model_options
=
model
.
model_options
)
sampler
=
comfy
.
samplers
.
KSampler
(
real_model
,
steps
=
steps
,
device
=
model
.
load_
device
,
sampler
=
sampler_name
,
scheduler
=
scheduler
,
denoise
=
denoise
,
model_options
=
model
.
model_options
)
samples
=
sampler
.
sample
(
noise
,
positive_copy
,
negative_copy
,
cfg
=
cfg
,
latent_image
=
latent_image
,
start_step
=
start_step
,
last_step
=
last_step
,
force_full_denoise
=
force_full_denoise
,
denoise_mask
=
noise_mask
,
sigmas
=
sigmas
,
callback
=
callback
,
disable_pbar
=
disable_pbar
,
seed
=
seed
)
samples
=
sampler
.
sample
(
noise
,
positive_copy
,
negative_copy
,
cfg
=
cfg
,
latent_image
=
latent_image
,
start_step
=
start_step
,
last_step
=
last_step
,
force_full_denoise
=
force_full_denoise
,
denoise_mask
=
noise_mask
,
sigmas
=
sigmas
,
callback
=
callback
,
disable_pbar
=
disable_pbar
,
seed
=
seed
)
samples
=
samples
.
cpu
()
samples
=
samples
.
cpu
()
...
...
latent_preview.py
View file @
bf3fc2f1
...
@@ -5,6 +5,7 @@ import numpy as np
...
@@ -5,6 +5,7 @@ import numpy as np
from
comfy.cli_args
import
args
,
LatentPreviewMethod
from
comfy.cli_args
import
args
,
LatentPreviewMethod
from
comfy.taesd.taesd
import
TAESD
from
comfy.taesd.taesd
import
TAESD
import
folder_paths
import
folder_paths
import
comfy.utils
MAX_PREVIEW_RESOLUTION
=
512
MAX_PREVIEW_RESOLUTION
=
512
...
@@ -74,4 +75,21 @@ def get_previewer(device, latent_format):
...
@@ -74,4 +75,21 @@ def get_previewer(device, latent_format):
previewer
=
Latent2RGBPreviewer
(
latent_format
.
latent_rgb_factors
)
previewer
=
Latent2RGBPreviewer
(
latent_format
.
latent_rgb_factors
)
return
previewer
return
previewer
def
prepare_callback
(
model
,
steps
,
x0_output_dict
=
None
):
preview_format
=
"JPEG"
if
preview_format
not
in
[
"JPEG"
,
"PNG"
]:
preview_format
=
"JPEG"
previewer
=
get_previewer
(
model
.
load_device
,
model
.
model
.
latent_format
)
pbar
=
comfy
.
utils
.
ProgressBar
(
steps
)
def
callback
(
step
,
x0
,
x
,
total_steps
):
if
x0_output_dict
is
not
None
:
x0_output_dict
[
"x0"
]
=
x0
preview_bytes
=
None
if
previewer
:
preview_bytes
=
previewer
.
decode_latent_to_preview_image
(
preview_format
,
x0
)
pbar
.
update_absolute
(
step
+
1
,
total_steps
,
preview_bytes
)
return
callback
nodes.py
View file @
bf3fc2f1
...
@@ -1189,11 +1189,8 @@ class SetLatentNoiseMask:
...
@@ -1189,11 +1189,8 @@ class SetLatentNoiseMask:
s
[
"noise_mask"
]
=
mask
.
reshape
((
-
1
,
1
,
mask
.
shape
[
-
2
],
mask
.
shape
[
-
1
]))
s
[
"noise_mask"
]
=
mask
.
reshape
((
-
1
,
1
,
mask
.
shape
[
-
2
],
mask
.
shape
[
-
1
]))
return
(
s
,)
return
(
s
,)
def
common_ksampler
(
model
,
seed
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent
,
denoise
=
1.0
,
disable_noise
=
False
,
start_step
=
None
,
last_step
=
None
,
force_full_denoise
=
False
):
def
common_ksampler
(
model
,
seed
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent
,
denoise
=
1.0
,
disable_noise
=
False
,
start_step
=
None
,
last_step
=
None
,
force_full_denoise
=
False
):
device
=
comfy
.
model_management
.
get_torch_device
()
latent_image
=
latent
[
"samples"
]
latent_image
=
latent
[
"samples"
]
if
disable_noise
:
if
disable_noise
:
noise
=
torch
.
zeros
(
latent_image
.
size
(),
dtype
=
latent_image
.
dtype
,
layout
=
latent_image
.
layout
,
device
=
"cpu"
)
noise
=
torch
.
zeros
(
latent_image
.
size
(),
dtype
=
latent_image
.
dtype
,
layout
=
latent_image
.
layout
,
device
=
"cpu"
)
else
:
else
:
...
@@ -1204,19 +1201,7 @@ def common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive,
...
@@ -1204,19 +1201,7 @@ def common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive,
if
"noise_mask"
in
latent
:
if
"noise_mask"
in
latent
:
noise_mask
=
latent
[
"noise_mask"
]
noise_mask
=
latent
[
"noise_mask"
]
preview_format
=
"JPEG"
callback
=
latent_preview
.
prepare_callback
(
model
,
steps
)
if
preview_format
not
in
[
"JPEG"
,
"PNG"
]:
preview_format
=
"JPEG"
previewer
=
latent_preview
.
get_previewer
(
device
,
model
.
model
.
latent_format
)
pbar
=
comfy
.
utils
.
ProgressBar
(
steps
)
def
callback
(
step
,
x0
,
x
,
total_steps
):
preview_bytes
=
None
if
previewer
:
preview_bytes
=
previewer
.
decode_latent_to_preview_image
(
preview_format
,
x0
)
pbar
.
update_absolute
(
step
+
1
,
total_steps
,
preview_bytes
)
samples
=
comfy
.
sample
.
sample
(
model
,
noise
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent_image
,
samples
=
comfy
.
sample
.
sample
(
model
,
noise
,
steps
,
cfg
,
sampler_name
,
scheduler
,
positive
,
negative
,
latent_image
,
denoise
=
denoise
,
disable_noise
=
disable_noise
,
start_step
=
start_step
,
last_step
=
last_step
,
denoise
=
denoise
,
disable_noise
=
disable_noise
,
start_step
=
start_step
,
last_step
=
last_step
,
force_full_denoise
=
force_full_denoise
,
noise_mask
=
noise_mask
,
callback
=
callback
,
seed
=
seed
)
force_full_denoise
=
force_full_denoise
,
noise_mask
=
noise_mask
,
callback
=
callback
,
seed
=
seed
)
...
...
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