44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
from .categories import NodeCategories
|
|
from .shared import 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, **kwargs):
|
|
return float("NaN")
|
|
|
|
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])
|