mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-09-06 17:17:06 +08:00
Add a LoadVideo node to make testing easier
This commit is contained in:
parent
c71901027d
commit
5c55ce5938
@ -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",
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user