Support relative paths and robust preview in TweenConcatVideos
Relative output_directory values are now resolved against ComfyUI's output directory. Video preview is skipped with a warning when the output path is outside the output tree (frontend can't serve it). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
31
nodes.py
31
nodes.py
@@ -360,7 +360,8 @@ class TweenConcatVideos:
|
|||||||
"output_directory": ("STRING", {
|
"output_directory": ("STRING", {
|
||||||
"default": "",
|
"default": "",
|
||||||
"tooltip": "Directory containing the segment video files. "
|
"tooltip": "Directory containing the segment video files. "
|
||||||
"Leave empty to use ComfyUI's default output directory.",
|
"Leave empty to use ComfyUI's default output directory. "
|
||||||
|
"Relative paths are resolved from the output directory.",
|
||||||
}),
|
}),
|
||||||
"filename_prefix": ("STRING", {
|
"filename_prefix": ("STRING", {
|
||||||
"default": "segment",
|
"default": "segment",
|
||||||
@@ -406,10 +407,13 @@ class TweenConcatVideos:
|
|||||||
return ffmpeg_path
|
return ffmpeg_path
|
||||||
|
|
||||||
def concat(self, model, output_directory, filename_prefix, output_filename, delete_segments, preview):
|
def concat(self, model, output_directory, filename_prefix, output_filename, delete_segments, preview):
|
||||||
# Resolve output directory
|
# Resolve output directory — empty or relative paths are relative to ComfyUI output
|
||||||
|
comfy_output = folder_paths.get_output_directory()
|
||||||
out_dir = output_directory.strip()
|
out_dir = output_directory.strip()
|
||||||
if not out_dir:
|
if not out_dir:
|
||||||
out_dir = folder_paths.get_output_directory()
|
out_dir = comfy_output
|
||||||
|
elif not os.path.isabs(out_dir):
|
||||||
|
out_dir = os.path.join(comfy_output, out_dir)
|
||||||
|
|
||||||
if not os.path.isdir(out_dir):
|
if not os.path.isdir(out_dir):
|
||||||
raise ValueError(f"Output directory does not exist: {out_dir}")
|
raise ValueError(f"Output directory does not exist: {out_dir}")
|
||||||
@@ -481,24 +485,23 @@ class TweenConcatVideos:
|
|||||||
result = {"result": (output_path,)}
|
result = {"result": (output_path,)}
|
||||||
|
|
||||||
if preview:
|
if preview:
|
||||||
filename = os.path.basename(output_path)
|
# Preview only works when the file is inside ComfyUI's output tree
|
||||||
# Determine subfolder relative to ComfyUI output dir
|
abs_out = os.path.abspath(out_dir)
|
||||||
comfy_output = folder_paths.get_output_directory()
|
abs_comfy = os.path.abspath(comfy_output)
|
||||||
if os.path.abspath(out_dir) == os.path.abspath(comfy_output):
|
if abs_out.startswith(abs_comfy + os.sep) or abs_out == abs_comfy:
|
||||||
subfolder = ""
|
subfolder = os.path.relpath(abs_out, abs_comfy) if abs_out != abs_comfy else ""
|
||||||
else:
|
|
||||||
try:
|
|
||||||
subfolder = os.path.relpath(out_dir, comfy_output)
|
|
||||||
except ValueError:
|
|
||||||
subfolder = ""
|
|
||||||
result["ui"] = {
|
result["ui"] = {
|
||||||
"gifs": [{
|
"gifs": [{
|
||||||
"filename": filename,
|
"filename": os.path.basename(output_path),
|
||||||
"subfolder": subfolder,
|
"subfolder": subfolder,
|
||||||
"type": "output",
|
"type": "output",
|
||||||
"format": "video/mp4",
|
"format": "video/mp4",
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
f"Video preview skipped: {out_dir} is outside ComfyUI output directory"
|
||||||
|
)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user