Add a LoadVideo node to make testing easier

This commit is contained in:
Jacob Segal 2025-04-28 18:40:13 -07:00
parent c71901027d
commit 5c55ce5938

View File

@ -7,7 +7,7 @@ import folder_paths
import json import json
from typing import Optional, Literal from typing import Optional, Literal
from fractions import Fraction from fractions import Fraction
from comfy.comfy_types import IO, FileLocator, ComfyNodeABC, VideoInput, AudioInput, ImageInput, VideoFromComponents, VideoContainer, VideoCodec, VideoComponents from comfy.comfy_types import IO, FileLocator, ComfyNodeABC, VideoInput, AudioInput, ImageInput, VideoFromComponents, VideoContainer, VideoCodec, VideoComponents, VideoFromFile
from comfy.cli_args import args from comfy.cli_args import args
class SaveWEBM: class SaveWEBM:
@ -189,15 +189,50 @@ class GetVideoComponents(ComfyNodeABC):
return (components.images, components.audio, float(components.frame_rate)) return (components.images, components.audio, float(components.frame_rate))
class LoadVideo(ComfyNodeABC):
@classmethod
def INPUT_TYPES(cls):
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))]
files = folder_paths.filter_files_content_types(files, ["video"])
return {"required":
{"file": (sorted(files), {"video_upload": True})},
}
CATEGORY = "image/video"
RETURN_TYPES = (IO.VIDEO,)
FUNCTION = "load_video"
def load_video(self, file):
video_path = folder_paths.get_annotated_filepath(file)
return (VideoFromFile(video_path),)
@classmethod
def IS_CHANGED(cls, file):
video_path = folder_paths.get_annotated_filepath(file)
mod_time = os.path.getmtime(video_path)
# Instead of hashing the file, we can just use the modification time to avoid
# rehashing large files.
return mod_time
@classmethod
def VALIDATE_INPUTS(cls, file):
if not folder_paths.exists_annotated_filepath(file):
return "Invalid video file: {}".format(file)
return True
NODE_CLASS_MAPPINGS = { NODE_CLASS_MAPPINGS = {
"SaveWEBM": SaveWEBM, "SaveWEBM": SaveWEBM,
"SaveVideo": SaveVideo, "SaveVideo": SaveVideo,
"CreateVideo": CreateVideo, "CreateVideo": CreateVideo,
"GetVideoComponents": GetVideoComponents, "GetVideoComponents": GetVideoComponents,
"LoadVideo": LoadVideo,
} }
NODE_DISPLAY_NAME_MAPPINGS = { NODE_DISPLAY_NAME_MAPPINGS = {
"SaveVideo": "Save Video", "SaveVideo": "Save Video",
"CreateVideo": "Create Video", "CreateVideo": "Create Video",
"GetVideoComponents": "Get Video Components", "GetVideoComponents": "Get Video Components",
"LoadVideo": "Load Video",
} }