mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-23 15:37:27 +08:00
Rename file_format to format for consistency with Save Video node
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
parent
92ab48531f
commit
923c2afd96
@ -956,7 +956,7 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.",
|
tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.",
|
||||||
),
|
),
|
||||||
IO.DynamicCombo.Input(
|
IO.DynamicCombo.Input(
|
||||||
"file_format",
|
"format",
|
||||||
options=[
|
options=[
|
||||||
IO.DynamicCombo.Option(
|
IO.DynamicCombo.Option(
|
||||||
"png",
|
"png",
|
||||||
@ -1023,7 +1023,7 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
cls,
|
cls,
|
||||||
images: Input.Image,
|
images: Input.Image,
|
||||||
filename_prefix: str,
|
filename_prefix: str,
|
||||||
file_format: dict,
|
format: dict,
|
||||||
embed_workflow: bool,
|
embed_workflow: bool,
|
||||||
prompt=None,
|
prompt=None,
|
||||||
extra_pnginfo=None
|
extra_pnginfo=None
|
||||||
@ -1033,27 +1033,27 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
results = list()
|
results = list()
|
||||||
|
|
||||||
for batch_number, image in enumerate(images):
|
for batch_number, image in enumerate(images):
|
||||||
|
# get widget values from dynamic combo
|
||||||
|
extension = format["format"]
|
||||||
|
bit_depth = format["bit_depth"]
|
||||||
|
color_space = format["color_space"]
|
||||||
|
|
||||||
img_tensor = image.clone()
|
img_tensor = image.clone()
|
||||||
height, width, num_channels = img_tensor.shape
|
height, width, num_channels = img_tensor.shape
|
||||||
has_alpha = (num_channels == 4)
|
has_alpha = (num_channels == 4)
|
||||||
|
|
||||||
# file pathing
|
# file pathing
|
||||||
filename_with_batch_num = filename.replace("%batch_num%", str(batch_number))
|
filename_with_batch_num = filename.replace("%batch_num%", str(batch_number))
|
||||||
file = f"{filename_with_batch_num}_{counter:05}.{file_format}"
|
file = f"{filename_with_batch_num}_{counter:05}.{extension}"
|
||||||
file_path = os.path.join(full_output_folder, file)
|
file_path = os.path.join(full_output_folder, file)
|
||||||
|
|
||||||
# get widget values from dynamic combo
|
|
||||||
format = file_format["file_format"]
|
|
||||||
bit_depth = file_format["bit_depth"]
|
|
||||||
color_space = file_format["color_space"]
|
|
||||||
|
|
||||||
if bit_depth == "32-bit":
|
if bit_depth == "32-bit":
|
||||||
img_np = img_tensor.cpu().numpy()
|
img_np = img_tensor.cpu().numpy()
|
||||||
# rgba128le handles 4x32f, gbrpf32le handles 3x32f planar
|
# rgba128le handles 4x32f, gbrpf32le handles 3x32f planar
|
||||||
av_fmt = 'rgba128le' if has_alpha else 'gbrpf32le'
|
av_fmt = 'rgba128le' if has_alpha else 'gbrpf32le'
|
||||||
elif bit_depth == "16-bit":
|
elif bit_depth == "16-bit":
|
||||||
img_np = (img_tensor * 65535.0).clamp(0, 65535).to(torch.int32).cpu().numpy().astype(np.uint16)
|
img_np = (img_tensor * 65535.0).clamp(0, 65535).to(torch.int32).cpu().numpy().astype(np.uint16)
|
||||||
if format == "png":
|
if extension == "png":
|
||||||
# png requires Big-Endian (be) for 16-bit
|
# png requires Big-Endian (be) for 16-bit
|
||||||
av_fmt = 'rgba64be' if has_alpha else 'rgb48be'
|
av_fmt = 'rgba64be' if has_alpha else 'rgb48be'
|
||||||
img_np = img_np.byteswap().view(img_np.dtype.newbyteorder('>'))
|
img_np = img_np.byteswap().view(img_np.dtype.newbyteorder('>'))
|
||||||
@ -1064,17 +1064,17 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
av_fmt = 'rgba' if has_alpha else 'rgb24'
|
av_fmt = 'rgba' if has_alpha else 'rgb24'
|
||||||
|
|
||||||
memory_buffer = io.BytesIO()
|
memory_buffer = io.BytesIO()
|
||||||
container_format = "image2" if format in ["png", "exr"] else "avif"
|
container_format = "image2" if extension in ["png", "exr"] else "avif"
|
||||||
container = av.open(memory_buffer, mode='w', format=container_format)
|
container = av.open(memory_buffer, mode='w', format=container_format)
|
||||||
|
|
||||||
if format == "exr":
|
if extension == "exr":
|
||||||
stream = container.add_stream('exr', rate=1)
|
stream = container.add_stream('exr', rate=1)
|
||||||
stream.pix_fmt = av_fmt
|
stream.pix_fmt = av_fmt
|
||||||
elif format == "avif":
|
elif extension == "avif":
|
||||||
stream = container.add_stream('av1', rate=1)
|
stream = container.add_stream('av1', rate=1)
|
||||||
# YUV color spaces
|
# YUV color spaces
|
||||||
stream.pix_fmt = 'yuv444p12le' if bit_depth in ["16-bit", "32-bit"] else 'yuv444p'
|
stream.pix_fmt = 'yuv444p12le' if bit_depth in ["16-bit", "32-bit"] else 'yuv444p'
|
||||||
elif format == "png":
|
elif extension == "png":
|
||||||
stream = container.add_stream('png', rate=1)
|
stream = container.add_stream('png', rate=1)
|
||||||
stream.pix_fmt = av_fmt
|
stream.pix_fmt = av_fmt
|
||||||
|
|
||||||
@ -1095,7 +1095,7 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
img_np = (img_tensor * 65535.0).clamp(0, 65535).to(torch.int32).cpu().numpy().astype(np.uint16)
|
img_np = (img_tensor * 65535.0).clamp(0, 65535).to(torch.int32).cpu().numpy().astype(np.uint16)
|
||||||
av_fmt = 'rgba64le' if has_alpha else 'rgb48le'
|
av_fmt = 'rgba64le' if has_alpha else 'rgb48le'
|
||||||
frame = av.VideoFrame.from_ndarray(img_np, format=av_fmt)
|
frame = av.VideoFrame.from_ndarray(img_np, format=av_fmt)
|
||||||
if file_format == "exr" or file_format == "png":
|
if extension == "exr" or extension == "png":
|
||||||
stream.pix_fmt = av_fmt
|
stream.pix_fmt = av_fmt
|
||||||
|
|
||||||
for packet in stream.encode(frame):
|
for packet in stream.encode(frame):
|
||||||
@ -1108,9 +1108,9 @@ class SaveImageAdvanced(IO.ComfyNode):
|
|||||||
final_bytes = memory_buffer.getvalue()
|
final_bytes = memory_buffer.getvalue()
|
||||||
|
|
||||||
if embed_workflow and not args.disable_metadata:
|
if embed_workflow and not args.disable_metadata:
|
||||||
if format == "png":
|
if extension == "png":
|
||||||
final_bytes = _inject_metadata_png(final_bytes, prompt, extra_pnginfo)
|
final_bytes = _inject_metadata_png(final_bytes, prompt, extra_pnginfo)
|
||||||
elif format == "exr":
|
elif extension == "exr":
|
||||||
final_bytes = _inject_metadata_exr(final_bytes, prompt, extra_pnginfo)
|
final_bytes = _inject_metadata_exr(final_bytes, prompt, extra_pnginfo)
|
||||||
else:
|
else:
|
||||||
final_bytes = _inject_metadata_avif(final_bytes, prompt, extra_pnginfo)
|
final_bytes = _inject_metadata_avif(final_bytes, prompt, extra_pnginfo)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user