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
faf899ad
"composable_kernel/include/utility/array.hpp" did not exist on "bd44e6390da74e04f5fc3eea252f3bc6c93c0735"
Commit
faf899ad
authored
May 17, 2023
by
comfyanonymous
Browse files
LoadLatent and SaveLatent should behave like the LoadImage and SaveImage.
parent
a7375103
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
56 additions
and
69 deletions
+56
-69
folder_paths.py
folder_paths.py
+34
-1
input/latents/_input_latents_will_be_put_here
input/latents/_input_latents_will_be_put_here
+0
-0
nodes.py
nodes.py
+22
-68
No files found.
folder_paths.py
View file @
faf899ad
...
@@ -147,4 +147,37 @@ def get_filename_list(folder_name):
...
@@ -147,4 +147,37 @@ def get_filename_list(folder_name):
output_list
.
update
(
filter_files_extensions
(
recursive_search
(
x
),
folders
[
1
]))
output_list
.
update
(
filter_files_extensions
(
recursive_search
(
x
),
folders
[
1
]))
return
sorted
(
list
(
output_list
))
return
sorted
(
list
(
output_list
))
def
get_save_image_path
(
filename_prefix
,
output_dir
,
image_width
=
0
,
image_height
=
0
):
def
map_filename
(
filename
):
prefix_len
=
len
(
os
.
path
.
basename
(
filename_prefix
))
prefix
=
filename
[:
prefix_len
+
1
]
try
:
digits
=
int
(
filename
[
prefix_len
+
1
:].
split
(
'_'
)[
0
])
except
:
digits
=
0
return
(
digits
,
prefix
)
def
compute_vars
(
input
,
image_width
,
image_height
):
input
=
input
.
replace
(
"%width%"
,
str
(
image_width
))
input
=
input
.
replace
(
"%height%"
,
str
(
image_height
))
return
input
filename_prefix
=
compute_vars
(
filename_prefix
,
image_width
,
image_height
)
subfolder
=
os
.
path
.
dirname
(
os
.
path
.
normpath
(
filename_prefix
))
filename
=
os
.
path
.
basename
(
os
.
path
.
normpath
(
filename_prefix
))
full_output_folder
=
os
.
path
.
join
(
output_dir
,
subfolder
)
if
os
.
path
.
commonpath
((
output_dir
,
os
.
path
.
abspath
(
full_output_folder
)))
!=
output_dir
:
print
(
"Saving image outside the output folder is not allowed."
)
return
{}
try
:
counter
=
max
(
filter
(
lambda
a
:
a
[
1
][:
-
1
]
==
filename
and
a
[
1
][
-
1
]
==
"_"
,
map
(
map_filename
,
os
.
listdir
(
full_output_folder
))))[
0
]
+
1
except
ValueError
:
counter
=
1
except
FileNotFoundError
:
os
.
makedirs
(
full_output_folder
,
exist_ok
=
True
)
counter
=
1
return
full_output_folder
,
filename
,
counter
,
subfolder
,
filename_prefix
input/latents/_input_latents_will_be_put_here
deleted
100644 → 0
View file @
a7375103
nodes.py
View file @
faf899ad
...
@@ -251,13 +251,12 @@ class VAEEncodeForInpaint:
...
@@ -251,13 +251,12 @@ class VAEEncodeForInpaint:
class
SaveLatent
:
class
SaveLatent
:
def
__init__
(
self
):
def
__init__
(
self
):
self
.
output_dir
=
os
.
path
.
join
(
folder_paths
.
get_input_directory
(),
"latents"
)
self
.
output_dir
=
folder_paths
.
get_output_directory
()
self
.
type
=
"output"
@
classmethod
@
classmethod
def
INPUT_TYPES
(
s
):
def
INPUT_TYPES
(
s
):
return
{
"required"
:
{
"samples"
:
(
"LATENT"
,
),
return
{
"required"
:
{
"samples"
:
(
"LATENT"
,
),
"filename_prefix"
:
(
"STRING"
,
{
"default"
:
"ComfyUI"
})},
"filename_prefix"
:
(
"STRING"
,
{
"default"
:
"
latents/
ComfyUI"
})},
"hidden"
:
{
"prompt"
:
"PROMPT"
,
"extra_pnginfo"
:
"EXTRA_PNGINFO"
},
"hidden"
:
{
"prompt"
:
"PROMPT"
,
"extra_pnginfo"
:
"EXTRA_PNGINFO"
},
}
}
RETURN_TYPES
=
()
RETURN_TYPES
=
()
...
@@ -268,31 +267,7 @@ class SaveLatent:
...
@@ -268,31 +267,7 @@ class SaveLatent:
CATEGORY
=
"_for_testing"
CATEGORY
=
"_for_testing"
def
save
(
self
,
samples
,
filename_prefix
=
"ComfyUI"
,
prompt
=
None
,
extra_pnginfo
=
None
):
def
save
(
self
,
samples
,
filename_prefix
=
"ComfyUI"
,
prompt
=
None
,
extra_pnginfo
=
None
):
def
map_filename
(
filename
):
full_output_folder
,
filename
,
counter
,
subfolder
,
filename_prefix
=
folder_paths
.
get_save_image_path
(
filename_prefix
,
self
.
output_dir
)
prefix_len
=
len
(
os
.
path
.
basename
(
filename_prefix
))
prefix
=
filename
[:
prefix_len
+
1
]
try
:
digits
=
int
(
filename
[
prefix_len
+
1
:].
split
(
'_'
)[
0
])
except
:
digits
=
0
return
(
digits
,
prefix
)
subfolder
=
os
.
path
.
dirname
(
os
.
path
.
normpath
(
filename_prefix
))
filename
=
os
.
path
.
basename
(
os
.
path
.
normpath
(
filename_prefix
))
full_output_folder
=
os
.
path
.
join
(
self
.
output_dir
,
subfolder
)
if
os
.
path
.
commonpath
((
self
.
output_dir
,
os
.
path
.
abspath
(
full_output_folder
)))
!=
self
.
output_dir
:
print
(
"Saving latent outside the 'input/latents' folder is not allowed."
)
return
{}
try
:
counter
=
max
(
filter
(
lambda
a
:
a
[
1
][:
-
1
]
==
filename
and
a
[
1
][
-
1
]
==
"_"
,
map
(
map_filename
,
os
.
listdir
(
full_output_folder
))))[
0
]
+
1
except
ValueError
:
counter
=
1
except
FileNotFoundError
:
os
.
makedirs
(
full_output_folder
,
exist_ok
=
True
)
counter
=
1
# support save metadata for latent sharing
# support save metadata for latent sharing
prompt_info
=
""
prompt_info
=
""
...
@@ -316,11 +291,10 @@ class SaveLatent:
...
@@ -316,11 +291,10 @@ class SaveLatent:
class
LoadLatent
:
class
LoadLatent
:
input_dir
=
os
.
path
.
join
(
folder_paths
.
get_input_directory
(),
"latents"
)
@
classmethod
@
classmethod
def
INPUT_TYPES
(
s
):
def
INPUT_TYPES
(
s
):
files
=
[
f
for
f
in
os
.
listdir
(
s
.
input_dir
)
if
os
.
path
.
isfile
(
os
.
path
.
join
(
s
.
input_dir
,
f
))
and
f
.
endswith
(
".latent"
)]
input_dir
=
folder_paths
.
get_input_directory
()
files
=
[
f
for
f
in
os
.
listdir
(
input_dir
)
if
os
.
path
.
isfile
(
os
.
path
.
join
(
input_dir
,
f
))
and
f
.
endswith
(
".latent"
)]
return
{
"required"
:
{
"latent"
:
[
sorted
(
files
),
]},
}
return
{
"required"
:
{
"latent"
:
[
sorted
(
files
),
]},
}
CATEGORY
=
"_for_testing"
CATEGORY
=
"_for_testing"
...
@@ -329,13 +303,25 @@ class LoadLatent:
...
@@ -329,13 +303,25 @@ class LoadLatent:
FUNCTION
=
"load"
FUNCTION
=
"load"
def
load
(
self
,
latent
):
def
load
(
self
,
latent
):
file
=
folder_paths
.
get_annotated_filepath
(
latent
,
self
.
input_dir
)
latent_path
=
folder_paths
.
get_annotated_filepath
(
latent
)
latent
=
safetensors
.
torch
.
load_file
(
latent_path
,
device
=
"cpu"
)
latent
=
safetensors
.
torch
.
load_file
(
file
,
device
=
"cpu"
)
samples
=
{
"samples"
:
latent
[
"latent_tensor"
]}
samples
=
{
"samples"
:
latent
[
"latent_tensor"
]}
return
(
samples
,
)
return
(
samples
,
)
@
classmethod
def
IS_CHANGED
(
s
,
latent
):
image_path
=
folder_paths
.
get_annotated_filepath
(
latent
)
m
=
hashlib
.
sha256
()
with
open
(
image_path
,
'rb'
)
as
f
:
m
.
update
(
f
.
read
())
return
m
.
digest
().
hex
()
@
classmethod
def
VALIDATE_INPUTS
(
s
,
latent
):
if
not
folder_paths
.
exists_annotated_filepath
(
latent
):
return
"Invalid latent file: {}"
.
format
(
latent
)
return
True
class
CheckpointLoader
:
class
CheckpointLoader
:
@
classmethod
@
classmethod
...
@@ -1020,39 +1006,7 @@ class SaveImage:
...
@@ -1020,39 +1006,7 @@ class SaveImage:
CATEGORY
=
"image"
CATEGORY
=
"image"
def
save_images
(
self
,
images
,
filename_prefix
=
"ComfyUI"
,
prompt
=
None
,
extra_pnginfo
=
None
):
def
save_images
(
self
,
images
,
filename_prefix
=
"ComfyUI"
,
prompt
=
None
,
extra_pnginfo
=
None
):
def
map_filename
(
filename
):
full_output_folder
,
filename
,
counter
,
subfolder
,
filename_prefix
=
folder_paths
.
get_save_image_path
(
filename_prefix
,
self
.
output_dir
,
images
[
0
].
shape
[
1
],
images
[
0
].
shape
[
0
])
prefix_len
=
len
(
os
.
path
.
basename
(
filename_prefix
))
prefix
=
filename
[:
prefix_len
+
1
]
try
:
digits
=
int
(
filename
[
prefix_len
+
1
:].
split
(
'_'
)[
0
])
except
:
digits
=
0
return
(
digits
,
prefix
)
def
compute_vars
(
input
):
input
=
input
.
replace
(
"%width%"
,
str
(
images
[
0
].
shape
[
1
]))
input
=
input
.
replace
(
"%height%"
,
str
(
images
[
0
].
shape
[
0
]))
return
input
filename_prefix
=
compute_vars
(
filename_prefix
)
subfolder
=
os
.
path
.
dirname
(
os
.
path
.
normpath
(
filename_prefix
))
filename
=
os
.
path
.
basename
(
os
.
path
.
normpath
(
filename_prefix
))
full_output_folder
=
os
.
path
.
join
(
self
.
output_dir
,
subfolder
)
if
os
.
path
.
commonpath
((
self
.
output_dir
,
os
.
path
.
abspath
(
full_output_folder
)))
!=
self
.
output_dir
:
print
(
"Saving image outside the output folder is not allowed."
)
return
{}
try
:
counter
=
max
(
filter
(
lambda
a
:
a
[
1
][:
-
1
]
==
filename
and
a
[
1
][
-
1
]
==
"_"
,
map
(
map_filename
,
os
.
listdir
(
full_output_folder
))))[
0
]
+
1
except
ValueError
:
counter
=
1
except
FileNotFoundError
:
os
.
makedirs
(
full_output_folder
,
exist_ok
=
True
)
counter
=
1
results
=
list
()
results
=
list
()
for
image
in
images
:
for
image
in
images
:
i
=
255.
*
image
.
cpu
().
numpy
()
i
=
255.
*
image
.
cpu
().
numpy
()
...
...
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