Fix I/O as latent

At some point recently, likely the execution inversion update, the
conditional toggles to load or save as latent stopped working. While I
don't have a full grasp of the entire system yet, included in the new
documentation is a recommended way of creating a node which produce or
consume multiple types of input and output. The code has been rewritten
to follow this method.

As a result:
- Things function again
- Shady link swapping on queue is no longer performed
- The image input on Video Combine is once again required
This commit is contained in:
Austin Mroz
2024-08-16 14:46:45 -05:00
parent c0b9fc90ab
commit 0a26e2defd
4 changed files with 14 additions and 32 deletions
+8 -7
View File
@@ -9,7 +9,8 @@ import psutil
import folder_paths
from comfy.utils import common_upscale, ProgressBar
from .logger import logger
from .utils import BIGMAX, DIMMAX, calculate_file_hash, get_sorted_dir_files_from_directory, lazy_get_audio, hash_path, validate_path, strip_path, try_download_video, is_url
from .utils import BIGMAX, DIMMAX, calculate_file_hash, get_sorted_dir_files_from_directory,\
lazy_get_audio, hash_path, validate_path, strip_path, try_download_video, is_url, imageOrLatent
video_extensions = ['webm', 'mp4', 'mkv', 'gif']
@@ -222,9 +223,9 @@ def load_video_cv(video: str, force_rate: int, force_size: str,
"loaded_height": new_size[1],
}
if vae is None:
return (images, len(images), audio, video_info, None)
return (images, len(images), audio, video_info)
else:
return (None, len(images), audio, video_info, {"samples": images})
return ({"samples": images}, len(images), audio, video_info)
@@ -259,8 +260,8 @@ class LoadVideoUpload:
CATEGORY = "Video Helper Suite 🎥🅥🅗🅢"
RETURN_TYPES = ("IMAGE", "INT", "AUDIO", "VHS_VIDEOINFO", "LATENT")
RETURN_NAMES = ("IMAGE", "frame_count", "audio", "video_info", "LATENT")
RETURN_TYPES = (imageOrLatent, "INT", "AUDIO", "VHS_VIDEOINFO")
RETURN_NAMES = ("IMAGE", "frame_count", "audio", "video_info")
FUNCTION = "load_video"
@@ -305,8 +306,8 @@ class LoadVideoPath:
CATEGORY = "Video Helper Suite 🎥🅥🅗🅢"
RETURN_TYPES = ("IMAGE", "INT", "AUDIO", "VHS_VIDEOINFO", "LATENT")
RETURN_NAMES = ("IMAGE", "frame_count", "audio", "video_info", "LATENT")
RETURN_TYPES = (imageOrLatent, "INT", "AUDIO", "VHS_VIDEOINFO")
RETURN_NAMES = ("IMAGE", "frame_count", "audio", "video_info")
FUNCTION = "load_video"
+2 -3
View File
@@ -19,7 +19,7 @@ from .image_latent_nodes import *
from .load_video_nodes import LoadVideoUpload, LoadVideoPath
from .load_images_nodes import LoadImagesFromDirectoryUpload, LoadImagesFromDirectoryPath
from .batched_nodes import VAEEncodeBatched, VAEDecodeBatched
from .utils import ffmpeg_path, get_audio, hash_path, validate_path, requeue_workflow, gifski_path, calculate_file_hash, strip_path, try_download_video, is_url
from .utils import ffmpeg_path, get_audio, hash_path, validate_path, requeue_workflow, gifski_path, calculate_file_hash, strip_path, try_download_video, is_url, imageOrLatent
from comfy.utils import ProgressBar
folder_paths.folder_names_and_paths["VHS_video_formats"] = (
@@ -207,6 +207,7 @@ class VideoCombine:
ffmpeg_formats = get_video_formats()
return {
"required": {
"images": (imageOrLatent,),
"frame_rate": (
"FLOAT",
{"default": 8, "min": 1, "step": 1},
@@ -218,11 +219,9 @@ class VideoCombine:
"save_output": ("BOOLEAN", {"default": True}),
},
"optional": {
"images": ("IMAGE",),
"audio": ("AUDIO",),
"meta_batch": ("VHS_BatchManager",),
"vae": ("VAE",),
"latents": ("LATENT",),
},
"hidden": {
"prompt": "PROMPT",
+4
View File
@@ -39,6 +39,10 @@ def ffmpeg_suitability(path):
score += int(copyright_year)
return score
class ImageOrLatent(str):
def __ne__(self, other):
return not (other == "IMAGE" or other == "LATENT")
imageOrLatent = ImageOrLatent("IMAGE")
if "VHS_FORCE_FFMPEG_PATH" in os.environ:
ffmpeg_path = os.environ.get("VHS_FORCE_FFMPEG_PATH")
-22
View File
@@ -489,16 +489,6 @@ function addVAEOutputToggle(nodeType, nodeData) {
}
}
});
chainCallback(nodeType.prototype, "onNodeCreated", function(contype, slot, iscon, linf) {
this.updateLink = function(link) {
if (link.origin_slot == 0 && this.outputs[0].type=="LATENT") {
return {'origin_id': link.origin_id,
'origin_slot': 4}
}
return link
}
});
}
function addVAEInputToggle(nodeType, nodeData) {
delete nodeData.input.optional["latents"]
@@ -526,18 +516,6 @@ function addVAEInputToggle(nodeType, nodeData) {
}
}
});
chainCallback(nodeType.prototype, "onNodeCreated", function(contype, slot, iscon, linf) {
this.original_getInputLink = this.getInputLink
this.getInputLink = function(slot) {
let link = this.original_getInputLink(slot)
if (slot == 0 && this.inputs[0].type=="LATENT") {
return {'origin_id': link.origin_id,
'origin_slot': link.origin_slot,
'target_slot': 4}
}
return link
}
});
}
function addDateFormatting(nodeType, field, timestamp_widget = false) {