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
9ac0b487
Commit
9ac0b487
authored
Dec 08, 2023
by
comfyanonymous
Browse files
Make --gpu-only put intermediate values in GPU memory instead of cpu.
parent
cdff0810
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
36 additions
and
29 deletions
+36
-29
comfy/clip_vision.py
comfy/clip_vision.py
+2
-2
comfy/model_management.py
comfy/model_management.py
+6
-0
comfy/sample.py
comfy/sample.py
+2
-2
comfy/sd.py
comfy/sd.py
+12
-11
comfy/sd1_clip.py
comfy/sd1_clip.py
+3
-3
comfy/utils.py
comfy/utils.py
+6
-6
comfy_extras/nodes_canny.py
comfy_extras/nodes_canny.py
+1
-1
comfy_extras/nodes_post_processing.py
comfy_extras/nodes_post_processing.py
+1
-1
nodes.py
nodes.py
+3
-3
No files found.
comfy/clip_vision.py
View file @
9ac0b487
...
@@ -54,10 +54,10 @@ class ClipVisionModel():
...
@@ -54,10 +54,10 @@ class ClipVisionModel():
t
=
outputs
[
k
]
t
=
outputs
[
k
]
if
t
is
not
None
:
if
t
is
not
None
:
if
k
==
'hidden_states'
:
if
k
==
'hidden_states'
:
outputs
[
"penultimate_hidden_states"
]
=
t
[
-
2
].
cpu
()
outputs
[
"penultimate_hidden_states"
]
=
t
[
-
2
].
to
(
comfy
.
model_management
.
intermediate_device
()
)
outputs
[
"hidden_states"
]
=
None
outputs
[
"hidden_states"
]
=
None
else
:
else
:
outputs
[
k
]
=
t
.
cpu
()
outputs
[
k
]
=
t
.
to
(
comfy
.
model_management
.
intermediate_device
()
)
return
outputs
return
outputs
...
...
comfy/model_management.py
View file @
9ac0b487
...
@@ -508,6 +508,12 @@ def text_encoder_dtype(device=None):
...
@@ -508,6 +508,12 @@ def text_encoder_dtype(device=None):
else
:
else
:
return
torch
.
float32
return
torch
.
float32
def
intermediate_device
():
if
args
.
gpu_only
:
return
get_torch_device
()
else
:
return
torch
.
device
(
"cpu"
)
def
vae_device
():
def
vae_device
():
return
get_torch_device
()
return
get_torch_device
()
...
...
comfy/sample.py
View file @
9ac0b487
...
@@ -98,7 +98,7 @@ def sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative
...
@@ -98,7 +98,7 @@ def sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative
sampler
=
comfy
.
samplers
.
KSampler
(
real_model
,
steps
=
steps
,
device
=
model
.
load_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
.
to
(
comfy
.
model_management
.
intermediate_device
()
)
cleanup_additional_models
(
models
)
cleanup_additional_models
(
models
)
cleanup_additional_models
(
set
(
get_models_from_cond
(
positive_copy
,
"control"
)
+
get_models_from_cond
(
negative_copy
,
"control"
)))
cleanup_additional_models
(
set
(
get_models_from_cond
(
positive_copy
,
"control"
)
+
get_models_from_cond
(
negative_copy
,
"control"
)))
...
@@ -111,7 +111,7 @@ def sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent
...
@@ -111,7 +111,7 @@ def sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent
sigmas
=
sigmas
.
to
(
model
.
load_device
)
sigmas
=
sigmas
.
to
(
model
.
load_device
)
samples
=
comfy
.
samplers
.
sample
(
real_model
,
noise
,
positive_copy
,
negative_copy
,
cfg
,
model
.
load_device
,
sampler
,
sigmas
,
model_options
=
model
.
model_options
,
latent_image
=
latent_image
,
denoise_mask
=
noise_mask
,
callback
=
callback
,
disable_pbar
=
disable_pbar
,
seed
=
seed
)
samples
=
comfy
.
samplers
.
sample
(
real_model
,
noise
,
positive_copy
,
negative_copy
,
cfg
,
model
.
load_device
,
sampler
,
sigmas
,
model_options
=
model
.
model_options
,
latent_image
=
latent_image
,
denoise_mask
=
noise_mask
,
callback
=
callback
,
disable_pbar
=
disable_pbar
,
seed
=
seed
)
samples
=
samples
.
cpu
()
samples
=
samples
.
to
(
comfy
.
model_management
.
intermediate_device
()
)
cleanup_additional_models
(
models
)
cleanup_additional_models
(
models
)
cleanup_additional_models
(
set
(
get_models_from_cond
(
positive_copy
,
"control"
)
+
get_models_from_cond
(
negative_copy
,
"control"
)))
cleanup_additional_models
(
set
(
get_models_from_cond
(
positive_copy
,
"control"
)
+
get_models_from_cond
(
negative_copy
,
"control"
)))
return
samples
return
samples
...
...
comfy/sd.py
View file @
9ac0b487
...
@@ -190,6 +190,7 @@ class VAE:
...
@@ -190,6 +190,7 @@ class VAE:
offload_device
=
model_management
.
vae_offload_device
()
offload_device
=
model_management
.
vae_offload_device
()
self
.
vae_dtype
=
model_management
.
vae_dtype
()
self
.
vae_dtype
=
model_management
.
vae_dtype
()
self
.
first_stage_model
.
to
(
self
.
vae_dtype
)
self
.
first_stage_model
.
to
(
self
.
vae_dtype
)
self
.
output_device
=
model_management
.
intermediate_device
()
self
.
patcher
=
comfy
.
model_patcher
.
ModelPatcher
(
self
.
first_stage_model
,
load_device
=
self
.
device
,
offload_device
=
offload_device
)
self
.
patcher
=
comfy
.
model_patcher
.
ModelPatcher
(
self
.
first_stage_model
,
load_device
=
self
.
device
,
offload_device
=
offload_device
)
...
@@ -201,9 +202,9 @@ class VAE:
...
@@ -201,9 +202,9 @@ class VAE:
decode_fn
=
lambda
a
:
(
self
.
first_stage_model
.
decode
(
a
.
to
(
self
.
vae_dtype
).
to
(
self
.
device
))
+
1.0
).
float
()
decode_fn
=
lambda
a
:
(
self
.
first_stage_model
.
decode
(
a
.
to
(
self
.
vae_dtype
).
to
(
self
.
device
))
+
1.0
).
float
()
output
=
torch
.
clamp
((
output
=
torch
.
clamp
((
(
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
//
2
,
tile_y
*
2
,
overlap
,
upscale_amount
=
8
,
pbar
=
pbar
)
+
(
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
//
2
,
tile_y
*
2
,
overlap
,
upscale_amount
=
8
,
output_device
=
self
.
output_device
,
pbar
=
pbar
)
+
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
*
2
,
tile_y
//
2
,
overlap
,
upscale_amount
=
8
,
pbar
=
pbar
)
+
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
*
2
,
tile_y
//
2
,
overlap
,
upscale_amount
=
8
,
output_device
=
self
.
output_device
,
pbar
=
pbar
)
+
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
,
tile_y
,
overlap
,
upscale_amount
=
8
,
pbar
=
pbar
))
comfy
.
utils
.
tiled_scale
(
samples
,
decode_fn
,
tile_x
,
tile_y
,
overlap
,
upscale_amount
=
8
,
output_device
=
self
.
output_device
,
pbar
=
pbar
))
/
3.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
/
3.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
return
output
return
output
...
@@ -214,9 +215,9 @@ class VAE:
...
@@ -214,9 +215,9 @@ class VAE:
pbar
=
comfy
.
utils
.
ProgressBar
(
steps
)
pbar
=
comfy
.
utils
.
ProgressBar
(
steps
)
encode_fn
=
lambda
a
:
self
.
first_stage_model
.
encode
((
2.
*
a
-
1.
).
to
(
self
.
vae_dtype
).
to
(
self
.
device
)).
float
()
encode_fn
=
lambda
a
:
self
.
first_stage_model
.
encode
((
2.
*
a
-
1.
).
to
(
self
.
vae_dtype
).
to
(
self
.
device
)).
float
()
samples
=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
,
tile_y
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
pbar
=
pbar
)
samples
=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
,
tile_y
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
output_device
=
self
.
output_device
,
pbar
=
pbar
)
samples
+=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
*
2
,
tile_y
//
2
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
pbar
=
pbar
)
samples
+=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
*
2
,
tile_y
//
2
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
output_device
=
self
.
output_device
,
pbar
=
pbar
)
samples
+=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
//
2
,
tile_y
*
2
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
pbar
=
pbar
)
samples
+=
comfy
.
utils
.
tiled_scale
(
pixel_samples
,
encode_fn
,
tile_x
//
2
,
tile_y
*
2
,
overlap
,
upscale_amount
=
(
1
/
8
),
out_channels
=
4
,
output_device
=
self
.
output_device
,
pbar
=
pbar
)
samples
/=
3.0
samples
/=
3.0
return
samples
return
samples
...
@@ -228,15 +229,15 @@ class VAE:
...
@@ -228,15 +229,15 @@ class VAE:
batch_number
=
int
(
free_memory
/
memory_used
)
batch_number
=
int
(
free_memory
/
memory_used
)
batch_number
=
max
(
1
,
batch_number
)
batch_number
=
max
(
1
,
batch_number
)
pixel_samples
=
torch
.
empty
((
samples_in
.
shape
[
0
],
3
,
round
(
samples_in
.
shape
[
2
]
*
8
),
round
(
samples_in
.
shape
[
3
]
*
8
)),
device
=
"cpu"
)
pixel_samples
=
torch
.
empty
((
samples_in
.
shape
[
0
],
3
,
round
(
samples_in
.
shape
[
2
]
*
8
),
round
(
samples_in
.
shape
[
3
]
*
8
)),
device
=
self
.
output_device
)
for
x
in
range
(
0
,
samples_in
.
shape
[
0
],
batch_number
):
for
x
in
range
(
0
,
samples_in
.
shape
[
0
],
batch_number
):
samples
=
samples_in
[
x
:
x
+
batch_number
].
to
(
self
.
vae_dtype
).
to
(
self
.
device
)
samples
=
samples_in
[
x
:
x
+
batch_number
].
to
(
self
.
vae_dtype
).
to
(
self
.
device
)
pixel_samples
[
x
:
x
+
batch_number
]
=
torch
.
clamp
((
self
.
first_stage_model
.
decode
(
samples
).
cpu
(
).
float
()
+
1.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
pixel_samples
[
x
:
x
+
batch_number
]
=
torch
.
clamp
((
self
.
first_stage_model
.
decode
(
samples
).
to
(
self
.
output_device
).
float
()
+
1.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
except
model_management
.
OOM_EXCEPTION
as
e
:
except
model_management
.
OOM_EXCEPTION
as
e
:
print
(
"Warning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding."
)
print
(
"Warning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding."
)
pixel_samples
=
self
.
decode_tiled_
(
samples_in
)
pixel_samples
=
self
.
decode_tiled_
(
samples_in
)
pixel_samples
=
pixel_samples
.
cpu
(
).
movedim
(
1
,
-
1
)
pixel_samples
=
pixel_samples
.
to
(
self
.
output_device
).
movedim
(
1
,
-
1
)
return
pixel_samples
return
pixel_samples
def
decode_tiled
(
self
,
samples
,
tile_x
=
64
,
tile_y
=
64
,
overlap
=
16
):
def
decode_tiled
(
self
,
samples
,
tile_x
=
64
,
tile_y
=
64
,
overlap
=
16
):
...
@@ -252,10 +253,10 @@ class VAE:
...
@@ -252,10 +253,10 @@ class VAE:
free_memory
=
model_management
.
get_free_memory
(
self
.
device
)
free_memory
=
model_management
.
get_free_memory
(
self
.
device
)
batch_number
=
int
(
free_memory
/
memory_used
)
batch_number
=
int
(
free_memory
/
memory_used
)
batch_number
=
max
(
1
,
batch_number
)
batch_number
=
max
(
1
,
batch_number
)
samples
=
torch
.
empty
((
pixel_samples
.
shape
[
0
],
4
,
round
(
pixel_samples
.
shape
[
2
]
//
8
),
round
(
pixel_samples
.
shape
[
3
]
//
8
)),
device
=
"cpu"
)
samples
=
torch
.
empty
((
pixel_samples
.
shape
[
0
],
4
,
round
(
pixel_samples
.
shape
[
2
]
//
8
),
round
(
pixel_samples
.
shape
[
3
]
//
8
)),
device
=
self
.
output_device
)
for
x
in
range
(
0
,
pixel_samples
.
shape
[
0
],
batch_number
):
for
x
in
range
(
0
,
pixel_samples
.
shape
[
0
],
batch_number
):
pixels_in
=
(
2.
*
pixel_samples
[
x
:
x
+
batch_number
]
-
1.
).
to
(
self
.
vae_dtype
).
to
(
self
.
device
)
pixels_in
=
(
2.
*
pixel_samples
[
x
:
x
+
batch_number
]
-
1.
).
to
(
self
.
vae_dtype
).
to
(
self
.
device
)
samples
[
x
:
x
+
batch_number
]
=
self
.
first_stage_model
.
encode
(
pixels_in
).
cpu
(
).
float
()
samples
[
x
:
x
+
batch_number
]
=
self
.
first_stage_model
.
encode
(
pixels_in
).
to
(
self
.
output_device
).
float
()
except
model_management
.
OOM_EXCEPTION
as
e
:
except
model_management
.
OOM_EXCEPTION
as
e
:
print
(
"Warning: Ran out of memory when regular VAE encoding, retrying with tiled VAE encoding."
)
print
(
"Warning: Ran out of memory when regular VAE encoding, retrying with tiled VAE encoding."
)
...
...
comfy/sd1_clip.py
View file @
9ac0b487
...
@@ -39,7 +39,7 @@ class ClipTokenWeightEncoder:
...
@@ -39,7 +39,7 @@ class ClipTokenWeightEncoder:
out
,
pooled
=
self
.
encode
(
to_encode
)
out
,
pooled
=
self
.
encode
(
to_encode
)
if
pooled
is
not
None
:
if
pooled
is
not
None
:
first_pooled
=
pooled
[
0
:
1
].
cpu
()
first_pooled
=
pooled
[
0
:
1
].
to
(
model_management
.
intermediate_device
()
)
else
:
else
:
first_pooled
=
pooled
first_pooled
=
pooled
...
@@ -56,8 +56,8 @@ class ClipTokenWeightEncoder:
...
@@ -56,8 +56,8 @@ class ClipTokenWeightEncoder:
output
.
append
(
z
)
output
.
append
(
z
)
if
(
len
(
output
)
==
0
):
if
(
len
(
output
)
==
0
):
return
out
[
-
1
:].
cpu
(
),
first_pooled
return
out
[
-
1
:].
to
(
model_management
.
intermediate_device
()
),
first_pooled
return
torch
.
cat
(
output
,
dim
=-
2
).
cpu
(
),
first_pooled
return
torch
.
cat
(
output
,
dim
=-
2
).
to
(
model_management
.
intermediate_device
()
),
first_pooled
class
SDClipModel
(
torch
.
nn
.
Module
,
ClipTokenWeightEncoder
):
class
SDClipModel
(
torch
.
nn
.
Module
,
ClipTokenWeightEncoder
):
"""Uses the CLIP transformer encoder for text (from huggingface)"""
"""Uses the CLIP transformer encoder for text (from huggingface)"""
...
...
comfy/utils.py
View file @
9ac0b487
...
@@ -376,7 +376,7 @@ def lanczos(samples, width, height):
...
@@ -376,7 +376,7 @@ def lanczos(samples, width, height):
images
=
[
image
.
resize
((
width
,
height
),
resample
=
Image
.
Resampling
.
LANCZOS
)
for
image
in
images
]
images
=
[
image
.
resize
((
width
,
height
),
resample
=
Image
.
Resampling
.
LANCZOS
)
for
image
in
images
]
images
=
[
torch
.
from_numpy
(
np
.
array
(
image
).
astype
(
np
.
float32
)
/
255.0
).
movedim
(
-
1
,
0
)
for
image
in
images
]
images
=
[
torch
.
from_numpy
(
np
.
array
(
image
).
astype
(
np
.
float32
)
/
255.0
).
movedim
(
-
1
,
0
)
for
image
in
images
]
result
=
torch
.
stack
(
images
)
result
=
torch
.
stack
(
images
)
return
result
return
result
.
to
(
samples
.
device
,
samples
.
dtype
)
def
common_upscale
(
samples
,
width
,
height
,
upscale_method
,
crop
):
def
common_upscale
(
samples
,
width
,
height
,
upscale_method
,
crop
):
if
crop
==
"center"
:
if
crop
==
"center"
:
...
@@ -405,17 +405,17 @@ def get_tiled_scale_steps(width, height, tile_x, tile_y, overlap):
...
@@ -405,17 +405,17 @@ def get_tiled_scale_steps(width, height, tile_x, tile_y, overlap):
return
math
.
ceil
((
height
/
(
tile_y
-
overlap
)))
*
math
.
ceil
((
width
/
(
tile_x
-
overlap
)))
return
math
.
ceil
((
height
/
(
tile_y
-
overlap
)))
*
math
.
ceil
((
width
/
(
tile_x
-
overlap
)))
@
torch
.
inference_mode
()
@
torch
.
inference_mode
()
def
tiled_scale
(
samples
,
function
,
tile_x
=
64
,
tile_y
=
64
,
overlap
=
8
,
upscale_amount
=
4
,
out_channels
=
3
,
pbar
=
None
):
def
tiled_scale
(
samples
,
function
,
tile_x
=
64
,
tile_y
=
64
,
overlap
=
8
,
upscale_amount
=
4
,
out_channels
=
3
,
output_device
=
"cpu"
,
pbar
=
None
):
output
=
torch
.
empty
((
samples
.
shape
[
0
],
out_channels
,
round
(
samples
.
shape
[
2
]
*
upscale_amount
),
round
(
samples
.
shape
[
3
]
*
upscale_amount
)),
device
=
"cpu"
)
output
=
torch
.
empty
((
samples
.
shape
[
0
],
out_channels
,
round
(
samples
.
shape
[
2
]
*
upscale_amount
),
round
(
samples
.
shape
[
3
]
*
upscale_amount
)),
device
=
output_device
)
for
b
in
range
(
samples
.
shape
[
0
]):
for
b
in
range
(
samples
.
shape
[
0
]):
s
=
samples
[
b
:
b
+
1
]
s
=
samples
[
b
:
b
+
1
]
out
=
torch
.
zeros
((
s
.
shape
[
0
],
out_channels
,
round
(
s
.
shape
[
2
]
*
upscale_amount
),
round
(
s
.
shape
[
3
]
*
upscale_amount
)),
device
=
"cpu"
)
out
=
torch
.
zeros
((
s
.
shape
[
0
],
out_channels
,
round
(
s
.
shape
[
2
]
*
upscale_amount
),
round
(
s
.
shape
[
3
]
*
upscale_amount
)),
device
=
output_device
)
out_div
=
torch
.
zeros
((
s
.
shape
[
0
],
out_channels
,
round
(
s
.
shape
[
2
]
*
upscale_amount
),
round
(
s
.
shape
[
3
]
*
upscale_amount
)),
device
=
"cpu"
)
out_div
=
torch
.
zeros
((
s
.
shape
[
0
],
out_channels
,
round
(
s
.
shape
[
2
]
*
upscale_amount
),
round
(
s
.
shape
[
3
]
*
upscale_amount
)),
device
=
output_device
)
for
y
in
range
(
0
,
s
.
shape
[
2
],
tile_y
-
overlap
):
for
y
in
range
(
0
,
s
.
shape
[
2
],
tile_y
-
overlap
):
for
x
in
range
(
0
,
s
.
shape
[
3
],
tile_x
-
overlap
):
for
x
in
range
(
0
,
s
.
shape
[
3
],
tile_x
-
overlap
):
s_in
=
s
[:,:,
y
:
y
+
tile_y
,
x
:
x
+
tile_x
]
s_in
=
s
[:,:,
y
:
y
+
tile_y
,
x
:
x
+
tile_x
]
ps
=
function
(
s_in
).
cpu
(
)
ps
=
function
(
s_in
).
to
(
output_device
)
mask
=
torch
.
ones_like
(
ps
)
mask
=
torch
.
ones_like
(
ps
)
feather
=
round
(
overlap
*
upscale_amount
)
feather
=
round
(
overlap
*
upscale_amount
)
for
t
in
range
(
feather
):
for
t
in
range
(
feather
):
...
...
comfy_extras/nodes_canny.py
View file @
9ac0b487
...
@@ -291,7 +291,7 @@ class Canny:
...
@@ -291,7 +291,7 @@ class Canny:
def
detect_edge
(
self
,
image
,
low_threshold
,
high_threshold
):
def
detect_edge
(
self
,
image
,
low_threshold
,
high_threshold
):
output
=
canny
(
image
.
to
(
comfy
.
model_management
.
get_torch_device
()).
movedim
(
-
1
,
1
),
low_threshold
,
high_threshold
)
output
=
canny
(
image
.
to
(
comfy
.
model_management
.
get_torch_device
()).
movedim
(
-
1
,
1
),
low_threshold
,
high_threshold
)
img_out
=
output
[
1
].
cpu
(
).
repeat
(
1
,
3
,
1
,
1
).
movedim
(
1
,
-
1
)
img_out
=
output
[
1
].
to
(
comfy
.
model_management
.
intermediate_device
()
).
repeat
(
1
,
3
,
1
,
1
).
movedim
(
1
,
-
1
)
return
(
img_out
,)
return
(
img_out
,)
NODE_CLASS_MAPPINGS
=
{
NODE_CLASS_MAPPINGS
=
{
...
...
comfy_extras/nodes_post_processing.py
View file @
9ac0b487
...
@@ -226,7 +226,7 @@ class Sharpen:
...
@@ -226,7 +226,7 @@ class Sharpen:
batch_size
,
height
,
width
,
channels
=
image
.
shape
batch_size
,
height
,
width
,
channels
=
image
.
shape
kernel_size
=
sharpen_radius
*
2
+
1
kernel_size
=
sharpen_radius
*
2
+
1
kernel
=
gaussian_kernel
(
kernel_size
,
sigma
)
*
-
(
alpha
*
10
)
kernel
=
gaussian_kernel
(
kernel_size
,
sigma
,
device
=
image
.
device
)
*
-
(
alpha
*
10
)
center
=
kernel_size
//
2
center
=
kernel_size
//
2
kernel
[
center
,
center
]
=
kernel
[
center
,
center
]
-
kernel
.
sum
()
+
1.0
kernel
[
center
,
center
]
=
kernel
[
center
,
center
]
-
kernel
.
sum
()
+
1.0
kernel
=
kernel
.
repeat
(
channels
,
1
,
1
).
unsqueeze
(
1
)
kernel
=
kernel
.
repeat
(
channels
,
1
,
1
).
unsqueeze
(
1
)
...
...
nodes.py
View file @
9ac0b487
...
@@ -947,8 +947,8 @@ class GLIGENTextBoxApply:
...
@@ -947,8 +947,8 @@ class GLIGENTextBoxApply:
return
(
c
,
)
return
(
c
,
)
class
EmptyLatentImage
:
class
EmptyLatentImage
:
def
__init__
(
self
,
device
=
"cpu"
):
def
__init__
(
self
):
self
.
device
=
device
self
.
device
=
comfy
.
model_management
.
intermediate_
device
()
@
classmethod
@
classmethod
def
INPUT_TYPES
(
s
):
def
INPUT_TYPES
(
s
):
...
@@ -961,7 +961,7 @@ class EmptyLatentImage:
...
@@ -961,7 +961,7 @@ class EmptyLatentImage:
CATEGORY
=
"latent"
CATEGORY
=
"latent"
def
generate
(
self
,
width
,
height
,
batch_size
=
1
):
def
generate
(
self
,
width
,
height
,
batch_size
=
1
):
latent
=
torch
.
zeros
([
batch_size
,
4
,
height
//
8
,
width
//
8
])
latent
=
torch
.
zeros
([
batch_size
,
4
,
height
//
8
,
width
//
8
]
,
device
=
self
.
device
)
return
({
"samples"
:
latent
},
)
return
({
"samples"
:
latent
},
)
...
...
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