# -*- coding: utf-8 -*- from .categories import NodeCategories from .shared import ALWAYS_CHANGED_FLAG, list_images_in_directory, DreamImage from .dreamtypes import SharedTypes, FrameCounter import os class DreamImageSequenceInputWithDefaultFallback: NODE_NAME = "Image Sequence Loader" ICON = "💾" @classmethod def INPUT_TYPES(cls): return { "required": SharedTypes.frame_counter | { "directory_path": ("STRING", {"default": '', "multiline": False}), "pattern": ("STRING", {"default": '*', "multiline": False}), "indexing": (["numeric", "alphabetic order"],) }, "optional": { "default_image": ("IMAGE", {"default": None}) } } CATEGORY = NodeCategories.IMAGE_ANIMATION RETURN_TYPES = ("IMAGE","STRING") RETURN_NAMES = ("image","frame_name") FUNCTION = "result" @classmethod def IS_CHANGED(cls, *values): return ALWAYS_CHANGED_FLAG def result(self, frame_counter: FrameCounter, directory_path, pattern, indexing, **other): default_image = other.get("default_image", None) entries = list_images_in_directory(directory_path, pattern, indexing == "alphabetic order") entry = entries.get(frame_counter.current_frame, None) if not entry: return (default_image, "") else: image_names = [os.path.basename(file_path) for file_path in entry] images = map(lambda f: DreamImage(file_path=f), entry) return (DreamImage.join_to_tensor_data(images), image_names[0])