LuckyOda's picture
Add files using upload-large-folder tool
ba088fc verified
Raw
History Blame Contribute Delete
2.5 kB
# SPDX-License-Identifier: MIT
# Copyright (C) 2025 ComfyUI-Multiband Contributors
"""Save Multiband Image node."""
import os
from ..multiband_types import MULTIBAND_IMAGE, multiband_to_numpy, get_channel_names
from ..utils.io_numpy import save_numpy, save_npz
from ..utils.io_tiff import save_tiff
from ..utils.io_exr import save_exr, is_available as exr_available
class SaveMultibandImage:
"""
Save a multi-band image to disk.
Formats:
- npy: Simple numpy array (no metadata)
- npz: Numpy with channel names and metadata
- tiff: Multi-page TIFF with metadata in description
- exr: OpenEXR with named channels
"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"multiband": (MULTIBAND_IMAGE,),
"file_path": ("STRING", {
"default": "output/multiband",
"tooltip": "Output file path (extension determines format if not specified)"
}),
"format": (["npz", "npy", "tiff", "exr"], {
"default": "npz",
"tooltip": "Output file format"
}),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("saved_path",)
FUNCTION = "save"
CATEGORY = "multiband/io"
OUTPUT_NODE = True
def save(self, multiband: dict, file_path: str, format: str = "npz"):
# Get numpy array
arr = multiband_to_numpy(multiband)
channel_names = get_channel_names(multiband)
metadata = multiband.get('metadata', {})
# Ensure output directory exists
os.makedirs(os.path.dirname(file_path) or '.', exist_ok=True)
# Save based on format
if format == 'npy':
saved_path = save_numpy(file_path, arr)
elif format == 'npz':
saved_path = save_npz(file_path, arr, channel_names, metadata)
elif format == 'tiff':
saved_path = save_tiff(file_path, arr, channel_names, metadata)
elif format == 'exr':
if not exr_available():
raise ImportError("OpenEXR not installed. Install with: pip install OpenEXR")
saved_path = save_exr(file_path, arr, channel_names, metadata)
else:
raise ValueError(f"Unsupported format: {format}")
print(f"SaveMultibandImage: Saved to {saved_path}")
print(f" Shape: {arr.shape}")
print(f" Format: {format}")
return (saved_path,)