diff --git a/.gitignore b/.gitignore index 424b033..88900ae 100644 --- a/.gitignore +++ b/.gitignore @@ -85,6 +85,8 @@ ENV/ ehthumbs.db Thumbs.db +*.log + # ComfyUI specific (adjust as needed) # output/ # input/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cdf9136 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 RyanOnTheInside + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/__init__.py b/__init__.py index 5740b88..04bee39 100644 --- a/__init__.py +++ b/__init__.py @@ -1,46 +1,56 @@ +from .tooltips import TooltipManager, apply_tooltips +from .tooltips.categories import register_all_tooltips + +# Register tooltips immediately after import +from comfy.utils import ProgressBar +from tqdm import tqdm from .node_configs.node_configs import CombinedMeta from collections import OrderedDict import os import folder_paths +import shutil +#NOTE: THIS IS LEGACY FOR BACKWARD COMPATIBILITY. FUNCTIONALLY REPLACED BY TOOLTIPS. #NOTE: allows for central management and inheritance of class variables for help documentation +#TODO: move all progress hooks here? class RyanOnTheInside(metaclass=CombinedMeta): @classmethod def get_description(cls): - - display_name = NODE_DISPLAY_NAME_MAPPINGS.get(cls.__name__, cls.__name__) - footer = "For more information, visit [RyanOnTheInside GitHub](https://github.com/ryanontheinside).\n\n" - footer += "For tutorials and example workflows visit [RyanOnTheInside Civitai](https://civitai.com/user/ryanontheinside).\n\n" - footer += "For video tutorials and more visit [RyanOnTheInside YouTube](https://www.youtube.com/@ryanontheinside).\n\n" - display_name = display_name.replace(" | RyanOnTheInside", "") - - desc = f"# {display_name}\n\n" - - if hasattr(cls, 'DESCRIPTION'): - desc += f"{cls.DESCRIPTION}\n\n{footer}" - return desc - - if hasattr(cls, 'TOP_DESCRIPTION'): - desc += f"### {cls.TOP_DESCRIPTION}\n\n" - - if hasattr(cls, "BASE_DESCRIPTION"): - desc += cls.BASE_DESCRIPTION + "\n\n" - - additional_info = OrderedDict() - for c in cls.mro()[::-1]: - if hasattr(c, 'ADDITIONAL_INFO'): - info = c.ADDITIONAL_INFO.strip() - - additional_info[c.__name__] = info - - if additional_info: - desc += "\n\n".join(additional_info.values()) + "\n\n" - - if hasattr(cls, 'BOTTOM_DESCRIPTION'): - desc += f"{cls.BOTTOM_DESCRIPTION}\n\n" - - desc += footer - return desc + return "" + +class ProgressMixin: + def start_progress(self, total_steps, desc="Processing"): + self.progress_bar = ProgressBar(total_steps) + self.tqdm_bar = tqdm(total=total_steps, desc=desc, leave=False) + self.current_progress = 0 + self.total_steps = total_steps + + def update_progress(self, step=1): + self.current_progress += step + if self.progress_bar: + self.progress_bar.update(step) + if self.tqdm_bar: + self.tqdm_bar.update(step) + + def end_progress(self): + if self.tqdm_bar: + self.tqdm_bar.close() + self.progress_bar = None + self.tqdm_bar = None + self.current_progress = 0 + self.total_steps = 0 + +print(""" +[RyanOnTheInside] Loading... +██████╗ ██╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ███╗ ██╗████████╗██╗ ██╗███████╗██╗███╗ ██╗███████╗██╗██████╗ ███████╗ +██╔══██╗ ╚██╗ ██╔╝██╔══██╗████╗ ██║██╔═══██╗████╗ ██║╚══██╔══╝██║ ██║██╔════╝██║████╗ ██║██╔════╝██║██╔══██╗██╔════╝ +██████╔╝ ╚████╔╝ ███████║██╔██╗ ██║██║ ██║██╔██╗ ██║ ██║ ███████║█████╗ ██║██╔██╗ ██║███████╗██║██║ ██║█████╗ +██╔══██╗ ╚██╔╝ ██╔══██║██║╚██╗██║██║ ██║██║╚██╗██║ ██║ ██╔══██║██╔══╝ ██║██║╚██╗██║╚════██║██║██║ ██║██╔══╝ +██║ ██║ ██║ ██║ ██║██║ ╚████║╚██████╔╝██║ ╚████║ ██║ ██║ ██║███████╗██║██║ ╚████║███████║██║██████╔╝███████╗ +╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝╚═════╝ ╚══════╝ + """) + + from .nodes.masks.temporal_masks import ( MaskMorph, @@ -51,7 +61,6 @@ def get_description(cls): ) from .nodes.audio.audio_nodes import ( - AudioSeparator, AudioSeparatorSimple, DownloadOpenUnmixModel, # DownloadCREPEModel, @@ -69,6 +78,7 @@ def get_description(cls): from .nodes.audio.flex_audio_visualizer import ( FlexAudioVisualizerCircular, FlexAudioVisualizerLine, + FlexAudioVisualizerContour, ) from .nodes.audio.audio_nodes_effects import ( @@ -101,16 +111,30 @@ def get_description(cls): AreaFeatureNode, ManualFeatureNode, ManualFeatureFromPipe, + DrawableFeatureNode, + FeatureInfoNode, + FloatFeatureNode +) + +from .nodes.flex.feature_extractors_whisper import( + WhisperFeatureNode, + TriggerBuilder, + ContextModifier, + WhisperToPromptTravel, + WhisperTextRenderer, + ManualWhisperAlignmentData, + WhisperAutoAdjust, + WhisperTimeAdjuster ) from .nodes.flex.feature_extractors_audio import( AudioFeatureExtractor, - AudioFeatureExtractorFirst, PitchRangeNode, PitchRangePresetNode, PitchRangeByNoteNode, PitchFeatureExtractor, RhythmFeatureExtractor, + ) from .nodes.flex.feature_extractors_midi import( @@ -128,6 +152,7 @@ def get_description(cls): ProximityVisualizer, EffectVisualizer, PitchVisualizer, + PreviewFeature, ) @@ -157,6 +182,8 @@ def get_description(cls): TextMaskNode, MovingShape, MaskCompositePlus, + AdvancedLuminanceMask, + TranslucentComposite, ) from .nodes.utility_nodes import ( @@ -173,8 +200,10 @@ def get_description(cls): from .nodes.images.image_utility_nodes import ( DyeImage, + ColorPicker, ImageCASBatch, ImageScaleToTarget + ) from .nodes.masks.flex_masks import ( @@ -232,7 +261,7 @@ def get_description(cls): DepthRippleEffect, ) -from .nodes.flex.feature_externals import ( +from .nodes.flex.flex_externals import ( FeatureToWeightsStrategy, FeatureToSplineData, SplineFeatureModulator, @@ -240,8 +269,10 @@ def get_description(cls): DepthShapeModifier, DepthShapeModifierPrecise, FeatureToFloat, + FeatureToMask, ) + from .nodes.flex.feature_modulation import ( FeatureMixer, FeatureCombine, @@ -249,13 +280,15 @@ def get_description(cls): FeatureScaler, FeatureSmoothing, FeatureFade, - PreviewFeature, + FeatureMath, FeatureRebase, FeatureTruncateOrExtend, FeatureAccumulate, FeatureContiguousInterpolate, FeatureRenormalize, + FeatureInterpolator, + FeaturePeakDetector, ) from .nodes.audio.flex_audio import ( @@ -263,12 +296,16 @@ def get_description(cls): FlexAudioTimeStretch, ) -from .nodes.latents.latent_base import ( +from .nodes.latents.flex_latents import ( FlexLatentInterpolate, EmbeddingGuidedLatentInterpolate, FlexLatentBlend, FlexLatentNoise, ) +from .nodes.flex.parameter_scheduling import ( + FeatureToFlexIntParam, + FeatureToFlexFloatParam, +) from .nodes.latents.latent_frequency_blender import LatentFrequencyBlender @@ -278,17 +315,16 @@ def get_description(cls): from .nodes.doom.doom import Doom -from .nodes.misc.misc_nodes import WhisperToPromptTravel - -HAS_ADVANCED_LIVE_PORTRAIT = os.path.exists(os.path.join(os.path.dirname(os.path.dirname(__file__)), "ComfyUI-AdvancedLivePortrait")) - -if HAS_ADVANCED_LIVE_PORTRAIT: - from .nodes.flex.flex_advanced_live_portrait import FlexExpressionEditor -else: - print("ComfyUI-AdvancedLivePortrait not found. FlexExpressionEditor will not be available. Install ComfyUI-AdvancedLivePortrait and restart ComfyUI.") - +# from .nodes.models.flex_model_base import FlexFeatureAttentionControl +# Import external integrations +from .external_integration import ( + HAS_ADVANCED_LIVE_PORTRAIT, + HAS_ADVANCED_CONTROLNET, + HAS_ANIMATEDIFF, + EXTERNAL_NODE_CLASS_MAPPINGS, +) # Get the directory of the current file current_dir = os.path.dirname(os.path.realpath(__file__)) @@ -300,26 +336,49 @@ def get_description(cls): # Ensure the MIDI files directory exists os.makedirs(midi_path, exist_ok=True) +# Get the path to ComfyUI's web/extensions directory +extension_path = os.path.join(os.path.dirname(folder_paths.__file__), "web", "extensions") +my_extension_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "web", "extensions") + +# Create RyanOnTheInside subfolder in ComfyUI extensions +roti_extension_path = os.path.join(extension_path, "RyanOnTheInside") +os.makedirs(roti_extension_path, exist_ok=True) + +# Clean up existing files in the RyanOnTheInside folder +for file in os.listdir(roti_extension_path): + os.remove(os.path.join(roti_extension_path, file)) + +# Copy our extension files to ComfyUI's extensions/RyanOnTheInside directory +if os.path.exists(my_extension_path): + for file in os.listdir(my_extension_path): + if file.endswith('.js'): + src = os.path.join(my_extension_path, file) + dst = os.path.join(roti_extension_path, file) + print(f"[RyanOnTheInside] Copying extension file: {file}") + shutil.copy2(src, dst) NODE_CLASS_MAPPINGS = { #NOTE: PoseInterpolator is not working yet #"PoseInterpolator": PoseInterpolator, - + # "FlexFeatureAttentionControl": FlexFeatureAttentionControl, + + "FeatureInterpolator": FeatureInterpolator, + "FeaturePeakDetector": FeaturePeakDetector, + "Doom": Doom, - "WhisperToPromptTravel": WhisperToPromptTravel, - - "ManualFeaturePipe": ManualFeaturePipe, - "ManualFeatureFromPipe": ManualFeatureFromPipe, + "WhisperToPromptTravel": WhisperToPromptTravel, + "ManualFeaturePipe": ManualFeaturePipe, + "ManualFeatureFromPipe": ManualFeatureFromPipe, #latents - "FlexLatentInterpolate": FlexLatentInterpolate, + "FlexLatentInterpolate": FlexLatentInterpolate, "EmbeddingGuidedLatentInterpolate": EmbeddingGuidedLatentInterpolate, - "FlexLatentBlend": FlexLatentBlend, - "FlexLatentNoise": FlexLatentNoise, + "FlexLatentBlend": FlexLatentBlend, + "FlexLatentNoise": FlexLatentNoise, "LatentFrequencyBlender": LatentFrequencyBlender, #video - "FlexVideoSpeed": FlexVideoSpeed, - "FlexVideoDirection": FlexVideoDirection, - "FlexVideoFrameBlend": FlexVideoFrameBlend, - "FlexVideoSeek": FlexVideoSeek, + "FlexVideoSpeed": FlexVideoSpeed, + "FlexVideoDirection": FlexVideoDirection, + "FlexVideoFrameBlend": FlexVideoFrameBlend, + "FlexVideoSeek": FlexVideoSeek, ###temporal "MaskMorph": MaskMorph, "MaskTransform": MaskTransform, @@ -327,8 +386,6 @@ def get_description(cls): "MaskRings": MaskRings, "MaskWarp": MaskWarp, - - #optical flow "OpticalFlowMaskModulation": OpticalFlowMaskModulation, "OpticalFlowParticleSystem": OpticalFlowParticleSystem, @@ -367,10 +424,11 @@ def get_description(cls): #flex audio visualizers "FlexAudioVisualizerCircular": FlexAudioVisualizerCircular, - "FlexAudioVisualizerLine": FlexAudioVisualizerLine, + "FlexAudioVisualizerLine": FlexAudioVisualizerLine, + "FlexAudioVisualizerContour": FlexAudioVisualizerContour, #audio - "AudioSeparator": AudioSeparator, - "AudioSeparatorSimple": AudioSeparatorSimple, + + "AudioSeparatorSimple": AudioSeparatorSimple, "DownloadOpenUnmixModel": DownloadOpenUnmixModel, # "DownloadCREPEModel": DownloadCREPEModel, "AudioFeatureVisualizer": AudioFeatureVisualizer, @@ -389,27 +447,35 @@ def get_description(cls): "AudioDither": AudioDither, "AudioInfo": AudioInfo, "AudioGain": AudioGain, - "AudioFade": AudioFade, + "AudioFade": AudioFade, "AudioPad": AudioPad, - "AudioChannelMerge": AudioChannelMerge, - "AudioChannelSplit": AudioChannelSplit, - "AudioResample": AudioResample, - "AudioVolumeNormalization": AudioVolumeNormalization, + "AudioChannelMerge": AudioChannelMerge, + "AudioChannelSplit": AudioChannelSplit, + "AudioResample": AudioResample, + "AudioVolumeNormalization": AudioVolumeNormalization, #features "AudioFeatureExtractor": AudioFeatureExtractor, - "AudioFeatureExtractorFirst": AudioFeatureExtractorFirst, + +#TODO make feature info JS display info +#TODO: support negative feature values for opposit direction...... + + "PitchFeatureExtractor": PitchFeatureExtractor, "RhythmFeatureExtractor": RhythmFeatureExtractor, + "PitchRange": PitchRangeNode, "PitchRangePreset": PitchRangePresetNode, "PitchRangeByNoteNode": PitchRangeByNoteNode, "MIDILoadAndExtract": MIDILoadAndExtract, "TimeFeatureNode": TimeFeatureNode, + "FloatFeatureNode": FloatFeatureNode, "ManualFeatureNode": ManualFeatureNode, "ManualFeatureFromPipe": ManualFeatureFromPipe, + "DrawableFeatureNode": DrawableFeatureNode, "DepthFeatureNode": DepthFeatureNode, "ColorFeatureNode": ColorFeatureNode, + "BrightnessFeatureNode": BrightnessFeatureNode, "MotionFeatureNode": MotionFeatureNode, "LocationFromMask": LocationFromMask, @@ -417,17 +483,27 @@ def get_description(cls): "LocationFromPoint": LocationFromPoint, "LocationTransform": LocationTransform, "AreaFeatureNode": AreaFeatureNode, + "FeatureInfoNode": FeatureInfoNode, + "WhisperFeature": WhisperFeatureNode, + "TriggerBuilder": TriggerBuilder, + "ContextModifier": ContextModifier, + "WhisperTextRenderer": WhisperTextRenderer, + "WhisperAutoAdjust": WhisperAutoAdjust, + "WhisperTimeAdjuster": WhisperTimeAdjuster, + "ManualWhisperAlignmentData": ManualWhisperAlignmentData, "FeatureToWeightsStrategy": FeatureToWeightsStrategy, - "FeatureToSplineData": FeatureToSplineData, - "SplineFeatureModulator": SplineFeatureModulator, - "FeatureToFloat": FeatureToFloat, - "SplineRhythmModulator": SplineRhythmModulator, + "FeatureToSplineData": FeatureToSplineData, + "SplineFeatureModulator": SplineFeatureModulator, + "FeatureToFloat": FeatureToFloat, + "FeatureToMask": FeatureToMask, + "SplineRhythmModulator": SplineRhythmModulator, "DepthInjection": DepthInjection, "DepthRippleEffect": DepthRippleEffect, "DepthBlender": DepthBlender, "DepthShapeModifier": DepthShapeModifier, - "DepthShapeModifierPrecise": DepthShapeModifierPrecise, + + "DepthShapeModifierPrecise": DepthShapeModifierPrecise, # "DepthMapProtrusion": DepthMapProtrusion, #feature modulation "FeatureMixer": FeatureMixer, @@ -440,9 +516,11 @@ def get_description(cls): "PreviewFeature": PreviewFeature, "FeatureRebase": FeatureRebase, "FeatureTruncateOrExtend": FeatureTruncateOrExtend, - "FeatureAccumulate": FeatureAccumulate, - "FeatureContiguousInterpolate": FeatureContiguousInterpolate, + "FeatureAccumulate": FeatureAccumulate, + "FeatureContiguousInterpolate": FeatureContiguousInterpolate, "FeatureRenormalize": FeatureRenormalize, + "FeatureToFlexIntParam": FeatureToFlexIntParam, + "FeatureToFlexFloatParam": FeatureToFlexFloatParam, #images 'FlexImageEdgeDetect': FlexImageEdgeDetect, @@ -464,6 +542,7 @@ def get_description(cls): "FlexImageHorizontalToVertical":FlexImageHorizontalToVertical, + #visulizers "ProximityVisualizer": ProximityVisualizer, "EffectVisualizer": EffectVisualizer, @@ -471,12 +550,19 @@ def get_description(cls): #garb "DyeImage": DyeImage, + "ColorPicker": ColorPicker, "ImageCASBatch": ImageCASBatch, "ImageScaleToTarget": ImageScaleToTarget, "MovingShape": MovingShape, "_mfc": _mfc, "TextMaskNode": TextMaskNode, - "MaskCompositePlus": MaskCompositePlus, + + + #TODO: make useful + # "MaskCompositePlus": MaskCompositePlus, + + "AdvancedLuminanceMask": AdvancedLuminanceMask, + "TranslucentComposite": TranslucentComposite, #utility nodes "ImageChunk": ImageChunks, @@ -489,87 +575,47 @@ def get_description(cls): } + WEB_DIRECTORY = "./web/js" +EXTENSION_WEB_DIRS = ["./web/extensions"] NODE_DISPLAY_NAME_MAPPINGS = { - - "FlexAudioVisualizerCircular": "**BETA** Flex Audio Visualizer Circular", - "FlexAudioVisualizerLine": "**BETA** Flex Audio Visualizer Line", - - "FlexVideoSpeed": "**BETA** Flex Video Speed", - "FlexVideoDirection": "Flex Video Direction", - "FlexVideoFrameBlend": "**BETA**Flex Video Frame Blend", - "FlexVideoSeek": "Flex Video Seek", - - - "MaskMorph": "Temporal Mask Morph", - "MaskTransform":"Temporal Mask Transform", - "MaskMath":"Temporal Mask Math", - "MaskRings":"Temporal Mask Rings", - "MaskWarp":"Temporal Mask Warp", - - - "OpticalFlowMaskModulation": "Optical Flow Mask Modulation", - "OpticalFlowParticleSystem":"Optical Flow Particle System", - #"OpticalFlowDirectionMask":"Optical Flow Direction Mask", - - "ParticleEmissionMask":"Particle Emission Mask", - "Vortex": "Vortex", - "GravityWell":"Gravity Well", - "ParticleEmitter": "Particle Emitter", - "EmitterMovement":"Emitter Movement", - "SpringJointSetting":"Spring Joint Setting", - "StaticBody":"Static Body", - "ParticleColorModulation":"Particle Color Modulation", - "ParticleSizeModulation": "Particle Size Modulation", - "ParticleSpeedModulation":"Particle Speed Modulation", - - - "AudioSeparator": "Audio Separator", - - "AudioFeatureVisualizer": "Audio Feature Visualizer ***BETA***" , - "Frequency Filter Custom": "Frequency Filter Custom", - "Frequency Filter Preset": "Frequency Filter Preset", - "AudioFilter": "Audio Filter", - - - "MIDILoadAndExtract": "MIDI Load & Feature Extract", - "PitchRangeByNoteNode": "Pitch Range By Note", - "AudioFeatureExtractor": "Audio Feature & Extractor", - "TimeFeatureNode": "Time Feature", - "DepthFeatureNode":"Depth Feature", - "BrightnessFeatureNode":"Brightness Feature", - "MotionFeatureNode":"Motion Feature", - - "FeatureMixer": "FeatureMod Mixer", - "FeatureAccumulate": "FeatureMod Accumulate", - "FeatureCombine": "FeatureMod Combine", - "FeatureOscillator": "FeatureMod Oscillator", - "FeatureScaler": "FeatureMod Scaler", - "FeatureSmoothing": "FeatureMod Smoothing", - "FeatureMath": "FeatureMod Math", - "MovingShape": "Moving Shape", - "TextMaskNode":"Text Mask Node", - - - "DyeImage" : "Dye Image", - "ImageCASBatch": "Image Contrast Adaptive Sharpen Batch", - "ImageIntervalSelectPercentage": "Image Interval Select %", - "ImageScaleToTarget": "Upscale To Target", - - "FeatureToSplineData": "***BETA*** Feature To Spline Data", - "SplineFeatureModulator": "***BETA*** Spline Feature Modulator", - "SplineRhythmModulator": "***BETA*** Spline Rhythm Modulator", + "AudioSeparatorSimple": "Audio Separator", + "ProximityVisualizer": "Preview Proximity", + "EffectVisualizer": "Preview Effect", + "PitchVisualizer": "Preview Pitch", + "FlexVideoSpeed": "**BETA** Flex Video Speed", + "FlexVideoFrameBlend": "**BETA**Flex Video Frame Blend", + "AudioFeatureVisualizer": "Audio Feature Visualizer ***BETA***" , + + "MIDILoadAndExtract": "MIDI Load & Feature Extract", + "PitchRangeByNoteNode": "Pitch Range By Note", + "AudioFeatureExtractor": "Audio Feature Extractor", + "TimeFeatureNode": "Time Feature", + "DepthFeatureNode": "Depth Feature", + "BrightnessFeatureNode": "Brightness Feature", + "MotionFeatureNode": "Motion Feature", + "ImageCASBatch": "Image Contrast Adaptive Sharpen Batch", + "ImageIntervalSelectPercentage":"Image Interval Select %", + "ImageScaleToTarget": "Upscale Image To Target", + "FeatureToSplineData": "***BETA*** Feature To Spline Data", + "SplineFeatureModulator": "***BETA*** Spline Feature Modulator", + "SplineRhythmModulator": "***BETA*** Spline Rhythm Modulator", + "MaskMorph": "Mask Morph [DEPRECATED]", + "MaskTransform": "Mask Transform [DEPRECATED]", + "MaskMath": "Mask Math [DEPRECATED]", + "MaskRings": "Mask Rings [DEPRECATED]", + "MaskWarp": "Mask Warp [DEPRECATED]", } -if HAS_ADVANCED_LIVE_PORTRAIT: - NODE_CLASS_MAPPINGS["FlexExpressionEditor"] = FlexExpressionEditor +# Update NODE_CLASS_MAPPINGS with external nodes +NODE_CLASS_MAPPINGS.update(EXTERNAL_NODE_CLASS_MAPPINGS) import re -suffix = " | RyanOnTheInside" +suffix = " ⚡🅡🅞🅣🅘" for node_name in NODE_CLASS_MAPPINGS.keys(): if node_name not in NODE_DISPLAY_NAME_MAPPINGS: @@ -590,19 +636,12 @@ def get_description(cls): from pathlib import Path if hasattr(PromptServer, "instance"): - # NOTE: we add an extra static path to avoid comfy mechanism # that loads every script in web. # # Again credit to KJNodes and MTB nodes - PromptServer.instance.app.add_routes( [web.static("/ryanontheinside_web_async", (Path(__file__).parent.absolute() / "ryanontheinside_web_async").as_posix())] ) - - - -for node_name, node_class in NODE_CLASS_MAPPINGS.items(): - if hasattr(node_class, 'get_description'): - desc = node_class.get_description() - node_class.DESCRIPTION = desc +#register tooltips after all classes are initialized +register_all_tooltips() diff --git a/examples/FLEX_Advanced_Audio_Reactive_expression.json b/examples/FLEX_Advanced_Audio_Reactive_expressionVERSION2.json similarity index 68% rename from examples/FLEX_Advanced_Audio_Reactive_expression.json rename to examples/FLEX_Advanced_Audio_Reactive_expressionVERSION2.json index 861cabb..d7f8aad 100644 --- a/examples/FLEX_Advanced_Audio_Reactive_expression.json +++ b/examples/FLEX_Advanced_Audio_Reactive_expressionVERSION2.json @@ -1,582 +1,732 @@ { - "last_node_id": 88, - "last_link_id": 76, + "last_node_id": 118, + "last_link_id": 97, "nodes": [ { - "id": 42, - "type": "BrightnessFeatureNode", + "id": 24, + "type": "AdvancedLivePortrait", "pos": [ - -1937.0077758142834, - 948.0409576835841 + 2680, + 360 + ], + "size": [ + 235.1999969482422, + 474.2106018066406 ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, "flags": {}, - "order": 0, - "mode": 4, + "order": 41, + "mode": 0, "inputs": [ { - "name": "video_frames", + "name": "src_images", "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 + "link": null, + "shape": 7 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "BrightnessFeatureNode" - }, - "widgets_values": [ - "mean_brightness", - 30 - ] - }, - { - "id": 43, - "type": "ColorFeatureNode", - "pos": [ - -1607.0077758142834, - 948.0409576835841 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 1, - "mode": 4, - "inputs": [ + "name": "motion_link", + "type": "EDITOR_LINK", + "link": 71, + "shape": 7 + }, { - "name": "video_frames", + "name": "driving_images", "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 + "link": null, + "shape": 7 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ColorFeatureNode" - }, - "widgets_values": [ - "dominant_color", - 30 - ] - }, - { - "id": 47, - "type": "ManualFeatureFromPipe", - "pos": [ - -1237.0077758142834, - 538.0409576835838 - ], - "size": { - "0": 352.79998779296875, - "1": 150 - }, - "flags": {}, - "order": 2, - "mode": 4, - "inputs": [ - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "command", + "type": "STRING", + "link": 70, + "widget": { + "name": "command" + } } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, + "name": "images", + "type": "IMAGE", + "links": [ + 16 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "ManualFeatureFromPipe" + "Node name for S&R": "AdvancedLivePortrait" }, "widgets_values": [ - "0,10,20", - "0.0,0.5,1.0", - 1, - "none" + 0, + 0, + 1.7000000000000002, + "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0", + false, + true, + "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0" ] }, { - "id": 59, - "type": "PreviewFeature", + "id": 31, + "type": "DownloadOpenUnmixModel", "pos": [ - 227, - 750 + -164, + 619 ], - "size": { - "0": 315, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 47 - } + "size": [ + 361.20001220703125, + 58 ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", "links": [ - 46 + 23 ], - "shape": 3, - "slot_index": 0 + "shape": 3 } ], "properties": { - "Node name for S&R": "PreviewFeature" + "Node name for S&R": "DownloadOpenUnmixModel" }, "widgets_values": [ - false + "umxl" ] }, { - "id": 40, - "type": "TimeFeatureNode", + "id": 64, + "type": "PreviewAudio", "pos": [ - -1597.0077758142834, - 538.0409576835838 + -164, + 1088 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 262.2439880371094, - "1": 150 - }, "flags": {}, - "order": 3, - "mode": 4, + "order": 32, + "mode": 0, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "name": "audio", + "type": "AUDIO", + "link": 51 } ], + "outputs": [], "properties": { - "Node name for S&R": "TimeFeatureNode" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - "smooth", - 30, - 1, - 0 + null ] }, { - "id": 48, - "type": "AreaFeatureNode", + "id": 27, + "type": "VHS_VideoCombine", "pos": [ - -1207.0077758142834, - 738.0409576835838 + 2945, + 280 + ], + "size": [ + 253.4889678955078, + 334 ], - "size": { - "0": 317.4000244140625, - "1": 126 - }, "flags": {}, - "order": 4, + "order": 42, "mode": 4, "inputs": [ { - "name": "video_frames", + "name": "images", "type": "IMAGE", - "link": null + "link": 16 }, { - "name": "masks", - "type": "MASK", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 30, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "AreaFeatureNode" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "total_area", - 30, - 0.5 - ] + "widgets_values": { + "frame_rate": 15, + "loop_count": 0, + "filename_prefix": "AdvancedLivePortrait", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AdvancedLivePortrait_00306-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 15 + } + } + } }, { - "id": 46, - "type": "DepthFeatureNode", + "id": 88, + "type": "Note", "pos": [ - -1267.0077758142834, - 938.0409576835841 + -675, + 1660 + ], + "size": [ + 343.6423645019531, + 137.95391845703125 ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, "flags": {}, - "order": 5, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": null - } + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "\n<--------here's some ways to manipulate features" ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 56, + "type": "PreviewAudio", + "pos": [ + -152, + 897 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "name": "audio", + "type": "AUDIO", + "link": 76 } ], + "outputs": [], "properties": { - "Node name for S&R": "DepthFeatureNode" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - "mean_depth", - 30 + null ] }, { - "id": 67, - "type": "PreviewFeature", + "id": 35, + "type": "Note", "pos": [ - 227, - 420 + 1500, + 1290 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 58 + "flags": {}, + "order": 2, + "mode": 4, + "inputs": [], + "outputs": [], + "properties": { + "text": "" }, + "widgets_values": [ + "modulate pupils with synth" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 36, + "type": "Note", + "pos": [ + 1870, + 1290 + ], + "size": [ + 210, + 58 + ], "flags": { - "collapsed": true + "collapsed": false }, - "order": 34, + "order": 3, + "mode": 4, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "modulate roll with manual feature" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 65, + "type": "Note", + "pos": [ + 2250, + 1290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 4, + "mode": 4, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "modulate pitch with drums" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 61, + "type": "PreviewAudio", + "pos": [ + -163, + 285 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 29, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 59 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 60 - ], - "shape": 3, - "slot_index": 0 + "name": "audio", + "type": "AUDIO", + "link": 48 } ], + "outputs": [], "properties": { - "Node name for S&R": "PreviewFeature" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - false + null ] }, { - "id": 24, - "type": "AdvancedLivePortrait", + "id": 15, + "type": "FlexExpressionEditor", "pos": [ - 2680, - 360 + 1430, + 420 + ], + "size": [ + 338.77764892578125, + 830 ], - "size": { - "0": 235.1999969482422, - "1": 474.2106018066406 - }, "flags": {}, - "order": 44, + "order": 35, "mode": 0, "inputs": [ { - "name": "src_images", + "name": "src_image", "type": "IMAGE", - "link": null + "link": 17, + "shape": 7 }, { - "name": "motion_link", - "type": "EDITOR_LINK", - "link": 71 + "name": "sample_image", + "type": "IMAGE", + "link": null, + "shape": 7 }, { - "name": "driving_images", - "type": "IMAGE", - "link": null + "name": "add_exp", + "type": "EXP_DATA", + "link": null, + "shape": 7 }, { - "name": "command", - "type": "STRING", - "link": 70, - "widget": { - "name": "command" - } + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "link": null, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 95, + "shape": 7 } ], "outputs": [ { - "name": "images", + "name": "image", "type": "IMAGE", + "links": null, + "shape": 3 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", "links": [ - 16 + 18 ], - "slot_index": 0, + "slot_index": 1, + "shape": 3 + }, + { + "name": "save_exp", + "type": "EXP_DATA", + "links": null, + "slot_index": 2, + "shape": 3 + }, + { + "name": "command", + "type": "STRING", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "AdvancedLivePortrait" + "Node name for S&R": "FlexExpressionEditor" }, "widgets_values": [ 0, 0, - 1.7000000000000002, - "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0", - false, - true, - "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0" + 0, + 0, + 0, + 0, + -14.5, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + "OnlyExpression", + 1.7, + 1, + 1, + 0, + "pupil_x", + "absolute" ] }, { - "id": 44, - "type": "RhythmFeatureExtractor", + "id": 28, + "type": "FlexExpressionEditor", "pos": [ - -1610.415877376783, - 744.9609491386618 + 1830, + 420 + ], + "size": [ + 336, + 830 ], - "size": { - "0": 352.79998779296875, - "1": 126 - }, "flags": {}, - "order": 6, - "mode": 4, + "order": 39, + "mode": 0, "inputs": [ { - "name": "video_frames", + "name": "src_image", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { - "name": "audio", - "type": "AUDIO", - "link": null + "name": "sample_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "add_exp", + "type": "EXP_DATA", + "link": null, + "shape": 7 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "link": 18, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 96, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": null, + "name": "image", + "type": "IMAGE", + "links": [], + "slot_index": 0, "shape": 3 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "links": [ + 49 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "save_exp", + "type": "EXP_DATA", "links": null, "shape": 3 + }, + { + "name": "command", + "type": "STRING", + "links": [ + 70 + ], + "slot_index": 3, + "shape": 3 } ], "properties": { - "Node name for S&R": "RhythmFeatureExtractor" + "Node name for S&R": "FlexExpressionEditor" }, "widgets_values": [ - "beat_locations", - 30, - 4 + 0, + 0, + 15, + 0, + 15, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + "OnlyExpression", + 1.7, + 1, + 1, + 0, + "rotate_roll", + "absolute" ] }, { - "id": 45, - "type": "PitchFeatureExtractor", + "id": 62, + "type": "FlexExpressionEditor", "pos": [ - -1917.415877376783, - 1112.9609491386618 + 2210, + 420 + ], + "size": [ + 336, + 830 ], - "size": { - "0": 344.3999938964844, - "1": 122 - }, "flags": {}, - "order": 7, - "mode": 4, + "order": 36, + "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": null + "name": "src_image", + "type": "IMAGE", + "link": null, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "sample_image", + "type": "IMAGE", + "link": null, + "shape": 7 }, { - "name": "opt_pitch_range_collections", - "type": "PITCH_RANGE_COLLECTION", - "link": null + "name": "add_exp", + "type": "EXP_DATA", + "link": null, + "shape": 7 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "link": 49, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 97, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": null, + "name": "image", + "type": "IMAGE", + "links": [], + "slot_index": 0, "shape": 3 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "links": [ + 71 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "save_exp", + "type": "EXP_DATA", "links": null, "shape": 3 + }, + { + "name": "command", + "type": "STRING", + "links": [], + "slot_index": 3, + "shape": 3 } ], "properties": { - "Node name for S&R": "PitchFeatureExtractor" + "Node name for S&R": "FlexExpressionEditor" }, "widgets_values": [ - "frequency", - "medium" + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + "OnlyExpression", + 1.7, + 1, + 1, + 0, + "rotate_pitch", + "absolute" ] }, { - "id": 68, - "type": "PreviewImage", + "id": 79, + "type": "Note", "pos": [ - 746, - 420 + 2688, + 885 ], - "size": { - "0": 198.45782470703125, - "1": 246 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 60 - } + "size": [ + 486.4787902832031, + 230.9814453125 ], + "flags": {}, + "order": 5, + "mode": 4, + "inputs": [], + "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" - } + "text": "" + }, + "widgets_values": [ + "Flex Parameters: \n constrain_min_max: ensures modulated value is kept within bounds of the \n min and max of the parameter\n strength: a strength multiplier\n feature_threshold: minimum feature value to consider\n feature_param: the expression parameter to modulate\n feature_mode:\n -relative: modulation occurs relative to the parameter value\n -absolute: modulation occurs relative to 0\n\nNotes:\n The value for a parameter in a previous editor changes the starting position of \n that \n parameter in the next editor.\n\n" + ], + "color": "#432", + "bgcolor": "#653" }, { - "id": 31, - "type": "DownloadOpenUnmixModel", + "id": 60, + "type": "Note", "pos": [ - -164, - 619 + -630, + 616 + ], + "size": [ + 343.6423645019531, + 137.95391845703125 ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, "flags": {}, - "order": 8, + "order": 6, "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 23 - ], - "shape": 3 - } - ], + "inputs": [], + "outputs": [], "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" + "text": "" }, "widgets_values": [ - "umxl" - ] + "Audio is one of many feature sources, and they are interchangeable.\n\n<--------here's some other feature sources. \ntutorial: https://youtu.be/QmWk2xse7pI" + ], + "color": "#432", + "bgcolor": "#653" }, { "id": 32, @@ -585,10 +735,10 @@ -164, 729 ], - "size": { - "0": 336, - "1": 106 - }, + "size": [ + 336, + 106 + ], "flags": {}, "order": 28, "mode": 0, @@ -615,221 +765,178 @@ "name": "drums_audio", "type": "AUDIO", "links": [ - 54, - 76 + 76, + 77 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "vocals_audio", "type": "AUDIO", "links": [], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { "name": "bass_audio", "type": "AUDIO", "links": [], - "shape": 3, - "slot_index": 3 + "slot_index": 3, + "shape": 3 }, { "name": "other_audio", "type": "AUDIO", "links": [ 51, - 52 + 82 ], - "shape": 3, - "slot_index": 4 + "slot_index": 4, + "shape": 3 } ], "properties": { "Node name for S&R": "AudioSeparatorSimple" - } + }, + "widgets_values": [] }, { - "id": 64, - "type": "PreviewAudio", + "id": 53, + "type": "Note", "pos": [ - -164, - 1088 + -152.11404418945312, + 1344.482421875 + ], + "size": [ + 234.10646057128906, + 70.32601165771484 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 32, + "order": 7, "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 51 - } - ], + "inputs": [], + "outputs": [], "properties": { - "Node name for S&R": "PreviewAudio" + "text": "" }, "widgets_values": [ - null - ] + "audio feature from drums\nmanual feature for fun\nanother audio feature for the synth" + ], + "color": "#432", + "bgcolor": "#653" }, { - "id": 51, - "type": "PreviewImage", + "id": 91, + "type": "PreviewFeature", "pos": [ - 738.1399993896484, - 729 + 763.4324340820312, + 253.09954833984375 + ], + "size": [ + 315, + 246 ], - "size": { - "0": 206.3178253173828, - "1": 246 - }, "flags": {}, - "order": 42, + "order": 34, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 46 + "name": "feature", + "type": "FEATURE", + "link": 81 } ], + "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" - } + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] }, { - "id": 41, - "type": "ProximityFeatureNode", + "id": 16, + "type": "VHS_LoadAudioUpload", "pos": [ - -1973.415877376783, - 781.9609491386618 + -164, + 420 ], - "size": { - "0": 336, - "1": 122 - }, - "flags": {}, - "order": 9, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "anchor_locations", - "type": "LOCATION", - "link": null - }, - { - "name": "query_locations", - "type": "LOCATION", - "link": null - } + "size": [ + 243.818359375, + 130 ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "proximity_feature", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": null, + "name": "audio", + "type": "AUDIO", + "links": [ + 24, + 30, + 48 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "ProximityFeatureNode" + "Node name for S&R": "VHS_LoadAudioUpload" }, - "widgets_values": [ - 30, - "frame" - ] + "widgets_values": { + "audio": "royalty_free.mp3", + "start_time": 16.01, + "duration": 7, + "choose audio to upload": "image" + } }, { - "id": 38, - "type": "MIDILoadAndExtract", + "id": 99, + "type": "PreviewFeature", "pos": [ - -1928.415877376783, - 144.96094913866202 + 736.76318359375, + 652.2568969726562 + ], + "size": [ + 315, + 26 ], - "size": { - "0": 1020, - "1": 346 - }, "flags": {}, - "order": 10, - "mode": 4, + "order": 40, + "mode": 0, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MIDI", - "type": "MIDI", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE", + "name": "feature", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "link": 89 } ], + "outputs": [], "properties": { - "selectedNotes": [] + "Node name for S&R": "PreviewFeature" }, - "widgets_values": [ - "Velocity", - "prom_single_track.mid", - "all", - 30, - false, - "", - "upload", - "refresh" - ] + "widgets_values": [] }, { - "id": 58, - "type": "ManualFeatureFromPipe", + "id": 98, + "type": "FeatureRenormalize", "pos": [ - 227, - 729 + 279.18060302734375, + 745.884765625 + ], + "size": [ + 365.4000244140625, + 106 ], - "size": { - "0": 352.79998779296875, - "1": 150 - }, "flags": {}, - "order": 36, + "order": 37, "mode": 0, "inputs": [ { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 44 + "name": "feature", + "type": "FEATURE", + "link": 87 } ], "outputs": [ @@ -837,249 +944,170 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 45, - 47 + 88, + 89, + 93 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "ManualFeatureFromPipe" + "Node name for S&R": "FeatureRenormalize" }, "widgets_values": [ - "0", - "-1", + -1, 1, - "ease_out" + false ] }, { - "id": 21, - "type": "AudioFeatureExtractorFirst", + "id": 101, + "type": "MIDILoadAndExtract", "pos": [ - 227, - 980 + -1928.4158935546875, + 144.96095275878906 ], - "size": { - "0": 394.79998779296875, - "1": 170 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 52 - } + "size": [ + 1020, + 398 ], + "flags": {}, + "order": 9, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "feature", - "type": "FEATURE", - "links": [ - 73 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 44 - ], - "shape": 3, - "slot_index": 1 + "name": "MIDI", + "type": "MIDI", + "links": null }, { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 2 + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "AudioFeatureExtractorFirst" + "selectedNotes": [] }, "widgets_values": [ - "amplitude_envelope", + "Velocity", + 30, + 30, 512, 512, - 15 + "prom_single_track.mid", + "all", + false, + "", + "upload", + "refresh" ] }, { - "id": 73, - "type": "FeatureRenormalize", + "id": 102, + "type": "MotionFeatureNode", "pos": [ - 227, - 1211 + -1915, + 542 + ], + "size": [ + 315, + 202 ], - "size": { - "0": 310.79998779296875, - "1": 126 - }, "flags": {}, - "order": 35, - "mode": 0, + "order": 10, + "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 73 + "name": "images", + "type": "IMAGE", + "link": null } ], "outputs": [ { "name": "FEATURE", "type": "FEATURE", - "links": [ - 74 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 72 - ], - "shape": 3, - "slot_index": 1 + "links": null } ], "properties": { - "Node name for S&R": "FeatureRenormalize" + "Node name for S&R": "MotionFeatureNode" }, "widgets_values": [ - -1, - 1, - false + "mean_motion", + 30, + 512, + 512, + "Farneback", + 0, + 0 ] }, { - "id": 27, - "type": "VHS_VideoCombine", + "id": 103, + "type": "ProximityFeatureNode", "pos": [ - 2945, - 280 + -1973.4158935546875, + 781.9609375 ], "size": [ - 253.4889678955078, - 557.4889678955078 + 430.8000183105469, + 198 ], "flags": {}, - "order": 45, - "mode": 0, + "order": 11, + "mode": 4, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 16 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 30 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", + "name": "anchor_locations", + "type": "LOCATION", "link": null }, { - "name": "vae", - "type": "VAE", + "name": "query_locations", + "type": "LOCATION", "link": null } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AdvancedLivePortrait", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AdvancedLivePortrait_00306-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } + "name": "proximity_feature", + "type": "FEATURE", + "links": null } - } - }, - { - "id": 53, - "type": "Note", - "pos": [ - 227, - 1387 ], - "size": { - "0": 234.10646057128906, - "1": 70.32601165771484 - }, - "flags": {}, - "order": 11, - "mode": 0, "properties": { - "text": "" + "Node name for S&R": "ProximityFeatureNode" }, "widgets_values": [ - "audio feature from drums\nmanual feature for fun\nanother audio feature for the synth" - ], - "color": "#432", - "bgcolor": "#653" + "normalization_method", + 30, + 30, + 512, + 512, + "frame" + ] }, { - "id": 39, - "type": "MotionFeatureNode", + "id": 104, + "type": "RhythmFeatureExtractor", "pos": [ - -1915, - 542 + -1610.4158935546875, + 744.9609375 + ], + "size": [ + 428.4000244140625, + 178 ], - "size": { - "0": 268.79998779296875, - "1": 174 - }, "flags": {}, "order": 12, "mode": 4, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", + "name": "audio", + "type": "AUDIO", "link": null } ], @@ -1087,103 +1115,74 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "MotionFeatureNode" + "Node name for S&R": "RhythmFeatureExtractor" }, "widgets_values": [ - "mean_motion", + "beat_locations", 30, - "Farneback", 0, - 0 + 512, + 512, + 4 ] }, { - "id": 81, - "type": "FeatureMixer", + "id": 105, + "type": "TimeFeatureNode", "pos": [ - -2048.801412019285, - 1448.3726434811094 + -1597.0078125, + 538.0409545898438 + ], + "size": [ + 315, + 202 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, "order": 13, "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], + "inputs": [], "outputs": [ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "TimeFeatureNode" }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5, - false + "smooth", + 30, + 30, + 512, + 512, + 30, + 0 ] }, { - "id": 82, - "type": "FeatureCombine", + "id": 106, + "type": "ManualFeatureFromPipe", "pos": [ - -1645.801412019285, - 1451.3726434811094 + -1237.0078125, + 538.0409545898438 + ], + "size": [ + 428.4000244140625, + 130 ], - "size": { - "0": 380.4000244140625, - "1": 150 - }, "flags": {}, "order": 14, "mode": 4, "inputs": [ { - "name": "feature1", - "type": "FEATURE", - "link": null - }, - { - "name": "feature2", - "type": "FEATURE", + "name": "feature_pipe", + "type": "FEATURE_PIPE", "link": null } ], @@ -1191,44 +1190,37 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureCombine" + "Node name for S&R": "ManualFeatureFromPipe" }, "widgets_values": [ - "add", - 1, + "0,10,20", + "0.0,0.5,1.0", 1, - false + "none" ] }, { - "id": 83, - "type": "FeatureOscillator", + "id": 107, + "type": "AreaFeatureNode", "pos": [ - -1232.801412019285, - 1461.3726434811094 + -1207.0078125, + 738.0409545898438 + ], + "size": [ + 340.20001220703125, + 154 ], - "size": { - "0": 367.79998779296875, - "1": 198 - }, "flags": {}, "order": 15, "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", + "name": "masks", + "type": "MASK", "link": null } ], @@ -1236,46 +1228,38 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureOscillator" + "Node name for S&R": "AreaFeatureNode" }, "widgets_values": [ - "sine", - 1, - 0.5, - 0, - 0.5, - false + "total_area", + 30, + 512, + 512, + 0.5 ] }, { - "id": 86, - "type": "FeatureMath", + "id": 108, + "type": "DepthFeatureNode", "pos": [ - -1639.801412019285, - 1655.3726434811094 + -1267.0078125, + 938.0409545898438 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 367.79998779296875, - "1": 126 - }, "flags": {}, "order": 16, "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", + "name": "depth_maps", + "type": "IMAGE", "link": null } ], @@ -1283,43 +1267,37 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureMath" + "Node name for S&R": "DepthFeatureNode" }, "widgets_values": [ - 0, - "add", - false + "mean_depth", + 30, + 512, + 512 ] }, { - "id": 84, - "type": "FeatureScaler", + "id": 109, + "type": "ColorFeatureNode", "pos": [ - -2049.801412019285, - 1850.3726434811097 + -1607.0078125, + 948.0409545898438 + ], + "size": [ + 352.79998779296875, + 130 ], - "size": { - "0": 367.79998779296875, - "1": 174 - }, "flags": {}, "order": 17, "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", + "name": "images", + "type": "IMAGE", "link": null } ], @@ -1327,45 +1305,37 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureScaler" + "Node name for S&R": "ColorFeatureNode" }, "widgets_values": [ - "linear", - 0, - 1, - 2, - false + "dominant_color", + 30, + 512, + 512 ] }, { - "id": 85, - "type": "FeatureSmoothing", + "id": 110, + "type": "BrightnessFeatureNode", "pos": [ - -1633.801412019285, - 1852.3726434811097 + -1937.0078125, + 948.0409545898438 + ], + "size": [ + 352.79998779296875, + 130 ], - "size": { - "0": 367.79998779296875, - "1": 174 - }, "flags": {}, "order": 18, "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", + "name": "images", + "type": "IMAGE", "link": null } ], @@ -1373,38 +1343,30 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureSmoothing" + "Node name for S&R": "BrightnessFeatureNode" }, "widgets_values": [ - "moving_average", - 5, - 0.3, - 1, - false + "mean_brightness", + 30, + 512, + 512 ] }, { - "id": 87, - "type": "FeatureAccumulate", + "id": 111, + "type": "FeatureMixer", "pos": [ - -1229.801412019285, - 1731.3726434811094 + -2048.801513671875, + 1448.3726806640625 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 367.79998779296875, - "1": 222 - }, "flags": {}, "order": 19, "mode": 4, @@ -1419,683 +1381,505 @@ { "name": "FEATURE", "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "FeatureAccumulate" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ + 1, 0, 1, + 1, + 1, + 1, + 1, 0, - false, - false, 0, + 1, + 0.5, false ] }, { - "id": 88, - "type": "Note", + "id": 112, + "type": "PitchFeatureExtractor", "pos": [ - -675, - 1660 - ], - "size": { - "0": 343.6423645019531, - "1": 137.95391845703125 - }, - "flags": {}, - "order": 20, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "\n<--------here's some ways to manipulate features" + -1917.4158935546875, + 1112.9609375 ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 63, - "type": "AudioFeatureExtractorFirst", - "pos": [ - 227, - 420 + "size": [ + 443.4000244140625, + 198 ], - "size": { - "0": 394.79998779296875, - "1": 170 - }, "flags": {}, - "order": 30, - "mode": 0, + "order": 20, + "mode": 4, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 54 + "link": null + }, + { + "name": "opt_pitch_range_collections", + "type": "PITCH_RANGE_COLLECTION", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "feature", + "name": "FEATURE", "type": "FEATURE", - "links": [ - 55, - 59 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 2 + "links": null } ], "properties": { - "Node name for S&R": "AudioFeatureExtractorFirst" + "Node name for S&R": "PitchFeatureExtractor" }, "widgets_values": [ - "amplitude_envelope", + "frequency", + 30, + 0, 512, 512, - 15 + "medium" ] }, { - "id": 56, - "type": "PreviewAudio", + "id": 113, + "type": "FeatureCombine", "pos": [ - -152, - 897 + -1645.8013916015625, + 1451.3726806640625 + ], + "size": [ + 315, + 150 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 31, - "mode": 0, + "order": 21, + "mode": 4, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 76 + "name": "feature1", + "type": "FEATURE", + "link": null + }, + { + "name": "feature2", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "PreviewAudio" + "Node name for S&R": "FeatureCombine" }, "widgets_values": [ - null + "add", + 1, + 1, + false ] }, { - "id": 69, - "type": "PreviewImage", + "id": 114, + "type": "FeatureOscillator", "pos": [ - 746.2026214599609, - 1067 + -1232.8013916015625, + 1461.3726806640625 + ], + "size": [ + 352.79998779296875, + 178 ], - "size": { - "0": 198.2552032470703, - "1": 246 - }, "flags": {}, - "order": 39, - "mode": 0, + "order": 22, + "mode": 4, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 72 + "name": "feature", + "type": "FEATURE", + "link": null } ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 35, - "type": "Note", - "pos": [ - 1500, - 1290 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 21, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate pupils with synth" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 36, - "type": "Note", - "pos": [ - 1870, - 1290 + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null + } ], - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 22, - "mode": 0, "properties": { - "text": "" + "Node name for S&R": "FeatureOscillator" }, "widgets_values": [ - "modulate roll with manual feature" - ], - "color": "#432", - "bgcolor": "#653" + "sine", + 1, + 0.5, + 0, + 0.5, + false + ] }, { - "id": 65, - "type": "Note", + "id": 115, + "type": "FeatureAccumulate", "pos": [ - 2250, - 1290 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 23, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate pitch with drums" + -1229.8013916015625, + 1731.3726806640625 ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 61, - "type": "PreviewAudio", - "pos": [ - -163, - 285 + "size": [ + 352.79998779296875, + 202 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 29, - "mode": 0, + "order": 23, + "mode": 4, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 48 + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "PreviewAudio" + "Node name for S&R": "FeatureAccumulate" }, "widgets_values": [ - null + 0, + 1, + 0, + false, + false, + 0, + false ] }, { - "id": 16, - "type": "VHS_LoadAudioUpload", + "id": 116, + "type": "FeatureMath", "pos": [ - -164, - 420 + -1639.8013916015625, + 1655.3726806640625 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 243.818359375, - "1": 130 - }, "flags": {}, "order": 24, - "mode": 0, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], "outputs": [ { - "name": "audio", - "type": "AUDIO", - "links": [ - 24, - 30, - 48 - ], - "shape": 3, - "slot_index": 0 + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" + "Node name for S&R": "FeatureMath" }, - "widgets_values": { - "audio": "royalty_free.mp3", - "start_time": 16.01, - "duration": 7, - "choose audio to upload": "image" - } + "widgets_values": [ + 0, + "add", + false + ] }, { - "id": 22, - "type": "LoadImage", + "id": 117, + "type": "FeatureSmoothing", "pos": [ - 1079, - 420 + -1633.8013916015625, + 1852.3726806640625 + ], + "size": [ + 340.20001220703125, + 154 ], - "size": { - "0": 315, - "1": 314 - }, "flags": {}, "order": 25, - "mode": 0, - "outputs": [ + "mode": 4, + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 17 - ], - "slot_index": 0, - "shape": 3 - }, + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": null, - "slot_index": 1, - "shape": 3 + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "LoadImage" + "Node name for S&R": "FeatureSmoothing" }, "widgets_values": [ - "source_image.png", - "image" + "moving_average", + 5, + 0.3, + 1, + false ] }, { - "id": 15, - "type": "FlexExpressionEditor", + "id": 118, + "type": "FeatureScaler", "pos": [ - 1430, - 420 + -2049.801513671875, + 1850.3726806640625 + ], + "size": [ + 315, + 154 ], - "size": { - "0": 338.77764892578125, - "1": 830 - }, "flags": {}, - "order": 38, - "mode": 0, + "order": 26, + "mode": 4, "inputs": [ - { - "name": "src_image", - "type": "IMAGE", - "link": 17 - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": null - }, { "name": "feature", "type": "FEATURE", - "link": 74 + "link": null } ], "outputs": [ { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "links": [ - 18 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3, - "slot_index": 2 - }, - { - "name": "command", - "type": "STRING", - "links": null, - "shape": 3 + "name": "FEATURE", + "type": "FEATURE", + "links": null } ], "properties": { - "Node name for S&R": "FlexExpressionEditor" + "Node name for S&R": "FeatureScaler" }, "widgets_values": [ + "linear", 0, - 0, - 0, - 0, - 0, - 0, - -14.5, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, 1, - 0, - "pupil_x", - "absolute" + 2, + false ] }, { - "id": 28, - "type": "FlexExpressionEditor", + "id": 89, + "type": "AudioFeatureExtractor", "pos": [ - 1830, - 420 + 271.2274169921875, + 268.01739501953125 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 336, - "1": 830 - }, "flags": {}, - "order": 41, + "order": 31, "mode": 0, "inputs": [ { - "name": "src_image", - "type": "IMAGE", - "link": null - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": 18 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 45 + "name": "audio", + "type": "AUDIO", + "link": 77 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", + "name": "feature", + "type": "FEATURE", "links": [ - 49 + 78, + 81, + 92, + 94, + 95 ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3 + "slot_index": 0 }, { - "name": "command", - "type": "STRING", - "links": [ - 70 - ], - "shape": 3, - "slot_index": 3 + "name": "frame_count", + "type": "INT", + "links": [], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "FlexExpressionEditor" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ + "amplitude_envelope", + 30, 0, - 0, - 15, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, - 1, - 0, - "rotate_roll", - "absolute" + 512, + 512 ] }, { - "id": 62, - "type": "FlexExpressionEditor", + "id": 93, + "type": "AudioFeatureExtractor", "pos": [ - 2210, - 420 + 283.9638366699219, + 512.5435180664062 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 336, - "1": 830 - }, "flags": {}, - "order": 43, + "order": 33, "mode": 0, "inputs": [ { - "name": "src_image", - "type": "IMAGE", - "link": null - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": 49 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 55 + "name": "audio", + "type": "AUDIO", + "link": 82 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, + "name": "feature", + "type": "FEATURE", + "links": [ + 87, + 96 + ], "slot_index": 0 }, { - "name": "flex_motion_link", - "type": "EDITOR_LINK", + "name": "frame_count", + "type": "INT", "links": [ - 71 + 90 ], - "shape": 3, "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3 - }, - { - "name": "command", - "type": "STRING", - "links": [], - "shape": 3, - "slot_index": 3 } ], "properties": { - "Node name for S&R": "FlexExpressionEditor" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, - 1, + "amplitude_envelope", + 30, 0, - "rotate_pitch", - "absolute" + 512, + 512 ] }, { - "id": 79, - "type": "Note", + "id": 100, + "type": "ManualFeatureNode", "pos": [ - 2688, - 885 + 287.90325927734375, + 915.4197387695312 + ], + "size": [ + 365.4000244140625, + 250 ], - "size": { - "0": 486.4787902832031, - "1": 230.9814453125 - }, "flags": {}, - "order": 26, + "order": 38, "mode": 0, + "inputs": [ + { + "name": "frame_count", + "type": "INT", + "link": 90, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 91, + 97 + ], + "slot_index": 0 + } + ], "properties": { - "text": "" + "Node name for S&R": "ManualFeatureNode" }, "widgets_values": [ - "Flex Parameters: \n constrain_min_max: ensures modulated value is kept within bounds of the \n min and max of the parameter\n strength: a strength multiplier\n feature_threshold: minimum feature value to consider\n feature_param: the expression parameter to modulate\n feature_mode:\n -relative: modulation occurs relative to the parameter value\n -absolute: modulation occurs relative to 0\n\nNotes:\n The value for a parameter in a previous editor changes the starting position of \n that \n parameter in the next editor.\n\n" - ], - "color": "#432", - "bgcolor": "#653" + "manual", + 30, + 30, + 512, + 512, + "0", + "-1", + 1, + "none" + ] }, { - "id": 60, - "type": "Note", + "id": 22, + "type": "LoadImage", "pos": [ - -630, - 616 + 1079, + 420 + ], + "size": [ + 315, + 314 ], - "size": { - "0": 343.6423645019531, - "1": 137.95391845703125 - }, "flags": {}, "order": 27, "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 17 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "slot_index": 1, + "shape": 3 + } + ], "properties": { - "text": "" + "Node name for S&R": "LoadImage" }, "widgets_values": [ - "Audio is one of many feature sources, and they are interchangeable.\n\n<--------here's some other feature sources. \ntutorial: https://youtu.be/QmWk2xse7pI" - ], - "color": "#432", - "bgcolor": "#653" + "source_image.png", + "image" + ] } ], "links": [ @@ -2147,38 +1931,6 @@ 1, "AUDIO" ], - [ - 44, - 21, - 1, - 58, - 0, - "FEATURE_PIPE" - ], - [ - 45, - 58, - 0, - 28, - 4, - "FEATURE" - ], - [ - 46, - 59, - 0, - 51, - 0, - "IMAGE" - ], - [ - 47, - 58, - 0, - 59, - 0, - "FEATURE" - ], [ 48, 16, @@ -2204,96 +1956,153 @@ "AUDIO" ], [ - 52, + 70, + 28, + 3, + 24, + 3, + "STRING" + ], + [ + 71, + 62, + 1, + 24, + 1, + "EDITOR_LINK" + ], + [ + 76, 32, - 4, - 21, + 1, + 56, 0, "AUDIO" ], [ - 54, + 77, 32, 1, - 63, + 89, 0, "AUDIO" ], [ - 55, - 63, + 78, + 89, 0, 62, 4, "FEATURE" ], [ - 59, - 63, + 81, + 89, 0, - 67, + 91, 0, "FEATURE" ], [ - 60, - 67, + 82, + 32, + 4, + 93, + 0, + "AUDIO" + ], + [ + 87, + 93, 0, - 68, + 98, 0, - "IMAGE" + "FEATURE" ], [ - 70, - 28, - 3, - 24, - 3, - "STRING" + 88, + 98, + 0, + 15, + 4, + "FEATURE" ], [ - 71, - 62, - 1, - 24, - 1, - "EDITOR_LINK" + 89, + 98, + 0, + 99, + 0, + "FEATURE" ], [ - 72, - 73, + 90, + 93, 1, - 69, + 100, 0, - "IMAGE" + "INT" + ], + [ + 91, + 100, + 0, + 28, + 4, + "FEATURE" + ], + [ + 92, + 89, + 0, + 15, + 4, + "FEATURE" ], [ - 73, - 21, + 93, + 98, 0, - 73, + 15, + 4, + "FEATURE" + ], + [ + 94, + 89, 0, + 62, + 4, "FEATURE" ], [ - 74, - 73, + 95, + 89, 0, 15, 4, "FEATURE" ], [ - 76, - 32, - 1, - 56, + 96, + 93, 0, - "AUDIO" + 28, + 4, + "FEATURE" + ], + [ + 97, + 100, + 0, + 62, + 4, + "FEATURE" ] ], "groups": [ { + "id": 1, "title": ":)", "bounding": [ -2768, @@ -2302,9 +2111,11 @@ 1400 ], "color": "#3f789e", - "font_size": 1000 + "font_size": 1000, + "flags": {} }, { + "id": 2, "title": "Feature Manipulation", "bounding": [ -2092, @@ -2313,18 +2124,26 @@ 699 ], "color": "#3f789e", - "font_size": 24 + "font_size": 24, + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 1.2100000000000002, + "scale": 0.31384283767210047, "offset": [ - 1166.858494860238, - -303.268542001848 + 1245.7201833518534, + 636.501480335283 ] - } + }, + "node_versions": { + "ComfyUI-AdvancedLivePortrait": "3bba732915e22f18af0d221b9c5c282990181f1b", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "comfy-core": "0.3.12", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1" + }, + "ue_links": [] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/FLEX_Advanced_Inserting_expressions_into_vidVERSION2.json b/examples/FLEX_Advanced_Inserting_expressions_into_vidVERSION2.json new file mode 100644 index 0000000..78e8bc8 --- /dev/null +++ b/examples/FLEX_Advanced_Inserting_expressions_into_vidVERSION2.json @@ -0,0 +1,1948 @@ +{ + "last_node_id": 69, + "last_link_id": 54, + "nodes": [ + { + "id": 24, + "type": "Note", + "pos": [ + -350, + 520 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "orginal src : motion0\n" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 33, + "type": "VHS_VideoInfo", + "pos": [ + 30, + 60 + ], + "size": [ + 262, + 206 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "link": 26 + } + ], + "outputs": [ + { + "name": "source_fps🟨", + "type": "FLOAT", + "links": null, + "shape": 3 + }, + { + "name": "source_frame_count🟨", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "source_duration🟨", + "type": "FLOAT", + "links": null, + "shape": 3 + }, + { + "name": "source_width🟨", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "source_height🟨", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "loaded_fps🟦", + "type": "FLOAT", + "links": [ + 40, + 44 + ], + "slot_index": 5, + "shape": 3 + }, + { + "name": "loaded_frame_count🟦", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "loaded_duration🟦", + "type": "FLOAT", + "links": null, + "shape": 3 + }, + { + "name": "loaded_width🟦", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "loaded_height🟦", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoInfo" + }, + "widgets_values": {} + }, + { + "id": 22, + "type": "Note", + "pos": [ + 1120, + 887 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "use time feature to control aaa" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 37, + "type": "MIDILoadAndExtract", + "pos": [ + -2344.29296875, + -243.81497192382812 + ], + "size": [ + 1020, + 346 + ], + "flags": {}, + "order": 2, + "mode": 4, + "inputs": [ + { + "name": "video_frames", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "MIDI", + "type": "MIDI", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "selectedNotes": [] + }, + "widgets_values": [ + "Velocity", + "prom_single_track.mid", + "all", + 30, + false, + "", + "upload", + "refresh", + "", + "upload", + "refresh" + ] + }, + { + "id": 38, + "type": "MotionFeatureNode", + "pos": [ + -2330.876953125, + 153.2240753173828 + ], + "size": [ + 268.79998779296875, + 222 + ], + "flags": {}, + "order": 3, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MotionFeatureNode" + }, + "widgets_values": [ + "mean_motion", + 30, + "Farneback", + 0, + 0, + 0, + 0 + ] + }, + { + "id": 39, + "type": "TimeFeatureNode", + "pos": [ + -2012.8848876953125, + 149.26502990722656 + ], + "size": [ + 262.2439880371094, + 222 + ], + "flags": {}, + "order": 4, + "mode": 4, + "inputs": [ + { + "name": "video_frames", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "smooth", + 30, + 1, + 0, + 512, + 30, + 0 + ] + }, + { + "id": 40, + "type": "ProximityFeatureNode", + "pos": [ + -2389.29296875, + 393.1850280761719 + ], + "size": [ + 336, + 218 + ], + "flags": {}, + "order": 5, + "mode": 4, + "inputs": [ + { + "name": "anchor_locations", + "type": "LOCATION", + "link": null + }, + { + "name": "query_locations", + "type": "LOCATION", + "link": null + }, + { + "name": "query_locations", + "type": "LOCATION", + "link": null + } + ], + "outputs": [ + { + "name": "proximity_feature", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "feature_pipe", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ProximityFeatureNode" + }, + "widgets_values": [ + 30, + "frame", + 30, + 512, + 512, + "frame" + ] + }, + { + "id": 41, + "type": "BrightnessFeatureNode", + "pos": [ + -2352.884765625, + 559.2650146484375 + ], + "size": [ + 317.4000244140625, + 150 + ], + "flags": {}, + "order": 6, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BrightnessFeatureNode" + }, + "widgets_values": [ + "mean_brightness", + 30, + 512, + 512 + ] + }, + { + "id": 42, + "type": "ColorFeatureNode", + "pos": [ + -2022.8848876953125, + 559.2650146484375 + ], + "size": [ + 317.4000244140625, + 150 + ], + "flags": {}, + "order": 7, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ColorFeatureNode" + }, + "widgets_values": [ + "dominant_color", + 30, + 512, + 512 + ] + }, + { + "id": 43, + "type": "RhythmFeatureExtractor", + "pos": [ + -2026.29296875, + 356.1850280761719 + ], + "size": [ + 352.79998779296875, + 198 + ], + "flags": {}, + "order": 8, + "mode": 4, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": null + }, + { + "name": "audio", + "type": "AUDIO", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RhythmFeatureExtractor" + }, + "widgets_values": [ + "beat_locations", + 30, + 4, + 512, + 512, + 4 + ] + }, + { + "id": 44, + "type": "PitchFeatureExtractor", + "pos": [ + -2333.29296875, + 724.1849975585938 + ], + "size": [ + 344.3999938964844, + 218 + ], + "flags": {}, + "order": 9, + "mode": 4, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": null + }, + { + "name": "opt_pitch_range_collections", + "type": "PITCH_RANGE_COLLECTION", + "link": null, + "shape": 7 + }, + { + "name": "opt_pitch_range_collections", + "type": "PITCH_RANGE_COLLECTION", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "PitchFeatureExtractor" + }, + "widgets_values": [ + "frequency", + "medium", + 0, + 512, + 512, + "medium" + ] + }, + { + "id": 45, + "type": "DepthFeatureNode", + "pos": [ + -1682.8848876953125, + 549.2650146484375 + ], + "size": [ + 317.4000244140625, + 150 + ], + "flags": {}, + "order": 10, + "mode": 4, + "inputs": [ + { + "name": "depth_maps", + "type": "IMAGE", + "link": null + }, + { + "name": "depth_maps", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthFeatureNode" + }, + "widgets_values": [ + "mean_depth", + 30, + 512, + 512 + ] + }, + { + "id": 46, + "type": "ManualFeatureFromPipe", + "pos": [ + -1652.8848876953125, + 149.26502990722656 + ], + "size": [ + 352.79998779296875, + 150 + ], + "flags": {}, + "order": 11, + "mode": 4, + "inputs": [ + { + "name": "feature_pipe", + "type": "FEATURE_PIPE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ManualFeatureFromPipe" + }, + "widgets_values": [ + "0,10,20", + "0.0,0.5,1.0", + 1, + "none" + ] + }, + { + "id": 47, + "type": "AreaFeatureNode", + "pos": [ + -1622.8848876953125, + 349.2650451660156 + ], + "size": [ + 317.4000244140625, + 174 + ], + "flags": {}, + "order": 12, + "mode": 4, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": null + }, + { + "name": "masks", + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AreaFeatureNode" + }, + "widgets_values": [ + "total_area", + 30, + 0.5, + 512, + 0.5 + ] + }, + { + "id": 50, + "type": "FeatureCombine", + "pos": [ + -1921.7711181640625, + 1180 + ], + "size": [ + 380.4000244140625, + 150 + ], + "flags": {}, + "order": 13, + "mode": 4, + "inputs": [ + { + "name": "feature1", + "type": "FEATURE", + "link": null + }, + { + "name": "feature2", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureCombine" + }, + "widgets_values": [ + "add", + 1, + 1, + false + ] + }, + { + "id": 51, + "type": "FeatureOscillator", + "pos": [ + -1501.7711181640625, + 1190 + ], + "size": [ + 367.79998779296875, + 198 + ], + "flags": {}, + "order": 14, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureOscillator" + }, + "widgets_values": [ + "sine", + 1, + 0.5, + 0, + 0.5, + false + ] + }, + { + "id": 52, + "type": "FeatureScaler", + "pos": [ + -2321.771240234375, + 1580 + ], + "size": [ + 367.79998779296875, + 174 + ], + "flags": {}, + "order": 15, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureScaler" + }, + "widgets_values": [ + "linear", + 0, + 1, + 2, + false + ] + }, + { + "id": 53, + "type": "FeatureSmoothing", + "pos": [ + -1911.7711181640625, + 1580 + ], + "size": [ + 367.79998779296875, + 174 + ], + "flags": {}, + "order": 16, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 5, + 0.3, + 1, + false + ] + }, + { + "id": 54, + "type": "FeatureMath", + "pos": [ + -1911.7711181640625, + 1390 + ], + "size": [ + 367.79998779296875, + 126 + ], + "flags": {}, + "order": 17, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureMath" + }, + "widgets_values": [ + 0, + "add", + false + ] + }, + { + "id": 55, + "type": "FeatureAccumulate", + "pos": [ + -1501.7711181640625, + 1460 + ], + "size": [ + 367.79998779296875, + 222 + ], + "flags": {}, + "order": 18, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureAccumulate" + }, + "widgets_values": [ + 0, + 1, + 0, + false, + false, + 0, + false + ] + }, + { + "id": 49, + "type": "FeatureMixer", + "pos": [ + -2309.771240234375, + 1186 + ], + "size": [ + 367.79998779296875, + 342 + ], + "flags": {}, + "order": 19, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": null + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": null, + "shape": 3 + }, + { + "name": "FEATURE_VISUALIZATION", + "type": "IMAGE", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FeatureMixer" + }, + "widgets_values": [ + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0.5, + false + ] + }, + { + "id": 56, + "type": "Note", + "pos": [ + -1027, + 1248 + ], + "size": [ + 343.6423645019531, + 137.95391845703125 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "\n<--------here's some ways to manipulate features" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 20, + "type": "VHS_VideoCombine", + "pos": [ + 2143, + -9 + ], + "size": [ + 260, + 334 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 13 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 15, + "loop_count": 0, + "filename_prefix": "AdvancedLivePortrait", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AdvancedLivePortrait_00352.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 15 + } + } + } + }, + { + "id": 17, + "type": "AdvancedLivePortrait", + "pos": [ + 1843, + 26 + ], + "size": [ + 235.1999969482422, + 523.0364379882812 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "src_images", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "motion_link", + "type": "EDITOR_LINK", + "link": 16, + "shape": 7 + }, + { + "name": "driving_images", + "type": "IMAGE", + "link": 11, + "shape": 7 + }, + { + "name": "command", + "type": "STRING", + "link": 25, + "widget": { + "name": "command" + } + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 13 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AdvancedLivePortrait" + }, + "widgets_values": [ + 0, + 0, + 1.7000000000000002, + "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0", + "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0", + false, + "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0" + ] + }, + { + "id": 21, + "type": "Note", + "pos": [ + 1809, + 612 + ], + "size": [ + 638.537841796875, + 195.73060607910156 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "Flex Parameters: \n constrain_min_max: ensures modulated value is kept within bounds of the min and max of the parameter\n strength: a strength multiplier\n feature_threshold: minimum feature value to consider\n feature_param: the expression parameter to modulate\n feature_mode:\n -relative: modulation occurs relative to the parameter value\n -absolute: modulation occurs relative to 0\n\nNotes:\n-the value for a parameter in a previous editor changes the starting position of that parameter in the next editor. this means a parameter can be modulated multiple times for interesting effects\n\n" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 48, + "type": "Note", + "pos": [ + -1045.8770751953125, + 227.2240753173828 + ], + "size": [ + 343.6423645019531, + 137.95391845703125 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "Time and motion are two out of many feature sources, and they are interchangeable.\n\n<--------here's some other feature sources.\ntutorial https://youtu.be/QmWk2xse7pI" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 26, + "type": "FlexExpressionEditor", + "pos": [ + 1426, + 7 + ], + "size": [ + 336, + 830 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "src_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "sample_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "add_exp", + "type": "EXP_DATA", + "link": null, + "shape": 7 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "link": 15, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 54, + "shape": 7 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null, + "shape": 3 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "links": [ + 16 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "save_exp", + "type": "EXP_DATA", + "links": null, + "shape": 3 + }, + { + "name": "command", + "type": "STRING", + "links": [ + 25 + ], + "slot_index": 3, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FlexExpressionEditor" + }, + "widgets_values": [ + 0, + 20, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + "OnlyExpression", + 1.7, + 1, + 1, + 0, + "rotate_yaw", + "absolute" + ] + }, + { + "id": 23, + "type": "Note", + "pos": [ + 1490, + 889 + ], + "size": [ + 245.08152770996094, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "use motion of driving video to control yaw\n" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 19, + "type": "VHS_LoadVideo", + "pos": [ + -92.59197998046875, + 164.5709991455078 + ], + "size": [ + 250, + 262 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 11, + 43 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": [ + 26 + ], + "slot_index": 3, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "driving_video.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 2, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "driving_video.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 2 + } + } + } + }, + { + "id": 66, + "type": "MotionFeatureNode", + "pos": [ + 224.3660125732422, + 362.69696044921875 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 43 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": 44, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 46 + ] + } + ], + "properties": { + "Node name for S&R": "MotionFeatureNode" + }, + "widgets_values": [ + "mean_motion", + 30, + 512, + 512, + "Farneback", + 0, + 0 + ] + }, + { + "id": 15, + "type": "LoadImage", + "pos": [ + -481.078369140625, + 110 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 14 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "source_image.png", + "image" + ] + }, + { + "id": 65, + "type": "TimeFeatureNode", + "pos": [ + 211.40101623535156, + 87.40798950195312 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "frame_rate", + "type": "FLOAT", + "link": 40, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 42, + 49, + 51 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "pulse", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, + { + "id": 67, + "type": "FeatureSmoothing", + "pos": [ + 174.69239807128906, + 657.08544921875 + ], + "size": [ + 340.20001220703125, + 154 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 46 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 47, + 53, + 54 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 5, + 0.3, + 1, + false + ] + }, + { + "id": 25, + "type": "FlexExpressionEditor", + "pos": [ + 1022.323486328125, + -39.37493896484375 + ], + "size": [ + 336, + 830 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "src_image", + "type": "IMAGE", + "link": 14, + "shape": 7 + }, + { + "name": "sample_image", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "add_exp", + "type": "EXP_DATA", + "link": null, + "shape": 7 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "link": null, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 51, + "shape": 7 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null, + "shape": 3 + }, + { + "name": "flex_motion_link", + "type": "EDITOR_LINK", + "links": [ + 15 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "save_exp", + "type": "EXP_DATA", + "links": null, + "shape": 3 + }, + { + "name": "command", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FlexExpressionEditor" + }, + "widgets_values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 1, + 1, + "OnlyExpression", + 1.7, + true, + 1, + 0, + "aaa", + "absolute" + ] + } + ], + "links": [ + [ + 11, + 19, + 0, + 17, + 2, + "IMAGE" + ], + [ + 13, + 17, + 0, + 20, + 0, + "IMAGE" + ], + [ + 14, + 15, + 0, + 25, + 0, + "IMAGE" + ], + [ + 15, + 25, + 1, + 26, + 3, + "EDITOR_LINK" + ], + [ + 16, + 26, + 1, + 17, + 1, + "EDITOR_LINK" + ], + [ + 25, + 26, + 3, + 17, + 3, + "STRING" + ], + [ + 26, + 19, + 3, + 33, + 0, + "VHS_VIDEOINFO" + ], + [ + 40, + 33, + 5, + 65, + 0, + "FLOAT" + ], + [ + 42, + 65, + 0, + 25, + 4, + "FEATURE" + ], + [ + 43, + 19, + 0, + 66, + 0, + "IMAGE" + ], + [ + 44, + 33, + 5, + 66, + 1, + "FLOAT" + ], + [ + 46, + 66, + 0, + 67, + 0, + "FEATURE" + ], + [ + 47, + 67, + 0, + 26, + 4, + "FEATURE" + ], + [ + 49, + 65, + 0, + 25, + 4, + "FEATURE" + ], + [ + 51, + 65, + 0, + 25, + 4, + "FEATURE" + ], + [ + 53, + 67, + 0, + 26, + 4, + "FEATURE" + ], + [ + 54, + 67, + 0, + 26, + 4, + "FEATURE" + ] + ], + "groups": [ + { + "id": 1, + "title": ":)", + "bounding": [ + -3194, + -326, + 2124, + 1397 + ], + "color": "#3f789e", + "font_size": 1000, + "flags": {} + }, + { + "id": 2, + "title": "Feature manipulation", + "bounding": [ + -2335, + 1095, + 1261, + 752 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.672749994932561, + "offset": [ + -46.36489175292053, + 294.6589054343911 + ] + }, + "node_versions": { + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUI-AdvancedLivePortrait": "3bba732915e22f18af0d221b9c5c282990181f1b", + "comfy-core": "0.3.12" + }, + "ue_links": [] + }, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/audio_ipadapter_weights.json b/examples/audio_ipadapter_weights.json deleted file mode 100644 index b5c2d31..0000000 --- a/examples/audio_ipadapter_weights.json +++ /dev/null @@ -1,3776 +0,0 @@ -{ - "last_node_id": 345, - "last_link_id": 812, - "nodes": [ - { - "id": 280, - "type": "ControlNetApplyAdvanced", - "pos": [ - 2700.1005362372516, - 703.5287314851208 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 770 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 771 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 660, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 661, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 665, - 669 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 666, - 670 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.47000000000000003, - 0, - 0.5740000000000001 - ] - }, - { - "id": 288, - "type": "DownloadOpenUnmixModel", - "pos": [ - -90.10184962710808, - -866.6539360454093 - ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 688 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 31, - "type": "ADE_ApplyAnimateDiffModel", - "pos": [ - 1018.6153756226563, - 296.9229692988283 - ], - "size": { - "0": 319.20001220703125, - "1": 182 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "motion_model", - "type": "MOTION_MODEL_ADE", - "link": 61 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": null - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - }, - { - "name": "prev_m_models", - "type": "M_MODELS", - "link": null - } - ], - "outputs": [ - { - "name": "M_MODELS", - "type": "M_MODELS", - "links": [ - 62 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_ApplyAnimateDiffModel" - }, - "widgets_values": [ - 0, - 1, - "" - ] - }, - { - "id": 32, - "type": "ADE_UseEvolvedSampling", - "pos": [ - 1432.6153756226563, - -31.07703070117199 - ], - "size": { - "0": 241.0297088623047, - "1": 118 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 783 - }, - { - "name": "m_models", - "type": "M_MODELS", - "link": 62 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 64, - "slot_index": 2 - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 194 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_UseEvolvedSampling" - }, - "widgets_values": [ - "lcm >> sqrt_linear" - ] - }, - { - "id": 88, - "type": "ModelSamplingDiscrete", - "pos": [ - 1461.6153756226563, - 182.9229692988281 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 194 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 195 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ModelSamplingDiscrete" - }, - "widgets_values": [ - "lcm", - false - ] - }, - { - "id": 296, - "type": "MotionFeatureNode", - "pos": [ - 610, - -1480 - ], - "size": { - "0": 317.4000244140625, - "1": 174 - }, - "flags": {}, - "order": 1, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "MotionFeatureNode" - }, - "widgets_values": [ - 30, - "mean_motion", - "Farneback", - 0, - 0 - ] - }, - { - "id": 295, - "type": "DepthFeatureNode", - "pos": [ - 220, - -1390 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 2, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DepthFeatureNode" - }, - "widgets_values": [ - 30, - "mean_depth" - ] - }, - { - "id": 287, - "type": "AudioSeparator", - "pos": [ - -90.10184962710808, - -756.6539360454093 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 688, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 789 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 699 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 685 - ], - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 687 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 277, - "type": "VAEDecode", - "pos": [ - 3109.7626474195895, - -144.28775915330124 - ], - "size": { - "0": 140, - "1": 46 - }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 656 - }, - { - "name": "vae", - "type": "VAE", - "link": 746 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 750, - 759 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 319, - "type": "LoraLoaderModelOnly", - "pos": [ - -2463.624330660592, - 163.30805644428764 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 757 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 756 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "add_detail.safetensors", - 1 - ] - }, - { - "id": 52, - "type": "LoraLoaderModelOnly", - "pos": [ - -2467.624330660592, - 28.308056444287608 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 102 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 757 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "AnimateLCM_sd15_t2v_lora.safetensors", - 1 - ] - }, - { - "id": 290, - "type": "FeatureMixer", - "pos": [ - 303.9791111590381, - -923.1734799453269 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 692 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 693 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 694 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.79, - 0, - 1.7, - 3.4000000000000004, - 1, - 1, - 1, - 0, - 0.3, - 0.6, - 0.5 - ] - }, - { - "id": 11, - "type": "IPAdapterUnifiedLoader", - "pos": [ - 1911, - 216 - ], - "size": { - "0": 210, - "1": 78 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 195 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 623 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "links": [ - 237 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 30, - "type": "ADE_LoadAnimateDiffModel", - "pos": [ - 1011.6153756226563, - 196.9229692988281 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MOTION_MODEL", - "type": "MOTION_MODEL_ADE", - "links": [ - 61 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_LoadAnimateDiffModel" - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt" - ] - }, - { - "id": 271, - "type": "PreviewImage", - "pos": [ - 739.1979544549737, - -923.5329804209598 - ], - "size": { - "0": 799.0379638671875, - "1": 431.54742431640625 - }, - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 694 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 255, - "type": "CLIPTextEncode", - "pos": [ - -1845.306410106198, - 142.10544477703155 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 610 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 769 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "" - ] - }, - { - "id": 323, - "type": "Reroute", - "pos": [ - -1410, - 660 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 768 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 770 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 324, - "type": "Reroute", - "pos": [ - -1409, - 695 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 769 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 771 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 279, - "type": "InvertMask", - "pos": [ - -937, - 238 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 657 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 774 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "InvertMask" - } - }, - { - "id": 326, - "type": "Reroute", - "pos": [ - -717, - 621 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 774 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 776 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 34, - "type": "ADE_StandardStaticContextOptions", - "pos": [ - 1040, - -45 - ], - "size": { - "0": 319.20001220703125, - "1": 198 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null - } - ], - "outputs": [ - { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 64 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_StandardStaticContextOptions" - }, - "widgets_values": [ - 16, - 6, - "pyramid", - false, - 0, - 1 - ] - }, - { - "id": 259, - "type": "IPAdapterWeightsFromStrategy", - "pos": [ - 1909, - 341 - ], - "size": { - "0": 278.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "weights_strategy", - "type": "WEIGHTS_STRATEGY", - "link": 678 - }, - { - "name": "image", - "type": "IMAGE", - "link": 676 - } - ], - "outputs": [ - { - "name": "weights", - "type": "FLOAT", - "links": [ - 617 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "weights_invert", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "total_frames", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "image_1", - "type": "IMAGE", - "links": [ - 618 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "image_2", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "weights_strategy", - "type": "WEIGHTS_STRATEGY", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "IPAdapterWeightsFromStrategy" - } - }, - { - "id": 291, - "type": "LoraLoaderModelOnly", - "pos": [ - -2460.939056887235, - 300.63488893012595 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 756 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 781 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ral-dissolve-sd15.safetensors", - 0.6 - ] - }, - { - "id": 329, - "type": "Reroute", - "pos": [ - -2102.7424690643847, - 637.4964529127092 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 781 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 782 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 330, - "type": "Reroute", - "pos": [ - 1330, - 661 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 782 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 783 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 4, - "type": "CheckpointLoaderSimple", - "pos": [ - -2470.833727160648, - -116.24953047983493 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 5, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 102 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 81, - 610 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 785 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photon_v1.safetensors" - ] - }, - { - "id": 331, - "type": "Reroute", - "pos": [ - -2083, - -339 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 785 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 786 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 328, - "type": "Reroute", - "pos": [ - 437, - -368.0390990317155 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 786 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 779, - 780 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 87, - "type": "VAEDecode", - "pos": [ - 4136.42139592476, - -46.640902628124685 - ], - "size": { - "0": 140, - "1": 46 - }, - "flags": {}, - "order": 64, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 651 - }, - { - "name": "vae", - "type": "VAE", - "link": 749 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 790 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 333, - "type": "ImageCASharpening+", - "pos": [ - 4038, - 146 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 65, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 790 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 791 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCASharpening+" - }, - "widgets_values": [ - 0.8 - ] - }, - { - "id": 320, - "type": "VHS_VideoCombine", - "pos": [ - 3325.7626474195895, - -139.28775915330124 - ], - "size": [ - 210, - 665 - ], - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 759 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02748-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 316, - "type": "VAEEncode", - "pos": [ - 3708, - -195 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 750 - }, - { - "name": "vae", - "type": "VAE", - "link": 747 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 748 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 276, - "type": "NNLatentUpscale", - "pos": [ - 3698, - -95 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 748 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 650 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "NNLatentUpscale" - }, - "widgets_values": [ - "SD 1.x", - 1.5 - ] - }, - { - "id": 294, - "type": "MIDILoadAndExtract", - "pos": [ - 1016, - -1378 - ], - "size": { - "0": 1020, - "1": 346 - }, - "flags": {}, - "order": 6, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MIDI", - "type": "MIDI", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "selectedNotes": [], - "Node name for S&R": "MIDILoadAndExtract" - }, - "widgets_values": [ - "drummid.mid", - "all", - "Note On/Off", - 30, - false, - "", - "upload", - "refresh" - ] - }, - { - "id": 297, - "type": "ColorFeatureNode", - "pos": [ - 220, - -1570 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 7, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ColorFeatureNode" - }, - "widgets_values": [ - 30, - "dominant_color" - ] - }, - { - "id": 273, - "type": "easy imageRemBg", - "pos": [ - -980, - -141 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": { - "collapsed": false - }, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 640 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "mask", - "type": "MASK", - "links": [ - 657 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "easy imageRemBg" - }, - "widgets_values": [ - "RMBG-1.4", - "Hide", - "ComfyUI", - false - ] - }, - { - "id": 261, - "type": "ImageScale", - "pos": [ - -937.0245821386411, - 369.85541007695775 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 620 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 704, - 765 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 518, - 922, - "disabled" - ] - }, - { - "id": 307, - "type": "VHS_VideoCombine", - "pos": [ - 269, - -181 - ], - "size": [ - 210, - 663 - ], - "flags": {}, - "order": 46, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 720 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02724.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 260, - "type": "VAEEncode", - "pos": [ - 692, - 82 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 766 - }, - { - "name": "vae", - "type": "VAE", - "link": 779 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 793 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 317, - "type": "Reroute", - "pos": [ - 2590, - -380 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 780 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 746, - 747, - 749 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 311, - "type": "Reroute", - "pos": [ - 2590, - -350 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 788 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 762 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 332, - "type": "Reroute", - "pos": [ - -526, - -330 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 811 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 788, - 789 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 301, - "type": "Reroute", - "pos": [ - -530, - -300 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 704 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 699 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 335, - "type": "Reroute", - "pos": [ - 976, - -308 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 793 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 794 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 281, - "type": "ControlNetLoader", - "pos": [ - 2343, - 660 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 660 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11p_sd15_lineart_fp16.safetensors" - ] - }, - { - "id": 282, - "type": "LineartStandardPreprocessor", - "pos": [ - 2346, - 752 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 773 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 661 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LineartStandardPreprocessor" - }, - "widgets_values": [ - 6, - 8, - 512 - ] - }, - { - "id": 325, - "type": "Reroute", - "pos": [ - 286, - 737 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 772 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 773 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 321, - "type": "VHS_VideoCombine", - "pos": [ - 4351.05751488286, - -207.0379464384985 - ], - "size": [ - 210, - 664 - ], - "flags": {}, - "order": 66, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 791 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 762 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02749-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 310, - "type": "FlexImageKaleidoscope", - "pos": [ - -143, - 0 - ], - "size": { - "0": 344.3999938964844, - "1": 338 - }, - "flags": {}, - "order": 42, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 765 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 792 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 718 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 720, - 766, - 772 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexImageKaleidoscope" - }, - "widgets_values": [ - 1, - 0, - "rotation", - "relative", - 8, - 0.5, - 0.5, - 1, - 0, - 0, - 1 - ] - }, - { - "id": 327, - "type": "Reroute", - "pos": [ - 2184, - 634 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 776 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 777, - 797 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 337, - "type": "SetLatentNoiseMask", - "pos": [ - 2707, - 266 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 796 - }, - { - "name": "mask", - "type": "MASK", - "link": 797 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 798 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 336, - "type": "Reroute", - "pos": [ - 2590, - -320 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 794 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 796 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 293, - "type": "Note", - "pos": [ - 97, - -1202 - ], - "size": { - "0": 838.786865234375, - "1": 179.91893005371094 - }, - "flags": {}, - "order": 9, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "here, we set up the audio Feature by extracting the instruments from the audio and isolating the drums.\nThen, before we convert the Feature into IPAdapter weights, we shape\" the feature with the FeatureMixer to make it drive the weights in a suitable way.\n\nThis example uses an audio feature, but it could be swapped out for any of the features in the node pack, including MIDI, Depth, Color, Time, Brightness, and more\n\n Look there's even a keyboard! -------->" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 299, - "type": "Note", - "pos": [ - 3184, - -387 - ], - "size": { - "0": 436.01641845703125, - "1": 119.03775787353516 - }, - "flags": {}, - "order": 10, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 275, - "type": "KSampler", - "pos": [ - 3719.127367528601, - 154.68755277929998 - ], - "size": { - "0": 308.92816162109375, - "1": 263.701904296875 - }, - "flags": {}, - "order": 63, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 784 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 669 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 670 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 650 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 651 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 144, - "fixed", - 4, - 1.8, - "lcm", - "sgm_uniform", - 0.3 - ] - }, - { - "id": 298, - "type": "Note", - "pos": [ - 2044, - -364 - ], - "size": { - "0": 449.9469299316406, - "1": 171.0027618408203 - }, - "flags": {}, - "order": 11, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "give a cool image to the IPAdapter - I tripled it here because of reasons.\n\nFeed it the weights that we created from the audio\n\nI started getting memory errors with big images so i just smashed them" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 292, - "type": "Note", - "pos": [ - -1853, - -497 - ], - "size": { - "0": 695.8017578125, - "1": 261.10052490234375 - }, - "flags": {}, - "order": 12, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "This example is meant to demonstrate modulating an IP adapter with the Feature system introduced by the ryanontheinside nodes.\n\nFor this example, we will simply apply an IPAdapter to the background of a video, controlled by the drums in a song.\n\n\n\nIf any issues or if you want to contribute:\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\n\nModels\nhttps://huggingface.co/wangfuyun/AnimateLCM" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 285, - "type": "FeatureToWeightsStrategy", - "pos": [ - 310.1979544549727, - -534.5329804209596 - ], - "size": { - "0": 378, - "1": 46.42244338989258 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 693 - } - ], - "outputs": [ - { - "name": "WEIGHTS_STRATEGY", - "type": "WEIGHTS_STRATEGY", - "links": [ - 678 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureToWeightsStrategy" - } - }, - { - "id": 263, - "type": "AudioFeatureExtractor", - "pos": [ - -114, - -531 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 685 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 687 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 692, - 792 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 718 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 56, - "type": "LoadImage", - "pos": [ - 1837, - -162 - ], - "size": { - "0": 210, - "1": 314 - }, - "flags": {}, - "order": 13, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 807 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "blue_eyes_painting.jpg", - "image" - ] - }, - { - "id": 102, - "type": "IPAdapterBatch", - "pos": [ - 2304, - 156 - ], - "size": { - "0": 303.8558349609375, - "1": 278 - }, - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 623 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 237 - }, - { - "name": "image", - "type": "IMAGE", - "link": 618, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 777 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - }, - { - "name": "weight", - "type": "FLOAT", - "link": 617, - "widget": { - "name": "weight" - } - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 716, - 784 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterBatch" - }, - "widgets_values": [ - 0.5, - "strong style transfer", - 0, - 1, - "K+V", - 0 - ] - }, - { - "id": 84, - "type": "KSampler", - "pos": [ - 2949.7626474195895, - 53.71224084669877 - ], - "size": { - "0": 308.92816162109375, - "1": 263.701904296875 - }, - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 716 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 665 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 666 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 798 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 656 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 144, - "fixed", - 4, - 1.8, - "lcm", - "sgm_uniform", - 1 - ] - }, - { - "id": 258, - "type": "VHS_LoadVideo", - "pos": [ - -1254, - -140 - ], - "size": [ - 235.1999969482422, - 658.3553434150164 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 620, - 640 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [ - 811 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": [], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexels_womanSitting_with_audio.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 100, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 100, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "pexels_womanSitting_with_audio.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 7, - "type": "CLIPTextEncode", - "pos": [ - -1828.3064101061982, - -109.89455522296822 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 81 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 768 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "high quality, masterpiece, 4k, high resolution photograph of psychedelic fire pulsing, ral-dissolve fire swirling in the sky, made of ral-dissolve" - ] - }, - { - "id": 145, - "type": "ImageBatchMultiple+", - "pos": [ - 2338, - -84 - ], - "size": { - "0": 210, - "1": 138 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "image_1", - "type": "IMAGE", - "link": 810 - }, - { - "name": "image_2", - "type": "IMAGE", - "link": 809 - }, - { - "name": "image_3", - "type": "IMAGE", - "link": 812 - }, - { - "name": "image_4", - "type": "IMAGE", - "link": null - }, - { - "name": "image_5", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 676 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageBatchMultiple+" - }, - "widgets_values": [ - "lanczos" - ] - }, - { - "id": 343, - "type": "ImageScale", - "pos": [ - 2076, - -102 - ], - "size": { - "0": 210, - "1": 130 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 807 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 809, - 810, - 812 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1024, - 1024, - "disabled" - ] - }, - { - "id": 322, - "type": "Note", - "pos": [ - -163, - -184 - ], - "size": { - "0": 384.10394287109375, - "1": 138.25791931152344 - }, - "flags": {}, - "order": 15, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "un-bypass this detour to further trip out\n\n\nfor the heck of it, ill add a Kaleidoscope Image Bloom to see what it does to the output\n\nThere are a ton of these in the node pack, masks too" - ], - "color": "#432", - "bgcolor": "#653" - } - ], - "links": [ - [ - 61, - 30, - 0, - 31, - 0, - "MOTION_MODEL_ADE" - ], - [ - 62, - 31, - 0, - 32, - 1, - "M_MODELS" - ], - [ - 64, - 34, - 0, - 32, - 2, - "CONTEXT_OPTIONS" - ], - [ - 81, - 4, - 1, - 7, - 0, - "CLIP" - ], - [ - 102, - 4, - 0, - 52, - 0, - "MODEL" - ], - [ - 194, - 32, - 0, - 88, - 0, - "MODEL" - ], - [ - 195, - 88, - 0, - 11, - 0, - "MODEL" - ], - [ - 237, - 11, - 1, - 102, - 1, - "IPADAPTER" - ], - [ - 610, - 4, - 1, - 255, - 0, - "CLIP" - ], - [ - 617, - 259, - 0, - 102, - 6, - "FLOAT" - ], - [ - 618, - 259, - 3, - 102, - 2, - "IMAGE" - ], - [ - 620, - 258, - 0, - 261, - 0, - "IMAGE" - ], - [ - 623, - 11, - 0, - 102, - 0, - "MODEL" - ], - [ - 640, - 258, - 0, - 273, - 0, - "IMAGE" - ], - [ - 650, - 276, - 0, - 275, - 3, - "LATENT" - ], - [ - 651, - 275, - 0, - 87, - 0, - "LATENT" - ], - [ - 656, - 84, - 0, - 277, - 0, - "LATENT" - ], - [ - 657, - 273, - 1, - 279, - 0, - "MASK" - ], - [ - 660, - 281, - 0, - 280, - 2, - "CONTROL_NET" - ], - [ - 661, - 282, - 0, - 280, - 3, - "IMAGE" - ], - [ - 665, - 280, - 0, - 84, - 1, - "CONDITIONING" - ], - [ - 666, - 280, - 1, - 84, - 2, - "CONDITIONING" - ], - [ - 669, - 280, - 0, - 275, - 1, - "CONDITIONING" - ], - [ - 670, - 280, - 1, - 275, - 2, - "CONDITIONING" - ], - [ - 676, - 145, - 0, - 259, - 1, - "IMAGE" - ], - [ - 678, - 285, - 0, - 259, - 0, - "WEIGHTS_STRATEGY" - ], - [ - 685, - 287, - 1, - 263, - 0, - "AUDIO" - ], - [ - 687, - 287, - 5, - 263, - 1, - "FEATURE_PIPE" - ], - [ - 688, - 288, - 0, - 287, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 692, - 263, - 0, - 290, - 0, - "FEATURE" - ], - [ - 693, - 290, - 0, - 285, - 0, - "FEATURE" - ], - [ - 694, - 290, - 1, - 271, - 0, - "IMAGE" - ], - [ - 699, - 301, - 0, - 287, - 2, - "IMAGE" - ], - [ - 704, - 261, - 0, - 301, - 0, - "*" - ], - [ - 716, - 102, - 0, - 84, - 0, - "MODEL" - ], - [ - 718, - 263, - 1, - 310, - 2, - "FEATURE_PIPE" - ], - [ - 720, - 310, - 0, - 307, - 0, - "IMAGE" - ], - [ - 746, - 317, - 0, - 277, - 1, - "VAE" - ], - [ - 747, - 317, - 0, - 316, - 1, - "VAE" - ], - [ - 748, - 316, - 0, - 276, - 0, - "LATENT" - ], - [ - 749, - 317, - 0, - 87, - 1, - "VAE" - ], - [ - 750, - 277, - 0, - 316, - 0, - "IMAGE" - ], - [ - 756, - 319, - 0, - 291, - 0, - "MODEL" - ], - [ - 757, - 52, - 0, - 319, - 0, - "MODEL" - ], - [ - 759, - 277, - 0, - 320, - 0, - "IMAGE" - ], - [ - 762, - 311, - 0, - 321, - 1, - "AUDIO" - ], - [ - 765, - 261, - 0, - 310, - 0, - "IMAGE" - ], - [ - 766, - 310, - 0, - 260, - 0, - "IMAGE" - ], - [ - 768, - 7, - 0, - 323, - 0, - "*" - ], - [ - 769, - 255, - 0, - 324, - 0, - "*" - ], - [ - 770, - 323, - 0, - 280, - 0, - "CONDITIONING" - ], - [ - 771, - 324, - 0, - 280, - 1, - "CONDITIONING" - ], - [ - 772, - 310, - 0, - 325, - 0, - "*" - ], - [ - 773, - 325, - 0, - 282, - 0, - "IMAGE" - ], - [ - 774, - 279, - 0, - 326, - 0, - "*" - ], - [ - 776, - 326, - 0, - 327, - 0, - "*" - ], - [ - 777, - 327, - 0, - 102, - 4, - "MASK" - ], - [ - 779, - 328, - 0, - 260, - 1, - "VAE" - ], - [ - 780, - 328, - 0, - 317, - 0, - "*" - ], - [ - 781, - 291, - 0, - 329, - 0, - "*" - ], - [ - 782, - 329, - 0, - 330, - 0, - "*" - ], - [ - 783, - 330, - 0, - 32, - 0, - "MODEL" - ], - [ - 784, - 102, - 0, - 275, - 0, - "MODEL" - ], - [ - 785, - 4, - 2, - 331, - 0, - "*" - ], - [ - 786, - 331, - 0, - 328, - 0, - "*" - ], - [ - 788, - 332, - 0, - 311, - 0, - "*" - ], - [ - 789, - 332, - 0, - 287, - 1, - "AUDIO" - ], - [ - 790, - 87, - 0, - 333, - 0, - "IMAGE" - ], - [ - 791, - 333, - 0, - 321, - 0, - "IMAGE" - ], - [ - 792, - 263, - 0, - 310, - 1, - "FEATURE" - ], - [ - 793, - 260, - 0, - 335, - 0, - "*" - ], - [ - 794, - 335, - 0, - 336, - 0, - "*" - ], - [ - 796, - 336, - 0, - 337, - 0, - "LATENT" - ], - [ - 797, - 327, - 0, - 337, - 1, - "MASK" - ], - [ - 798, - 337, - 0, - 84, - 3, - "LATENT" - ], - [ - 807, - 56, - 0, - 343, - 0, - "IMAGE" - ], - [ - 809, - 343, - 0, - 145, - 1, - "IMAGE" - ], - [ - 810, - 343, - 0, - 145, - 0, - "IMAGE" - ], - [ - 811, - 258, - 2, - 332, - 0, - "*" - ], - [ - 812, - 343, - 0, - 145, - 2, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Control net", - "bounding": [ - 2319, - 587, - 773, - 341 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Animate diff", - "bounding": [ - 963, - -129, - 807, - 615 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Ipadapter", - "bounding": [ - 1824, - -220, - 825, - 749 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Audio Feature", - "bounding": [ - -125, - -1005, - 1708, - 619 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Setep", - "bounding": [ - -2533, - -223, - 1194, - 735 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample1", - "bounding": [ - 2672, - -247, - 956, - 807 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample2", - "bounding": [ - 3686, - -294, - 915, - 791 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load image", - "bounding": [ - -1284, - -242, - 1053, - 783 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "😂", - "bounding": [ - -202, - -261, - 838, - 779 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.21762913579014861, - "offset": { - "0": 2823.299557647266, - "1": 1260.0798788145676 - } - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/audio_ipadapter_weights_plusbass.json b/examples/audio_ipadapter_weights_plusbass.json deleted file mode 100644 index bb97c8c..0000000 --- a/examples/audio_ipadapter_weights_plusbass.json +++ /dev/null @@ -1,5111 +0,0 @@ -{ - "last_node_id": 384, - "last_link_id": 917, - "nodes": [ - { - "id": 31, - "type": "ADE_ApplyAnimateDiffModel", - "pos": [ - 1018.6153756226563, - 296.9229692988283 - ], - "size": { - "0": 319.20001220703125, - "1": 182 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "motion_model", - "type": "MOTION_MODEL_ADE", - "link": 61 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": null - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - }, - { - "name": "prev_m_models", - "type": "M_MODELS", - "link": null - } - ], - "outputs": [ - { - "name": "M_MODELS", - "type": "M_MODELS", - "links": [ - 62 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_ApplyAnimateDiffModel" - }, - "widgets_values": [ - 0, - 1, - "" - ] - }, - { - "id": 32, - "type": "ADE_UseEvolvedSampling", - "pos": [ - 1432.6153756226563, - -31.07703070117199 - ], - "size": { - "0": 241.0297088623047, - "1": 118 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 783 - }, - { - "name": "m_models", - "type": "M_MODELS", - "link": 62 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 64, - "slot_index": 2 - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 194 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_UseEvolvedSampling" - }, - "widgets_values": [ - "lcm >> sqrt_linear" - ] - }, - { - "id": 88, - "type": "ModelSamplingDiscrete", - "pos": [ - 1461.6153756226563, - 182.9229692988281 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 194 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 195 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ModelSamplingDiscrete" - }, - "widgets_values": [ - "lcm", - false - ] - }, - { - "id": 296, - "type": "MotionFeatureNode", - "pos": [ - 290, - -1860 - ], - "size": { - "0": 317.4000244140625, - "1": 174 - }, - "flags": {}, - "order": 0, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "MotionFeatureNode" - }, - "widgets_values": [ - 30, - "mean_motion", - "Farneback", - 0, - 0 - ] - }, - { - "id": 295, - "type": "DepthFeatureNode", - "pos": [ - -100, - -1770 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 1, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DepthFeatureNode" - }, - "widgets_values": [ - 30, - "mean_depth" - ] - }, - { - "id": 319, - "type": "LoraLoaderModelOnly", - "pos": [ - -2463.624330660592, - 163.30805644428764 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 757 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 756 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "add_detail.safetensors", - 1 - ] - }, - { - "id": 52, - "type": "LoraLoaderModelOnly", - "pos": [ - -2467.624330660592, - 28.308056444287608 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 102 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 757 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "AnimateLCM_sd15_t2v_lora.safetensors", - 1 - ] - }, - { - "id": 290, - "type": "FeatureMixer", - "pos": [ - 71.49175893793421, - -936.5934981507727 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 692 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 693 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 694 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.79, - 0, - 1.7, - 3.4000000000000004, - 1, - 1, - 1, - 0, - 0.3, - 0.6, - 0.5 - ] - }, - { - "id": 30, - "type": "ADE_LoadAnimateDiffModel", - "pos": [ - 1011.6153756226563, - 196.9229692988281 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MOTION_MODEL", - "type": "MOTION_MODEL_ADE", - "links": [ - 61 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_LoadAnimateDiffModel" - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt" - ] - }, - { - "id": 323, - "type": "Reroute", - "pos": [ - -1410, - 660 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 768 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 770 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 324, - "type": "Reroute", - "pos": [ - -1409, - 695 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 769 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 771 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 279, - "type": "InvertMask", - "pos": [ - -937, - 238 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 657 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 774 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "InvertMask" - } - }, - { - "id": 326, - "type": "Reroute", - "pos": [ - -717, - 621 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 774 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 776 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 34, - "type": "ADE_StandardStaticContextOptions", - "pos": [ - 1040, - -45 - ], - "size": { - "0": 319.20001220703125, - "1": 198 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null - } - ], - "outputs": [ - { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 64 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_StandardStaticContextOptions" - }, - "widgets_values": [ - 16, - 6, - "pyramid", - false, - 0, - 1 - ] - }, - { - "id": 291, - "type": "LoraLoaderModelOnly", - "pos": [ - -2460.939056887235, - 300.63488893012595 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 756 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 781 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ral-dissolve-sd15.safetensors", - 0.6 - ] - }, - { - "id": 329, - "type": "Reroute", - "pos": [ - -2102.7424690643847, - 637.4964529127092 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 781 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 782 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 330, - "type": "Reroute", - "pos": [ - 1330, - 661 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 782 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 783 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 4, - "type": "CheckpointLoaderSimple", - "pos": [ - -2470.833727160648, - -116.24953047983493 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 4, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 102 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 81, - 610 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 785 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photon_v1.safetensors" - ] - }, - { - "id": 87, - "type": "VAEDecode", - "pos": [ - 4136.42139592476, - -46.640902628124685 - ], - "size": { - "0": 140, - "1": 46 - }, - "flags": {}, - "order": 83, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 651 - }, - { - "name": "vae", - "type": "VAE", - "link": 749 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 790 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 316, - "type": "VAEEncode", - "pos": [ - 3708, - -195 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 79, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 750 - }, - { - "name": "vae", - "type": "VAE", - "link": 747 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 748 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 276, - "type": "NNLatentUpscale", - "pos": [ - 3698, - -95 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 81, - "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 748 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 650 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "NNLatentUpscale" - }, - "widgets_values": [ - "SD 1.x", - 1.5 - ] - }, - { - "id": 294, - "type": "MIDILoadAndExtract", - "pos": [ - 690, - -1750 - ], - "size": { - "0": 1020, - "1": 346 - }, - "flags": {}, - "order": 5, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MIDI", - "type": "MIDI", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "selectedNotes": [], - "Node name for S&R": "MIDILoadAndExtract" - }, - "widgets_values": [ - "drummid.mid", - "all", - "Note On/Off", - 30, - false, - "", - "upload", - "refresh" - ] - }, - { - "id": 297, - "type": "ColorFeatureNode", - "pos": [ - -100, - -1950 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 6, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ColorFeatureNode" - }, - "widgets_values": [ - 30, - "dominant_color" - ] - }, - { - "id": 307, - "type": "VHS_VideoCombine", - "pos": [ - 278.32611541992185, - -160.1266634570313 - ], - "size": [ - 210, - 663 - ], - "flags": {}, - "order": 56, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 720 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02724.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 260, - "type": "VAEEncode", - "pos": [ - 692, - 82 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 766 - }, - { - "name": "vae", - "type": "VAE", - "link": 779 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 793 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 317, - "type": "Reroute", - "pos": [ - 2590, - -380 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 780 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 746, - 747, - 749 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 335, - "type": "Reroute", - "pos": [ - 976, - -308 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 63, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 793 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 794 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 325, - "type": "Reroute", - "pos": [ - 286, - 737 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 772 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 915 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 310, - "type": "FlexImageKaleidoscope", - "pos": [ - -133.67388458007815, - 20.873336542968733 - ], - "size": { - "0": 344.3999938964844, - "1": 338 - }, - "flags": {}, - "order": 51, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 765 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 792 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 718 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 720, - 766, - 772 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexImageKaleidoscope" - }, - "widgets_values": [ - 1, - 0, - "rotation", - "relative", - 8, - 0.5, - 0.5, - 1, - 0, - 0, - 1 - ] - }, - { - "id": 336, - "type": "Reroute", - "pos": [ - 2590, - -320 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 67, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 794 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 827 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 299, - "type": "Note", - "pos": [ - 3184, - -387 - ], - "size": { - "0": 436.01641845703125, - "1": 119.03775787353516 - }, - "flags": {}, - "order": 7, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 275, - "type": "KSampler", - "pos": [ - 3719.127367528601, - 154.68755277929998 - ], - "size": { - "0": 308.92816162109375, - "1": 263.701904296875 - }, - "flags": {}, - "order": 82, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 784 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 669 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 670 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 650 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 651 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 144, - "fixed", - 4, - 1.8, - "lcm", - "sgm_uniform", - 0.3 - ] - }, - { - "id": 322, - "type": "Note", - "pos": [ - -153.67388458007815, - -163.1266634570313 - ], - "size": { - "0": 384.10394287109375, - "1": 138.25791931152344 - }, - "flags": {}, - "order": 8, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "un-bypass this detour to further trip out\n\n\nfor the heck of it, ill add a Kaleidoscope Image Bloom to see what it does to the output\n\nThere are a ton of these in the node pack, masks too" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 271, - "type": "PreviewImage", - "pos": [ - 506.7106022338704, - -936.9529986264056 - ], - "size": [ - 316.95760687114927, - 277.0800855511293 - ], - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 694 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 328, - "type": "Reroute", - "pos": [ - 205, - -401.1885793164062 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 786 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 779, - 780 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 332, - "type": "Reroute", - "pos": [ - -527, - -318 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 811 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 788, - 789 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 346, - "type": "Reroute", - "pos": [ - -525, - -350 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 813 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 815 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 292, - "type": "Note", - "pos": [ - -1881, - -823 - ], - "size": { - "0": 695.8017578125, - "1": 261.10052490234375 - }, - "flags": {}, - "order": 9, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "This example is meant to demonstrate modulating an IP adapter with the Feature system introduced by the ryanontheinside nodes.\n\nFor this example, we will simply apply an IPAdapter to the background of a video, controlled by the drums in a song.\n\n\n\nIf any issues or if you want to contribute:\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\n\nModels\nhttps://huggingface.co/wangfuyun/AnimateLCM" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 331, - "type": "Reroute", - "pos": [ - -2070, - -416 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 785 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 786 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 298, - "type": "Note", - "pos": [ - 2001, - -407 - ], - "size": { - "0": 449.9469299316406, - "1": 171.0027618408203 - }, - "flags": {}, - "order": 10, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "give a cool image to the IPAdapter - I tripled it here because of reasons.\n\nFeed it the weights that we created from the audio\n\nI started getting memory errors with big images so i just smashed them" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 343, - "type": "ImageScale", - "pos": [ - 2070, - -170 - ], - "size": { - "0": 210, - "1": 130 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 807 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 822 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1024, - 1024, - "disabled" - ] - }, - { - "id": 351, - "type": "LoadImage", - "pos": [ - 1830, - 300 - ], - "size": [ - 210, - 310 - ], - "flags": {}, - "order": 11, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 823 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "blue_eyes_painting.jpg", - "image" - ] - }, - { - "id": 11, - "type": "IPAdapterUnifiedLoader", - "pos": [ - 1830, - 170 - ], - "size": { - "0": 210, - "1": 78 - }, - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 195 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 820 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "links": [ - 237, - 825 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 350, - "type": "IPAdapterBatch", - "pos": [ - 2340, - 280 - ], - "size": { - "0": 303.8558349609375, - "1": 278 - }, - "flags": {}, - "order": 75, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 820 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 825 - }, - { - "name": "image", - "type": "IMAGE", - "link": 837, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 914 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - }, - { - "name": "weight", - "type": "FLOAT", - "link": 849, - "widget": { - "name": "weight" - } - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 821 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "IPAdapter Batch Background", - "properties": { - "Node name for S&R": "IPAdapterBatch" - }, - "widgets_values": [ - 0.5, - "strong style transfer", - 0, - 1, - "K+V", - 0 - ] - }, - { - "id": 353, - "type": "MaskToImage", - "pos": [ - 1550, - -860 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 70, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 913 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 831 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 356, - "type": "VHS_VideoCombine", - "pos": [ - 3330, - -140 - ], - "size": [ - 210, - 667 - ], - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 835 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 847 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02827-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 285, - "type": "FeatureToWeightsStrategy", - "pos": [ - 413, - -513 - ], - "size": { - "0": 378, - "1": 46.42244338989258 - }, - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 693 - } - ], - "outputs": [ - { - "name": "WEIGHTS_STRATEGY", - "type": "WEIGHTS_STRATEGY", - "links": [ - 839 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FeatureToWeightsStrategy" - } - }, - { - "id": 358, - "type": "Reroute", - "pos": [ - 799.6265863899607, - 603.6971090798395 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 839 - } - ], - "outputs": [ - { - "name": "", - "type": "WEIGHTS_STRATEGY", - "links": [ - 840 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 293, - "type": "Note", - "pos": [ - -230, - -1580 - ], - "size": { - "0": 838.786865234375, - "1": 179.91893005371094 - }, - "flags": {}, - "order": 12, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "here, we set up the audio Feature by extracting the instruments from the audio and isolating the drums.\nThen, before we convert the Feature into IPAdapter weights, we shape\" the feature with the FeatureMixer to make it drive the weights in a suitable way.\n\nThis example uses an audio feature, but it could be swapped out for any of the features in the node pack, including MIDI, Depth, Color, Time, Brightness, and more\n\n Look there's even a keyboard! -------->" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 301, - "type": "Reroute", - "pos": [ - -528, - -282 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 704 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 842 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 288, - "type": "DownloadOpenUnmixModel", - "pos": [ - -334, - -933 - ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 13, - "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 688 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 361, - "type": "Reroute", - "pos": [ - -471, - -726 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 842 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 843 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 261, - "type": "ImageScale", - "pos": [ - -937.0245821386411, - 369.85541007695775 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 620 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 704, - 765, - 848 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 414, - 738, - "disabled" - ] - }, - { - "id": 359, - "type": "Reroute", - "pos": [ - 2115, - 615 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 66, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 840 - } - ], - "outputs": [ - { - "name": "", - "type": "WEIGHTS_STRATEGY", - "links": [ - 841 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 357, - "type": "IPAdapterWeightsFromStrategy", - "pos": [ - 2060, - 510 - ], - "size": [ - 278.79998779296875, - 126 - ], - "flags": { - "collapsed": true - }, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "weights_strategy", - "type": "WEIGHTS_STRATEGY", - "link": 841 - }, - { - "name": "image", - "type": "IMAGE", - "link": 836 - } - ], - "outputs": [ - { - "name": "weights", - "type": "FLOAT", - "links": [ - 849 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "weights_invert", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "total_frames", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "image_1", - "type": "IMAGE", - "links": [ - 837 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "image_2", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "weights_strategy", - "type": "WEIGHTS_STRATEGY", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "IPAdapterWeightsFromStrategy" - } - }, - { - "id": 348, - "type": "Reroute", - "pos": [ - 894, - -363 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 815 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 868 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 263, - "type": "AudioFeatureExtractor", - "pos": [ - -348, - -626 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 685 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 687 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 692, - 792 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 718 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 362, - "type": "FeatureMixer", - "pos": [ - 1070, - -780 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 871 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 863 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 867 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.46, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0.3, - 0.5 - ] - }, - { - "id": 84, - "type": "KSampler", - "pos": [ - 2950, - 50 - ], - "size": { - "0": 308.92816162109375, - "1": 263.701904296875 - }, - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 716 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 665 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 666 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 827 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 656 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 144, - "fixed", - 4, - 1.8, - "lcm", - "sgm_uniform", - 1 - ] - }, - { - "id": 311, - "type": "Reroute", - "pos": [ - 2590, - -350 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 788 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 762, - 847, - 874 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 273, - "type": "easy imageRemBg", - "pos": [ - -903, - -146 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": { - "collapsed": false - }, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 848 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "mask", - "type": "MASK", - "links": [ - 657, - 813 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "easy imageRemBg" - }, - "widgets_values": [ - "RMBG-1.4", - "Hide", - "ComfyUI", - false - ] - }, - { - "id": 277, - "type": "VAEDecode", - "pos": [ - 3110, - -140 - ], - "size": { - "0": 140, - "1": 46 - }, - "flags": {}, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 656 - }, - { - "name": "vae", - "type": "VAE", - "link": 746 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 750, - 835 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 255, - "type": "CLIPTextEncode", - "pos": [ - -1845.306410106198, - 142.10544477703155 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 610 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 769 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "nude, nsfw" - ] - }, - { - "id": 287, - "type": "AudioSeparator", - "pos": [ - -326, - -832 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 688, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 789 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 843 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 685 - ], - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 2 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 881 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 687, - 870 - ], - "shape": 3, - "slot_index": 5 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 370, - "type": "FlexMaskMorph", - "pos": [ - 1490, - -770 - ], - "size": [ - 322.2349752286873, - 266 - ], - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 868 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 863 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 872 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 885 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 1, - 0, - 0, - "dilate", - 9, - 10 - ] - }, - { - "id": 258, - "type": "VHS_LoadVideo", - "pos": [ - -1254, - -140 - ], - "size": [ - 235.1999969482422, - 658.3553434150164 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 620, - 902 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [ - 811 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": [ - 888 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexels_womanSitting_with_audio.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 100, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 100, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "pexels_womanSitting_with_audio.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 371, - "type": "PreviewImage", - "pos": [ - 2220, - -750 - ], - "size": [ - 210, - 246 - ], - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 867 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 372, - "type": "AudioFeatureExtractor", - "pos": [ - 1068, - -921 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 881 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 870 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 871, - 882 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 872, - 883 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 354, - "type": "VHS_VideoCombine", - "pos": [ - 2534, - -1103 - ], - "size": [ - 210, - 664 - ], - "flags": {}, - "order": 73, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 831 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02830.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 352, - "type": "ImageScale", - "pos": [ - 2084, - 466 - ], - "size": { - "0": 210, - "1": 130 - }, - "flags": { - "collapsed": true - }, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 823 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 836 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1024, - 1024, - "disabled" - ] - }, - { - "id": 349, - "type": "Reroute", - "pos": [ - 1835, - -364 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 69, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 886 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 907 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 383, - "type": "Reroute", - "pos": [ - 2103.521547700666, - 38.00157508970966 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 907 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 908, - 911 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 327, - "type": "Reroute", - "pos": [ - 2117, - 646 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 776 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 880, - 912 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 382, - "type": "MaskComposite", - "pos": [ - 2132, - 392 - ], - "size": [ - 210, - 126 - ], - "flags": { - "collapsed": true - }, - "order": 74, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": 912 - }, - { - "name": "source", - "type": "MASK", - "link": 911 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 914 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "subtract" - ] - }, - { - "id": 281, - "type": "ControlNetLoader", - "pos": [ - 2681, - 663 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 15, - "mode": 0, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 660 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11p_sd15_lineart_fp16.safetensors" - ] - }, - { - "id": 280, - "type": "ControlNetApplyAdvanced", - "pos": [ - 3064, - 706 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 770 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 771 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 660, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 916, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 665, - 669 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 666, - 670 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.47000000000000003, - 0, - 0.5740000000000001 - ] - }, - { - "id": 375, - "type": "Reroute", - "pos": [ - -950, - 818 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 902 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 904 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 379, - "type": "Reroute", - "pos": [ - -954, - 779 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 888 - } - ], - "outputs": [ - { - "name": "", - "type": "VHS_VIDEOINFO", - "links": [ - 889 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 378, - "type": "VHS_VideoInfoSource", - "pos": [ - 3701, - 895 - ], - "size": { - "0": 304.79998779296875, - "1": 106 - }, - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "link": 889 - } - ], - "outputs": [ - { - "name": "fps🟨", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "frame_count🟨", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "duration🟨", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "width🟨", - "type": "INT", - "links": [ - 894 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "height🟨", - "type": "INT", - "links": [ - 895 - ], - "shape": 3, - "slot_index": 4 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoInfoSource" - }, - "widgets_values": {} - }, - { - "id": 374, - "type": "VHS_VideoCombine", - "pos": [ - 4729, - 733 - ], - "size": [ - 210, - 662 - ], - "flags": {}, - "order": 88, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 901 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 874 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02828-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 373, - "type": "ImageCompositeMasked", - "pos": [ - 4373, - 734 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 904 - }, - { - "name": "source", - "type": "IMAGE", - "link": 905 - }, - { - "name": "mask", - "type": "MASK", - "link": 880 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 901 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - true - ] - }, - { - "id": 333, - "type": "ImageCASharpening+", - "pos": [ - 4038, - 146 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 84, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 790 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 791, - 917 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCASharpening+" - }, - "widgets_values": [ - 0.8 - ] - }, - { - "id": 381, - "type": "ImageScale", - "pos": [ - 4040, - 757 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": { - "collapsed": false - }, - "order": 86, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 917 - }, - { - "name": "width", - "type": "INT", - "link": 894, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 895, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 905 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 512, - 512, - "disabled" - ] - }, - { - "id": 321, - "type": "VHS_VideoCombine", - "pos": [ - 4721, - -218 - ], - "size": [ - 210, - 669 - ], - "flags": {}, - "order": 85, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 791 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 762 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02808-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 384, - "type": "LineartStandardPreprocessor", - "pos": [ - 2706, - 754 - ], - "size": [ - 251.30741905459854, - 106 - ], - "flags": {}, - "order": 64, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 915 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 916 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LineartStandardPreprocessor" - }, - "widgets_values": [ - 6, - 8, - 512 - ] - }, - { - "id": 7, - "type": "CLIPTextEncode", - "pos": [ - -1828.3064101061982, - -109.89455522296822 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 81 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 768 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "high quality, masterpiece, 4k, high resolution photograph of ral-dissolve" - ] - }, - { - "id": 102, - "type": "IPAdapterBatch", - "pos": [ - 2330, - -50 - ], - "size": [ - 303.8558349609375, - 278 - ], - "flags": {}, - "order": 76, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 821 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 237 - }, - { - "name": "image", - "type": "IMAGE", - "link": 822, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 908 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 716, - 784 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "IPAdapter Batch Foreground", - "properties": { - "Node name for S&R": "IPAdapterBatch" - }, - "widgets_values": [ - 0.9, - "linear", - 0, - 1, - "K+V", - 0 - ] - }, - { - "id": 376, - "type": "FlexMaskWarp", - "pos": [ - 1860, - -770 - ], - "size": { - "0": 315, - "1": 290 - }, - "flags": {}, - "order": 65, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 885 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 882 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 883 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 886, - 913 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskWarp" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "perlin", - 0.6900000000000001, - 35.7, - 5 - ] - }, - { - "id": 56, - "type": "LoadImage", - "pos": [ - 1840, - -160 - ], - "size": [ - 210, - 314 - ], - "flags": {}, - "order": 16, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 807 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "FREE_psychadelicFire.webp", - "image" - ] - } - ], - "links": [ - [ - 61, - 30, - 0, - 31, - 0, - "MOTION_MODEL_ADE" - ], - [ - 62, - 31, - 0, - 32, - 1, - "M_MODELS" - ], - [ - 64, - 34, - 0, - 32, - 2, - "CONTEXT_OPTIONS" - ], - [ - 81, - 4, - 1, - 7, - 0, - "CLIP" - ], - [ - 102, - 4, - 0, - 52, - 0, - "MODEL" - ], - [ - 194, - 32, - 0, - 88, - 0, - "MODEL" - ], - [ - 195, - 88, - 0, - 11, - 0, - "MODEL" - ], - [ - 237, - 11, - 1, - 102, - 1, - "IPADAPTER" - ], - [ - 610, - 4, - 1, - 255, - 0, - "CLIP" - ], - [ - 620, - 258, - 0, - 261, - 0, - "IMAGE" - ], - [ - 650, - 276, - 0, - 275, - 3, - "LATENT" - ], - [ - 651, - 275, - 0, - 87, - 0, - "LATENT" - ], - [ - 656, - 84, - 0, - 277, - 0, - "LATENT" - ], - [ - 657, - 273, - 1, - 279, - 0, - "MASK" - ], - [ - 660, - 281, - 0, - 280, - 2, - "CONTROL_NET" - ], - [ - 665, - 280, - 0, - 84, - 1, - "CONDITIONING" - ], - [ - 666, - 280, - 1, - 84, - 2, - "CONDITIONING" - ], - [ - 669, - 280, - 0, - 275, - 1, - "CONDITIONING" - ], - [ - 670, - 280, - 1, - 275, - 2, - "CONDITIONING" - ], - [ - 685, - 287, - 1, - 263, - 0, - "AUDIO" - ], - [ - 687, - 287, - 5, - 263, - 1, - "FEATURE_PIPE" - ], - [ - 688, - 288, - 0, - 287, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 692, - 263, - 0, - 290, - 0, - "FEATURE" - ], - [ - 693, - 290, - 0, - 285, - 0, - "FEATURE" - ], - [ - 694, - 290, - 1, - 271, - 0, - "IMAGE" - ], - [ - 704, - 261, - 0, - 301, - 0, - "*" - ], - [ - 716, - 102, - 0, - 84, - 0, - "MODEL" - ], - [ - 718, - 263, - 1, - 310, - 2, - "FEATURE_PIPE" - ], - [ - 720, - 310, - 0, - 307, - 0, - "IMAGE" - ], - [ - 746, - 317, - 0, - 277, - 1, - "VAE" - ], - [ - 747, - 317, - 0, - 316, - 1, - "VAE" - ], - [ - 748, - 316, - 0, - 276, - 0, - "LATENT" - ], - [ - 749, - 317, - 0, - 87, - 1, - "VAE" - ], - [ - 750, - 277, - 0, - 316, - 0, - "IMAGE" - ], - [ - 756, - 319, - 0, - 291, - 0, - "MODEL" - ], - [ - 757, - 52, - 0, - 319, - 0, - "MODEL" - ], - [ - 762, - 311, - 0, - 321, - 1, - "AUDIO" - ], - [ - 765, - 261, - 0, - 310, - 0, - "IMAGE" - ], - [ - 766, - 310, - 0, - 260, - 0, - "IMAGE" - ], - [ - 768, - 7, - 0, - 323, - 0, - "*" - ], - [ - 769, - 255, - 0, - 324, - 0, - "*" - ], - [ - 770, - 323, - 0, - 280, - 0, - "CONDITIONING" - ], - [ - 771, - 324, - 0, - 280, - 1, - "CONDITIONING" - ], - [ - 772, - 310, - 0, - 325, - 0, - "*" - ], - [ - 774, - 279, - 0, - 326, - 0, - "*" - ], - [ - 776, - 326, - 0, - 327, - 0, - "*" - ], - [ - 779, - 328, - 0, - 260, - 1, - "VAE" - ], - [ - 780, - 328, - 0, - 317, - 0, - "*" - ], - [ - 781, - 291, - 0, - 329, - 0, - "*" - ], - [ - 782, - 329, - 0, - 330, - 0, - "*" - ], - [ - 783, - 330, - 0, - 32, - 0, - "MODEL" - ], - [ - 784, - 102, - 0, - 275, - 0, - "MODEL" - ], - [ - 785, - 4, - 2, - 331, - 0, - "*" - ], - [ - 786, - 331, - 0, - 328, - 0, - "*" - ], - [ - 788, - 332, - 0, - 311, - 0, - "*" - ], - [ - 789, - 332, - 0, - 287, - 1, - "AUDIO" - ], - [ - 790, - 87, - 0, - 333, - 0, - "IMAGE" - ], - [ - 791, - 333, - 0, - 321, - 0, - "IMAGE" - ], - [ - 792, - 263, - 0, - 310, - 1, - "FEATURE" - ], - [ - 793, - 260, - 0, - 335, - 0, - "*" - ], - [ - 794, - 335, - 0, - 336, - 0, - "*" - ], - [ - 807, - 56, - 0, - 343, - 0, - "IMAGE" - ], - [ - 811, - 258, - 2, - 332, - 0, - "*" - ], - [ - 813, - 273, - 1, - 346, - 0, - "*" - ], - [ - 815, - 346, - 0, - 348, - 0, - "*" - ], - [ - 820, - 11, - 0, - 350, - 0, - "MODEL" - ], - [ - 821, - 350, - 0, - 102, - 0, - "MODEL" - ], - [ - 822, - 343, - 0, - 102, - 2, - "IMAGE" - ], - [ - 823, - 351, - 0, - 352, - 0, - "IMAGE" - ], - [ - 825, - 11, - 1, - 350, - 1, - "IPADAPTER" - ], - [ - 827, - 336, - 0, - 84, - 3, - "LATENT" - ], - [ - 831, - 353, - 0, - 354, - 0, - "IMAGE" - ], - [ - 835, - 277, - 0, - 356, - 0, - "IMAGE" - ], - [ - 836, - 352, - 0, - 357, - 1, - "IMAGE" - ], - [ - 837, - 357, - 3, - 350, - 2, - "IMAGE" - ], - [ - 839, - 285, - 0, - 358, - 0, - "*" - ], - [ - 840, - 358, - 0, - 359, - 0, - "*" - ], - [ - 841, - 359, - 0, - 357, - 0, - "WEIGHTS_STRATEGY" - ], - [ - 842, - 301, - 0, - 361, - 0, - "*" - ], - [ - 843, - 361, - 0, - 287, - 2, - "IMAGE" - ], - [ - 847, - 311, - 0, - 356, - 1, - "AUDIO" - ], - [ - 848, - 261, - 0, - 273, - 0, - "IMAGE" - ], - [ - 849, - 357, - 0, - 350, - 6, - "FLOAT" - ], - [ - 863, - 362, - 0, - 370, - 1, - "FEATURE" - ], - [ - 867, - 362, - 1, - 371, - 0, - "IMAGE" - ], - [ - 868, - 348, - 0, - 370, - 0, - "MASK" - ], - [ - 870, - 287, - 5, - 372, - 1, - "FEATURE_PIPE" - ], - [ - 871, - 372, - 0, - 362, - 0, - "FEATURE" - ], - [ - 872, - 372, - 1, - 370, - 2, - "FEATURE_PIPE" - ], - [ - 874, - 311, - 0, - 374, - 1, - "AUDIO" - ], - [ - 880, - 327, - 0, - 373, - 2, - "MASK" - ], - [ - 881, - 287, - 3, - 372, - 0, - "AUDIO" - ], - [ - 882, - 372, - 0, - 376, - 1, - "FEATURE" - ], - [ - 883, - 372, - 1, - 376, - 2, - "FEATURE_PIPE" - ], - [ - 885, - 370, - 0, - 376, - 0, - "MASK" - ], - [ - 886, - 376, - 0, - 349, - 0, - "*" - ], - [ - 888, - 258, - 3, - 379, - 0, - "*" - ], - [ - 889, - 379, - 0, - 378, - 0, - "VHS_VIDEOINFO" - ], - [ - 894, - 378, - 3, - 381, - 1, - "INT" - ], - [ - 895, - 378, - 4, - 381, - 2, - "INT" - ], - [ - 901, - 373, - 0, - 374, - 0, - "IMAGE" - ], - [ - 902, - 258, - 0, - 375, - 0, - "*" - ], - [ - 904, - 375, - 0, - 373, - 0, - "IMAGE" - ], - [ - 905, - 381, - 0, - 373, - 1, - "IMAGE" - ], - [ - 907, - 349, - 0, - 383, - 0, - "*" - ], - [ - 908, - 383, - 0, - 102, - 4, - "MASK" - ], - [ - 911, - 383, - 0, - 382, - 1, - "MASK" - ], - [ - 912, - 327, - 0, - 382, - 0, - "MASK" - ], - [ - 913, - 376, - 0, - 353, - 0, - "MASK" - ], - [ - 914, - 382, - 0, - 350, - 4, - "MASK" - ], - [ - 915, - 325, - 0, - 384, - 0, - "IMAGE" - ], - [ - 916, - 384, - 0, - 280, - 3, - "IMAGE" - ], - [ - 917, - 333, - 0, - 381, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Control net", - "bounding": [ - 2668, - 590, - 733, - 439 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Animate diff", - "bounding": [ - 963, - -129, - 807, - 615 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Ipadapter", - "bounding": [ - 1820, - -220, - 834, - 803 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Audio Feature", - "bounding": [ - -357, - -1018, - 1220, - 613 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Setep", - "bounding": [ - -2533, - -223, - 1194, - 735 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample1", - "bounding": [ - 2670, - -250, - 956, - 807 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample2", - "bounding": [ - 3686, - -294, - 915, - 791 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load image", - "bounding": [ - -1284, - -242, - 1053, - 783 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "😂", - "bounding": [ - -193, - -240, - 838, - 779 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Bass Feature + Mask Mod", - "bounding": [ - 1009, - -1035, - 1489, - 609 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Paste Subject", - "bounding": [ - 3696, - 598, - 1344, - 752 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.2896643797366883, - "offset": { - "0": 4.764620324066559, - "1": 466.41537683245787 - } - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/audio_lora.json b/examples/audio_lora_version2.json similarity index 81% rename from examples/audio_lora.json rename to examples/audio_lora_version2.json index 7e5f425..cfdf04a 100644 --- a/examples/audio_lora.json +++ b/examples/audio_lora_version2.json @@ -1,572 +1,396 @@ { - "last_node_id": 320, - "last_link_id": 490, + "last_node_id": 364, + "last_link_id": 570, "nodes": [ { - "id": 118, - "type": "ADE_AnimateDiffSamplingSettings", + "id": 21, + "type": "SetClipHooks", "pos": [ - 3102.712646484375, - 211.1063995361328 + 1135.2972412109375, + -156.53550720214844 ], "size": [ - 273.3500061035156, - 274 + 217.4999542236328, + 102 ], "flags": {}, - "order": 36, + "order": 58, "mode": 0, "inputs": [ { - "name": "noise_layers", - "type": "NOISE_LAYERS", - "link": null, - "slot_index": 0, - "shape": 7 - }, - { - "name": "iteration_opts", - "type": "ITERATION_OPTS", - "link": null, - "shape": 7 - }, - { - "name": "custom_cfg", - "type": "CUSTOM_CFG", - "link": 178, - "slot_index": 2, - "shape": 7 - }, - { - "name": "sigma_schedule", - "type": "SIGMA_SCHEDULE", - "link": null, - "slot_index": 3, - "shape": 7 - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - }, - "shape": 7 + "name": "clip", + "type": "CLIP", + "link": 21 }, { - "name": "image_inject", - "type": "IMAGE_INJECT", - "link": null, + "name": "hooks", + "type": "HOOKS", + "link": 52, "shape": 7 } ], "outputs": [ { - "name": "settings", - "type": "SAMPLE_SETTINGS", + "name": "CLIP", + "type": "CLIP", "links": [ - 175 + 1, + 3 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffSamplingSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "SetClipHooks" }, "widgets_values": [ - 0, - "FreeNoise", - "comfy", - 0, - 0, + true, false ] }, { - "id": 119, - "type": "ADE_MultivalDynamic", + "id": 11, + "type": "SetClipHooks", "pos": [ - 2752.712646484375, - 11.106085777282715 + 1075.2972412109375, + 143.46449279785156 ], "size": [ - 259.9388122558594, - 63.332008361816406 + 210, + 102 ], "flags": {}, - "order": 0, + "order": 57, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null, + "name": "clip", + "type": "CLIP", + "link": 9 + }, + { + "name": "hooks", + "type": "HOOKS", + "link": 48, "shape": 7 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "CLIP", + "type": "CLIP", "links": [ - 176 + 165, + 166 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "SetClipHooks" }, "widgets_values": [ - 1.1400000000000001 + true, + false ] }, { - "id": 120, - "type": "ADE_AnimateDiffUniformContextOptions", + "id": 2, + "type": "CLIPTextEncode", "pos": [ - 3102.712646484375, - -98.89384460449219 + 1425.2979736328125, + -96.53550720214844 ], "size": [ - 273.269775390625, - 270 + 327, + 108 ], "flags": {}, - "order": 1, + "order": 72, "mode": 0, "inputs": [ { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null, - "shape": 7 - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null, - "shape": 7 + "name": "clip", + "type": "CLIP", + "link": 1 } ], "outputs": [ { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 173 + 14 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "title": "Context Options 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 16, - 1, - 4, - "uniform", - false, - "pyramid", - false, - 0, - 1, - "" - ] + "worst quality, low quality" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 121, - "type": "ADE_MultivalDynamic", + "id": 3, + "type": "CLIPTextEncode", "pos": [ - 2752.712646484375, - -98.89384460449219 + 1405.2979736328125, + 273.4644775390625 ], "size": [ - 265.1632385253906, - 58 + 327, + 108 ], "flags": {}, - "order": 2, + "order": 71, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null, - "shape": 7 + "name": "clip", + "type": "CLIP", + "link": 166 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 177 + 100 ], - "shape": 3 + "slot_index": 0 } ], - "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1.1 - ] + "worst quality, low quality" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 122, - "type": "ADE_CustomCFGSimple", + "id": 10, + "type": "VAELoader", "pos": [ - 2752.712646484375, - 111.10614013671875 + 3599.3759765625, + -442.0704040527344 ], "size": [ - 257.2469787597656, - 60.893348693847656 + 315, + 58 ], "flags": {}, - "order": 3, + "order": 0, "mode": 0, - "inputs": [ - { - "name": "cfg_extras", - "type": "CFG_EXTRAS", - "link": null, - "shape": 7 - } - ], + "inputs": [], "outputs": [ { - "name": "CUSTOM_CFG", - "type": "CUSTOM_CFG", + "name": "VAE", + "type": "VAE", "links": [ - 178 + 8 ], - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ADE_CustomCFGSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "VAELoader" }, "widgets_values": [ - 2 + "vaeFtMse840000EmaPruned_vae.safetensors" ] }, { - "id": 124, - "type": "ADE_AdjustWeightAllMult", - "pos": [ - 2742.712646484375, - -258.89434814453125 - ], - "size": [ - 270.3999938964844, - 82 - ], - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "prev_weight_adjust", - "type": "WEIGHT_ADJUST", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "WEIGHT_ADJUST", - "type": "WEIGHT_ADJUST", - "links": [], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AdjustWeightAllMult", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1.01, - false - ] - }, - { - "id": 125, - "type": "ADE_AnimateDiffLoRALoader", + "id": 136, + "type": "GetNode", "pos": [ - 2742.712646484375, - -398.8938903808594 + 3620.906494140625, + -290.0384521484375 ], "size": [ - 261.19134521484375, - 82 + 210, + 58 ], "flags": {}, - "order": 5, + "order": 1, "mode": 0, - "inputs": [ - { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null, - "shape": 7 - } - ], + "inputs": [], "outputs": [ { - "name": "MOTION_LORA", - "type": "MOTION_LORA", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 174 + 192 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "title": "AnimateDiff LoRA", - "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8 + "audio" ] }, { - "id": 21, - "type": "SetClipHooks", + "id": 139, + "type": "SetNode", "pos": [ - 1135.2972412109375, - -156.53550720214844 + -3799.91796875, + -600.672119140625 ], "size": [ - 217.4999542236328, - 102 + 210, + 58 ], "flags": {}, - "order": 60, + "order": 85, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 21 - }, - { - "name": "hooks", - "type": "HOOKS", - "link": 52, - "shape": 7 + "name": "IMAGE", + "type": "IMAGE", + "link": 409 } ], "outputs": [ { - "name": "CLIP", - "type": "CLIP", - "links": [ - 1, - 3 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_initimg_resize", "properties": { - "Node name for S&R": "SetClipHooks" + "previousName": "initimg_resize" }, "widgets_values": [ - true, - false - ] + "initimg_resize" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 11, - "type": "SetClipHooks", + "id": 155, + "type": "VAEDecode", "pos": [ - 1075.2972412109375, - 143.46449279785156 + 5186.5576171875, + -378.83050537109375 ], "size": [ 210, - 102 + 46 ], "flags": {}, - "order": 59, + "order": 114, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 9 + "name": "samples", + "type": "LATENT", + "link": 235 }, { - "name": "hooks", - "type": "HOOKS", - "link": 48, - "shape": 7 + "name": "vae", + "type": "VAE", + "link": 236 } ], "outputs": [ { - "name": "CLIP", - "type": "CLIP", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 165, - 166 + 237 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "SetClipHooks" + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - true, - false - ] + "widgets_values": [] }, { - "id": 2, - "type": "CLIPTextEncode", + "id": 158, + "type": "GetNode", "pos": [ - 1425.2979736328125, - -96.53550720214844 + 4756.5576171875, + -278.83050537109375 ], "size": [ - 327, - 108 + 210, + 58 ], "flags": {}, - "order": 68, + "order": 2, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 1 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 14 + 238 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "worst quality, low quality" - ], - "color": "#322", - "bgcolor": "#533" + "audio" + ] }, { - "id": 3, - "type": "CLIPTextEncode", + "id": 150, + "type": "GetNode", "pos": [ - 1405.2979736328125, - 273.4644775390625 + 2791.082763671875, + 1035.9306640625 ], "size": [ - 327, - 108 + 210, + 58 ], "flags": {}, - "order": 67, + "order": 3, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 166 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 100 + 246 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, + "title": "Get_initimg_resize", + "properties": {}, "widgets_values": [ - "worst quality, low quality" - ], - "color": "#322", - "bgcolor": "#533" + "initimg_resize" + ] }, { - "id": 10, + "id": 157, "type": "VAELoader", "pos": [ - 3599.3759765625, - -442.0704040527344 + 4679.18115234375, + -389.26165771484375 ], "size": [ 315, 58 ], "flags": {}, - "order": 6, + "order": 4, "mode": 0, "inputs": [], "outputs": [ @@ -574,7 +398,7 @@ "name": "VAE", "type": "VAE", "links": [ - 8 + 236 ], "slot_index": 0 } @@ -587,548 +411,476 @@ ] }, { - "id": 136, - "type": "GetNode", + "id": 151, + "type": "ACN_AdvancedControlNetApply_v2", "pos": [ - 3620.906494140625, - -290.0384521484375 + 3522.631591796875, + 857.6676635742188 ], "size": [ - 210, - 58 + 285.6000061035156, + 266 ], "flags": {}, - "order": 7, + "order": 103, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "positive", + "type": "CONDITIONING", + "link": 442 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 443 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 218 + }, + { + "name": "image", + "type": "IMAGE", + "link": 247 + }, + { + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": null, + "shape": 7 + }, + { + "name": "vae_optional", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", "links": [ - 192 + 221, + 240 ], "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 222, + 241 + ], + "slot_index": 1 } ], - "title": "Get_audio", - "properties": {}, + "properties": { + "Node name for S&R": "ACN_AdvancedControlNetApply_v2" + }, "widgets_values": [ - "audio" + 0.7000000000000001, + 0, + 0.5 ] }, { - "id": 137, - "type": "EmptyImageAndMaskFromAudio", + "id": 182, + "type": "GroundingDinoModelLoader (segment anything)", "pos": [ - -3149.243408203125, - -90.49396514892578 + -1420.2445068359375, + 218.81634521484375 ], "size": [ - 411.6000061035156, - 146 + 541.800048828125, + 58 ], "flags": {}, - "order": 42, + "order": 5, "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 195 - } - ], + "inputs": [], "outputs": [ { - "name": "empty_image", - "type": "IMAGE", - "links": [], - "slot_index": 0, - "shape": 3 - }, - { - "name": "empty_mask", - "type": "MASK", - "links": [], - "slot_index": 1, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", + "name": "GROUNDING_DINO_MODEL", + "type": "GROUNDING_DINO_MODEL", "links": [ - 196 - ], - "slot_index": 2, - "shape": 3 + 273 + ] } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "GroundingDinoModelLoader (segment anything)" }, "widgets_values": [ - 30, - 768, - 464 + "GroundingDINO_SwinT_OGC (694MB)" ] }, { - "id": 102, - "type": "SetNode", + "id": 9, + "type": "VAEDecode", "pos": [ - -2713.39599609375, - -38.110877990722656 + 3986.451171875, + -427.84124755859375 ], "size": [ 210, - 58 + 46 ], "flags": {}, - "order": 51, + "order": 110, "mode": 0, "inputs": [ { - "name": "INT", - "type": "INT", - "link": 196 + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 164 + ], + "slot_index": 0 } ], - "title": "Set_framecount", "properties": { - "previousName": "framecount" + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - "framecount" - ] + "widgets_values": [] }, { - "id": 139, - "type": "SetNode", + "id": 110, + "type": "VHS_VideoCombine", "pos": [ - -3799.91796875, - -600.672119140625 + 4033.662841796875, + -320.612548828125 ], "size": [ - 210, - 58 + 399.9459228515625, + 988.2792358398438 ], "flags": {}, - "order": 73, + "order": 112, "mode": 0, "inputs": [ { - "name": "IMAGE", + "name": "images", "type": "IMAGE", - "link": 409 + "link": 164 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 192, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null } ], - "title": "Set_initimg_resize", "properties": { - "previousName": "initimg_resize" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "initimg_resize" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02341-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02341.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02341-audio.mp4" + }, + "muted": false + } + } }, { - "id": 117, - "type": "ADE_AnimateDiffLoaderGen1", + "id": 17, + "type": "PairConditioningSetPropertiesAndCombine", "pos": [ - 3102.712646484375, - -398.8938903808594 + 2256.716552734375, + -149.84344482421875 ], "size": [ - 271.7644958496094, - 242 + 340.20001220703125, + 202 ], "flags": {}, - "order": 75, + "order": 96, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 283 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 173, - "slot_index": 1, - "shape": 7 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": 174, - "slot_index": 2, - "shape": 7 + "name": "positive", + "type": "CONDITIONING", + "link": 97 }, { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": null, - "slot_index": 3, - "shape": 7 + "name": "negative", + "type": "CONDITIONING", + "link": 98 }, { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null, - "shape": 7 + "name": "positive_NEW", + "type": "CONDITIONING", + "link": 99 }, { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": 175, - "slot_index": 5, - "shape": 7 + "name": "negative_NEW", + "type": "CONDITIONING", + "link": 100 }, { - "name": "scale_multival", - "type": "MULTIVAL", - "link": 176, - "slot_index": 6, + "name": "mask", + "type": "MASK", + "link": 20, "shape": 7 }, { - "name": "effect_multival", - "type": "MULTIVAL", - "link": 177, - "slot_index": 7, + "name": "hooks", + "type": "HOOKS", + "link": null, "shape": 7 }, - { - "name": "per_block", - "type": "PER_BLOCK", + { + "name": "timesteps", + "type": "TIMESTEPS_RANGE", "link": null, "shape": 7 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "positive", + "type": "CONDITIONING", "links": [ - 180, - 239 + 442 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 443 + ], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffLoaderGen1", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "PairConditioningSetPropertiesAndCombine" }, "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt", - "lcm avg(sqrt_linear,linear)" + 1, + "default" ] }, { - "id": 155, - "type": "VAEDecode", + "id": 12, + "type": "CLIPSetLastLayer", "pos": [ - 5174.02587890625, - -370.47601318359375 + 775.2973022460938, + 13.464492797851562 ], "size": [ 210, - 46 + 58.683013916015625 ], "flags": {}, - "order": 112, + "order": 39, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 235 - }, - { - "name": "vae", - "type": "VAE", - "link": 236 + "name": "clip", + "type": "CLIP", + "link": 10 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CLIP", + "type": "CLIP", "links": [ - 237 + 9, + 21 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "VAEDecode" + "Node name for S&R": "CLIPSetLastLayer" }, - "widgets_values": [] - }, - { - "id": 158, - "type": "GetNode", - "pos": [ - 4744.02587890625, - -270.47601318359375 - ], - "size": [ - 210, - 58 - ], - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 238 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, "widgets_values": [ - "audio" + -2 ] }, { - "id": 150, - "type": "GetNode", + "id": 190, + "type": "DifferentialDiffusion", "pos": [ - 2791.082763671875, - 1035.9306640625 + 2217.86962890625, + 607.6415405273438 ], "size": [ - 210, - 58 + 277.20001220703125, + 26 ], "flags": {}, - "order": 9, + "order": 69, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 246 - ], - "slot_index": 0 + "name": "model", + "type": "MODEL", + "link": 449 } ], - "title": "Get_initimg_resize", - "properties": {}, - "widgets_values": [ - "initimg_resize" - ] - }, - { - "id": 157, - "type": "VAELoader", - "pos": [ - 4666.6494140625, - -380.90716552734375 - ], - "size": [ - 315, - 58 - ], - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "MODEL", + "type": "MODEL", "links": [ - 236 + 544 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "VAELoader" + "Node name for S&R": "DifferentialDiffusion" }, - "widgets_values": [ - "vaeFtMse840000EmaPruned_vae.safetensors" - ] + "widgets_values": [] }, { - "id": 151, - "type": "ACN_AdvancedControlNetApply_v2", + "id": 144, + "type": "IPAdapterUnifiedLoader", "pos": [ - 3522.631591796875, - 857.6676635742188 + 1546.594482421875, + 573.0177612304688 ], "size": [ - 285.6000061035156, - 266 + 315, + 78 ], "flags": {}, - "order": 85, + "order": 38, "mode": 0, "inputs": [ { - "name": "positive", - "type": "CONDITIONING", - "link": 442 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 443 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 218 - }, - { - "name": "image", - "type": "IMAGE", - "link": 247 - }, - { - "name": "mask_optional", - "type": "MASK", - "link": null, - "shape": 7 - }, - { - "name": "timestep_kf", - "type": "TIMESTEP_KEYFRAME", - "link": null, - "shape": 7 - }, - { - "name": "latent_kf_override", - "type": "LATENT_KEYFRAME", - "link": null, - "shape": 7 - }, - { - "name": "weights_override", - "type": "CONTROL_NET_WEIGHTS", - "link": null, - "shape": 7 + "name": "model", + "type": "MODEL", + "link": 208 }, { - "name": "vae_optional", - "type": "VAE", + "name": "ipadapter", + "type": "IPADAPTER", "link": null, "shape": 7 } ], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", + "name": "model", + "type": "MODEL", "links": [ - 221, - 240 + 445 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "negative", - "type": "CONDITIONING", + "name": "ipadapter", + "type": "IPADAPTER", "links": [ - 222, - 241 + 446 ], - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ACN_AdvancedControlNetApply_v2" - }, - "widgets_values": [ - 0.7000000000000001, - 0, - 0.5 - ] - }, - { - "id": 182, - "type": "GroundingDinoModelLoader (segment anything)", - "pos": [ - -1420.2445068359375, - 218.81634521484375 - ], - "size": [ - 541.800048828125, - 58 - ], - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "GROUNDING_DINO_MODEL", - "type": "GROUNDING_DINO_MODEL", - "links": [ - 273 - ] + "slot_index": 1, + "shape": 3 } ], "properties": { - "Node name for S&R": "GroundingDinoModelLoader (segment anything)" + "Node name for S&R": "IPAdapterUnifiedLoader" }, "widgets_values": [ - "GroundingDINO_SwinT_OGC (694MB)" + "PLUS (high strength)" ] }, { - "id": 9, - "type": "VAEDecode", + "id": 277, + "type": "MaskToImage", "pos": [ - 3986.451171875, - -427.84124755859375 + -570.9765625, + 981.3114624023438 ], "size": [ - 210, - 46 + 264.5999755859375, + 26 ], "flags": {}, - "order": 98, + "order": 53, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": 8 + "name": "mask", + "type": "MASK", + "link": 533 } ], "outputs": [ @@ -1136,586 +888,565 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 164 + 422 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "VAEDecode" + "Node name for S&R": "MaskToImage" }, "widgets_values": [] }, { - "id": 110, - "type": "VHS_VideoCombine", + "id": 152, + "type": "ControlNetLoader", "pos": [ - 4033.662841796875, - -320.612548828125 + 2996.48681640625, + 833.2398681640625 ], "size": [ - 399.9459228515625, - 988.2792358398438 + 315, + 58 ], "flags": {}, - "order": 108, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 218 + ] + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "control_v11f1p_sd15_depth.pth" + ] + }, + { + "id": 163, + "type": "AIO_Preprocessor", + "pos": [ + 3008.70263671875, + 967.0679321289062 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 33, "mode": 0, "inputs": [ { - "name": "images", + "name": "image", "type": "IMAGE", - "link": 164 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 192, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 + "link": 246 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 247 + ], + "slot_index": 0 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "AIO_Preprocessor" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "trim_to_audio": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00490-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30, - "workflow": "AnimateDiff_00490.png", - "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_00490-audio.mp4" - }, - "muted": false - } - } + "widgets_values": [ + "Zoe-DepthMapPreprocessor", + 64 + ] }, { - "id": 196, - "type": "GetNode", + "id": 293, + "type": "LoadImage", "pos": [ - -1200, - 2160 + 1548.28662109375, + 739.24267578125 ], "size": [ - 210, - 58 + 315, + 314 ], "flags": {}, - "order": 12, + "order": 7, "mode": 0, "inputs": [], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 293 + 451 ], "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null } ], - "title": "Get_mask_bg", - "properties": {}, + "properties": { + "Node name for S&R": "LoadImage" + }, "widgets_values": [ - "mask_bg" + "FREE_psychadelicFire.webp", + "image" ] }, { - "id": 17, - "type": "PairConditioningSetPropertiesAndCombine", + "id": 6, + "type": "CLIPTextEncode", "pos": [ - 2256.716552734375, - -149.84344482421875 + 1425.2979736328125, + 103.46449279785156 ], "size": [ - 340.20001220703125, - 202 + 327, + 108 ], "flags": {}, - "order": 80, + "order": 70, "mode": 0, "inputs": [ { - "name": "positive", - "type": "CONDITIONING", - "link": 97 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 98 - }, - { - "name": "positive_NEW", - "type": "CONDITIONING", - "link": 99 - }, - { - "name": "negative_NEW", - "type": "CONDITIONING", - "link": 100 - }, - { - "name": "mask", - "type": "MASK", - "link": 20, - "shape": 7 - }, - { - "name": "hooks", - "type": "HOOKS", - "link": null, - "shape": 7 - }, - { - "name": "timesteps", - "type": "TIMESTEPS_RANGE", - "link": null, - "shape": 7 + "name": "clip", + "type": "CLIP", + "link": 165 } ], "outputs": [ { - "name": "positive", + "name": "CONDITIONING", "type": "CONDITIONING", "links": [ - 442 + 99 ], "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 443 - ], - "slot_index": 1 } ], "properties": { - "Node name for S&R": "PairConditioningSetPropertiesAndCombine" + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1, - "default" - ] + "1man, a tough boxer shadow boxing in the gym" + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 12, - "type": "CLIPSetLastLayer", + "id": 156, + "type": "VHS_VideoCombine", "pos": [ - 775.2973022460938, - 13.464492797851562 + 5638.45556640625, + -389.223876953125 ], "size": [ - 210, - 58.683013916015625 + 399.9459228515625, + 985.9338989257812 ], "flags": {}, - "order": 48, + "order": 115, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 10 + "name": "images", + "type": "IMAGE", + "link": 237 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 238, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "CLIP", - "type": "CLIP", - "links": [ - 9, - 21 - ], - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "CLIPSetLastLayer" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - -2 - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02342-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02342.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02342-audio.mp4" + }, + "muted": false + } + } }, { - "id": 123, - "type": "ADE_AdjustPESweetspotStretch", + "id": 14, + "type": "InvertMask", "pos": [ - 2748.25341796875, - 292.8603820800781 + 2088.144287109375, + -414.2312316894531 ], "size": [ - 253.07310485839844, - 106 + 210, + 26 ], "flags": {}, - "order": 13, + "order": 55, "mode": 0, "inputs": [ { - "name": "prev_pe_adjust", - "type": "PE_ADJUST", - "link": null, - "shape": 7 + "name": "mask", + "type": "MASK", + "link": 46 } ], "outputs": [ { - "name": "PE_ADJUST", - "type": "PE_ADJUST", - "links": [], - "shape": 3 + "name": "MASK", + "type": "MASK", + "links": [ + 20 + ], + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ADE_AdjustPESweetspotStretch", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "InvertMask" }, - "widgets_values": [ - 16, - 18, - false - ] + "widgets_values": [] }, { - "id": 190, - "type": "DifferentialDiffusion", + "id": 128, + "type": "GetImageSizeAndCount", "pos": [ - 2217.86962890625, - 607.6415405273438 + -4208.6083984375, + -740.6171875 ], "size": [ 277.20001220703125, - 26 + 86 ], - "flags": {}, - "order": 65, + "flags": { + "collapsed": false + }, + "order": 74, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 449 + "name": "image", + "type": "IMAGE", + "link": 286 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "image", + "type": "IMAGE", "links": [ - 283 + 289, + 409, + 410 ], "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + }, + { + "name": "count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "DifferentialDiffusion" + "Node name for S&R": "GetImageSizeAndCount" }, "widgets_values": [] }, { - "id": 144, - "type": "IPAdapterUnifiedLoader", + "id": 192, + "type": "ImageScaleBy", "pos": [ - 1546.594482421875, - 573.0177612304688 + -4586.4140625, + -753.6970825195312 ], "size": [ 315, - 78 + 82 ], "flags": {}, - "order": 47, + "order": 59, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 208 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null, - "shape": 7 + "name": "image", + "type": "IMAGE", + "link": 285 } ], "outputs": [ { - "name": "model", - "type": "MODEL", - "links": [ - 445 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 446 + 286 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" + "Node name for S&R": "ImageScaleBy" }, "widgets_values": [ - "PLUS (high strength)" + "lanczos", + 0.4 ] }, { - "id": 277, - "type": "MaskToImage", + "id": 140, + "type": "SetNode", "pos": [ - -570.9765625, - 981.3114624023438 + -3570.507080078125, + -429.794189453125 ], "size": [ - 264.5999755859375, - 26 + 210, + 58 ], "flags": {}, - "order": 55, + "order": 100, "mode": 0, "inputs": [ { - "name": "mask", - "type": "MASK", - "link": 421 + "name": "LATENT", + "type": "LATENT", + "link": 199 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 422 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_init_latent", "properties": { - "Node name for S&R": "MaskToImage" + "previousName": "init_latent" }, - "widgets_values": [] + "widgets_values": [ + "init_latent" + ], + "color": "#323", + "bgcolor": "#535" }, { - "id": 152, - "type": "ControlNetLoader", + "id": 114, + "type": "VAELoader", "pos": [ - 2996.48681640625, - 833.2398681640625 + -4571.64013671875, + -562.6693115234375 ], "size": [ 315, 58 ], "flags": {}, - "order": 14, + "order": 8, "mode": 0, "inputs": [], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", + "name": "VAE", + "type": "VAE", "links": [ - 218 - ] + 168 + ], + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ControlNetLoader" + "Node name for S&R": "VAELoader" }, "widgets_values": [ - "control_v11f1p_sd15_depth.pth" + "vaeFtMse840000EmaPruned_vae.safetensors" ] }, { - "id": 163, - "type": "AIO_Preprocessor", + "id": 115, + "type": "VAEEncode", "pos": [ - 3008.70263671875, - 967.0679321289062 + -3820.88134765625, + -497.2352294921875 ], "size": [ - 315, - 82 + 210, + 46 ], "flags": {}, - "order": 37, + "order": 86, "mode": 0, "inputs": [ { - "name": "image", + "name": "pixels", "type": "IMAGE", - "link": 246 + "link": 410 + }, + { + "name": "vae", + "type": "VAE", + "link": 168 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 247 + 199 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "AIO_Preprocessor" + "Node name for S&R": "VAEEncode" }, - "widgets_values": [ - "Zoe-DepthMapPreprocessor", - 64 - ] + "widgets_values": [] }, { - "id": 293, - "type": "LoadImage", + "id": 311, + "type": "SetNode", "pos": [ - 1548.28662109375, - 739.24267578125 + -601.5011596679688, + 876.4684448242188 ], "size": [ - 315, - 314 + 210, + 58 ], "flags": {}, - "order": 15, + "order": 54, "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 451 - ], - "slot_index": 0 - }, + "inputs": [ { "name": "MASK", "type": "MASK", + "link": 534 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", "links": null } ], + "title": "Set_maskdilate", "properties": { - "Node name for S&R": "LoadImage" + "previousName": "maskdilate" }, "widgets_values": [ - "FREE_psychadelicFire.webp", - "image" - ] + "maskdilate" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 6, - "type": "CLIPTextEncode", + "id": 275, + "type": "GetNode", "pos": [ - 1425.2979736328125, - 103.46449279785156 + -575.3842163085938, + 1193.9365234375 ], "size": [ - 327, - 108 + 210, + 58 ], "flags": {}, - "order": 66, + "order": 9, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 165 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 99 + 420 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "1man, a tough boxer shadow boxing in the gym" - ], - "color": "#232", - "bgcolor": "#353" + "audio" + ] }, { - "id": 156, - "type": "VHS_VideoCombine", + "id": 143, + "type": "VHS_LoadVideo", "pos": [ - 5625.923828125, - -380.869384765625 + -4920.28369140625, + -744.6640014648438 ], "size": [ - 399.9459228515625, - 985.9338989257812 + 247.455078125, + 262 ], "flags": {}, - "order": 113, + "order": 40, "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 237 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 238, - "shape": 7 - }, { "name": "meta_batch", "type": "VHS_BatchManager", @@ -1727,194 +1458,225 @@ "type": "VAE", "link": null, "shape": 7 + }, + { + "name": "frame_load_cap", + "type": "INT", + "link": 204, + "widget": { + "name": "frame_load_cap" + } } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 285 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null + }, + { + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", "links": null } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "VHS_LoadVideo" }, "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "trim_to_audio": false, - "pingpong": false, - "save_output": true, + "video": "pexels_boxer.mp4", + "force_rate": 30, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_00491-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30, - "workflow": "AnimateDiff_00491.png", - "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_00491-audio.mp4" + "force_rate": 30, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "filename": "pexels_boxer.mp4", + "type": "input", + "format": "video/mp4" }, "muted": false } } }, { - "id": 14, - "type": "InvertMask", + "id": 75, + "type": "SetNode", "pos": [ - 2088.144287109375, - -414.2312316894531 + -631.8554077148438, + -1310.791748046875 ], "size": [ 210, - 26 + 58 ], "flags": {}, - "order": 57, + "order": 89, "mode": 0, "inputs": [ { - "name": "mask", - "type": "MASK", - "link": 46 + "name": "FEATURE", + "type": "FEATURE", + "link": 515 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 20 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_drum_featuire", "properties": { - "Node name for S&R": "InvertMask" + "previousName": "" }, - "widgets_values": [] + "widgets_values": [ + "drum_featuire" + ] }, { - "id": 128, - "type": "GetImageSizeAndCount", + "id": 181, + "type": "SAMModelLoader (segment anything)", "pos": [ - -4208.6083984375, - -740.6171875 + -1464.9158935546875, + 85.3639907836914 + ], + "size": [ + 415.8000183105469, + 58 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "links": [ + 272 + ] + } + ], + "properties": { + "Node name for S&R": "SAMModelLoader (segment anything)" + }, + "widgets_values": [ + "sam_vit_h (2.56GB)" + ] + }, + { + "id": 183, + "type": "GetNode", + "pos": [ + -1701.0050048828125, + 266.0216064453125 ], "size": [ - 277.20001220703125, - 86 + 210, + 58 ], - "flags": { - "collapsed": false - }, - "order": 62, + "flags": {}, + "order": 11, "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 286 - } - ], + "inputs": [], "outputs": [ { - "name": "image", + "name": "IMAGE", "type": "IMAGE", "links": [ - 289, - 409, - 410 + 274 ], "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": null - }, - { - "name": "height", - "type": "INT", - "links": null - }, - { - "name": "count", - "type": "INT", - "links": null } ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] + "title": "Get_initimg_resize", + "properties": {}, + "widgets_values": [ + "initimg_resize" + ] }, { - "id": 192, - "type": "ImageScaleBy", + "id": 195, + "type": "SetNode", "pos": [ - -4586.4140625, - -753.6970825195312 + -520.51513671875, + 536.3828125 ], "size": [ - 315, - 82 + 210, + 58 ], "flags": {}, - "order": 50, + "order": 67, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 285 + "name": "MASK", + "type": "MASK", + "link": 291 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 286 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_mask_bg", "properties": { - "Node name for S&R": "ImageScaleBy" + "previousName": "mask_bg" }, "widgets_values": [ - "lanczos", - 0.4 - ] + "mask_bg" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 140, + "id": 185, "type": "SetNode", "pos": [ - -3570.507080078125, - -429.794189453125 + -501.874267578125, + 444.56414794921875 ], "size": [ 210, 58 ], "flags": {}, - "order": 79, + "order": 51, "mode": 0, "inputs": [ { - "name": "LATENT", - "type": "LATENT", - "link": 199 + "name": "MASK", + "type": "MASK", + "link": 479 } ], "outputs": [ @@ -1924,965 +1686,1094 @@ "links": null } ], - "title": "Set_init_latent", + "title": "Set_mask_fg", "properties": { - "previousName": "init_latent" + "previousName": "mask_fg" }, "widgets_values": [ - "init_latent" - ] + "mask_fg" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 114, - "type": "VAELoader", + "id": 272, + "type": "GetNode", "pos": [ - -4571.64013671875, - -562.6693115234375 + -1576.5184326171875, + 874.3690795898438 ], "size": [ - 315, + 210, 58 ], "flags": {}, - "order": 16, + "order": 12, "mode": 0, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "MASK", + "type": "MASK", "links": [ - 168 + 531 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "VAELoader" - }, + "title": "Get_mask_fg", + "properties": {}, "widgets_values": [ - "vaeFtMse840000EmaPruned_vae.safetensors" + "mask_fg" ] }, { - "id": 115, - "type": "VAEEncode", + "id": 274, + "type": "GetNode", "pos": [ - -3820.88134765625, - -497.2352294921875 + -1577.8724365234375, + 987.2863159179688 ], "size": [ 210, - 46 + 58 ], "flags": {}, - "order": 74, + "order": 13, "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 410 - }, - { - "name": "vae", - "type": "VAE", - "link": 168 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 199 + 532 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "VAEEncode" - }, - "widgets_values": [] + "title": "Get_kifck_feature", + "properties": {}, + "widgets_values": [ + "kifck_feature" + ] }, { - "id": 138, - "type": "Note", + "id": 273, + "type": "GetNode", "pos": [ - -2933.0673828125, - 100.34479522705078 + -1566.7303466796875, + 1106.2540283203125 ], "size": [ - 521.2003173828125, - 102.6712646484375 + 210, + 58 ], "flags": {}, - "order": 17, + "order": 14, "mode": 0, "inputs": [], - "outputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [], + "slot_index": 0 + } + ], + "title": "Get_featrurepipe", "properties": {}, "widgets_values": [ - "I need to make a FrameCountFromAudio node!\n\nWe cant use frame count from the other 'empty image and mask...' node above this one, as it would make a feedback loop in the workflow. I can't remember why I set this workflow up this way, but I am sure I thought I had a good reason at the time." - ], - "color": "#432", - "bgcolor": "#653" + "featrurepipe" + ] }, { - "id": 311, - "type": "SetNode", + "id": 4, + "type": "CLIPTextEncode", "pos": [ - -601.5011596679688, - 876.4684448242188 + 1422.325927734375, + -268.9685363769531 ], "size": [ - 210, - 58 + 327, + 108 ], "flags": {}, - "order": 56, + "order": 73, "mode": 0, "inputs": [ { - "name": "MASK", - "type": "MASK", - "link": 475 + "name": "clip", + "type": "CLIP", + "link": 3 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 13 + ], + "slot_index": 0 } ], - "title": "Set_maskdilate", "properties": { - "previousName": "maskdilate" + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - "maskdilate" - ] + "1man, tough boxer made of gold shadow boxing in the gym (ral-chrome, dripping gold made of ral-acidzlime)" + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 100, - "type": "InvertMask", + "id": 315, + "type": "GetNode", "pos": [ - -1860, - 1670 + 1446.72998046875, + -405.689208984375 ], "size": [ 210, - 26 + 58 ], "flags": {}, - "order": 38, + "order": 15, "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 151 - } - ], + "inputs": [], "outputs": [ { "name": "MASK", "type": "MASK", "links": [ - 152 + 478 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "InvertMask" - }, - "widgets_values": [] + "title": "Get_maskopacity", + "properties": {}, + "widgets_values": [ + "maskopacity" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 95, - "type": "GetNode", + "id": 15, + "type": "Reroute", "pos": [ - -1900, - 1770 + 1770.136474609375, + -409.6941223144531 ], "size": [ - 282.97052001953125, - 74.21566772460938 + 75, + 26 ], "flags": {}, - "order": 18, + "order": 36, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "", + "type": "*", + "link": 478 + } + ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "", + "type": "MASK", "links": [ - 146 + 46, + 111 ], "slot_index": 0 } ], - "title": "Get_kifck_feature", - "properties": {}, - "widgets_values": [ - "kifck_feature" - ] + "properties": { + "showOutputText": false, + "horizontal": false + } }, { - "id": 96, - "type": "GetNode", + "id": 16, + "type": "PairConditioningSetProperties", "pos": [ - -1850, - 1900 + 1861.81298828125, + -297.5429992675781 ], "size": [ - 210, - 58 + 315, + 162 ], "flags": {}, - "order": 19, + "order": 83, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "positive_NEW", + "type": "CONDITIONING", + "link": 13 + }, + { + "name": "negative_NEW", + "type": "CONDITIONING", + "link": 14 + }, + { + "name": "mask", + "type": "MASK", + "link": 111, + "shape": 7 + }, + { + "name": "hooks", + "type": "HOOKS", + "link": null, + "shape": 7 + }, + { + "name": "timesteps", + "type": "TIMESTEPS_RANGE", + "link": null, + "shape": 7 + } + ], "outputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "positive", + "type": "CONDITIONING", "links": [ - 148 + 97 ], "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 98 + ], + "slot_index": 1 } ], - "title": "Get_featrurepipe", - "properties": {}, + "properties": { + "Node name for S&R": "PairConditioningSetProperties" + }, "widgets_values": [ - "featrurepipe" + 1, + "default" ] }, { - "id": 97, - "type": "GetNode", + "id": 20, + "type": "CreateHookLora", "pos": [ - -1830, - 1570 + 785.2972412109375, + -302.7511901855469 ], "size": [ - 210, - 58 + 291.2920837402344, + 106 ], "flags": {}, - "order": 20, + "order": 37, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "prev_hooks", + "type": "HOOKS", + "link": 121, + "shape": 7 + } + ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 151 + 52 ], "slot_index": 0 } ], - "title": "Get_emptymask", - "properties": {}, + "properties": { + "Node name for S&R": "CreateHookLora" + }, "widgets_values": [ - "emptymask" + "ral-chrome-sd15.safetensors", + 1.1, + 1 ] }, { - "id": 197, - "type": "MaskCompositePlus", + "id": 71, + "type": "CreateHookLora", "pos": [ - -930, - 1790 + 399.3513488769531, + -311.66949462890625 ], "size": [ - 310.79998779296875, - 78 + 315, + 106 ], "flags": {}, - "order": 61, + "order": 16, "mode": 0, "inputs": [ { - "name": "mask1", - "type": "MASK", - "link": 294 - }, - { - "name": "mask2", - "type": "MASK", - "link": 293 + "name": "prev_hooks", + "type": "HOOKS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 295, - 477 - ], - "slot_index": 0 + 121 + ] } ], "properties": { - "Node name for S&R": "MaskCompositePlus" + "Node name for S&R": "CreateHookLora" }, "widgets_values": [ - "subtract" + "ral-acidzlime-sd15.safetensors", + 1, + 1 ] }, { - "id": 98, - "type": "MaskToImage", + "id": 13, + "type": "CheckpointLoaderSimple", "pos": [ - -890, - 1900 + 416.5162658691406, + -32.22148513793945 ], "size": [ - 264.5999755859375, - 26 + 315, + 98 ], "flags": {}, - "order": 70, + "order": 17, "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 295 - } - ], + "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MODEL", + "type": "MODEL", "links": [ - 150 + 208 ], "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 10 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "slot_index": 2 } ], "properties": { - "Node name for S&R": "MaskToImage" + "Node name for S&R": "CheckpointLoaderSimple" }, - "widgets_values": [] + "widgets_values": [ + "photonLCM_v10.safetensors" + ] }, { - "id": 101, - "type": "GetNode", + "id": 18, + "type": "CreateHookModelAsLora", "pos": [ - -490, - 1970 + 615.29736328125, + 203.46449279785156 ], "size": [ - 210, - 58 + 315, + 106 ], "flags": {}, - "order": 21, + "order": 18, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "prev_hooks", + "type": "HOOKS", + "link": null, + "shape": 7 + } + ], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 153 + 48 ], "slot_index": 0 } ], - "title": "Get_audio", - "properties": {}, + "properties": { + "Node name for S&R": "CreateHookModelAsLora" + }, "widgets_values": [ - "audio" + "photonLCM_v10.safetensors", + 1, + 1 ] }, { - "id": 313, - "type": "SetNode", + "id": 292, + "type": "IPAdapterAdvanced", "pos": [ - -570, - 1630 + 1969.8837890625, + 713.6547241210938 ], "size": [ - 210, - 58 + 315, + 278 ], "flags": {}, - "order": 71, + "order": 56, "mode": 0, "inputs": [ { - "name": "MASK", + "name": "model", + "type": "MODEL", + "link": 445 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": 446 + }, + { + "name": "image", + "type": "IMAGE", + "link": 451 + }, + { + "name": "image_negative", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "attn_mask", "type": "MASK", - "link": 477 + "link": 476, + "shape": 7 + }, + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "MODEL", + "type": "MODEL", + "links": [ + 449 + ] } ], - "title": "Set_maskopacity", "properties": { - "previousName": "maskopacity" + "Node name for S&R": "IPAdapterAdvanced" }, "widgets_values": [ - "maskopacity" + 1, + "linear", + "concat", + 0, + 1, + "V only" ] }, { - "id": 275, + "id": 312, "type": "GetNode", "pos": [ - -575.3842163085938, - 1193.9365234375 + 1597.7138671875, + 1129.4970703125 ], "size": [ 210, 58 ], "flags": {}, - "order": 22, + "order": 19, "mode": 0, "inputs": [], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "MASK", + "type": "MASK", "links": [ - 420 + 476 ], "slot_index": 0 } ], - "title": "Get_audio", + "title": "Get_maskdilate", "properties": {}, "widgets_values": [ - "audio" - ] + "maskdilate" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 129, + "id": 141, "type": "GetNode", "pos": [ - -4892.66259765625, - -855.3516235351562 + 3537.82568359375, + 255.87149047851562 ], "size": [ 210, 58 ], "flags": {}, - "order": 23, + "order": 20, "mode": 0, "inputs": [], "outputs": [ { - "name": "INT", - "type": "INT", + "name": "LATENT", + "type": "LATENT", "links": [ - 204 + 292 ], "slot_index": 0 } ], - "title": "Get_framecount", + "title": "Get_init_latent", "properties": {}, "widgets_values": [ - "framecount" + "init_latent" ] }, { - "id": 143, - "type": "VHS_LoadVideo", + "id": 23, + "type": "KSampler", "pos": [ - -4920.28369140625, - -744.6640014648438 + 3616.170166015625, + -127.18345642089844 ], "size": [ - 247.455078125, + 315, 262 ], "flags": {}, - "order": 39, + "order": 107, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 + "name": "model", + "type": "MODEL", + "link": 545 }, { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 + "name": "positive", + "type": "CONDITIONING", + "link": 221 }, { - "name": "frame_load_cap", - "type": "INT", - "link": 204, - "widget": { - "name": "frame_load_cap" - } + "name": "negative", + "type": "CONDITIONING", + "link": 222 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 292 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 285 + 7, + 243 ], "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null - }, - { - "name": "audio", - "type": "AUDIO", - "links": null - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null } ], "properties": { - "Node name for S&R": "VHS_LoadVideo" + "Node name for S&R": "KSampler" }, - "widgets_values": { - "video": "pexels_boxer.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "force_rate": 30, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "filename": "pexels_boxer.mp4", - "type": "input", - "format": "video/mp4" - }, - "muted": false - } - } + "widgets_values": [ + 12345678, + "fixed", + 4, + 1.2, + "lcm", + "sgm_uniform", + 0.8 + ] }, { - "id": 142, - "type": "GetImageSizeAndCount", + "id": 161, + "type": "NNLatentUpscale", "pos": [ - -3801.87060546875, - -760.72802734375 + 4529.49365234375, + 127.41600799560547 ], "size": [ - 277.20001220703125, - 86 + 315, + 82 ], - "flags": { - "collapsed": false - }, - "order": 72, + "flags": {}, + "order": 111, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 289 + "name": "latent", + "type": "LATENT", + "link": 243 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", - "links": [], - "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": [ - 202 - ], - "slot_index": 1 - }, - { - "name": "height", - "type": "INT", + "name": "LATENT", + "type": "LATENT", "links": [ - 203 + 244 ], - "slot_index": 2 - }, - { - "name": "count", - "type": "INT", - "links": null + "slot_index": 0 } ], "properties": { - "Node name for S&R": "GetImageSizeAndCount" + "Node name for S&R": "NNLatentUpscale" }, - "widgets_values": [] + "widgets_values": [ + "SD 1.x", + 1.5 + ] }, { - "id": 92, - "type": "VHS_LoadAudioUpload", + "id": 160, + "type": "KSampler", "pos": [ - -3179.532958984375, - -1009.7830200195312 + 4862.53662109375, + -126.73495483398438 ], "size": [ - 243.818359375, - 130 + 315, + 262 + ], + "flags": {}, + "order": 113, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 546 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 240 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 241 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 244 + } ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "audio", - "type": "AUDIO", + "name": "LATENT", + "type": "LATENT", "links": [ - 122, - 123, - 132, - 195, - 489 + 235 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" + "Node name for S&R": "KSampler" }, - "widgets_values": { - "audio": "Golden Girl.mp3", - "start_time": 26.5, - "duration": 7, - "choose audio to upload": "image" - } + "widgets_values": [ + 12345678, + "fixed", + 4, + 1.2, + "lcm", + "sgm_uniform", + 0.25 + ] }, { - "id": 88, - "type": "FeatureMixer", + "id": 82, + "type": "EmptyImageAndMaskFromAudio", "pos": [ - -1542.70263671875, - -580.540771484375 + -3173.924560546875, + -823.614013671875 ], "size": [ - 367.79998779296875, - 342 + 411.6000061035156, + 146 ], "flags": {}, - "order": 93, + "order": 98, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 140 + "name": "audio", + "type": "AUDIO", + "link": 132 + }, + { + "name": "width", + "type": "INT", + "link": 202, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 203, + "widget": { + "name": "height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "empty_image", + "type": "IMAGE", "links": [ - 130 + 133, + 155 ], "slot_index": 0, "shape": 3 }, { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "empty_mask", + "type": "MASK", "links": [ - 139 + 145 ], "slot_index": 1, "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "EmptyImageAndMaskFromAudio" }, "widgets_values": [ - 1.59, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.15, - 0.5, - 0.5, - false + 30, + 768, + 464 ] }, { - "id": 75, - "type": "SetNode", + "id": 194, + "type": "InvertMask", "pos": [ - -631.8554077148438, - -1310.791748046875 + -819.477294921875, + 560.0089721679688 ], "size": [ 210, - 58 + 26 ], "flags": {}, - "order": 104, + "order": 52, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 125 + "name": "mask", + "type": "MASK", + "link": 480 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "MASK", + "type": "MASK", + "links": [ + 291 + ], + "slot_index": 0 } ], - "title": "Set_drum_featuire", "properties": { - "previousName": "" + "Node name for S&R": "InvertMask" }, - "widgets_values": [ - "drum_featuire" - ] + "widgets_values": [] }, { - "id": 91, - "type": "FeatureMixer", + "id": 180, + "type": "GroundingDinoSAMSegment (segment anything)", "pos": [ - -1559.99951171875, - -1488.37890625 + -1412.0692138671875, + 330.6407470703125 ], "size": [ - 367.79998779296875, - 342 + 529.199951171875, + 122 ], "flags": {}, - "order": 95, + "order": 34, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 144 + "name": "sam_model", + "type": "SAM_MODEL", + "link": 272 + }, + { + "name": "grounding_dino_model", + "type": "GROUNDING_DINO_MODEL", + "link": 273 + }, + { + "name": "image", + "type": "IMAGE", + "link": 274 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 125 + 275 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 }, { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 127 + 479, + 480 ], - "slot_index": 1, - "shape": 3 + "slot_index": 1 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "GroundingDinoSAMSegment (segment anything)" }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.3, - 1, - 0.5, - false + "subject", + 0.3 ] }, { - "id": 89, - "type": "FeatureMixer", + "id": 276, + "type": "VHS_VideoCombine", "pos": [ - -1528.88671875, - -1041.274169921875 + -104.60978698730469, + 859.416015625 ], "size": [ - 367.79998779296875, - 342 + 214.7587890625, + 679.811279296875 ], "flags": {}, - "order": 94, + "order": 68, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 141 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 128 - ], - "slot_index": 0, - "shape": 3 + "name": "images", + "type": "IMAGE", + "link": 422 }, { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 131 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.52, - 1, - 0.5, - false - ] - }, - { - "id": 181, - "type": "SAMModelLoader (segment anything)", - "pos": [ - -1464.9158935546875, - 85.3639907836914 - ], - "size": [ - 415.8000183105469, - 58 + "name": "audio", + "type": "AUDIO", + "link": 420, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } ], - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "SAM_MODEL", - "type": "SAM_MODEL", - "links": [ - 272 - ] + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "SAMModelLoader (segment anything)" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "sam_vit_h (2.56GB)" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02339-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02339.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02339-audio.mp4" + }, + "muted": false + } + } }, { - "id": 183, - "type": "GetNode", + "id": 184, + "type": "VHS_VideoCombine", "pos": [ - -1701.0050048828125, - 266.0216064453125 + -94.98258209228516, + 94.11283111572266 ], "size": [ - 210, - 58 + 214.7587890625, + 679.811279296875 ], "flags": {}, - "order": 26, + "order": 50, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", + "name": "images", "type": "IMAGE", - "links": [ - 274 - ], - "slot_index": 0 + "link": 275 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], - "title": "Get_initimg_resize", - "properties": {}, - "widgets_values": [ - "initimg_resize" - ] + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02338-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02338.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02338-audio.mp4" + }, + "muted": false + } + } }, { - "id": 195, + "id": 78, "type": "SetNode", "pos": [ - -520.51513671875, - 536.3828125 + -609.3577880859375, + -1082.59033203125 ], "size": [ 210, 58 ], "flags": {}, - "order": 63, + "order": 87, "mode": 0, "inputs": [ { - "name": "MASK", - "type": "MASK", - "link": 291 + "name": "FEATURE", + "type": "FEATURE", + "link": 512 } ], "outputs": [ @@ -2892,33 +2783,33 @@ "links": null } ], - "title": "Set_mask_bg", + "title": "Set_kifck_feature", "properties": { - "previousName": "mask_bg" + "previousName": "" }, "widgets_values": [ - "mask_bg" + "kifck_feature" ] }, { - "id": 185, + "id": 79, "type": "SetNode", "pos": [ - -501.874267578125, - 444.56414794921875 + -619.3171997070312, + -1194.2210693359375 ], "size": [ 210, 58 ], "flags": {}, - "order": 53, + "order": 77, "mode": 0, "inputs": [ { - "name": "MASK", - "type": "MASK", - "link": 479 + "name": "INT", + "type": "INT", + "link": 505 } ], "outputs": [ @@ -2928,876 +2819,881 @@ "links": null } ], - "title": "Set_mask_fg", + "title": "Set_featrurepipe", "properties": { - "previousName": "mask_fg" + "previousName": "" }, "widgets_values": [ - "mask_fg" - ] + "featrurepipe" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 272, - "type": "GetNode", + "id": 80, + "type": "SetNode", "pos": [ - -1576.5184326171875, - 874.3690795898438 + -604.028076171875, + -969.6499633789062 ], "size": [ 210, 58 ], "flags": {}, - "order": 27, + "order": 93, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 509 + } + ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 417 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], - "title": "Get_mask_fg", - "properties": {}, + "title": "Set_bass_feature", + "properties": { + "previousName": "" + }, "widgets_values": [ - "mask_fg" + "bass_feature" ] }, { - "id": 274, - "type": "GetNode", + "id": 171, + "type": "SetNode", "pos": [ - -1577.8724365234375, - 987.2863159179688 + -633.344970703125, + -1672.8128662109375 ], "size": [ 210, 58 ], "flags": {}, - "order": 28, + "order": 101, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { "name": "FEATURE", "type": "FEATURE", - "links": [ - 418 - ], - "slot_index": 0 + "link": 522 } ], - "title": "Get_kifck_feature", - "properties": {}, - "widgets_values": [ - "kifck_feature" - ] - }, - { - "id": 273, - "type": "GetNode", - "pos": [ - -1566.7303466796875, - 1106.2540283203125 - ], - "size": [ - 210, - 58 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 419 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], - "title": "Get_featrurepipe", - "properties": {}, + "title": "Set_vocal_feature", + "properties": { + "previousName": "vocal_feature" + }, "widgets_values": [ - "featrurepipe" + "vocal_feature" ] }, { - "id": 271, - "type": "FlexMaskMorph", + "id": 83, + "type": "SetNode", "pos": [ - -1104.1156005859375, - 856.7099609375 + -2703.984619140625, + -826.0731811523438 ], "size": [ - 415.8000183105469, - 266 + 210, + 58 ], "flags": {}, - "order": 44, + "order": 104, "mode": 0, "inputs": [ { - "name": "masks", - "type": "MASK", - "link": 417 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 418 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 419 + "name": "IMAGE", + "type": "IMAGE", + "link": 133 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 421, - 475 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_emptyimg", "properties": { - "Node name for S&R": "FlexMaskMorph" + "previousName": "" }, "widgets_values": [ - 1, - false, - 0.97, - 0, - 0, - "dilate", - 11, - 25 - ] + "emptyimg" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 93, - "type": "FlexMaskOpacity", + "id": 94, + "type": "SetNode", "pos": [ - -1460, - 1710 + -2706.033447265625, + -717.9110717773438 ], "size": [ - 441, - 218 + 210, + 58 ], "flags": {}, - "order": 49, + "order": 106, "mode": 0, "inputs": [ { - "name": "masks", + "name": "MASK", "type": "MASK", - "link": 152 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 146 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 148 + "link": 145 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 294 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_emptymask", "properties": { - "Node name for S&R": "FlexMaskOpacity" + "previousName": "emptymask" }, "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 1 - ] + "emptymask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 4, - "type": "CLIPTextEncode", + "id": 107, + "type": "GetImageSizeAndCount", "pos": [ - 1422.325927734375, - -268.9685363769531 + -2710.511962890625, + -602.6050415039062 ], "size": [ - 327, - 108 + 277.20001220703125, + 86 ], "flags": {}, - "order": 69, + "order": 105, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 3 + "name": "image", + "type": "IMAGE", + "link": 155 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "width", + "type": "INT", "links": [ - 13 + 156 ], - "slot_index": 0 + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [ + 157 + ], + "slot_index": 2 + }, + { + "name": "count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "GetImageSizeAndCount" }, - "widgets_values": [ - "1man, tough boxer made of gold shadow boxing in the gym (ral-chrome, dripping gold made of ral-acidzlime)" - ], - "color": "#232", - "bgcolor": "#353" + "widgets_values": [] }, { - "id": 315, - "type": "GetNode", + "id": 106, + "type": "SetNode", "pos": [ - 1446.72998046875, - -405.689208984375 + -613.6802978515625, + -834.4779663085938 ], "size": [ 210, 58 ], "flags": {}, - "order": 30, + "order": 108, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 156 + } + ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 478 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], - "title": "Get_maskopacity", - "properties": {}, + "title": "Set_width", + "properties": { + "previousName": "width" + }, "widgets_values": [ - "maskopacity" - ] + "width" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 15, - "type": "Reroute", + "id": 108, + "type": "SetNode", "pos": [ - 1770.136474609375, - -409.6941223144531 + -615.9558715820312, + -697.3511962890625 ], "size": [ - 75, - 26 + 210, + 58 ], "flags": {}, - "order": 45, + "order": 109, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 478 + "name": "INT", + "type": "INT", + "link": 157 } ], "outputs": [ { - "name": "", - "type": "MASK", - "links": [ - 46, - 111 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_height", "properties": { - "showOutputText": false, - "horizontal": false - } + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 16, - "type": "PairConditioningSetProperties", + "id": 73, + "type": "SetNode", "pos": [ - 1861.81298828125, - -297.5429992675781 - ], - "size": [ - 315, - 162 - ], - "flags": {}, - "order": 76, - "mode": 0, - "inputs": [ - { - "name": "positive_NEW", - "type": "CONDITIONING", - "link": 13 - }, - { - "name": "negative_NEW", - "type": "CONDITIONING", - "link": 14 - }, - { - "name": "mask", - "type": "MASK", - "link": 111, - "shape": 7 - }, - { - "name": "hooks", - "type": "HOOKS", - "link": null, - "shape": 7 - }, + -627.056396484375, + -591.127685546875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ { - "name": "timesteps", - "type": "TIMESTEPS_RANGE", - "link": null, - "shape": 7 + "name": "AUDIO", + "type": "AUDIO", + "link": 123 } ], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 97 - ], - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 98 - ], - "slot_index": 1 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_audio", "properties": { - "Node name for S&R": "PairConditioningSetProperties" + "previousName": "" }, "widgets_values": [ - 1, - "default" + "audio" ] }, { - "id": 20, - "type": "CreateHookLora", + "id": 295, + "type": "SetNode", "pos": [ - 785.2972412109375, - -302.7511901855469 + -631.903564453125, + -466.83880615234375 ], "size": [ - 291.2920837402344, - 106 + 210, + 58 ], "flags": {}, - "order": 46, + "order": 62, "mode": 0, "inputs": [ { - "name": "prev_hooks", - "type": "HOOKS", - "link": 121, - "shape": 7 + "name": "AUDIO", + "type": "AUDIO", + "link": 495 } ], "outputs": [ { - "name": "HOOKS", - "type": "HOOKS", - "links": [ - 52 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_audio_base", "properties": { - "Node name for S&R": "CreateHookLora" + "previousName": "audio_base" }, "widgets_values": [ - "ral-chrome-sd15.safetensors", - 1.1, - 1 + "audio_base" ] }, { - "id": 71, - "type": "CreateHookLora", + "id": 321, + "type": "AudioSeparatorSimple", "pos": [ - 399.3513488769531, - -311.66949462890625 + -2557.80908203125, + -1077.0379638671875 ], "size": [ 315, 106 ], "flags": {}, - "order": 31, + "order": 46, "mode": 0, "inputs": [ { - "name": "prev_hooks", - "type": "HOOKS", - "link": null, - "shape": 7 + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 496 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 491 } ], "outputs": [ { - "name": "HOOKS", - "type": "HOOKS", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "drums_audio", + "type": "AUDIO", "links": [ - 121 + 502 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 517 + ] + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": [ + 495, + 506 ] + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": null } ], "properties": { - "Node name for S&R": "CreateHookLora" + "Node name for S&R": "AudioSeparatorSimple" }, - "widgets_values": [ - "ral-acidzlime-sd15.safetensors", - 1, - 1 - ] + "widgets_values": [] }, { - "id": 13, - "type": "CheckpointLoaderSimple", + "id": 322, + "type": "DownloadOpenUnmixModel", "pos": [ - 416.5162658691406, - -32.22148513793945 + -2539.671630859375, + -1177.747802734375 ], "size": [ - 315, - 98 + 294, + 58 ], "flags": {}, - "order": 32, + "order": 21, "mode": 0, "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 208 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", "links": [ - 10 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [], - "slot_index": 2 + 496 + ] } ], "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "DownloadOpenUnmixModel" }, "widgets_values": [ - "photonLCM_v10.safetensors" + "umxl" ] }, { - "id": 18, - "type": "CreateHookModelAsLora", + "id": 72, + "type": "PreviewAudio", "pos": [ - 615.29736328125, - 203.46449279785156 + -2586.066650390625, + -1379.9227294921875 ], "size": [ 315, - 106 + 76.00001525878906 ], "flags": {}, - "order": 33, + "order": 44, "mode": 0, "inputs": [ { - "name": "prev_hooks", - "type": "HOOKS", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "HOOKS", - "type": "HOOKS", - "links": [ - 48 - ], - "slot_index": 0 + "name": "audio", + "type": "AUDIO", + "link": 122 } ], + "outputs": [], "properties": { - "Node name for S&R": "CreateHookModelAsLora" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - "photonLCM_v10.safetensors", - 1, - 1 + null ] }, { - "id": 292, - "type": "IPAdapterAdvanced", + "id": 142, + "type": "GetImageSizeAndCount", "pos": [ - 1969.8837890625, - 713.6547241210938 + -3801.87060546875, + -760.72802734375 ], "size": [ - 315, - 278 + 277.20001220703125, + 86 ], - "flags": {}, - "order": 58, + "flags": { + "collapsed": false + }, + "order": 84, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 445 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 446 - }, + "name": "image", + "type": "IMAGE", + "link": 289 + } + ], + "outputs": [ { "name": "image", "type": "IMAGE", - "link": 451 + "links": [], + "slot_index": 0 }, { - "name": "image_negative", - "type": "IMAGE", - "link": null, - "shape": 7 + "name": "width", + "type": "INT", + "links": [ + 202, + 497 + ], + "slot_index": 1 }, { - "name": "attn_mask", - "type": "MASK", - "link": 476, - "shape": 7 + "name": "height", + "type": "INT", + "links": [ + 203, + 498 + ], + "slot_index": 2 }, { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null, - "shape": 7 + "name": "count", + "type": "INT", + "links": null } ], - "outputs": [ + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 324, + "type": "Anything Everywhere?", + "pos": [ + -3552.468017578125, + -1312.3121337890625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 97, + "mode": 0, + "inputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 449 - ] + "name": "INT", + "type": "*", + "link": 497, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "IPAdapterAdvanced" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 1, - "linear", - "concat", - 0, - 1, - "V only" + ".*", + "width", + ".*" ] }, { - "id": 312, - "type": "GetNode", + "id": 323, + "type": "Anything Everywhere?", "pos": [ - 1597.7138671875, - 1129.4970703125 + -3586.457275390625, + -1106.33544921875 ], "size": [ - 210, - 58 + 315, + 106 ], "flags": {}, - "order": 34, + "order": 99, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 476 - ], - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 498, + "shape": 7, + "color_on": "" } ], - "title": "Get_maskdilate", - "properties": {}, + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, "widgets_values": [ - "maskdilate" + ".*", + "height", + ".*" ] }, { - "id": 141, + "id": 129, "type": "GetNode", "pos": [ - 3537.82568359375, - 255.87149047851562 + -4920.04296875, + -855.3516235351562 ], "size": [ 210, 58 ], "flags": {}, - "order": 35, + "order": 22, "mode": 0, "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "INT", + "type": "INT", "links": [ - 292 + 204 ], "slot_index": 0 } ], - "title": "Get_init_latent", + "title": "Get_framecount", "properties": {}, "widgets_values": [ - "init_latent" - ] + "framecount" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 23, - "type": "KSampler", + "id": 102, + "type": "SetNode", "pos": [ - 3616.170166015625, - -127.18345642089844 + -2805.19482421875, + -461.6750183105469 ], "size": [ - 315, - 262 + 210, + 58 ], "flags": {}, - "order": 92, + "order": 64, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 180 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 221 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 222 - }, + "name": "INT", + "type": "INT", + "link": 500 + } + ], + "outputs": [ { - "name": "latent_image", - "type": "LATENT", - "link": 292 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_framecount", + "properties": { + "previousName": "framecount" + }, + "widgets_values": [ + "framecount" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 327, + "type": "FloatConstant", + "pos": [ + -4276.56640625, + -1207.044189453125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "value", + "type": "FLOAT", "links": [ - 7, - 243 + 501 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "FloatConstant" }, "widgets_values": [ - 12345678, - "fixed", - 4, - 1.2, - "lcm", - "sgm_uniform", - 0.8 - ] + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 161, - "type": "NNLatentUpscale", + "id": 326, + "type": "Anything Everywhere?", "pos": [ - 4516.9619140625, - 135.7705078125 + -3654.347412109375, + -1521.07080078125 ], "size": [ 315, - 82 + 106 ], "flags": {}, - "order": 99, + "order": 41, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 243 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 244 - ], - "slot_index": 0 + "name": "FLOAT", + "type": "*", + "link": 501, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "SD 1.x", - 1.5 + ".*", + "frame_rate", + ".*" ] }, { - "id": 160, - "type": "KSampler", + "id": 328, + "type": "AudioFeatureExtractor", "pos": [ - 4850.0048828125, - -118.38045501708984 + -2059.356689453125, + -1190.5667724609375 ], "size": [ - 315, - 262 + 415.8000183105469, + 174 ], "flags": {}, - "order": 109, + "order": 60, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 239 + "name": "audio", + "type": "AUDIO", + "link": 502 }, { - "name": "positive", - "type": "CONDITIONING", - "link": 240 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "negative", - "type": "CONDITIONING", - "link": 241 + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } }, { - "name": "latent_image", - "type": "LATENT", - "link": 244 + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "feature", + "type": "FEATURE", "links": [ - 235 - ], - "slot_index": 0 + 511, + 514 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 505 + ] } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 12345678, - "fixed", - 4, - 1.2, - "lcm", - "sgm_uniform", - 0.25 + "amplitude_envelope", + 30, + 0, + 512, + 512 ] }, { - "id": 82, - "type": "EmptyImageAndMaskFromAudio", + "id": 329, + "type": "AudioFeatureExtractor", "pos": [ - -3173.924560546875, - -823.614013671875 + -2003.2021484375, + -567.3675537109375 ], "size": [ - 411.6000061035156, - 146 + 415.8000183105469, + 174 ], "flags": {}, - "order": 78, + "order": 63, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 132 + "name": "audio", + "type": "AUDIO", + "link": 506 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } }, { "name": "width", "type": "INT", - "link": 202, + "link": null, "widget": { "name": "width" } @@ -3805,7 +3701,7 @@ { "name": "height", "type": "INT", - "link": 203, + "link": null, "widget": { "name": "height" } @@ -3813,66 +3709,48 @@ ], "outputs": [ { - "name": "empty_image", - "type": "IMAGE", - "links": [ - 133, - 155, - 490 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "empty_mask", - "type": "MASK", + "name": "feature", + "type": "FEATURE", "links": [ - 145 - ], - "slot_index": 1, - "shape": 3 + 508 + ] }, { "name": "frame_count", "type": "INT", - "links": [], - "slot_index": 2, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ + "amplitude_envelope", 30, - 768, - 464 + 0, + 512, + 512 ] }, { - "id": 86, - "type": "AudioFeatureExtractor", + "id": 331, + "type": "FeatureMixer", "pos": [ - -2003.2021484375, - -567.3675537109375 + -1526.9727783203125, + -576.9107666015625 ], "size": [ - 361.20001220703125, - 78 + 315, + 322 ], "flags": {}, - "order": 89, + "order": 79, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 484 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 486 + "name": "feature", + "type": "FEATURE", + "link": 508 } ], "outputs": [ @@ -3880,50 +3758,76 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 140 + 509, + 510 ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - "amplitude_envelope" + 1.59, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.15, + 0.5, + 0.5, + false ] }, { - "id": 90, - "type": "AudioFeatureExtractor", + "id": 332, + "type": "PreviewFeature", "pos": [ - -2059.356689453125, - -1190.5667724609375 + -1106.310546875, + -455.3468322753906 ], "size": [ - 361.20001220703125, - 78 + 315, + 246 ], "flags": {}, - "order": 90, + "order": 94, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 482 - }, + "name": "feature", + "type": "FEATURE", + "link": 510 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] + }, + { + "id": 335, + "type": "FeatureMixer", + "pos": [ + -1528.88671875, + -1041.274169921875 + ], + "size": [ + 315, + 322 + ], + "flags": {}, + "order": 75, + "mode": 0, + "inputs": [ { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 487 + "name": "feature", + "type": "FEATURE", + "link": 511 } ], "outputs": [ @@ -3931,1164 +3835,1430 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 141, - 144 + 512, + 513 ], - "slot_index": 0, - "shape": 3 - }, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FeatureMixer" + }, + "widgets_values": [ + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.52, + 1, + 0.5, + false + ] + }, + { + "id": 336, + "type": "PreviewFeature", + "pos": [ + -1143.901123046875, + -1001.4425048828125 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 88, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 513 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] + }, + { + "id": 338, + "type": "FeatureMixer", + "pos": [ + -1546.77685546875, + -1473.5029296875 + ], + "size": [ + 315, + 322 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "feature", + "type": "FEATURE", + "link": 514 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", "links": [ - 129 + 515, + 516 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - "amplitude_envelope" + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.3, + 1, + 0.5, + false ] }, { - "id": 72, - "type": "PreviewAudio", + "id": 339, + "type": "PreviewFeature", "pos": [ - -2591.566650390625, - -1274.3228759765625 + -1177.213134765625, + -1457.3834228515625 ], "size": [ 315, - 76.00001525878906 + 246 ], "flags": {}, - "order": 40, + "order": 90, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 122 + "name": "feature", + "type": "FEATURE", + "link": 516 } ], "outputs": [], "properties": { - "Node name for S&R": "PreviewAudio" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": [ - null - ] + "widgets_values": [] }, { - "id": 194, - "type": "InvertMask", + "id": 341, + "type": "AudioFeatureExtractor", "pos": [ - -819.477294921875, - 560.0089721679688 + -2040, + -2030 ], "size": [ - 210, - 26 + 415.8000183105469, + 174 ], "flags": {}, - "order": 54, + "order": 61, "mode": 0, "inputs": [ { - "name": "mask", - "type": "MASK", - "link": 480 + "name": "audio", + "type": "AUDIO", + "link": 517 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "feature", + "type": "FEATURE", "links": [ - 291 - ], - "slot_index": 0 + 519 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "InvertMask" + "Node name for S&R": "AudioFeatureExtractor" }, - "widgets_values": [] + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] }, { - "id": 180, - "type": "GroundingDinoSAMSegment (segment anything)", + "id": 342, + "type": "FeatureMixer", "pos": [ - -1412.0692138671875, - 330.6407470703125 + -1565.6920166015625, + -2070 ], "size": [ - 529.199951171875, - 122 + 315, + 322 ], "flags": {}, - "order": 43, + "order": 78, "mode": 0, "inputs": [ { - "name": "sam_model", - "type": "SAM_MODEL", - "link": 272 - }, - { - "name": "grounding_dino_model", - "type": "GROUNDING_DINO_MODEL", - "link": 273 - }, - { - "name": "image", - "type": "IMAGE", - "link": 274 + "name": "feature", + "type": "FEATURE", + "link": 519 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 275 + 521, + 523 ], "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": [ - 479, - 480 - ], - "slot_index": 1 } ], "properties": { - "Node name for S&R": "GroundingDinoSAMSegment (segment anything)" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - "subject", - 0.3 + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.6, + 1, + 0.5, + false ] }, { - "id": 276, - "type": "VHS_VideoCombine", + "id": 345, + "type": "PreviewFeature", "pos": [ - -104.60978698730469, - 859.416015625 + -1099.4437255859375, + -1831.220703125 ], "size": [ - 214.7587890625, - 679.811279296875 + 315, + 246 ], "flags": {}, - "order": 64, + "order": 92, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 422 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 420, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null + "name": "feature", + "type": "FEATURE", + "link": 523 } ], + "outputs": [], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "trim_to_audio": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00488-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30, - "workflow": "AnimateDiff_00488.png", - "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_00488-audio.mp4" - }, - "muted": false - } - } + "widgets_values": [] }, { - "id": 184, - "type": "VHS_VideoCombine", + "id": 344, + "type": "FeatureSmoothing", "pos": [ - -94.98258209228516, - 94.11283111572266 + -1124.7935791015625, + -2099.008544921875 ], "size": [ - 214.7587890625, - 679.811279296875 + 340.20001220703125, + 154 ], "flags": {}, - "order": 52, + "order": 91, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 275 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 + "name": "feature", + "type": "FEATURE", + "link": 521 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 522, + 524 + ], + "slot_index": 0 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "FeatureSmoothing" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "trim_to_audio": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00485.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30, - "workflow": "AnimateDiff_00485.png", - "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_00485.mp4" - }, - "muted": false - } - } + "widgets_values": [ + "moving_average", + 5, + 0.3, + 1, + false + ] }, { - "id": 77, - "type": "PreviewImage", + "id": 346, + "type": "PreviewFeature", "pos": [ - -1155.638916015625, - -1474.6986083984375 + -556.1537475585938, + -2052.650634765625 ], "size": [ - 210, + 315, 246 ], "flags": {}, - "order": 105, + "order": 102, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 127 + "name": "feature", + "type": "FEATURE", + "link": 524 } ], "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "PreviewFeature" }, "widgets_values": [] }, { - "id": 81, - "type": "PreviewImage", + "id": 348, + "type": "FlexMaskMorph", "pos": [ - -1131.8040771484375, - -1023.344970703125 + -1104.1156005859375, + 856.7099609375 ], "size": [ - 210, - 246 + 315, + 318 ], "flags": {}, - "order": 103, + "order": 35, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 131 + "name": "masks", + "type": "MASK", + "link": 531 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 532, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 533, + 534 + ] } ], - "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "FlexMaskMorph" }, - "widgets_values": [] + "widgets_values": [ + 1, + 0, + "max_kernel_size", + "relative", + false, + 0.97, + 0, + 1, + "dilate", + 11, + 25 + ] }, { - "id": 78, - "type": "SetNode", + "id": 325, + "type": "AudioInfo", "pos": [ - -609.3577880859375, - -1082.59033203125 + -3140.3466796875, + -566.8145751953125 ], "size": [ - 210, - 58 + 315, + 338 ], "flags": {}, - "order": 102, + "order": 47, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 128 + "name": "audio", + "type": "AUDIO", + "link": 499 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "total_frames", + "type": "INT", + "links": [ + 500, + 535 + ], + "slot_index": 0 + }, + { + "name": "frames_per_beat", + "type": "INT", + "links": null + }, + { + "name": "frames_per_bar", + "type": "INT", + "links": null + }, + { + "name": "frames_per_quarter", + "type": "INT", + "links": null + }, + { + "name": "frames_per_eighth", + "type": "INT", + "links": null + }, + { + "name": "audio_duration", + "type": "FLOAT", + "links": null + }, + { + "name": "beats_per_second", + "type": "FLOAT", + "links": null + }, + { + "name": "detected_bpm", + "type": "FLOAT", + "links": null + }, + { + "name": "sample_rate", + "type": "INT", + "links": null + }, + { + "name": "num_channels", + "type": "INT", + "links": null + }, + { + "name": "num_samples", + "type": "INT", + "links": null + }, + { + "name": "max_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "mean_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "rms_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "bit_depth", + "type": "STRING", "links": null } ], - "title": "Set_kifck_feature", "properties": { - "previousName": "" + "Node name for S&R": "AudioInfo" }, "widgets_values": [ - "kifck_feature" + 30 ] }, { - "id": 79, - "type": "SetNode", + "id": 349, + "type": "Anything Everywhere?", "pos": [ - -619.3171997070312, - -1194.2210693359375 + -2733.45068359375, + -183.8571014404297 ], "size": [ - 210, - 58 + 315, + 106 ], "flags": {}, - "order": 96, + "order": 65, "mode": 0, "inputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 129 - } - ], - "outputs": [ - { - "name": "*", + "name": "INT", "type": "*", - "links": null + "link": 535, + "shape": 7, + "color_on": "" } ], - "title": "Set_featrurepipe", + "outputs": [], "properties": { - "previousName": "" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "featrurepipe" + ".*", + "frame_count", + ".*" ] }, { - "id": 80, - "type": "SetNode", + "id": 359, + "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - -604.028076171875, - -969.6499633789062 + 3120, + 120 ], "size": [ - 210, - 58 + 273.269775390625, + 270 ], "flags": {}, - "order": 100, + "order": 24, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 130 + "name": "prev_context", + "type": "CONTEXT_OPTIONS", + "link": null, + "shape": 7 + }, + { + "name": "view_opts", + "type": "VIEW_OPTS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "CONTEXT_OPTS", + "type": "CONTEXT_OPTIONS", + "links": [ + 542 + ], + "slot_index": 0, + "shape": 3 } ], - "title": "Set_bass_feature", + "title": "Context Options 🎭🅐🅓", "properties": { - "previousName": "" + "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - "bass_feature" + 16, + 1, + 4, + "uniform", + false, + "pyramid", + false, + 0, + 1, + "" ] }, { - "id": 87, - "type": "PreviewImage", + "id": 358, + "type": "ADE_UseEvolvedSampling", "pos": [ - -1128.9742431640625, - -577.43603515625 + 3150, + -120 ], "size": [ - 210, - 246 + 315, + 118 ], "flags": {}, - "order": 101, + "order": 82, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 139 + "name": "model", + "type": "MODEL", + "link": 544 + }, + { + "name": "m_models", + "type": "M_MODELS", + "link": 541, + "shape": 7 + }, + { + "name": "context_options", + "type": "CONTEXT_OPTIONS", + "link": 542, + "shape": 7 + }, + { + "name": "sample_settings", + "type": "SAMPLE_SETTINGS", + "link": 543, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 545, + 546 + ], + "slot_index": 0 } ], - "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "ADE_UseEvolvedSampling" }, - "widgets_values": [] + "widgets_values": [ + "autoselect" + ] }, { - "id": 178, - "type": "FeatureSmoothing", + "id": 356, + "type": "ADE_ApplyAnimateDiffModelSimple", "pos": [ - -1100, - -2080 + 3160, + -310 ], "size": [ - 319.20001220703125, - 176.288330078125 + 260.3999938964844, + 126 ], "flags": {}, - "order": 106, + "order": 42, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 267 + "name": "motion_model", + "type": "MOTION_MODEL_ADE", + "link": 537 + }, + { + "name": "motion_lora", + "type": "MOTION_LORA", + "link": 538, + "shape": 7 + }, + { + "name": "scale_multival", + "type": "MULTIVAL", + "link": 539, + "shape": 7 + }, + { + "name": "effect_multival", + "type": "MULTIVAL", + "link": 540, + "shape": 7 + }, + { + "name": "ad_keyframes", + "type": "AD_KEYFRAMES", + "link": null, + "shape": 7 + }, + { + "name": "per_block", + "type": "PER_BLOCK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 270 - ], - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "M_MODELS", + "type": "M_MODELS", "links": [ - 268 - ], - "slot_index": 1 + 541 + ] } ], "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 5, - 0.3, - 1, - false - ] + "Node name for S&R": "ADE_ApplyAnimateDiffModelSimple" + } }, { - "id": 166, - "type": "AudioFeatureExtractor", + "id": 357, + "type": "ADE_LoadAnimateDiffModel", "pos": [ - -2040, - -2030 + 3060, + -450 ], "size": [ - 361.20001220703125, - 78 + 302, + 58 ], "flags": {}, - "order": 91, + "order": 25, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 483 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 488 + "name": "ad_settings", + "type": "AD_SETTINGS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MOTION_MODEL", + "type": "MOTION_MODEL_ADE", "links": [ - 260 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + 537 + ] } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "ADE_LoadAnimateDiffModel" }, "widgets_values": [ - "rms_energy" + "ALCM_sd15_t2v_beta.ckpt" ] }, { - "id": 172, - "type": "FeatureMixer", + "id": 353, + "type": "ADE_MultivalDynamic", "pos": [ - -1565.6920166015625, - -2070 + 2779.0048828125, + -400.9428405761719 ], "size": [ - 297.8359680175781, - 342 + 259.9388122558594, + 63.332008361816406 ], "flags": {}, - "order": 97, + "order": 26, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 260 + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 267 - ], - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "MULTIVAL", + "type": "MULTIVAL", "links": [ - 269 + 539 ], - "slot_index": 1 + "slot_index": 0, + "shape": 3 } ], + "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.6, - 1, - 0.5, - false + 1.1400000000000001 ] }, { - "id": 179, - "type": "PreviewImage", + "id": 352, + "type": "ADE_MultivalDynamic", "pos": [ - -1175.230712890625, - -1871.43603515625 + 2793.64599609375, + -172.73568725585938 ], "size": [ - 210, - 246 + 265.1632385253906, + 58 ], "flags": {}, - "order": 107, + "order": 27, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 269 + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 } ], - "outputs": [], + "outputs": [ + { + "name": "MULTIVAL", + "type": "MULTIVAL", + "links": [ + 540 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, - "widgets_values": [] + "widgets_values": [ + 1.1 + ] }, { - "id": 169, - "type": "PreviewImage", + "id": 351, + "type": "ADE_AnimateDiffLoRALoader", "pos": [ - -931.3333740234375, - -1855.84619140625 + 2786.056396484375, + -295.0462951660156 ], "size": [ - 210, - 246 + 261.19134521484375, + 82 ], "flags": {}, - "order": 111, + "order": 28, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 268 + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null, + "shape": 7 } ], - "outputs": [], + "outputs": [ + { + "name": "MOTION_LORA", + "type": "MOTION_LORA", + "links": [ + 538 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, - "widgets_values": [] + "widgets_values": [ + "LiquidAF-0-1.safetensors", + 0.8 + ] }, { - "id": 171, - "type": "SetNode", + "id": 354, + "type": "ADE_CustomCFGSimple", "pos": [ - -633.344970703125, - -1672.8128662109375 + 2790.7177734375, + -43.261199951171875 ], "size": [ - 210, - 58 + 257.2469787597656, + 60.893348693847656 ], "flags": {}, - "order": 110, + "order": 29, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 270 + "name": "cfg_extras", + "type": "CFG_EXTRAS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "CUSTOM_CFG", + "type": "CUSTOM_CFG", + "links": [ + 536 + ], + "slot_index": 0, + "shape": 3 } ], - "title": "Set_vocal_feature", "properties": { - "previousName": "vocal_feature" + "Node name for S&R": "ADE_CustomCFGSimple", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - "vocal_feature" + 2 ] }, { - "id": 320, - "type": "workflow>wfe", + "id": 355, + "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - -2571.419921875, - -1107.6658935546875 + 2798.038330078125, + 103.58998107910156 ], "size": [ - 317.4000244140625, - 182 + 273.3500061035156, + 274 ], "flags": {}, - "order": 83, + "order": 43, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 489 + "name": "noise_layers", + "type": "NOISE_LAYERS", + "link": null, + "slot_index": 0, + "shape": 7 }, { - "name": "video_frames", - "type": "IMAGE", - "link": 490 - } - ], - "outputs": [ + "name": "iteration_opts", + "type": "ITERATION_OPTS", + "link": null, + "shape": 7 + }, { - "name": "audio", - "type": "AUDIO", - "links": null + "name": "custom_cfg", + "type": "CUSTOM_CFG", + "link": 536, + "slot_index": 2, + "shape": 7 }, { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 482 - ] + "name": "sigma_schedule", + "type": "SIGMA_SCHEDULE", + "link": null, + "slot_index": 3, + "shape": 7 }, { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 483 - ] + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } }, { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 484, - 485 - ] + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + }, + "shape": 7 }, { - "name": "other_audio", + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "settings", + "type": "SAMPLE_SETTINGS", + "links": [ + 543 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffSamplingSettings", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 0, + "FreeNoise", + "comfy", + 0, + 0, + false + ] + }, + { + "id": 92, + "type": "VHS_LoadAudioUpload", + "pos": [ + -3165.268798828125, + -1258.0037841796875 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "audio", "type": "AUDIO", - "links": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", "links": [ - 486, - 487, - 488 - ] + 122, + 123, + 132, + 491, + 499, + 553 + ], + "slot_index": 0, + "shape": 3 } ], - "title": "audio separation", "properties": { - "Node name for S&R": "workflow>wfe" + "Node name for S&R": "VHS_LoadAudioUpload" }, - "widgets_values": [ - "umxl", - 30 - ] + "widgets_values": { + "audio": "Golden Girl.mp3", + "start_time": 26.5, + "duration": 7, + "choose audio to upload": "image" + } }, { - "id": 83, - "type": "SetNode", + "id": 364, + "type": "Anything Everywhere?", "pos": [ - -2703.984619140625, - -826.0731811523438 + -2778.0615234375, + -1599.8172607421875 ], "size": [ - 210, - 58 + 315, + 106 ], "flags": {}, - "order": 81, + "order": 48, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 133 - } - ], - "outputs": [ - { - "name": "*", + "name": "AUDIO", "type": "*", - "links": null + "link": 553, + "shape": 7, + "color_on": "" } ], - "title": "Set_emptyimg", + "outputs": [], "properties": { - "previousName": "" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "emptyimg" + ".*", + "audio", + ".*" ] }, { - "id": 94, - "type": "SetNode", + "id": 361, + "type": "MaskComposite", "pos": [ - -2706.033447265625, - -717.9110717773438 + -842.6743774414062, + 1624.70361328125 ], "size": [ - 210, - 58 + 315, + 126 ], "flags": {}, - "order": 84, + "order": 66, "mode": 0, "inputs": [ { - "name": "MASK", + "name": "destination", "type": "MASK", - "link": 145 + "link": 549 + }, + { + "name": "source", + "type": "MASK", + "link": 550 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "MASK", + "type": "MASK", + "links": [ + 552, + 554 + ], + "slot_index": 0 } ], - "title": "Set_emptymask", "properties": { - "previousName": "emptymask" + "Node name for S&R": "MaskComposite" }, "widgets_values": [ - "emptymask" + 0, + 0, + "subtract" ] }, { - "id": 107, - "type": "GetImageSizeAndCount", + "id": 362, + "type": "MaskToImage", "pos": [ - -2710.511962890625, - -602.6050415039062 + -815.8050537109375, + 1816.8614501953125 ], "size": [ - 277.20001220703125, - 86 + 264.5999755859375, + 26 ], "flags": {}, - "order": 82, + "order": 80, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 155 + "name": "mask", + "type": "MASK", + "link": 552 } ], "outputs": [ { - "name": "image", + "name": "IMAGE", "type": "IMAGE", - "links": null - }, - { - "name": "width", - "type": "INT", - "links": [ - 156 - ], - "slot_index": 1 - }, - { - "name": "height", - "type": "INT", "links": [ - 157 + 551 ], - "slot_index": 2 - }, - { - "name": "count", - "type": "INT", - "links": null + "slot_index": 0 } ], "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] + "Node name for S&R": "MaskToImage" + } }, { - "id": 106, - "type": "SetNode", + "id": 363, + "type": "VHS_VideoCombine", "pos": [ - -613.6802978515625, - -834.4779663085938 + -80.20389556884766, + 1648.654541015625 ], "size": [ - 210, - 58 + 214.7587890625, + 679.811279296875 ], "flags": {}, - "order": 86, + "order": 95, "mode": 0, "inputs": [ { - "name": "INT", - "type": "INT", - "link": 156 + "name": "images", + "type": "IMAGE", + "link": 551 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null } ], - "title": "Set_width", "properties": { - "previousName": "width" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "width" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02340-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02340.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02340-audio.mp4" + }, + "muted": false + } + } }, { - "id": 108, - "type": "SetNode", + "id": 196, + "type": "GetNode", "pos": [ - -615.9558715820312, - -697.3511962890625 + -1184.9947509765625, + 1784.8721923828125 ], "size": [ 210, 58 ], "flags": {}, - "order": 87, + "order": 31, "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 157 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "MASK", + "type": "MASK", + "links": [ + 550 + ], + "slot_index": 0 } ], - "title": "Set_height", - "properties": { - "previousName": "height" - }, + "title": "Get_mask_bg", + "properties": {}, "widgets_values": [ - "height" + "mask_bg" ] }, { - "id": 73, - "type": "SetNode", + "id": 360, + "type": "FeatureToMask", "pos": [ - -627.056396484375, - -591.127685546875 + -1370.2353515625, + 1562.998046875 ], "size": [ - 210, - 58 + 315, + 26 ], "flags": {}, - "order": 41, + "order": 49, "mode": 0, "inputs": [ { - "name": "AUDIO", - "type": "AUDIO", - "link": 123 + "name": "feature", + "type": "FEATURE", + "link": 547 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "MASK", + "type": "MASK", + "links": [ + 549 + ], + "slot_index": 0 } ], - "title": "Set_audio", "properties": { - "previousName": "" - }, - "widgets_values": [ - "audio" - ] + "Node name for S&R": "FeatureToMask" + } }, { - "id": 295, - "type": "SetNode", + "id": 95, + "type": "GetNode", "pos": [ - -631.903564453125, - -466.83880615234375 + -1367.599365234375, + 1414.6229248046875 ], "size": [ - 210, - 58 + 282.97052001953125, + 74.21566772460938 ], "flags": {}, - "order": 88, + "order": 32, "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 485 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 547 + ], + "slot_index": 0 } ], - "title": "Set_audio_base", - "properties": { - "previousName": "audio_base" - }, + "title": "Get_kifck_feature", + "properties": {}, "widgets_values": [ - "audio_base" + "kifck_feature" ] }, { - "id": 99, - "type": "VHS_VideoCombine", + "id": 313, + "type": "SetNode", "pos": [ - -120, - 1650 + -429.0910339355469, + 1497.06103515625 ], "size": [ - 214.7587890625, - 679.811279296875 + 210, + 58 ], "flags": {}, - "order": 77, + "order": 81, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 150 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 153, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 + "name": "MASK", + "type": "MASK", + "link": 554 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", + "name": "*", + "type": "*", "links": null } ], + "title": "Set_maskopacity", "properties": { - "Node name for S&R": "VHS_VideoCombine" + "previousName": "maskopacity" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "trim_to_audio": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00489-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30, - "workflow": "AnimateDiff_00489.png", - "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_00489-audio.mp4" - }, - "muted": false - } - } + "widgets_values": [ + "maskopacity" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" } ], "links": [ @@ -5192,889 +5362,1009 @@ 52, 20, 0, - 21, + 21, + 1, + "HOOKS" + ], + [ + 97, + 16, + 0, + 17, + 0, + "CONDITIONING" + ], + [ + 98, + 16, + 1, + 17, + 1, + "CONDITIONING" + ], + [ + 99, + 6, + 0, + 17, + 2, + "CONDITIONING" + ], + [ + 100, + 3, + 0, + 17, + 3, + "CONDITIONING" + ], + [ + 111, + 15, + 0, + 16, + 2, + "MASK" + ], + [ + 121, + 71, + 0, + 20, + 0, + "HOOKS" + ], + [ + 122, + 92, + 0, + 72, + 0, + "AUDIO" + ], + [ + 123, + 92, + 0, + 73, + 0, + "*" + ], + [ + 132, + 92, + 0, + 82, + 0, + "AUDIO" + ], + [ + 133, + 82, + 0, + 83, + 0, + "*" + ], + [ + 145, + 82, + 1, + 94, + 0, + "*" + ], + [ + 155, + 82, + 0, + 107, + 0, + "IMAGE" + ], + [ + 156, + 107, + 1, + 106, + 0, + "*" + ], + [ + 157, + 107, + 2, + 108, + 0, + "*" + ], + [ + 164, + 9, + 0, + 110, + 0, + "IMAGE" + ], + [ + 165, + 11, + 0, + 6, + 0, + "CLIP" + ], + [ + 166, + 11, + 0, + 3, + 0, + "CLIP" + ], + [ + 168, + 114, + 0, + 115, + 1, + "VAE" + ], + [ + 192, + 136, + 0, + 110, 1, - "HOOKS" + "AUDIO" ], [ - 97, - 16, + 199, + 115, 0, - 17, + 140, 0, - "CONDITIONING" + "*" ], [ - 98, - 16, + 202, + 142, 1, - 17, + 82, 1, - "CONDITIONING" + "INT" ], [ - 99, - 6, - 0, - 17, + 203, + 142, 2, - "CONDITIONING" - ], - [ - 100, - 3, - 0, - 17, - 3, - "CONDITIONING" + 82, + 2, + "INT" ], [ - 111, - 15, + 204, + 129, 0, - 16, + 143, 2, - "MASK" + "INT" ], [ - 121, - 71, + 208, + 13, 0, - 20, + 144, 0, - "HOOKS" + "MODEL" ], [ - 122, - 92, - 0, - 72, + 218, + 152, 0, - "AUDIO" + 151, + 2, + "CONTROL_NET" ], [ - 123, - 92, - 0, - 73, + 221, + 151, 0, - "*" + 23, + 1, + "CONDITIONING" + ], + [ + 222, + 151, + 1, + 23, + 2, + "CONDITIONING" ], [ - 125, - 91, + 235, + 160, 0, - 75, + 155, 0, - "*" + "LATENT" ], [ - 127, - 91, - 1, - 77, + 236, + 157, 0, - "IMAGE" + 155, + 1, + "VAE" ], [ - 128, - 89, + 237, + 155, 0, - 78, + 156, 0, - "*" + "IMAGE" ], [ - 129, - 90, - 1, - 79, + 238, + 158, 0, - "*" + 156, + 1, + "AUDIO" ], [ - 130, - 88, - 0, - 80, + 240, + 151, 0, - "*" + 160, + 1, + "CONDITIONING" ], [ - 131, - 89, + 241, + 151, 1, - 81, - 0, - "IMAGE" + 160, + 2, + "CONDITIONING" ], [ - 132, - 92, + 243, + 23, 0, - 82, + 161, 0, - "AUDIO" + "LATENT" ], [ - 133, - 82, - 0, - 83, + 244, + 161, 0, - "*" + 160, + 3, + "LATENT" ], [ - 139, - 88, - 1, - 87, + 246, + 150, + 0, + 163, 0, "IMAGE" ], [ - 140, - 86, - 0, - 88, + 247, + 163, 0, - "FEATURE" + 151, + 3, + "IMAGE" ], [ - 141, - 90, + 272, + 181, 0, - 89, + 180, 0, - "FEATURE" + "SAM_MODEL" ], [ - 144, - 90, - 0, - 91, + 273, + 182, 0, - "FEATURE" + 180, + 1, + "GROUNDING_DINO_MODEL" ], [ - 145, - 82, - 1, - 94, + 274, + 183, 0, - "*" + 180, + 2, + "IMAGE" ], [ - 146, - 95, + 275, + 180, 0, - 93, - 1, - "FEATURE" + 184, + 0, + "IMAGE" ], [ - 148, - 96, + 285, + 143, 0, - 93, - 2, - "FEATURE_PIPE" + 192, + 0, + "IMAGE" ], [ - 150, - 98, + 286, + 192, 0, - 99, + 128, 0, "IMAGE" ], [ - 151, - 97, + 289, + 128, 0, - 100, + 142, 0, - "MASK" + "IMAGE" ], [ - 152, - 100, + 291, + 194, 0, - 93, + 195, 0, - "MASK" + "*" ], [ - 153, - 101, + 292, + 141, 0, - 99, - 1, - "AUDIO" + 23, + 3, + "LATENT" ], [ - 155, - 82, + 409, + 128, 0, - 107, + 139, 0, "IMAGE" ], [ - 156, - 107, - 1, - 106, + 410, + 128, 0, - "*" + 115, + 0, + "IMAGE" ], [ - 157, - 107, - 2, - 108, + 420, + 275, 0, - "*" + 276, + 1, + "AUDIO" ], - [ - 164, - 9, + [ + 422, + 277, 0, - 110, + 276, 0, "IMAGE" ], [ - 165, - 11, + 442, + 17, 0, - 6, + 151, 0, - "CLIP" + "CONDITIONING" ], [ - 166, - 11, + 443, + 17, + 1, + 151, + 1, + "CONDITIONING" + ], + [ + 445, + 144, 0, - 3, + 292, 0, - "CLIP" + "MODEL" ], [ - 168, - 114, - 0, - 115, + 446, + 144, 1, - "VAE" + 292, + 1, + "IPADAPTER" ], [ - 173, - 120, + 449, + 292, 0, - 117, - 1, - "CONTEXT_OPTIONS" + 190, + 0, + "MODEL" ], [ - 174, - 125, + 451, + 293, 0, - 117, + 292, 2, - "MOTION_LORA" + "IMAGE" ], [ - 175, - 118, + 476, + 312, 0, - 117, - 5, - "SAMPLE_SETTINGS" + 292, + 4, + "MASK" ], [ - 176, - 119, + 478, + 315, 0, - 117, - 6, - "MULTIVAL" - ], - [ - 177, - 121, + 15, 0, - 117, - 7, - "MULTIVAL" + "*" ], [ - 178, - 122, + 479, + 180, + 1, + 185, 0, - 118, - 2, - "CUSTOM_CFG" + "MASK" ], [ + 480, 180, - 117, - 0, - 23, + 1, + 194, 0, - "MODEL" + "MASK" ], [ - 192, - 136, + 491, + 92, 0, - 110, + 321, 1, "AUDIO" ], [ - 195, - 92, - 0, - 137, + 495, + 321, + 3, + 295, 0, "AUDIO" ], [ - 196, - 137, - 2, - 102, - 0, - "INT" - ], - [ - 199, - 115, + 496, + 322, 0, - 140, + 321, 0, - "*" + "OPEN_UNMIX_MODEL" ], [ - 202, + 497, 142, 1, - 82, - 1, + 324, + 0, "INT" ], [ - 203, + 498, 142, 2, - 82, - 2, - "INT" - ], - [ - 204, - 129, + 323, 0, - 143, - 2, "INT" ], [ - 208, - 13, + 499, + 92, 0, - 144, + 325, 0, - "MODEL" + "AUDIO" ], [ - 218, - 152, + 500, + 325, 0, - 151, - 2, - "CONTROL_NET" - ], - [ - 221, - 151, + 102, 0, - 23, - 1, - "CONDITIONING" - ], - [ - 222, - 151, - 1, - 23, - 2, - "CONDITIONING" + "INT" ], [ - 235, - 160, + 501, + 327, 0, - 155, + 326, 0, - "LATENT" + "FLOAT" ], [ - 236, - 157, - 0, - 155, + 502, + 321, 1, - "VAE" - ], - [ - 237, - 155, - 0, - 156, + 328, 0, - "IMAGE" - ], - [ - 238, - 158, - 0, - 156, - 1, "AUDIO" ], [ - 239, - 117, - 0, - 160, + 505, + 328, + 1, + 79, 0, - "MODEL" + "INT" ], [ - 240, - 151, + 506, + 321, + 3, + 329, 0, - 160, - 1, - "CONDITIONING" - ], - [ - 241, - 151, - 1, - 160, - 2, - "CONDITIONING" + "AUDIO" ], [ - 243, - 23, - 0, - 161, + 508, + 329, 0, - "LATENT" - ], - [ - 244, - 161, + 331, 0, - 160, - 3, - "LATENT" + "FEATURE" ], [ - 246, - 150, + 509, + 331, 0, - 163, + 80, 0, - "IMAGE" + "FEATURE" ], [ - 247, - 163, + 510, + 331, 0, - 151, - 3, - "IMAGE" + 332, + 0, + "FEATURE" ], [ - 260, - 166, + 511, + 328, 0, - 172, + 335, 0, "FEATURE" ], [ - 267, - 172, + 512, + 335, 0, - 178, + 78, 0, "FEATURE" ], [ - 268, - 178, - 1, - 169, + 513, + 335, 0, - "IMAGE" - ], - [ - 269, - 172, - 1, - 179, + 336, 0, - "IMAGE" + "FEATURE" ], [ - 270, - 178, + 514, + 328, 0, - 171, + 338, 0, "FEATURE" ], [ - 272, - 181, + 515, + 338, 0, - 180, + 75, 0, - "SAM_MODEL" + "FEATURE" ], [ - 273, - 182, + 516, + 338, 0, - 180, - 1, - "GROUNDING_DINO_MODEL" - ], - [ - 274, - 183, + 339, 0, - 180, - 2, - "IMAGE" + "FEATURE" ], [ - 275, - 180, - 0, - 184, + 517, + 321, + 2, + 341, 0, - "IMAGE" + "AUDIO" ], [ - 283, - 190, + 519, + 341, 0, - 117, + 342, 0, - "MODEL" + "FEATURE" ], [ - 285, - 143, + 521, + 342, 0, - 192, + 344, 0, - "IMAGE" + "FEATURE" ], [ - 286, - 192, + 522, + 344, 0, - 128, + 171, 0, - "IMAGE" + "FEATURE" ], [ - 289, - 128, + 523, + 342, 0, - 142, + 345, 0, - "IMAGE" + "FEATURE" ], [ - 291, - 194, + 524, + 344, 0, - 195, + 346, 0, - "*" + "FEATURE" ], [ - 292, - 141, + 531, + 272, 0, - 23, - 3, - "LATENT" + 348, + 0, + "MASK" ], [ - 293, - 196, + 532, + 274, 0, - 197, + 348, 1, - "MASK" + "FEATURE" ], [ - 294, - 93, + 533, + 348, 0, - 197, + 277, 0, "MASK" ], [ - 295, - 197, + 534, + 348, 0, - 98, + 311, 0, "MASK" ], [ - 409, - 128, + 535, + 325, 0, - 139, + 349, 0, - "IMAGE" + "INT" ], [ - 410, - 128, - 0, - 115, + 536, + 354, 0, - "IMAGE" + 355, + 2, + "CUSTOM_CFG" ], [ - 417, - 272, + 537, + 357, 0, - 271, + 356, 0, - "MASK" + "MOTION_MODEL_ADE" ], [ - 418, - 274, + 538, + 351, 0, - 271, + 356, 1, - "FEATURE" + "MOTION_LORA" ], [ - 419, - 273, + 539, + 353, 0, - 271, + 356, 2, - "FEATURE_PIPE" + "MULTIVAL" ], [ - 420, - 275, + 540, + 352, 0, - 276, - 1, - "AUDIO" + 356, + 3, + "MULTIVAL" ], [ - 421, - 271, - 0, - 277, + 541, + 356, 0, - "MASK" + 358, + 1, + "M_MODELS" ], [ - 422, - 277, + 542, + 359, 0, - 276, + 358, + 2, + "CONTEXT_OPTIONS" + ], + [ + 543, + 355, 0, - "IMAGE" + 358, + 3, + "SAMPLE_SETTINGS" ], [ - 442, - 17, + 544, + 190, 0, - 151, + 358, 0, - "CONDITIONING" + "MODEL" ], [ - 443, - 17, - 1, - 151, - 1, - "CONDITIONING" + 545, + 358, + 0, + 23, + 0, + "MODEL" ], [ - 445, - 144, + 546, + 358, 0, - 292, + 160, 0, "MODEL" ], [ - 446, - 144, - 1, - 292, - 1, - "IPADAPTER" + 547, + 95, + 0, + 360, + 0, + "FEATURE" ], [ - 449, - 292, + 549, + 360, 0, - 190, + 361, 0, - "MODEL" + "MASK" ], [ - 451, - 293, + 550, + 196, 0, - 292, - 2, - "IMAGE" + 361, + 1, + "MASK" ], [ - 475, - 271, + 551, + 362, 0, - 311, + 363, 0, - "*" + "IMAGE" ], [ - 476, - 312, + 552, + 361, + 0, + 362, 0, - 292, - 4, "MASK" ], [ - 477, - 197, + 553, + 92, + 0, + 364, + 0, + "AUDIO" + ], + [ + 554, + 361, 0, 313, 0, - "*" + "MASK" ], [ - 478, - 315, - 0, - 15, + 555, + 327, 0, - "*" + 82, + 3, + "FLOAT" ], [ - 479, - 180, - 1, - 185, + 556, + 92, 0, - "MASK" + 184, + 1, + "AUDIO" ], [ - 480, - 180, + 557, + 327, + 0, + 328, 1, - 194, + "FLOAT" + ], + [ + 558, + 325, 0, - "MASK" + 328, + 2, + "INT" ], [ - 482, - 320, + 559, + 142, 1, - 90, - 0, - "AUDIO" + 328, + 3, + "INT" ], [ - 483, - 320, + 560, + 142, 2, - 166, - 0, - "AUDIO" + 328, + 4, + "INT" ], [ - 484, - 320, - 3, - 86, + 561, + 327, 0, - "AUDIO" + 329, + 1, + "FLOAT" ], [ - 485, - 320, - 3, - 295, + 562, + 325, 0, - "AUDIO" + 329, + 2, + "INT" ], [ - 486, - 320, - 5, - 86, + 563, + 142, 1, - "FEATURE_PIPE" + 329, + 3, + "INT" ], [ - 487, - 320, - 5, - 90, - 1, - "FEATURE_PIPE" + 564, + 142, + 2, + 329, + 4, + "INT" ], [ - 488, - 320, - 5, - 166, + 565, + 327, + 0, + 341, 1, - "FEATURE_PIPE" + "FLOAT" ], [ - 489, - 92, + 566, + 325, 0, - 320, + 341, + 2, + "INT" + ], + [ + 567, + 142, + 1, + 341, + 3, + "INT" + ], + [ + 568, + 142, + 2, + 341, + 4, + "INT" + ], + [ + 569, + 327, 0, - "AUDIO" + 325, + 1, + "FLOAT" ], [ - 490, - 82, + 570, + 92, 0, - 320, + 363, 1, - "IMAGE" + "AUDIO" ] ], "groups": [ @@ -6130,19 +6420,6 @@ "font_size": 24, "flags": {} }, - { - "id": 6, - "title": "Yuck!", - "bounding": [ - -3179.978515625, - -167.05276489257812, - 861.4481811523438, - 392.4611511230469 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, { "id": 7, "title": "Load Video", @@ -6173,8 +6450,8 @@ "id": 9, "title": "samp2", "bounding": [ - 4505.4599609375, - -506.8277282714844, + 4517.99169921875, + -515.1822509765625, 1955.6962890625, 1195.548583984375 ], @@ -6212,191 +6489,155 @@ "config": {}, "extra": { "ds": { - "scale": 0.12284597357367237, - "offset": { - "0": 5874.93603515625, - "1": 3045.195556640625 - } + "scale": 0.9090909090909098, + "offset": [ + -3508.848045650636, + 6.451593644326692 + ] }, - "ue_links": [], - "groupNodes": { - "wfe": { - "nodes": [ - { - "id": -1, - "type": "DownloadOpenUnmixModel", - "pos": [ - -2605.094482421875, - -1112.0582275390625 - ], - "size": [ - 361.20001220703125, - 58 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [], - "slot_index": 0, - "shape": 3, - "localized_name": "OPEN_UNMIX_MODEL" - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ], - "index": 0 - }, - { - "id": -1, - "type": "AudioSeparator", - "pos": [ - -2572.7392578125, - -1024.678466796875 - ], - "size": [ - 317.4000244140625, - 158 - ], - "flags": {}, - "order": 90, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": null, - "slot_index": 0, - "localized_name": "model" - }, - { - "name": "audio", - "type": "AUDIO", - "link": null, - "localized_name": "audio" - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": null, - "localized_name": "video_frames" - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3, - "localized_name": "audio" - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [], - "slot_index": 1, - "shape": 3, - "localized_name": "drums_audio" - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [], - "slot_index": 2, - "shape": 3, - "localized_name": "vocals_audio" - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [], - "slot_index": 3, - "shape": 3, - "localized_name": "bass_audio" - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3, - "localized_name": "other_audio" - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 5, - "shape": 3, - "localized_name": "feature_pipe" - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ], - "index": 1 - } - ], - "links": [ - [ - 0, - 0, - 1, - 0, - 84, - "OPEN_UNMIX_MODEL" - ], - [ - null, - 0, - 1, - 1, - 92, - "AUDIO" - ], - [ - null, - 0, - 1, - 2, - 82, - "IMAGE" - ] - ], - "external": [ - [ - 1, - 1, - "AUDIO" - ], - [ - 1, - 2, - "AUDIO" - ], - [ - 1, - 3, - "AUDIO" - ], - [ - 1, - 5, - "FEATURE_PIPE" - ] - ] + "ue_links": [ + { + "downstream": 82, + "downstream_slot": 3, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 184, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 328, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 328, + "downstream_slot": 2, + "upstream": "325", + "upstream_slot": 0, + "controller": 349, + "type": "INT" + }, + { + "downstream": 328, + "downstream_slot": 3, + "upstream": "142", + "upstream_slot": 1, + "controller": 324, + "type": "INT" + }, + { + "downstream": 328, + "downstream_slot": 4, + "upstream": "142", + "upstream_slot": 2, + "controller": 323, + "type": "INT" + }, + { + "downstream": 329, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 329, + "downstream_slot": 2, + "upstream": "325", + "upstream_slot": 0, + "controller": 349, + "type": "INT" + }, + { + "downstream": 329, + "downstream_slot": 3, + "upstream": "142", + "upstream_slot": 1, + "controller": 324, + "type": "INT" + }, + { + "downstream": 329, + "downstream_slot": 4, + "upstream": "142", + "upstream_slot": 2, + "controller": 323, + "type": "INT" + }, + { + "downstream": 341, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 341, + "downstream_slot": 2, + "upstream": "325", + "upstream_slot": 0, + "controller": 349, + "type": "INT" + }, + { + "downstream": 341, + "downstream_slot": 3, + "upstream": "142", + "upstream_slot": 1, + "controller": 324, + "type": "INT" + }, + { + "downstream": 341, + "downstream_slot": 4, + "upstream": "142", + "upstream_slot": 2, + "controller": 323, + "type": "INT" + }, + { + "downstream": 325, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 363, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" } + ], + "groupNodes": {}, + "node_versions": { + "comfy-core": "0.3.12", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e", + "comfyui_segment_anything": "ab6395596399d5048639cdab7e44ec9fae857a93", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "ComfyUI_RyanOnTheInside": "e2382fa6e72d3aa18cbb4d558eb468cc14c54afc", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0" } }, "version": 0.4 diff --git a/examples/audio_particles.json b/examples/audio_particles.json deleted file mode 100644 index 311951f..0000000 --- a/examples/audio_particles.json +++ /dev/null @@ -1,5652 +0,0 @@ -{ - "last_node_id": 189, - "last_link_id": 341, - "nodes": [ - { - "id": 8, - "type": "VAEDecode", - "pos": [ - 4292.735538106925, - 350.89482617683393 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 99, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": 302 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 327 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 34, - "type": "KSampler", - "pos": [ - 5862.632408961488, - 625.052586911583 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 102, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 69 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 215 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 216 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 48 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 52 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 866894971726240, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.3 - ] - }, - { - "id": 46, - "type": "Reroute", - "pos": [ - 3853.735538106928, - 241.89482617683393 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 97, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 258 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 69, - 209 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 35, - "type": "NNLatentUpscale", - "pos": [ - 5308.63240896149, - 794.052586911583 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 100, - "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 47 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 48 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "NNLatentUpscale" - }, - "widgets_values": [ - "SD 1.x", - 1.5 - ] - }, - { - "id": 3, - "type": "KSampler", - "pos": [ - 3934.735538106928, - 457.894826176834 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 98, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 209 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 212 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 213 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 321 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 7, - 47 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 1008539459902328, - "fixed", - 4, - 1.9000000000000001, - "lcm", - "sgm_uniform", - 0.8 - ] - }, - { - "id": 44, - "type": "Reroute", - "pos": [ - 3859.735538106928, - 341.89482617683393 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 298 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 212, - 215 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 45, - "type": "Reroute", - "pos": [ - 3857.735538106928, - 384.89482617683393 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 297 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 213, - 216 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 121, - "type": "Note", - "pos": [ - 5265.63240896149, - 398.05258691158303 - ], - "size": { - "0": 345.6462097167969, - "1": 108.14704895019531 - }, - "flags": {}, - "order": 0, - "mode": 4, - "properties": { - "text": "" - }, - "widgets_values": [ - "for the second sampler, we sample the whole image. Since we only sampled the particles in the first, we still retain some \"washing over\" effect.\n\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 36, - "type": "VAEDecode", - "pos": [ - 6465.447599460892, - 301.0788879967691 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 52 - }, - { - "name": "vae", - "type": "VAE", - "link": 304 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 217 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 114, - "type": "ImageCASharpening+", - "pos": [ - 6627.447599460892, - 436.0788879967691 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 104, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 217 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 219 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCASharpening+" - }, - "widgets_values": [ - 0.15 - ] - }, - { - "id": 113, - "type": "UpscaleModelLoader", - "pos": [ - 6980.447599460892, - 571.0788879967691 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 1, - "mode": 4, - "outputs": [ - { - "name": "UPSCALE_MODEL", - "type": "UPSCALE_MODEL", - "links": [ - 202 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "UpscaleModelLoader" - }, - "widgets_values": [ - "RealESRGAN_x2.pth" - ] - }, - { - "id": 112, - "type": "ImageUpscaleWithModel", - "pos": [ - 7067.447599460892, - 357.0788879967691 - ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 105, - "mode": 4, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 202, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 219 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 336 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - } - }, - { - "id": 90, - "type": "ConstrainImageforVideo|pysssss", - "pos": [ - -3975.6972251206093, - 916.6434507532306 - ], - "size": { - "0": 315, - "1": 154 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 154 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 156 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ConstrainImageforVideo|pysssss" - }, - "widgets_values": [ - 768, - 768, - 0, - 0, - "no" - ] - }, - { - "id": 30, - "type": "IPAdapterUnifiedLoader", - "pos": [ - 701.3299330433808, - 184.2781828220632 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 290 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 182 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "links": [ - 183, - 196 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 26, - "type": "_mfc", - "pos": [ - 1185.3299330433806, - 1087.2781828220636 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 102 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 249 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 50, - 100, - 150, - 0 - ] - }, - { - "id": 105, - "type": "IPAdapterAdvanced", - "pos": [ - 705.3299330433808, - 693.2781828220633 - ], - "size": { - "0": 315, - "1": 326 - }, - "flags": {}, - "order": 90, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 182 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 183 - }, - { - "name": "image", - "type": "IMAGE", - "link": 197 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 249 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 187 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 0.5, - "linear", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 106, - "type": "IPAdapterAdvanced", - "pos": [ - 1178.3299330433806, - 691.2781828220633 - ], - "size": { - "0": 315, - "1": 326 - }, - "flags": {}, - "order": 93, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 187 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 196 - }, - { - "name": "image", - "type": "IMAGE", - "link": 198 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 250 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 191 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 0.5, - "linear", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 27, - "type": "_mfc", - "pos": [ - 700.3299330433808, - 1096.2781828220636 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 88, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 246 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 250 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 0, - 0, - 0 - ] - }, - { - "id": 17, - "type": "_mfc", - "pos": [ - -3540, - 1320 - ], - "size": { - "0": 307.56854248046875, - "1": 130 - }, - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 18 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 207 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 255, - 255, - 0 - ] - }, - { - "id": 10, - "type": "EmptyImage", - "pos": [ - -3550, - 1160 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 158, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 159, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 160, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 18 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EmptyImage" - }, - "widgets_values": [ - 512, - 512, - 64, - 0 - ] - }, - { - "id": 130, - "type": "DownloadOpenUnmixModel", - "pos": [ - -4293.082839590915, - 1874.6612607253853 - ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 226 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 135, - "type": "PreviewAudio", - "pos": [ - -3781.0828395909157, - 2229.661260725381 - ], - "size": { - "0": 315, - "1": 76.00011444091797 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 238 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 60, - "type": "Reroute", - "pos": [ - 620.329933043381, - 1202.2781828220634 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 84, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 107 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 102, - 246 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 125, - "type": "StaticBody", - "pos": [ - -1313.8830345995825, - 792.1086069314872 - ], - "size": { - "0": 243.60000610351562, - "1": 250 - }, - "flags": { - "collapsed": false - }, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": 223, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 222 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 1, - 0, - 1, - 1, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 124, - "type": "StaticBody", - "pos": [ - -1314.8830345995825, - 1087.1086069314877 - ], - "size": { - "0": 243.60000610351562, - "1": 250 - }, - "flags": { - "collapsed": false - }, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": 222, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 221 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 0, - 0, - 0, - 1, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 126, - "type": "StaticBody", - "pos": [ - -1293.8830345995827, - 747.1086069314872 - ], - "size": { - "0": 243.60000610351562, - "1": 250 - }, - "flags": { - "collapsed": true - }, - "order": 3, - "mode": 4, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": null - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 223 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 0, - 0.99, - 1, - 0.99, - 0.2, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 117, - "type": "Note", - "pos": [ - -697.8830345995831, - 219.10860693148578 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 4, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "we have two particle emitters, one red one blue" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 142, - "type": "Note", - "pos": [ - -1299.8830345995827, - 695.1086069314872 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 5, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "build the walls\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 143, - "type": "Note", - "pos": [ - -1280.8830345995827, - 306.1086069314861 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 6, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate speed with kick drum\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 144, - "type": "Note", - "pos": [ - -365.88303459958274, - 952.1086069314878 - ], - "size": { - "0": 311.76348876953125, - "1": 194.08082580566406 - }, - "flags": {}, - "order": 7, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "using start and end frames on particle emitters, and particle lifetime on the simulation, we achieve this effect" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 137, - "type": "AudioFilter", - "pos": [ - -3752.4112818275444, - 1945.2478222458992 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 241 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 240 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 242 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 136, - "type": "FrequencyFilterPreset", - "pos": [ - -3803.411281827543, - 1842.2478222458994 - ], - "size": { - "0": 344.3999938964844, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 240 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "isolate_kick_drum" - ] - }, - { - "id": 146, - "type": "PreviewImage", - "pos": [ - -3353.41128182755, - 2093.247822245896 - ], - "size": { - "0": 318.3671569824219, - "1": 246 - }, - "flags": {}, - "order": 64, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 253 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 40, - "type": "GrowMask", - "pos": [ - 2922.463870968055, - 472.8715993418426 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 89, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 301 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 56, - 108 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "GrowMask" - }, - "widgets_values": [ - 9, - true - ] - }, - { - "id": 62, - "type": "MaskToImage", - "pos": [ - 2995.4638709680544, - 398.8715993418426 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 92, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 108 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 192 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 119, - "type": "Note", - "pos": [ - 2949.4638709680544, - 236.87159934184268 - ], - "size": { - "0": 276.56475830078125, - "1": 96.5937728881836 - }, - "flags": {}, - "order": 9, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "the latent mask ensures nothing but the masked areas will be sampled\n\nwe expand the masks to give the models more area to work with. Increasing particle size would work too" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 103, - "type": "GravityWell", - "pos": [ - -362, - 1219 - ], - "size": { - "0": 330, - "1": 202 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "previous_well", - "type": "GRAVITY_WELL", - "link": null - } - ], - "outputs": [ - { - "name": "GRAVITY_WELL", - "type": "GRAVITY_WELL", - "links": [ - 181 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GravityWell" - }, - "widgets_values": [ - 0.5, - 0.5, - 5000, - 300, - "attract", - "(255,127,0)", - 0 - ] - }, - { - "id": 133, - "type": "AudioFeatureExtractor", - "pos": [ - -3792.4112818275435, - 2048.2478222458985 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 242 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 232 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 251 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 16, - "type": "VAEEncode", - "pos": [ - -3495, - 836 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 157 - }, - { - "name": "vae", - "type": "VAE", - "link": 14 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 270 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 152, - "type": "Reroute", - "pos": [ - -2789, - -145 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 264 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 280 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 153, - "type": "Reroute", - "pos": [ - -2789, - -63 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 265 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 315 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 155, - "type": "Reroute", - "pos": [ - -2789, - -36 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 270 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 305 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 156, - "type": "Reroute", - "pos": [ - -2789, - -8 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 271 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 278 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 151, - "type": "Reroute", - "pos": [ - -2789, - -172 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 263 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 279 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 166, - "type": "Reroute", - "pos": [ - -224, - -125 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 280, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 283 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 165, - "type": "Reroute", - "pos": [ - -225, - -154 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 279 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 284 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 154, - "type": "Reroute", - "pos": [ - -2789, - -91 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 63, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 266 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 285 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 57, - "type": "Reroute", - "pos": [ - -2789, - -119 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 207 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 287 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 168, - "type": "Reroute", - "pos": [ - -346, - -100 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 67, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 287 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 288 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 118, - "type": "Note", - "pos": [ - -112, - 168 - ], - "size": { - "0": 306.046630859375, - "1": 133.32003784179688 - }, - "flags": {}, - "order": 11, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "we send the IMAGE output to the ip adapters so that we can mask the separate colors" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 169, - "type": "Reroute", - "pos": [ - 587.2406207102108, - 23.54918030884039 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 289 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 290 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 150, - "type": "Reroute", - "pos": [ - -2791, - 15 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 323 - } - ], - "outputs": [ - { - "name": "", - "type": "MODEL", - "links": [ - 289 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 160, - "type": "Reroute", - "pos": [ - 1020, - -110 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 293 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 295 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 159, - "type": "Reroute", - "pos": [ - 1020, - -130 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 292 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 296 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 170, - "type": "Reroute", - "pos": [ - 3720, - -88.27430795081773 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 75, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 295 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 297 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 171, - "type": "Reroute", - "pos": [ - 3720, - -121.99592625211795 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 74, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 296 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 298 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 12, - "type": "ParticleEmissionMask", - "pos": [ - -171.88303459958243, - 358.1086069314863 - ], - "size": { - "0": 360.8669128417969, - "1": 474 - }, - "flags": {}, - "order": 82, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 288 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 334, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null, - "slot_index": 2 - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": 181, - "slot_index": 3 - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": 221, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 299 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 107, - 317 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 1440, - 3.5, - 0, - 0, - 0, - 0, - 0, - false, - 1, - 1, - 1 - ] - }, - { - "id": 161, - "type": "Reroute", - "pos": [ - 268, - -90 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 83, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 299 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 300 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 172, - "type": "Reroute", - "pos": [ - 2900.890186935795, - -57.83110864059398 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 86, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 300 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 301 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 164, - "type": "Reroute", - "pos": [ - 3720, - 40 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 278 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 302, - 303 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 173, - "type": "Reroute", - "pos": [ - 6413.825474642017, - 70.86294063793503 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 303 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 304 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 20, - "type": "ADE_UseEvolvedSampling", - "pos": [ - 1868, - 522 - ], - "size": { - "0": 315, - "1": 118 - }, - "flags": {}, - "order": 95, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 191, - "slot_index": 0 - }, - { - "name": "m_models", - "type": "M_MODELS", - "link": 22, - "slot_index": 1 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 211, - "slot_index": 2 - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": null, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 257 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_UseEvolvedSampling" - }, - "widgets_values": [ - "lcm >> sqrt_linear" - ] - }, - { - "id": 122, - "type": "ADE_StandardStaticContextOptions", - "pos": [ - 1873, - 687 - ], - "size": { - "0": 319.20001220703125, - "1": 198 - }, - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null - } - ], - "outputs": [ - { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 211 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_StandardStaticContextOptions" - }, - "widgets_values": [ - 16, - 4, - "pyramid", - false, - 0, - 1 - ] - }, - { - "id": 19, - "type": "ADE_ApplyAnimateDiffModelSimple", - "pos": [ - 1879, - 926 - ], - "size": { - "0": 260.3999938964844, - "1": 114 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "motion_model", - "type": "MOTION_MODEL_ADE", - "link": 28, - "slot_index": 0 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": null - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - } - ], - "outputs": [ - { - "name": "M_MODELS", - "type": "M_MODELS", - "links": [ - 22 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_ApplyAnimateDiffModelSimple" - }, - "widgets_values": [ - "" - ] - }, - { - "id": 25, - "type": "ADE_LoadAnimateDiffModel", - "pos": [ - 1879, - 1093 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MOTION_MODEL", - "type": "MOTION_MODEL_ADE", - "links": [ - 28 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_LoadAnimateDiffModel" - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt" - ] - }, - { - "id": 148, - "type": "ModelSamplingDiscrete", - "pos": [ - 1856, - 370 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 96, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 257 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 258 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ModelSamplingDiscrete" - }, - "widgets_values": [ - "lcm", - false - ] - }, - { - "id": 129, - "type": "AudioSeparator", - "pos": [ - -4332, - 2116 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 226, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 227 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 228 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 238, - 265 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 241 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 232 - ], - "shape": 3, - "slot_index": 5 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 92, - "type": "GetImageSizeAndCount", - "pos": [ - -3977.6972251206093, - 1156.6434507532335 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 156 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 157, - 309 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "432 width", - "type": "INT", - "links": [ - 158 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "768 height", - "type": "INT", - "links": [ - 159 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "200 count", - "type": "INT", - "links": [ - 160 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 176, - "type": "Reroute", - "pos": [ - -2787, - -201 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 309 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 310 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 177, - "type": "Reroute", - "pos": [ - -220.4294721816832, - -177.81376603521517 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 310 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 311 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 96, - "type": "ControlNetApplyAdvanced", - "pos": [ - 268, - -832 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 66, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 284 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 283 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 171, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 195 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 292 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 293 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.28, - 0, - 0.6960000000000001 - ] - }, - { - "id": 108, - "type": "DepthAnything_V2", - "pos": [ - -67, - -789 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 193, - "slot_index": 0 - }, - { - "name": "images", - "type": "IMAGE", - "link": 311 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 195 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, - { - "id": 97, - "type": "ControlNetLoader", - "pos": [ - 288, - -589 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 14, - "mode": 0, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 171 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11f1p_sd15_depth_fp16.safetensors" - ] - }, - { - "id": 109, - "type": "DownloadAndLoadDepthAnythingV2Model", - "pos": [ - -85, - -651 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 15, - "mode": 0, - "outputs": [ - { - "name": "da_v2_model", - "type": "DAMODEL", - "links": [ - 193 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" - }, - "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] - }, - { - "id": 174, - "type": "Reroute", - "pos": [ - 2898, - 7 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 305 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 306, - 312 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 163, - "type": "Reroute", - "pos": [ - 3720, - 10 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 65, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 312 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 179, - "type": "Reroute", - "pos": [ - -344, - -67 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 315 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 318, - 319 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 180, - "type": "VHS_VideoCombine", - "pos": [ - 32, - 874 - ], - "size": [ - 315, - 310 - ], - "flags": {}, - "order": 85, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 317 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 318 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00078-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 181, - "type": "Note", - "pos": [ - -2660, - 370 - ], - "size": { - "0": 929.05517578125, - "1": 675.6070556640625 - }, - "flags": {}, - "order": 16, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "This workflow at a high level: \n\nWe are loading a video, and changing wherever the particles touch the image.\n\nThe lora has an effect on the area of all the particles, while the color of the particles adds additional effect from the IPAdapter.\n\nWe use multiple particle emitters, starting at different times and pointing in different directions.\n\nWe use the kick drum to control the speed of all the particles." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 145, - "type": "Note", - "pos": [ - -3922.411281827541, - 1649.2478222458997 - ], - "size": { - "0": 377.5563659667969, - "1": 95.57986450195312 - }, - "flags": {}, - "order": 17, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "we separate the drums, isolate the kick, and fine tune the feature" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 182, - "type": "Note", - "pos": [ - -3843.9910840550833, - 1353.8088449893194 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 18, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "load the video, make blank masks for this use case" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 167, - "type": "Reroute", - "pos": [ - -1492, - -87 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 70, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 285 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 286 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 18, - "type": "SetLatentNoiseMask", - "pos": [ - 2980.7666021050854, - 615.9845317435357 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 91, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 306 - }, - { - "name": "mask", - "type": "MASK", - "link": 56 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 321 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 120, - "type": "Note", - "pos": [ - 901, - 1273 - ], - "size": { - "0": 210.61317443847656, - "1": 59.68153381347656 - }, - "flags": {}, - "order": 19, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "apply to red, apply to blue" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 7, - "type": "CLIPTextEncode", - "pos": [ - -3797, - 467 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 5 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 264 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "text, watermark" - ] - }, - { - "id": 95, - "type": "LoraLoaderModelOnly", - "pos": [ - -3735.1099941771445, - -9.96545643229408 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 165 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 322 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ral-origami-sd15.safetensors", - 1 - ] - }, - { - "id": 141, - "type": "FeatureMixer", - "pos": [ - -3364, - 1712 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 251 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 266 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 253 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5 - ] - }, - { - "id": 178, - "type": "Reroute", - "pos": [ - 2902, - -23 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 319 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 314, - 324 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 186, - "type": "VHS_VideoCombine", - "pos": [ - 4719, - 258 - ], - "size": { - "0": 315, - "1": 310 - }, - "flags": {}, - "order": 101, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 327 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02879-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 187, - "type": "Reroute", - "pos": [ - 3860.4503163055965, - 306.1783218186079 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 328 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 185, - "type": "Reroute", - "pos": [ - 3724, - -19 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 324 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 328, - 330 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 184, - "type": "LoraLoaderModelOnly", - "pos": [ - -3740, - 115 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 35, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 322 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 323 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ALCM_sd15_lora_beta.safetensors", - 1 - ] - }, - { - "id": 4, - "type": "CheckpointLoaderSimple", - "pos": [ - -4305.109994177148, - 340.0345435677062 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 20, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 165 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 3, - 5 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 14, - 271 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photonLCM_v10.safetensors" - ] - }, - { - "id": 183, - "type": "Note", - "pos": [ - -4152, - -20 - ], - "size": { - "0": 354.02020263671875, - "1": 163.20777893066406 - }, - "flags": {}, - "order": 21, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "add the lora, include the trigger word in the prompt\n\nif youre not using an LCM distilled checkpoint, apply the lcm lora" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 31, - "type": "LoadImage", - "pos": [ - 1155.3299330433806, - 302.27818282206294 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": {}, - "order": 22, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 198 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "anime-silver-armoured-android-girl-modern-ai-art-366.webp", - "image" - ] - }, - { - "id": 6, - "type": "CLIPTextEncode", - "pos": [ - -3806, - 253 - ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 3 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 263 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "ral-origami falling from the sky transforming everything into ral-origami, trending on artstation, depth of field" - ] - }, - { - "id": 128, - "type": "VHS_LoadAudioUpload", - "pos": [ - -4294.082839590915, - 1665.6612607253858 - ], - "size": { - "0": 226.8000030517578, - "1": 130 - }, - "flags": {}, - "order": 23, - "mode": 0, - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 227 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "pexels-polina-tankilevitch-5385809 (1080p).mp4", - "start_time": 0.5, - "duration": 0, - "choose audio to upload": "image" - } - }, - { - "id": 162, - "type": "Reroute", - "pos": [ - 7303, - 6 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 69, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 330 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 337 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 189, - "type": "VHS_VideoCombine", - "pos": [ - 7429, - 292 - ], - "size": { - "0": 315, - "1": 310 - }, - "flags": {}, - "order": 106, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 336 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 337 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": {} - } - } - }, - { - "id": 107, - "type": "VHS_VideoCombine", - "pos": [ - 3380, - 320 - ], - "size": [ - 315, - 334 - ], - "flags": {}, - "order": 94, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 192 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 314 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/nvenc_h264-mp4", - "pix_fmt": "yuv420p", - "bitrate": 10, - "megabit": true, - "save_metadata": false, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00076-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/nvenc_h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 89, - "type": "VHS_LoadVideo", - "pos": [ - -4340, - 800 - ], - "size": { - "0": 235.1999969482422, - "1": 262 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 154, - 228 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexels-polina-tankilevitch-5385809 (1080p).mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 75, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 75, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "pexels-polina-tankilevitch-5385809 (1080p).mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 32, - "type": "LoadImage", - "pos": [ - 500, - 313 - ], - "size": { - "0": 210, - "1": 314 - }, - "flags": {}, - "order": 25, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 197 - ], - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "ddmtface.jpg", - "image" - ] - }, - { - "id": 138, - "type": "ParticleEmitter", - "pos": [ - -691, - 745 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 79, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 339, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null, - "slot_index": 1 - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null, - "slot_index": 2 - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": 341, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 332 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.5, - 1, - 270, - 30, - 38.6, - 1, - 38, - "(255,0,0)", - 0, - 100, - 106, - 0 - ] - }, - { - "id": 134, - "type": "ParticleSpeedModulation", - "pos": [ - -1318.8830345995825, - 418.1086069314867 - ], - "size": { - "0": 493.8000183105469, - "1": 222 - }, - "flags": {}, - "order": 73, - "mode": 0, - "inputs": [ - { - "name": "previous_modulation", - "type": "PARTICLE_MODULATION", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": 286 - } - ], - "outputs": [ - { - "name": "PARTICLE_MODULATION", - "type": "PARTICLE_MODULATION", - "links": [ - 259, - 338, - 341 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleSpeedModulation" - }, - "widgets_values": [ - 0, - 0, - 0, - "ease_in_out", - false, - false, - 529 - ] - }, - { - "id": 149, - "type": "ParticleEmitter", - "pos": [ - -702, - 1178 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 332, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null, - "slot_index": 1 - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": 259, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 333 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0, - 0.5, - 0, - 30, - 38.6, - 1, - 38, - "(50,100,150)", - 0, - 185, - 188, - 0 - ] - }, - { - "id": 188, - "type": "ParticleEmitter", - "pos": [ - -704, - 1590 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 81, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 333, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null, - "slot_index": 1 - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 334 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0, - 0.5, - 0, - 30, - 38.6, - 1, - 38, - "(50,100,150)", - 0, - 265, - 270, - 0 - ] - }, - { - "id": 13, - "type": "ParticleEmitter", - "pos": [ - -689, - 319 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 76, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null, - "slot_index": 1 - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": 338, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 339 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.5, - 0, - 90, - 30, - 38.6, - 1, - 38, - "(50,100,150)", - 0, - 10, - 16, - 0 - ] - } - ], - "links": [ - [ - 3, - 4, - 1, - 6, - 0, - "CLIP" - ], - [ - 5, - 4, - 1, - 7, - 0, - "CLIP" - ], - [ - 7, - 3, - 0, - 8, - 0, - "LATENT" - ], - [ - 14, - 4, - 2, - 16, - 1, - "VAE" - ], - [ - 18, - 10, - 0, - 17, - 0, - "IMAGE" - ], - [ - 22, - 19, - 0, - 20, - 1, - "M_MODELS" - ], - [ - 28, - 25, - 0, - 19, - 0, - "MOTION_MODEL_ADE" - ], - [ - 47, - 3, - 0, - 35, - 0, - "LATENT" - ], - [ - 48, - 35, - 0, - 34, - 3, - "LATENT" - ], - [ - 52, - 34, - 0, - 36, - 0, - "LATENT" - ], - [ - 56, - 40, - 0, - 18, - 1, - "MASK" - ], - [ - 69, - 46, - 0, - 34, - 0, - "MODEL" - ], - [ - 102, - 60, - 0, - 26, - 0, - "IMAGE" - ], - [ - 107, - 12, - 1, - 60, - 0, - "*" - ], - [ - 108, - 40, - 0, - 62, - 0, - "MASK" - ], - [ - 154, - 89, - 0, - 90, - 0, - "IMAGE" - ], - [ - 156, - 90, - 0, - 92, - 0, - "IMAGE" - ], - [ - 157, - 92, - 0, - 16, - 0, - "IMAGE" - ], - [ - 158, - 92, - 1, - 10, - 0, - "INT" - ], - [ - 159, - 92, - 2, - 10, - 1, - "INT" - ], - [ - 160, - 92, - 3, - 10, - 2, - "INT" - ], - [ - 165, - 4, - 0, - 95, - 0, - "MODEL" - ], - [ - 171, - 97, - 0, - 96, - 2, - "CONTROL_NET" - ], - [ - 181, - 103, - 0, - 12, - 3, - "GRAVITY_WELL" - ], - [ - 182, - 30, - 0, - 105, - 0, - "MODEL" - ], - [ - 183, - 30, - 1, - 105, - 1, - "IPADAPTER" - ], - [ - 187, - 105, - 0, - 106, - 0, - "MODEL" - ], - [ - 191, - 106, - 0, - 20, - 0, - "MODEL" - ], - [ - 192, - 62, - 0, - 107, - 0, - "IMAGE" - ], - [ - 193, - 109, - 0, - 108, - 0, - "DAMODEL" - ], - [ - 195, - 108, - 0, - 96, - 3, - "IMAGE" - ], - [ - 196, - 30, - 1, - 106, - 1, - "IPADAPTER" - ], - [ - 197, - 32, - 0, - 105, - 2, - "IMAGE" - ], - [ - 198, - 31, - 0, - 106, - 2, - "IMAGE" - ], - [ - 202, - 113, - 0, - 112, - 0, - "UPSCALE_MODEL" - ], - [ - 207, - 17, - 0, - 57, - 0, - "*" - ], - [ - 209, - 46, - 0, - 3, - 0, - "MODEL" - ], - [ - 211, - 122, - 0, - 20, - 2, - "CONTEXT_OPTIONS" - ], - [ - 212, - 44, - 0, - 3, - 1, - "CONDITIONING" - ], - [ - 213, - 45, - 0, - 3, - 2, - "CONDITIONING" - ], - [ - 215, - 44, - 0, - 34, - 1, - "CONDITIONING" - ], - [ - 216, - 45, - 0, - 34, - 2, - "CONDITIONING" - ], - [ - 217, - 36, - 0, - 114, - 0, - "IMAGE" - ], - [ - 219, - 114, - 0, - 112, - 1, - "IMAGE" - ], - [ - 221, - 124, - 0, - 12, - 4, - "STATIC_BODY" - ], - [ - 222, - 125, - 0, - 124, - 0, - "STATIC_BODY" - ], - [ - 223, - 126, - 0, - 125, - 0, - "STATIC_BODY" - ], - [ - 226, - 130, - 0, - 129, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 227, - 128, - 0, - 129, - 1, - "AUDIO" - ], - [ - 228, - 89, - 0, - 129, - 2, - "IMAGE" - ], - [ - 232, - 129, - 5, - 133, - 1, - "FEATURE_PIPE" - ], - [ - 238, - 129, - 0, - 135, - 0, - "AUDIO" - ], - [ - 240, - 136, - 0, - 137, - 1, - "FREQUENCY_FILTER" - ], - [ - 241, - 129, - 1, - 137, - 0, - "AUDIO" - ], - [ - 242, - 137, - 0, - 133, - 0, - "AUDIO" - ], - [ - 246, - 60, - 0, - 27, - 0, - "IMAGE" - ], - [ - 249, - 26, - 0, - 105, - 4, - "MASK" - ], - [ - 250, - 27, - 0, - 106, - 4, - "MASK" - ], - [ - 251, - 133, - 0, - 141, - 0, - "FEATURE" - ], - [ - 253, - 141, - 1, - 146, - 0, - "IMAGE" - ], - [ - 257, - 20, - 0, - 148, - 0, - "MODEL" - ], - [ - 258, - 148, - 0, - 46, - 0, - "*" - ], - [ - 259, - 134, - 0, - 149, - 3, - "PARTICLE_MODULATION" - ], - [ - 263, - 6, - 0, - 151, - 0, - "*" - ], - [ - 264, - 7, - 0, - 152, - 0, - "*" - ], - [ - 265, - 129, - 0, - 153, - 0, - "*" - ], - [ - 266, - 141, - 0, - 154, - 0, - "*" - ], - [ - 270, - 16, - 0, - 155, - 0, - "*" - ], - [ - 271, - 4, - 2, - 156, - 0, - "*" - ], - [ - 278, - 156, - 0, - 164, - 0, - "*" - ], - [ - 279, - 151, - 0, - 165, - 0, - "*" - ], - [ - 280, - 152, - 0, - 166, - 0, - "*" - ], - [ - 283, - 166, - 0, - 96, - 1, - "CONDITIONING" - ], - [ - 284, - 165, - 0, - 96, - 0, - "CONDITIONING" - ], - [ - 285, - 154, - 0, - 167, - 0, - "*" - ], - [ - 286, - 167, - 0, - 134, - 1, - "FEATURE" - ], - [ - 287, - 57, - 0, - 168, - 0, - "*" - ], - [ - 288, - 168, - 0, - 12, - 0, - "MASK" - ], - [ - 289, - 150, - 0, - 169, - 0, - "*" - ], - [ - 290, - 169, - 0, - 30, - 0, - "MODEL" - ], - [ - 292, - 96, - 0, - 159, - 0, - "*" - ], - [ - 293, - 96, - 1, - 160, - 0, - "*" - ], - [ - 295, - 160, - 0, - 170, - 0, - "*" - ], - [ - 296, - 159, - 0, - 171, - 0, - "*" - ], - [ - 297, - 170, - 0, - 45, - 0, - "*" - ], - [ - 298, - 171, - 0, - 44, - 0, - "*" - ], - [ - 299, - 12, - 0, - 161, - 0, - "*" - ], - [ - 300, - 161, - 0, - 172, - 0, - "*" - ], - [ - 301, - 172, - 0, - 40, - 0, - "MASK" - ], - [ - 302, - 164, - 0, - 8, - 1, - "VAE" - ], - [ - 303, - 164, - 0, - 173, - 0, - "*" - ], - [ - 304, - 173, - 0, - 36, - 1, - "VAE" - ], - [ - 305, - 155, - 0, - 174, - 0, - "*" - ], - [ - 306, - 174, - 0, - 18, - 0, - "LATENT" - ], - [ - 309, - 92, - 0, - 176, - 0, - "*" - ], - [ - 310, - 176, - 0, - 177, - 0, - "*" - ], - [ - 311, - 177, - 0, - 108, - 1, - "IMAGE" - ], - [ - 312, - 174, - 0, - 163, - 0, - "*" - ], - [ - 314, - 178, - 0, - 107, - 1, - "AUDIO" - ], - [ - 315, - 153, - 0, - 179, - 0, - "*" - ], - [ - 317, - 12, - 1, - 180, - 0, - "IMAGE" - ], - [ - 318, - 179, - 0, - 180, - 1, - "AUDIO" - ], - [ - 319, - 179, - 0, - 178, - 0, - "*" - ], - [ - 321, - 18, - 0, - 3, - 3, - "LATENT" - ], - [ - 322, - 95, - 0, - 184, - 0, - "MODEL" - ], - [ - 323, - 184, - 0, - 150, - 0, - "*" - ], - [ - 324, - 178, - 0, - 185, - 0, - "*" - ], - [ - 327, - 8, - 0, - 186, - 0, - "IMAGE" - ], - [ - 328, - 185, - 0, - 187, - 0, - "*" - ], - [ - 330, - 185, - 0, - 162, - 0, - "*" - ], - [ - 332, - 138, - 0, - 149, - 0, - "PARTICLE_EMITTER" - ], - [ - 333, - 149, - 0, - 188, - 0, - "PARTICLE_EMITTER" - ], - [ - 334, - 188, - 0, - 12, - 1, - "PARTICLE_EMITTER" - ], - [ - 336, - 112, - 0, - 189, - 0, - "IMAGE" - ], - [ - 337, - 162, - 0, - 189, - 1, - "AUDIO" - ], - [ - 338, - 134, - 0, - 13, - 3, - "PARTICLE_MODULATION" - ], - [ - 339, - 13, - 0, - 138, - 0, - "PARTICLE_EMITTER" - ], - [ - 341, - 134, - 0, - 138, - 3, - "PARTICLE_MODULATION" - ] - ], - "groups": [ - { - "title": "Particle Emitter", - "bounding": [ - -1382, - 176, - 1812, - 1712 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Anim Diff", - "bounding": [ - 1805, - 127, - 914, - 1153 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load Video", - "bounding": [ - -4387, - 720, - 1209, - 816 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Ctrl Net", - "bounding": [ - -115, - -892, - 853, - 511 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Latent noise mask", - "bounding": [ - 2894, - 160, - 865, - 679 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample", - "bounding": [ - 3832, - 148, - 1263, - 753 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sample2", - "bounding": [ - 5151, - 151, - 1082, - 810 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Upscale", - "bounding": [ - 6285, - 158, - 1536, - 684 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Ipadapters", - "bounding": [ - 625, - 100, - 1036, - 1329 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Model", - "bounding": [ - -4320, - -116, - 1132, - 817 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Audio feature", - "bounding": [ - -4387, - 1561, - 1423, - 775 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.9849732675807893, - "offset": [ - 4914.051898096126, - -1281.0800310855693 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/audioreactive_live_portrait_depthflow.json b/examples/audioreactive_live_portrait_depthflow.json deleted file mode 100644 index ca24791..0000000 --- a/examples/audioreactive_live_portrait_depthflow.json +++ /dev/null @@ -1,3567 +0,0 @@ -{ - "last_node_id": 106, - "last_link_id": 103, - "nodes": [ - { - "id": 42, - "type": "BrightnessFeatureNode", - "pos": { - "0": -1937.0078125, - "1": 948.0409545898438 - }, - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 0, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "BrightnessFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "mean_brightness", - 30 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 43, - "type": "ColorFeatureNode", - "pos": { - "0": -1607.0078125, - "1": 948.0409545898438 - }, - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 1, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ColorFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "dominant_color", - 30 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 47, - "type": "ManualFeatureFromPipe", - "pos": { - "0": -1237.0078125, - "1": 538.0409545898438 - }, - "size": { - "0": 352.79998779296875, - "1": 150 - }, - "flags": {}, - "order": 2, - "mode": 4, - "inputs": [ - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ManualFeatureFromPipe", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "0,10,20", - "0.0,0.5,1.0", - 1, - "none" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 40, - "type": "TimeFeatureNode", - "pos": { - "0": -1597.0078125, - "1": 538.0409545898438 - }, - "size": { - "0": 262.2439880371094, - "1": 150 - }, - "flags": {}, - "order": 3, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "smooth", - 30, - 1, - 0 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 48, - "type": "AreaFeatureNode", - "pos": { - "0": -1207.0078125, - "1": 738.0409545898438 - }, - "size": { - "0": 317.4000244140625, - "1": 126 - }, - "flags": {}, - "order": 4, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "masks", - "type": "MASK", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AreaFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "total_area", - 30, - 0.5 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 46, - "type": "DepthFeatureNode", - "pos": { - "0": -1267.0078125, - "1": 938.0409545898438 - }, - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 5, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DepthFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "mean_depth", - 30 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 67, - "type": "PreviewFeature", - "pos": { - "0": 227, - "1": 420 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 59 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 60 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 44, - "type": "RhythmFeatureExtractor", - "pos": { - "0": -1610.4158935546875, - "1": 744.9609375 - }, - "size": { - "0": 352.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 6, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RhythmFeatureExtractor", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "beat_locations", - 30, - 4 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 45, - "type": "PitchFeatureExtractor", - "pos": { - "0": -1917.4158935546875, - "1": 1112.9609375 - }, - "size": { - "0": 344.3999938964844, - "1": 122 - }, - "flags": {}, - "order": 7, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - }, - { - "name": "opt_pitch_range_collections", - "type": "PITCH_RANGE_COLLECTION", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "PitchFeatureExtractor", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "frequency", - "medium" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 68, - "type": "PreviewImage", - "pos": { - "0": 746, - "1": 420 - }, - "size": { - "0": 198.45782470703125, - "1": 246 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 60 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 31, - "type": "DownloadOpenUnmixModel", - "pos": { - "0": -164, - "1": 619 - }, - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 23 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "umxl" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 32, - "type": "AudioSeparatorSimple", - "pos": { - "0": -164, - "1": 729 - }, - "size": { - "0": 336, - "1": 106 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 23 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 24 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 54, - 76 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 2 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 51, - 52 - ], - "shape": 3, - "slot_index": 4 - } - ], - "properties": { - "Node name for S&R": "AudioSeparatorSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 64, - "type": "PreviewAudio", - "pos": { - "0": -164, - "1": 1088 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 51 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - null - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 51, - "type": "PreviewImage", - "pos": { - "0": 738.1400146484375, - "1": 729 - }, - "size": { - "0": 206.3178253173828, - "1": 246 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 46 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 41, - "type": "ProximityFeatureNode", - "pos": { - "0": -1973.4158935546875, - "1": 781.9609375 - }, - "size": { - "0": 336, - "1": 122 - }, - "flags": {}, - "order": 9, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "anchor_locations", - "type": "LOCATION", - "link": null - }, - { - "name": "query_locations", - "type": "LOCATION", - "link": null - } - ], - "outputs": [ - { - "name": "proximity_feature", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ProximityFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 30, - "frame" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 38, - "type": "MIDILoadAndExtract", - "pos": { - "0": -1928.4158935546875, - "1": 144.96095275878906 - }, - "size": { - "0": 1020, - "1": 346 - }, - "flags": {}, - "order": 10, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MIDI", - "type": "MIDI", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "selectedNotes": [], - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "Velocity", - "prom_single_track.mid", - "all", - 30, - false, - "", - "upload", - "refresh" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 21, - "type": "AudioFeatureExtractorFirst", - "pos": { - "0": 227, - "1": 980 - }, - "size": { - "0": 394.79998779296875, - "1": 170 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 52 - } - ], - "outputs": [ - { - "name": "feature", - "type": "FEATURE", - "links": [ - 73 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 44 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractorFirst", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "amplitude_envelope", - 512, - 512, - 15 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 73, - "type": "FeatureRenormalize", - "pos": { - "0": 227, - "1": 1211 - }, - "size": { - "0": 310.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 73 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 74 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 72 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureRenormalize", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - -1, - 1, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 53, - "type": "Note", - "pos": { - "0": 227, - "1": 1387 - }, - "size": { - "0": 234.10646057128906, - "1": 70.32601165771484 - }, - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "audio feature from drums\nmanual feature for fun\nanother audio feature for the synth" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 39, - "type": "MotionFeatureNode", - "pos": { - "0": -1915, - "1": 542 - }, - "size": { - "0": 268.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 12, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "MotionFeatureNode", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "mean_motion", - 30, - "Farneback", - 0, - 0 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 81, - "type": "FeatureMixer", - "pos": { - "0": -2048.801513671875, - "1": 1448.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 13, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 82, - "type": "FeatureCombine", - "pos": { - "0": -1645.8013916015625, - "1": 1451.3726806640625 - }, - "size": { - "0": 380.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 14, - "mode": 4, - "inputs": [ - { - "name": "feature1", - "type": "FEATURE", - "link": null - }, - { - "name": "feature2", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureCombine", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "add", - 1, - 1, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 83, - "type": "FeatureOscillator", - "pos": { - "0": -1232.8013916015625, - "1": 1461.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 198 - }, - "flags": {}, - "order": 15, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureOscillator", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "sine", - 1, - 0.5, - 0, - 0.5, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 86, - "type": "FeatureMath", - "pos": { - "0": -1639.8013916015625, - "1": 1655.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 16, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMath", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - "add", - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 84, - "type": "FeatureScaler", - "pos": { - "0": -2049.801513671875, - "1": 1850.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 17, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureScaler", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "linear", - 0, - 1, - 2, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 85, - "type": "FeatureSmoothing", - "pos": { - "0": -1633.8013916015625, - "1": 1852.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 18, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "moving_average", - 5, - 0.3, - 1, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 87, - "type": "FeatureAccumulate", - "pos": { - "0": -1229.8013916015625, - "1": 1731.3726806640625 - }, - "size": { - "0": 367.79998779296875, - "1": 222 - }, - "flags": {}, - "order": 19, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureAccumulate", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - 1, - 0, - false, - false, - 0, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 88, - "type": "Note", - "pos": { - "0": -675, - "1": 1660 - }, - "size": { - "0": 343.6423645019531, - "1": 137.95391845703125 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "\n<--------here's some ways to manipulate features" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 56, - "type": "PreviewAudio", - "pos": { - "0": -152, - "1": 897 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 76 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - null - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 69, - "type": "PreviewImage", - "pos": { - "0": 746.20263671875, - "1": 1067 - }, - "size": { - "0": 198.2552032470703, - "1": 246 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 72 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 35, - "type": "Note", - "pos": { - "0": 1500, - "1": 1290 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate pupils with synth" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 36, - "type": "Note", - "pos": { - "0": 1870, - "1": 1290 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 22, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate roll with manual feature" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 65, - "type": "Note", - "pos": { - "0": 2250, - "1": 1290 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 23, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "modulate pitch with drums" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 79, - "type": "Note", - "pos": { - "0": 2688, - "1": 885 - }, - "size": { - "0": 393.7351989746094, - "1": 118.73271179199219 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "-relative: relative to the parameter value\n-absolute: relative to 0\n\n-the value for a parameter in a previous editor changes the starting position of that part of the expression\n\n-this means a parameter can be modulated multiple times\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 60, - "type": "Note", - "pos": { - "0": -630, - "1": 616 - }, - "size": { - "0": 343.6423645019531, - "1": 137.95391845703125 - }, - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "Audio is one of many feature sources, and they are interchangeable.\n\n<--------here's some other feature sources. \n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 59, - "type": "PreviewFeature", - "pos": { - "0": 244, - "1": 699 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 47 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 46 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 58, - "type": "ManualFeatureFromPipe", - "pos": { - "0": 234, - "1": 768 - }, - "size": { - "0": 352.79998779296875, - "1": 150 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 44 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 45, - 47 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ManualFeatureFromPipe", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "0", - "-1", - 1, - "ease_out" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 16, - "type": "VHS_LoadAudioUpload", - "pos": { - "0": -164, - "1": 420 - }, - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 24, - 30, - 48, - 84 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": { - "audio": "Spooky Scary Skeletons (Sped Up).mp3", - "start_time": 16.01, - "duration": 7, - "choose audio to upload": "image" - }, - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 22, - "type": "LoadImage", - "pos": { - "0": 1079, - "1": 420 - }, - "size": { - "0": 315, - "1": 314 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 17 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "exp_image.png", - "image" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 61, - "type": "PreviewAudio", - "pos": { - "0": -163, - "1": 285 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 48 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - null - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 15, - "type": "FlexExpressionEditor", - "pos": { - "0": 1430, - "1": 420 - }, - "size": { - "0": 338.77764892578125, - "1": 816.7449340820312 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "src_image", - "type": "IMAGE", - "link": 17, - "shape": 7 - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null, - "shape": 7 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": null, - "shape": 7 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 74, - "shape": 7 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "links": [ - 18 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3, - "slot_index": 2 - }, - { - "name": "command", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexExpressionEditor", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - 0, - 0, - 0, - 0, - 0, - -14.5, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, - 0, - "pupil_x", - "relative" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 28, - "type": "FlexExpressionEditor", - "pos": { - "0": 1830, - "1": 420 - }, - "size": { - "0": 336, - "1": 806 - }, - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "src_image", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null, - "shape": 7 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": 18, - "shape": 7 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 45, - "shape": 7 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "links": [ - 49 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3 - }, - { - "name": "command", - "type": "STRING", - "links": [ - 77 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "FlexExpressionEditor", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - 0, - 15, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, - 0, - "rotate_roll", - "relative" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 62, - "type": "FlexExpressionEditor", - "pos": { - "0": 2210, - "1": 419 - }, - "size": { - "0": 336, - "1": 806 - }, - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "src_image", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "sample_image", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "add_exp", - "type": "EXP_DATA", - "link": null, - "shape": 7 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "link": 49, - "shape": 7 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 55, - "shape": 7 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "flex_motion_link", - "type": "EDITOR_LINK", - "links": [ - 71 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "save_exp", - "type": "EXP_DATA", - "links": null, - "shape": 3, - "slot_index": 2 - }, - { - "name": "command", - "type": "STRING", - "links": [], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "FlexExpressionEditor", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - "OnlyExpression", - 1.7, - 1, - 0, - "rotate_pitch", - "relative" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 90, - "type": "DownloadAndLoadDepthCrafterModel", - "pos": { - "0": 3357.42626953125, - "1": 330.4696044921875 - }, - "size": { - "0": 308.93145751953125, - "1": 82 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "depthcrafter_model", - "type": "DEPTHCRAFTER_MODEL", - "links": [ - 78 - ] - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadDepthCrafterModel", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - true, - false - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 27, - "type": "VHS_VideoCombine", - "pos": { - "0": 2945, - "1": 280 - }, - "size": [ - 253.4889678955078, - 553.4889678955078 - ], - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 16, - "shape": 7 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 30, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - }, - { - "name": "filename_prefix", - "type": "STRING", - "link": 85, - "widget": { - "name": "filename_prefix" - } - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AdvancedLivePortrait", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "241106144130_00001-audio.mp4", - "subfolder": "241106/AdvancedLivePortrait", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - }, - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 89, - "type": "DepthCrafter", - "pos": { - "0": 3327.42626953125, - "1": 466.4696044921875 - }, - "size": { - "0": 367.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "depthcrafter_model", - "type": "DEPTHCRAFTER_MODEL", - "link": 78 - }, - { - "name": "images", - "type": "IMAGE", - "link": 79 - } - ], - "outputs": [ - { - "name": "depth_maps", - "type": "IMAGE", - "links": [ - 87, - 95 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthCrafter", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 768, - 10, - 1.2, - 110, - 25 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 97, - "type": "Image To Mask", - "pos": { - "0": 3838.6787109375, - "1": 498.88232421875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 95 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 96 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Image To Mask", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "intensity" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 24, - "type": "AdvancedLivePortrait", - "pos": { - "0": 2680, - "1": 360 - }, - "size": { - "0": 235.1999969482422, - "1": 474.2106018066406 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "src_images", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "motion_link", - "type": "EDITOR_LINK", - "link": 71, - "shape": 7 - }, - { - "name": "driving_images", - "type": "IMAGE", - "link": null, - "shape": 7 - }, - { - "name": "command", - "type": "STRING", - "link": 77, - "widget": { - "name": "command" - } - } - ], - "outputs": [ - { - "name": "images", - "type": "IMAGE", - "links": [ - 16, - 79, - 81, - 98 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AdvancedLivePortrait", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - 0, - 1.7000000000000002, - "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0", - false, - true, - "1 = 1:10\n2 = 5:10\n0 = 2:50\n1 = 2:0" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 63, - "type": "AudioFeatureExtractorFirst", - "pos": { - "0": 227, - "1": 420 - }, - "size": { - "0": 394.79998779296875, - "1": 170 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 54 - } - ], - "outputs": [ - { - "name": "feature", - "type": "FEATURE", - "links": [ - 55, - 59, - 100, - 103 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractorFirst", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "amplitude_envelope", - 512, - 512, - 15 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 104, - "type": "DepthflowMotionSetTarget", - "pos": { - "0": 4325.931640625, - "1": 744.1055908203125 - }, - "size": [ - 264.1174546221373, - 198 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null, - "shape": 7 - }, - { - "name": "motion", - "type": "DEPTHFLOW_MOTION", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "DEPTHFLOW_MOTION", - "type": "DEPTHFLOW_MOTION", - "links": [ - 101 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthflowMotionSetTarget", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1, - 0, - "value", - "relative", - "Focus", - 0.5 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 105, - "type": "DepthflowMotionSetTarget", - "pos": { - "0": 4322.931640625, - "1": 996.1051025390625 - }, - "size": { - "0": 264.1174621582031, - "1": 198 - }, - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 103, - "shape": 7 - }, - { - "name": "motion", - "type": "DEPTHFLOW_MOTION", - "link": 101, - "shape": 7 - } - ], - "outputs": [ - { - "name": "DEPTHFLOW_MOTION", - "type": "DEPTHFLOW_MOTION", - "links": [ - 102 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthflowMotionSetTarget", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 2.5, - 0, - "value", - "relative", - "Dolly", - 1 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 102, - "type": "DilateErodeMask", - "pos": { - "0": 3792.6787109375, - "1": 624.88232421875 - }, - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 96 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 97 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DilateErodeMask", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 5, - "circle" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 99, - "type": "MaskToImage", - "pos": { - "0": 3855.6787109375, - "1": 771.88232421875 - }, - "size": { - "0": 176.39999389648438, - "1": 26 - }, - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 97 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 91, - 92 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 100, - "type": "PreviewImage", - "pos": { - "0": 3845.6787109375, - "1": 870.88232421875 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 91 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 95, - "type": "PreviewImage", - "pos": { - "0": 3397, - "1": 748 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 87 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 103, - "type": "BatchCount+", - "pos": { - "0": 3396, - "1": 142 - }, - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "batch", - "type": "*", - "link": 98 - } - ], - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 99 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "BatchCount+", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 94, - "type": "FileNamePrefixDateDirFirst", - "pos": { - "0": 2880, - "1": -18 - }, - "size": { - "0": 327.6000061035156, - "1": 130 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "filename_prefix", - "type": "STRING", - "links": [ - 85, - 86 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FileNamePrefixDateDirFirst", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "true", - "true", - "AdvancedLivePortrait", - "" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 91, - "type": "Depthflow", - "pos": { - "0": 4286, - "1": 316 - }, - "size": [ - 315, - 286 - ], - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 81 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 92 - }, - { - "name": "motion", - "type": "DEPTHFLOW_MOTION", - "link": 102 - }, - { - "name": "effects", - "type": "DEPTHFLOW_EFFECTS", - "link": null, - "shape": 7 - }, - { - "name": "num_frames", - "type": "INT", - "link": 99, - "widget": { - "name": "num_frames" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 83 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Depthflow", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1, - 15, - 15, - 30, - 50, - 2, - 0, - "mirror" - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 93, - "type": "VHS_VideoCombine", - "pos": { - "0": 4667, - "1": 319 - }, - "size": [ - 450.2064208984375, - 750.2064208984375 - ], - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 83, - "shape": 7 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 84, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - }, - { - "name": "filename_prefix", - "type": "STRING", - "link": 86, - "widget": { - "name": "filename_prefix" - } - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AdvancedLivePortrait", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "241106144130_00012-audio.mp4", - "subfolder": "241106/AdvancedLivePortrait", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - }, - "color": "#2a363b", - "bgcolor": "#3f5159" - }, - { - "id": 92, - "type": "DepthflowMotionPresetDolly", - "pos": { - "0": 4324, - "1": 1350 - }, - "size": [ - 270.4984918509772, - 250 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 100, - "shape": 7 - } - ], - "outputs": [ - { - "name": "DEPTHFLOW_MOTION", - "type": "DEPTHFLOW_MOTION", - "links": [] - } - ], - "properties": { - "Node name for S&R": "DepthflowMotionPresetDolly", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1, - 0, - "intensity", - "relative", - 2.05, - false, - false, - false, - 0.5 - ], - "color": "#2a363b", - "bgcolor": "#3f5159" - } - ], - "links": [ - [ - 16, - 24, - 0, - 27, - 0, - "IMAGE" - ], - [ - 17, - 22, - 0, - 15, - 0, - "IMAGE" - ], - [ - 18, - 15, - 1, - 28, - 3, - "EDITOR_LINK" - ], - [ - 23, - 31, - 0, - 32, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 24, - 16, - 0, - 32, - 1, - "AUDIO" - ], - [ - 30, - 16, - 0, - 27, - 1, - "AUDIO" - ], - [ - 44, - 21, - 1, - 58, - 0, - "FEATURE_PIPE" - ], - [ - 45, - 58, - 0, - 28, - 4, - "FEATURE" - ], - [ - 46, - 59, - 0, - 51, - 0, - "IMAGE" - ], - [ - 47, - 58, - 0, - 59, - 0, - "FEATURE" - ], - [ - 48, - 16, - 0, - 61, - 0, - "AUDIO" - ], - [ - 49, - 28, - 1, - 62, - 3, - "EDITOR_LINK" - ], - [ - 51, - 32, - 4, - 64, - 0, - "AUDIO" - ], - [ - 52, - 32, - 4, - 21, - 0, - "AUDIO" - ], - [ - 54, - 32, - 1, - 63, - 0, - "AUDIO" - ], - [ - 55, - 63, - 0, - 62, - 4, - "FEATURE" - ], - [ - 59, - 63, - 0, - 67, - 0, - "FEATURE" - ], - [ - 60, - 67, - 0, - 68, - 0, - "IMAGE" - ], - [ - 71, - 62, - 1, - 24, - 1, - "EDITOR_LINK" - ], - [ - 72, - 73, - 1, - 69, - 0, - "IMAGE" - ], - [ - 73, - 21, - 0, - 73, - 0, - "FEATURE" - ], - [ - 74, - 73, - 0, - 15, - 4, - "FEATURE" - ], - [ - 76, - 32, - 1, - 56, - 0, - "AUDIO" - ], - [ - 77, - 28, - 3, - 24, - 3, - "STRING" - ], - [ - 78, - 90, - 0, - 89, - 0, - "DEPTHCRAFTER_MODEL" - ], - [ - 79, - 24, - 0, - 89, - 1, - "IMAGE" - ], - [ - 81, - 24, - 0, - 91, - 0, - "IMAGE" - ], - [ - 83, - 91, - 0, - 93, - 0, - "IMAGE" - ], - [ - 84, - 16, - 0, - 93, - 1, - "AUDIO" - ], - [ - 85, - 94, - 0, - 27, - 4, - "STRING" - ], - [ - 86, - 94, - 0, - 93, - 4, - "STRING" - ], - [ - 87, - 89, - 0, - 95, - 0, - "IMAGE" - ], - [ - 91, - 99, - 0, - 100, - 0, - "IMAGE" - ], - [ - 92, - 99, - 0, - 91, - 1, - "IMAGE" - ], - [ - 95, - 89, - 0, - 97, - 0, - "IMAGE" - ], - [ - 96, - 97, - 0, - 102, - 0, - "MASK" - ], - [ - 97, - 102, - 0, - 99, - 0, - "MASK" - ], - [ - 98, - 24, - 0, - 103, - 0, - "*" - ], - [ - 99, - 103, - 0, - 91, - 4, - "INT" - ], - [ - 100, - 63, - 0, - 92, - 0, - "FEATURE" - ], - [ - 101, - 104, - 0, - 105, - 1, - "DEPTHFLOW_MOTION" - ], - [ - 102, - 105, - 0, - 91, - 2, - "DEPTHFLOW_MOTION" - ], - [ - 103, - 63, - 0, - 105, - 0, - "FEATURE" - ] - ], - "groups": [ - { - "title": "Create Depthmap", - "bounding": [ - 3307, - 246, - 408, - 414 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Dilate Mask (fix edges)", - "bounding": [ - 3773, - 415, - 355, - 722 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": ":)", - "bounding": [ - -2768, - -53, - 1989, - 1400 - ], - "color": "#3f789e", - "font_size": 1000, - "flags": {} - }, - { - "title": "Feature Manipulation", - "bounding": [ - -2092, - 1352, - 1315, - 699 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Dolly Zoom Feature", - "bounding": [ - 4302, - 660, - 307, - 554 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.32349184307614853, - "offset": [ - -656.71486786166, - 590.7996280570777 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/blood_buubbles.json b/examples/blood_buubbles_version2.json similarity index 75% rename from examples/blood_buubbles.json rename to examples/blood_buubbles_version2.json index a85792c..d98ecf6 100644 --- a/examples/blood_buubbles.json +++ b/examples/blood_buubbles_version2.json @@ -1,44 +1,48 @@ { - "last_node_id": 193, - "last_link_id": 319, + "last_node_id": 213, + "last_link_id": 359, "nodes": [ { "id": 11, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 2902.5702592773905, - 566.8767742985053 + 2902.5703125, + 566.8767700195312 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 32, + "order": 36, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 16, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": 17, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -55,6 +59,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -64,8 +74,8 @@ "links": [ 13 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -82,24 +92,24 @@ "comfy", 0, 0, - false, - "" + false ] }, { "id": 12, "type": "ADE_SigmaSchedule", "pos": [ - 2566.9247535405552, - 581.4959996318397 + 2566.9248046875, + 581.4959716796875 + ], + "size": [ + 244.73928833007812, + 58 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, "order": 0, "mode": 0, + "inputs": [], "outputs": [ { "name": "SIGMA_SCHEDULE", @@ -107,8 +117,8 @@ "links": [ 17 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Sigma Schedule 🎭🅐🅓", @@ -128,13 +138,13 @@ "id": 13, "type": "ADE_MultivalDynamic", "pos": [ - 2556.9247535405552, - 231.49599963183962 + 2556.9248046875, + 231.49600219726562 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 1, "mode": 0, @@ -142,7 +152,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -152,8 +163,8 @@ "links": [ 14 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -166,21 +177,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 14, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 2902.5702592773905, - 256.8767742985048 + 2902.5703125, + 256.87677001953125 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 2, "mode": 0, @@ -188,12 +198,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -203,8 +215,8 @@ "links": [ 10 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -233,13 +245,13 @@ "id": 15, "type": "ADE_MultivalDynamic", "pos": [ - 2556.9247535405552, - 121.49599963183998 + 2556.9248046875, + 121.49600219726562 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 3, "mode": 0, @@ -247,7 +259,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -270,21 +283,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 16, "type": "ADE_CustomCFGSimple", "pos": [ - 2556.9247535405552, - 331.4959996318394 + 2556.9248046875, + 331.4960021972656 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 4, "mode": 0, @@ -292,7 +304,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -314,38 +327,39 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 17, "type": "ADE_AnimateDiffSettings", "pos": [ - 2586.9247535405552, - 681.4959996318403 + 2586.9248046875, + 681.4959716796875 + ], + "size": [ + 226.8000030517578, + 54 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, "flags": { "collapsed": true }, - "order": 33, + "order": 37, "mode": 0, "inputs": [ { "name": "pe_adjust", "type": "PE_ADJUST", "link": 18, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "weight_adjust", "type": "WEIGHT_ADJUST", "link": 19, - "slot_index": 1 + "slot_index": 1, + "shape": 7 } ], "outputs": [ @@ -366,21 +380,19 @@ "groupcolor": "#3f789e" } }, - "widgets_values": [ - "" - ] + "widgets_values": [] }, { "id": 18, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 2556.9247535405552, - 431.49599963184 + 2556.9248046875, + 431.4960021972656 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 5, "mode": 0, @@ -388,7 +400,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -412,21 +425,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 20, "type": "ADE_AnimateDiffLoRALoader", "pos": [ - 2573.9247535405557, - -164.5040003681618 + 2573.9248046875, + -164.50399780273438 + ], + "size": [ + 261.19134521484375, + 82 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, "flags": {}, "order": 6, "mode": 0, @@ -434,7 +446,8 @@ { "name": "prev_motion_lora", "type": "MOTION_LORA", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -444,8 +457,8 @@ "links": [ 11 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "AnimateDiff LoRA", @@ -459,21 +472,20 @@ }, "widgets_values": [ "LiquidAF-0-1.safetensors", - 0.8, - "" + 0.8 ] }, { "id": 19, "type": "ADE_AdjustWeightAllMult", "pos": [ - 2568.9247535405552, - -31.504000368160426 + 2568.9248046875, + -31.503999710083008 + ], + "size": [ + 270.3999938964844, + 82 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, "order": 7, "mode": 0, @@ -481,7 +493,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -504,8 +517,7 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { @@ -515,12 +527,12 @@ -5100, 1270 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 67, + "order": 72, "mode": 4, "inputs": [ { @@ -537,25 +549,25 @@ "shape": 3 }, { - "name": "768 width", + "name": "width", "type": "INT", "links": [ 31 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "460 height", + "name": "height", "type": "INT", "links": [ 32 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "1 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -563,7 +575,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 29, @@ -574,10 +587,10 @@ ], "size": [ 315, - 501.4609375 + 334 ], "flags": {}, - "order": 84, + "order": 91, "mode": 4, "inputs": [ { @@ -588,17 +601,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -620,6 +636,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -639,15 +656,15 @@ "id": 34, "type": "ModelSamplingDiscrete", "pos": [ - 2885.94512355919, - -172.62140968188677 + 2885.945068359375, + -172.6214141845703 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 93, + "order": 100, "mode": 0, "inputs": [ { @@ -664,8 +681,8 @@ 37, 180 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -683,13 +700,14 @@ -4400, 80 ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, + "size": [ + 361.20001220703125, + 58 + ], "flags": {}, "order": 8, "mode": 4, + "inputs": [], "outputs": [ { "name": "GROUNDING_DINO_MODEL", @@ -697,8 +715,8 @@ "links": [ 46 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -712,15 +730,15 @@ "id": 10, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 2902.5702592773905, - -43.123225701493766 + 2902.5703125, + -43.123226165771484 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 88, + "order": 95, "mode": 0, "inputs": [ { @@ -733,47 +751,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 10, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 11, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": 12, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 13, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 14, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 15, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -783,8 +809,8 @@ "links": [ 36 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -807,12 +833,12 @@ 4129, -213 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 104, + "order": 111, "mode": 0, "inputs": [ { @@ -838,7 +864,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 39, @@ -847,13 +874,15 @@ -4730, -50 ], - "size": { - "0": 210, - "1": 58 - }, + "size": [ + 210, + 58 + ], "flags": {}, "order": 9, "mode": 4, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -867,15 +896,15 @@ "id": 107, "type": "VHS_VideoCombine", "pos": [ - 6454.090864701701, - -2242.4548117897752 + 7074.869140625, + -2284.9140625 ], "size": [ - 210, - 439 + 214.7587890625, + 465.6667785644531 ], "flags": {}, - "order": 94, + "order": 101, "mode": 0, "inputs": [ { @@ -885,18 +914,21 @@ }, { "name": "audio", - "type": "*", - "link": 173 + "type": "AUDIO", + "link": 173, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -918,113 +950,36 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07568-audio.mp4", + "filename": "AnimateDiff_02351-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02351.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02351-audio.mp4" }, "muted": false } } }, { - "id": 106, - "type": "VHS_VideoCombine", + "id": 96, + "type": "GetNode", "pos": [ - 5404.090864701701, - -1872.4548117897748 + 4904.869140625, + -2534.914306640625 ], "size": [ 210, - 439 - ], - "flags": {}, - "order": 81, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 166 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "slot_index": 3 - } + 58 ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07567.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 96, - "type": "GetNode", - "pos": { - "0": 4284.0908203125, - "1": -2492.455078125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, "order": 10, "mode": 0, @@ -1052,12 +1007,12 @@ 5830, -100 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 110, + "order": 117, "mode": 0, "inputs": [ { @@ -1083,27 +1038,20 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 85, "type": "GetNode", - "pos": { - "0": 4284, - "1": -330, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 4284, + -330 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 11, "mode": 0, @@ -1128,15 +1076,15 @@ "id": 24, "type": "GetImageSizeAndCount", "pos": [ - 4332.939493202866, - -145.26789521342766 + 4332.939453125, + -145.2678985595703 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 106, + "order": 113, "mode": 0, "inputs": [ { @@ -1152,24 +1100,24 @@ "links": [ 21 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "768 width", + "name": "width", "type": "INT", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "464 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "90 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -1177,47 +1125,53 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 109, "type": "ParticleEmitter", "pos": [ - 4244.090864701702, - -1662.4548117897746 + 4864.869140625, + -1704.9140625 + ], + "size": [ + 468.5999755859375, + 402 ], - "size": { - "0": 468.5999755859375, - "1": 402 - }, "flags": {}, - "order": 59, + "order": 63, "mode": 0, "inputs": [ { "name": "previous_emitter", "type": "PARTICLE_EMITTER", - "link": null + "link": null, + "shape": 7 }, { "name": "emitter_movement", "type": "EMITTER_MOVEMENT", - "link": null + "link": null, + "shape": 7 }, { "name": "spring_joint_setting", "type": "SPRING_JOINT_SETTING", - "link": null + "link": null, + "shape": 7 }, { "name": "particle_modulation", "type": "PARTICLE_MODULATION", - "link": null + "link": null, + "shape": 7 }, { "name": "emitter_modulation", "type": "EMITTER_MODULATION", - "link": 172 + "link": 172, + "shape": 7 } ], "outputs": [ @@ -1227,8 +1181,8 @@ "links": [ 162 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1253,15 +1207,15 @@ "id": 140, "type": "VHS_VideoCombine", "pos": [ - 6564.090864701701, - -1542.4548117897746 + 7184.869140625, + -1584.9140625 ], "size": [ - 210, - 439 + 214.7587890625, + 465.6667785644531 ], "flags": {}, - "order": 100, + "order": 107, "mode": 0, "inputs": [ { @@ -1271,19 +1225,22 @@ }, { "name": "audio", - "type": "*", - "link": 231 + "type": "AUDIO", + "link": 231, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", "link": null, - "slot_index": 3 + "slot_index": 3, + "shape": 7 } ], "outputs": [ @@ -1305,17 +1262,20 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07569-audio.mp4", + "filename": "AnimateDiff_02345-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02345.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02345-audio.mp4" }, "muted": false } @@ -1328,12 +1288,12 @@ -4290, 470 ], - "size": { - "0": 210, - "1": 26 - }, + "size": [ + 210, + 26 + ], "flags": {}, - "order": 90, + "order": 97, "mode": 4, "inputs": [ { @@ -1349,33 +1309,26 @@ "links": [ 51 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "MaskToImage" - } + }, + "widgets_values": [] }, { "id": 127, "type": "GetNode", - "pos": { - "0": 6000, - "1": -200, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 6000, + -200 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 12, "mode": 0, @@ -1401,26 +1354,28 @@ "id": 139, "type": "EmitterEmissionRateModulation", "pos": [ - 3764.090864701702, - -972.4548117897748 + 4384.86865234375, + -1014.9136962890625 + ], + "size": [ + 420, + 222 ], - "size": { - "0": 420, - "1": 222 - }, "flags": {}, - "order": 45, + "order": 44, "mode": 0, "inputs": [ { "name": "previous_modulation", "type": "EMITTER_MODULATION", - "link": null + "link": null, + "shape": 7 }, { "name": "feature", "type": "FEATURE", - "link": 205 + "link": 205, + "shape": 7 } ], "outputs": [ @@ -1430,8 +1385,8 @@ "links": [ 206 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1451,15 +1406,15 @@ "id": 7, "type": "CLIPTextEncode", "pos": [ - 761.812684642982, - 407.93920696064566 + 761.8126831054688, + 407.939208984375 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, "flags": {}, - "order": 56, + "order": 61, "mode": 0, "inputs": [ { @@ -1488,22 +1443,14 @@ { "id": 155, "type": "GetNode", - "pos": { - "0": 5904.08935546875, - "1": -1412.454833984375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 6524.86767578125, + -1454.9140625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 13, "mode": 0, @@ -1528,13 +1475,13 @@ "id": 38, "type": "CR Apply LoRA Stack", "pos": [ - 327.81268464298216, - 358.93920696064566 + 327.81268310546875, + 358.939208984375 + ], + "size": [ + 254.40000915527344, + 66 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, "flags": {}, "order": 41, "mode": 0, @@ -1562,8 +1509,8 @@ "links": [ 77 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CLIP", @@ -1572,8 +1519,8 @@ 257, 258 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "show_help", @@ -1584,27 +1531,28 @@ ], "properties": { "Node name for S&R": "CR Apply LoRA Stack" - } + }, + "widgets_values": [] }, { "id": 55, "type": "GetImageSizeAndCount", "pos": [ - 508.4575154163309, - -763.0233589876258 + 579.0004272460938, + -739.0653076171875 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 92, + "order": 99, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 259 + "link": 324 } ], "outputs": [ @@ -1615,54 +1563,55 @@ 69, 146 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "768 width", "type": "INT", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "464 height", "type": "INT", "links": [], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "90 count", + "name": "60 count", "type": "INT", "links": [], - "shape": 3, - "slot_index": 3 + "slot_index": 3, + "shape": 3 } ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 177, "type": "GetImageSizeAndCount", "pos": [ - -239.5424845836691, - -816.0233589876258 + -168.99948120117188, + -792.0653686523438 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 78, + "order": 85, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 265 + "link": 333 } ], "outputs": [ @@ -1670,10 +1619,10 @@ "name": "image", "type": "IMAGE", "links": [ - 256 + 323 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "768 width", @@ -1696,68 +1645,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 179, - "type": "Make Image Batch", - "pos": [ - -639.5424845836687, - -772.0233589876258 - ], - "size": { - "0": 210, - "1": 126 }, - "flags": {}, - "order": 69, - "mode": 0, - "inputs": [ - { - "name": "image1", - "type": "IMAGE", - "link": 297 - }, - { - "name": "image2", - "type": "IMAGE", - "link": 262 - }, - { - "name": "image3", - "type": "IMAGE", - "link": 298 - }, - { - "name": "image4", - "type": "IMAGE", - "link": null - }, - { - "name": "image5", - "type": "IMAGE", - "link": null - }, - { - "name": "image6", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 265 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Make Image Batch" - } + "widgets_values": [] }, { "id": 151, @@ -1766,12 +1655,12 @@ -1281, -1822 ], - "size": { - "0": 315, - "1": 76 - }, + "size": [ + 315, + 76 + ], "flags": {}, - "order": 37, + "order": 53, "mode": 0, "inputs": [ { @@ -1780,6 +1669,7 @@ "link": 227 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewAudio" }, @@ -1790,22 +1680,14 @@ { "id": 182, "type": "GetNode", - "pos": { - "0": 5128.25390625, - "1": 720.1207275390625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 5128.25390625, + 720.1207275390625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 14, "mode": 0, @@ -1830,15 +1712,15 @@ "id": 184, "type": "GetImageSizeAndCount", "pos": [ - 5481.252367295645, - 550.1208414082304 + 5481.25244140625, + 550.120849609375 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 113, + "order": 120, "mode": 0, "inputs": [ { @@ -1854,29 +1736,29 @@ "links": [ 291 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "1280 width", + "name": "width", "type": "INT", "links": [ 279 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "776 height", + "name": "height", "type": "INT", "links": [ 278 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "90 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -1884,21 +1766,22 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 185, "type": "ImageScale", "pos": [ - 5411.252367295645, - 701.1208414082304 + 5411.25244140625, + 701.120849609375 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 114, + "order": 121, "mode": 0, "inputs": [ { @@ -1930,8 +1813,8 @@ "links": [ 292 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1948,8 +1831,8 @@ "id": 189, "type": "Reroute", "pos": [ - -1014.2945885412466, - -851.2465063881074 + -943.7515258789062, + -827.2885131835938 ], "size": [ 75, @@ -1970,9 +1853,9 @@ "name": "", "type": "IMAGE", "links": [ - 297, - 298, - 299 + 299, + 330, + 332 ], "slot_index": 0 } @@ -1986,15 +1869,15 @@ "id": 178, "type": "ReverseImageBatch", "pos": [ - -969.542484583669, - -708.0233589876262 + -898.9994506835938, + -684.0653076171875 + ], + "size": [ + 210, + 26 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 53, + "order": 58, "mode": 0, "inputs": [ { @@ -2008,29 +1891,30 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 262 + 331 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "ReverseImageBatch" - } + }, + "widgets_values": [] }, { "id": 70, "type": "PreviewAudio", "pos": [ - -1330.646235329856, - -2350.152563700022 + -1330.646240234375, + -2350.152587890625 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 35, + "order": 51, "mode": 0, "inputs": [ { @@ -2039,6 +1923,7 @@ "link": 95 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewAudio" }, @@ -2049,30 +1934,22 @@ { "id": 132, "type": "SetNode", - "pos": { - "0": 305, - "1": -2381, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 305, + -2381 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 63, + "order": 15, "mode": 0, "inputs": [ { "name": "FEATURE_PIPE", "type": "FEATURE_PIPE", - "link": 196 + "link": null } ], "outputs": [ @@ -2091,137 +1968,24 @@ ] }, { - "id": 108, - "type": "GetNode", - "pos": { - "0": 5022.08935546875, - "1": -2389.455078125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 112, + "type": "SetNode", + "pos": [ + 775, + -1862 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 15, + "order": 89, "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 223 - ], - "slot_index": 0 - } - ], - "title": "Get_depth", - "properties": {}, - "widgets_values": [ - "depth" - ] - }, - { - "id": 168, - "type": "Reroute", - "pos": [ - -708, - -1923 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 240, - "widget": { - "name": "value" - } - } - ], - "outputs": [ - { - "name": "", - "type": "INT", - "links": [ - 242, - 244, - 251 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 88, - "type": "PreviewImage", - "pos": [ - 762, - -2188 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 83, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 140 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 112, - "type": "SetNode", - "pos": { - "0": 775, - "1": -1862, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 82, - "mode": 0, - "inputs": [ + "inputs": [ { "name": "FEATURE", "type": "FEATURE", - "link": 168 + "link": 345 } ], "outputs": [ @@ -2246,10 +2010,10 @@ -5150, 690 ], - "size": { - "0": 315, - "1": 106 - }, + "size": [ + 315, + 106 + ], "flags": {}, "order": 38, "mode": 4, @@ -2267,8 +2031,8 @@ "links": [ 29 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2287,10 +2051,10 @@ -5180, 880 ], - "size": { - "0": 315, - "1": 154 - }, + "size": [ + 315, + 154 + ], "flags": {}, "order": 51, "mode": 4, @@ -2308,8 +2072,8 @@ "links": [ 30 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2324,159 +2088,18 @@ ] }, { - "id": 171, - "type": "DF_Int_to_Float", - "pos": [ - -563, - -1436 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 64, - "mode": 0, - "inputs": [ - { - "name": "Value", - "type": "INT", - "link": 242, - "widget": { - "name": "Value" - } - } - ], - "outputs": [ - { - "name": "FLOAT", - "type": "FLOAT", - "links": [ - 243 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DF_Int_to_Float" - }, - "widgets_values": [ - 1 - ] - }, - { - "id": 172, - "type": "DF_Int_to_Float", - "pos": [ - -327.65543667495604, - -614.7675435348675 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 65, - "mode": 0, - "inputs": [ - { - "name": "Value", - "type": "INT", - "link": 244, - "widget": { - "name": "Value" - } - } - ], - "outputs": [ - { - "name": "FLOAT", - "type": "FLOAT", - "links": [ - 245 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DF_Int_to_Float" - }, - "widgets_values": [ - 1 - ] - }, - { - "id": 164, - "type": "ImageInterval", + "id": 98, + "type": "SetNode", "pos": [ - 110.34456332504392, - -815.7675435348675 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 256 - }, - { - "name": "end_at", - "type": "FLOAT", - "link": 245, - "widget": { - "name": "end_at" - } - } + 642.8876342773438, + -876.8094482421875 ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 259 - ], - "shape": 3, - "slot_index": 0 - } + "size": [ + 210, + 58 ], - "properties": { - "Node name for S&R": "ImageInterval" - }, - "widgets_values": [ - 1, - 0, - 0 - ] - }, - { - "id": 98, - "type": "SetNode", - "pos": { - "0": 572.3446044921875, - "1": -900.7674560546875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 99, + "order": 106, "mode": 0, "inputs": [ { @@ -2498,7 +2121,9 @@ }, "widgets_values": [ "init_img" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 35, @@ -2507,12 +2132,12 @@ 596, 1 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 98, + "order": 105, "mode": 0, "inputs": [ { @@ -2533,53 +2158,59 @@ "links": [ 84 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "VAEEncode" - } + }, + "widgets_values": [] }, { "id": 137, "type": "ParticleEmitter", "pos": [ - 4232, - -1086 + 4852.7783203125, + -1128.459228515625 + ], + "size": [ + 468.5999755859375, + 402 ], - "size": { - "0": 468.5999755859375, - "1": 402 - }, "flags": {}, - "order": 60, + "order": 64, "mode": 0, "inputs": [ { "name": "previous_emitter", "type": "PARTICLE_EMITTER", - "link": null + "link": null, + "shape": 7 }, { "name": "emitter_movement", "type": "EMITTER_MOVEMENT", - "link": null + "link": null, + "shape": 7 }, { "name": "spring_joint_setting", "type": "SPRING_JOINT_SETTING", - "link": null + "link": null, + "shape": 7 }, { "name": "particle_modulation", "type": "PARTICLE_MODULATION", - "link": null + "link": null, + "shape": 7 }, { "name": "emitter_modulation", "type": "EMITTER_MODULATION", - "link": 206 + "link": 206, + "shape": 7 } ], "outputs": [ @@ -2589,8 +2220,8 @@ "links": [ 204 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2615,15 +2246,15 @@ "id": 110, "type": "ParticleEmissionMask", "pos": [ - 4934.090864701701, - -1682.4548117897746 + 5554.869140625, + -1724.9140625 + ], + "size": [ + 336, + 474 ], - "size": { - "0": 336, - "1": 474 - }, "flags": {}, - "order": 73, + "order": 78, "mode": 0, "inputs": [ { @@ -2640,17 +2271,20 @@ { "name": "vortices", "type": "VORTEX", - "link": null + "link": null, + "shape": 7 }, { "name": "wells", "type": "GRAVITY_WELL", - "link": null + "link": null, + "shape": 7 }, { "name": "static_bodies", "type": "STATIC_BODY", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2660,8 +2294,8 @@ "links": [ 163 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "IMAGE", @@ -2669,8 +2303,8 @@ "links": [ 166 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -2698,15 +2332,15 @@ "id": 138, "type": "ParticleEmissionMask", "pos": [ - 4939, - -1157 + 5559.7783203125, + -1199.459228515625 + ], + "size": [ + 336, + 474 ], - "size": { - "0": 336, - "1": 474 - }, "flags": {}, - "order": 74, + "order": 79, "mode": 0, "inputs": [ { @@ -2723,17 +2357,20 @@ { "name": "vortices", "type": "VORTEX", - "link": null + "link": null, + "shape": 7 }, { "name": "wells", "type": "GRAVITY_WELL", - "link": null + "link": null, + "shape": 7 }, { "name": "static_bodies", "type": "STATIC_BODY", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2743,15 +2380,15 @@ "links": [ 209 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "IMAGE", "type": "IMAGE", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -2779,15 +2416,15 @@ "id": 59, "type": "DifferentialDiffusion", "pos": [ - 1921.431109281862, - 427.56038255714316 + 1921.43115234375, + 427.5603942871094 + ], + "size": [ + 184.8000030517578, + 26 ], - "size": { - "0": 184.8000030517578, - "1": 26 - }, "flags": {}, - "order": 79, + "order": 86, "mode": 0, "inputs": [ { @@ -2803,13 +2440,14 @@ "links": [ 81 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "DifferentialDiffusion" - } + }, + "widgets_values": [] }, { "id": 183, @@ -2823,7 +2461,7 @@ 26 ], "flags": {}, - "order": 61, + "order": 65, "mode": 0, "inputs": [ { @@ -2855,12 +2493,12 @@ 6004, 29 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 111, + "order": 118, "mode": 0, "inputs": [ { @@ -2877,24 +2515,24 @@ 186, 275 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "1280 width", + "name": "width", "type": "INT", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "776 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "90 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -2902,7 +2540,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 186, @@ -2911,12 +2550,12 @@ 5806, 774 ], - "size": { - "0": 315, - "1": 146 - }, + "size": [ + 315, + 146 + ], "flags": {}, - "order": 115, + "order": 122, "mode": 0, "inputs": [ { @@ -2932,7 +2571,8 @@ { "name": "mask", "type": "MASK", - "link": 282 + "link": 282, + "shape": 7 } ], "outputs": [ @@ -2942,8 +2582,8 @@ "links": [ 287 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2956,66 +2596,18 @@ ] }, { - "id": 63, - "type": "VHS_LoadAudioUpload", + "id": 101, + "type": "SetNode", "pos": [ - -1560, - -2207 + -725, + -2289 ], - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 88, - 90, - 95, - 102, - 227 - ], - "slot_index": 0, - "shape": 3 - } + "size": [ + 210, + 58 ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Delta Deez - Songfinch - Out the Mud.mp3", - "start_time": 15, - "duration": 3, - "choose audio to upload": "image" - } - }, - { - "id": 101, - "type": "SetNode", - "pos": { - "0": -725, - "1": -2289, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 48, + "order": 67, "mode": 0, "inputs": [ { @@ -3037,439 +2629,415 @@ }, "widgets_values": [ "empty_image" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 102, - "type": "SetNode", - "pos": { - "0": -720, - "1": -2113, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 65, + "type": "DownloadOpenUnmixModel", + "pos": [ + -389, + -2387 + ], + "size": [ + 541.800048828125, + 58 + ], "flags": {}, - "order": 49, + "order": 16, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "MASK", - "type": "MASK", - "link": 151 + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 334 + ], + "shape": 3 } ], + "properties": { + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] + }, + { + "id": 43, + "type": "SAMModelLoader (segment anything)", + "pos": [ + -4380, + -30 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 17, + "mode": 4, + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "links": [ + 47 + ], + "slot_index": 0, + "shape": 3 } ], - "title": "Set_empty_mask", "properties": { - "previousName": "empty_mask" + "Node name for S&R": "SAMModelLoader (segment anything)" }, "widgets_values": [ - "empty_mask" + "sam_vit_h (2.56GB)" ] }, { - "id": 73, - "type": "SetNode", - "pos": { - "0": -700, - "1": -1994, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 33, + "type": "ImageScale", + "pos": [ + -4580, + 1080 + ], + "size": [ + 315, + 130 + ], "flags": {}, - "order": 36, - "mode": 0, + "order": 83, + "mode": 4, "inputs": [ { - "name": "AUDIO", - "type": "AUDIO", - "link": 102 + "name": "image", + "type": "IMAGE", + "link": 314 + }, + { + "name": "width", + "type": "INT", + "link": 31, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 32, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 34, + 318 + ], + "slot_index": 0, + "shape": 3 } ], - "title": "Set_audio", "properties": { - "previousName": "audio" + "Node name for S&R": "ImageScale" }, "widgets_values": [ - "audio" + "lanczos", + 512, + 512, + "disabled" ] }, { - "id": 64, - "type": "AudioSeparator", + "id": 25, + "type": "VHS_LoadVideo", "pos": [ - -346, - -2267 + -5518, + 701 + ], + "size": [ + 247.455078125, + 262 ], - "size": { - "0": 415.8000183105469, - "1": 158 - }, "flags": {}, - "order": 47, - "mode": 0, + "order": 18, + "mode": 4, "inputs": [ { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 87 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 88 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { - "name": "video_frames", - "type": "IMAGE", - "link": 89 + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 137 + 313, + 314 ], - "slot_index": 1, + "slot_index": 0, "shape": 3 }, { - "name": "vocals_audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 2 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [], - "slot_index": 3, + "name": "frame_count", + "type": "INT", + "links": null, "shape": 3 }, { - "name": "other_audio", + "name": "audio", "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 4 + "links": null, + "shape": 3 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 124, - 196 - ], - "slot_index": 5, + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 65, - "type": "DownloadOpenUnmixModel", - "pos": [ - -389, - -2387 - ], - "size": { - "0": 541.800048828125, - "1": 58 + "Node name for S&R": "VHS_LoadVideo" }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 87 - ], - "shape": 3 + "widgets_values": { + "video": "floatinginpool.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "floatinginpool.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] + } }, { - "id": 86, - "type": "AudioFeatureExtractor", + "id": 45, + "type": "VHS_VideoCombine", "pos": [ - -101, - -2034 + -3926, + 308 + ], + "size": [ + 315, + 334 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 62, - "mode": 0, + "order": 103, + "mode": 4, "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 51 + }, { "name": "audio", "type": "AUDIO", - "link": 137 + "link": null, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 124 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 138 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "amplitude_envelope" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_04858.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + } + } + } }, { - "id": 91, - "type": "FeatureMixer", + "id": 42, + "type": "GroundingDinoSAMSegment (segment anything)", "pos": [ - 305, - -2231 + -4390, + 190 + ], + "size": [ + 352.79998779296875, + 122 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 75, - "mode": 0, + "order": 92, + "mode": 4, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 138 + "name": "sam_model", + "type": "SAM_MODEL", + "link": 47 + }, + { + "name": "grounding_dino_model", + "type": "GROUNDING_DINO_MODEL", + "link": 46 + }, + { + "name": "image", + "type": "IMAGE", + "link": 318 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 168 - ], - "shape": 3, - "slot_index": 0 + "name": "IMAGE", + "type": "IMAGE", + "links": [], + "slot_index": 0, + "shape": 3 }, { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 140 + 50 ], + "slot_index": 1, "shape": 3 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "GroundingDinoSAMSegment (segment anything)" }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.38, - 1, - 0.5, - false + "water", + 0.3 ] }, { - "id": 43, - "type": "SAMModelLoader (segment anything)", + "id": 188, + "type": "Reroute", "pos": [ - -4380, - -30 + -1111, + -1563 + ], + "size": [ + 75, + 26 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 18, - "mode": 4, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 293 + } + ], "outputs": [ { - "name": "SAM_MODEL", - "type": "SAM_MODEL", + "name": "", + "type": "IMAGE", "links": [ - 47 + 300, + 326, + 328 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "SAMModelLoader (segment anything)" - }, - "widgets_values": [ - "sam_vit_h (2.56GB)" - ] + "showOutputText": false, + "horizontal": false + } }, { - "id": 33, - "type": "ImageScale", + "id": 52, + "type": "VHS_LoadVideo", "pos": [ - -4580, - 1080 + -1438, + -1561 + ], + "size": [ + 247.455078125, + 262 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 76, - "mode": 4, + "order": 19, + "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 314 - }, - { - "name": "width", - "type": "INT", - "link": 31, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 32, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 34, - 318 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "lanczos", - 512, - 512, - "disabled" - ] - }, - { - "id": 25, - "type": "VHS_LoadVideo", - "pos": [ - -5518, - 701 - ], - "size": [ - 235.1999969482422, - 405.45624816417694 - ], - "flags": {}, - "order": 19, - "mode": 4, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3477,11 +3045,10 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 313, - 314 + 293 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "frame_count", @@ -3506,7 +3073,7 @@ "Node name for S&R": "VHS_LoadVideo" }, "widgets_values": { - "video": "floatinginpool.mp4", + "video": "floating_in_pool_768_Water_MASK.mp4", "force_rate": 0, "force_size": "Disabled", "custom_width": 512, @@ -3522,7 +3089,7 @@ "frame_load_cap": 0, "skip_first_frames": 0, "force_rate": 0, - "filename": "floatinginpool.mp4", + "filename": "floating_in_pool_768_Water_MASK.mp4", "type": "input", "format": "video/mp4", "select_every_nth": 1 @@ -3531,194 +3098,1042 @@ } }, { - "id": 45, - "type": "VHS_VideoCombine", + "id": 180, + "type": "ReverseImageBatch", "pos": [ - -3926, - 308 + -1112, + -1406 ], "size": [ - 315, - 501.4609375 + 210, + 26 ], "flags": {}, - "order": 96, - "mode": 4, + "order": 57, + "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 51 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "link": 300 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 327 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "ReverseImageBatch" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_04858.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "widgets_values": [] }, { - "id": 42, - "type": "GroundingDinoSAMSegment (segment anything)", + "id": 175, + "type": "Display Int (rgthree)", "pos": [ - -4390, - 190 + -543, + -1581 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 352.79998779296875, - "1": 122 - }, "flags": {}, - "order": 85, - "mode": 4, + "order": 81, + "mode": 0, "inputs": [ { - "name": "sam_model", - "type": "SAM_MODEL", - "link": 47 - }, - { - "name": "grounding_dino_model", - "type": "GROUNDING_DINO_MODEL", - "link": 46 - }, + "name": "input", + "type": "INT", + "link": 251, + "widget": { + "name": "input" + }, + "dir": 3 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Display Int (rgthree)" + }, + "widgets_values": [ + 0, + "" + ] + }, + { + "id": 176, + "type": "GetImageSizeAndCount", + "pos": [ + -457, + -1279 + ], + "size": [ + 210, + 86 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ { "name": "image", "type": "IMAGE", - "link": 318 + "link": 329 } ], "outputs": [ { - "name": "IMAGE", + "name": "image", "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", "links": [ - 50 + 320 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0, + "shape": 3 + }, + { + "name": "768 width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "464 height", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "759 count", + "type": "INT", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "GroundingDinoSAMSegment (segment anything)" + "Node name for S&R": "GetImageSizeAndCount" }, - "widgets_values": [ - "water", - 0.3 - ] + "widgets_values": [] }, { - "id": 188, - "type": "Reroute", + "id": 53, + "type": "_mfc", "pos": [ - -1111, - -1563 + 306, + -1404 ], "size": [ - 75, - 26 + 315, + 150 ], "flags": {}, - "order": 39, + "order": 98, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 293 + "name": "image", + "type": "IMAGE", + "link": 321 } ], "outputs": [ { - "name": "", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 294, - 295, - 300 + 315 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "links": null, + "shape": 3 } ], "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 52, - "type": "VHS_LoadVideo", - "pos": [ - -1438, - -1561 + "Node name for S&R": "_mfc" + }, + "widgets_values": [ + 255, + 255, + 255, + 20 + ] + }, + { + "id": 190, + "type": "SetNode", + "pos": [ + 782, + -1405 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 104, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 315 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_water", + "properties": { + "previousName": "mask_water" + }, + "widgets_values": [ + "mask_water" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 36, + "type": "VHS_LoadVideo", + "pos": [ + -1342.456787109375, + -873.0419921875 + ], + "size": [ + 247.455078125, + 262 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 296 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "floating_in_pool_768.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "floating_in_pool_768.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } + } + } + }, + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + -149, + 235 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 43 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 42 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 38, + 45, + 185 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "photonLCM_v10.safetensors" + ] + }, + { + "id": 37, + "type": "CR LoRA Stack", + "pos": [ + -137, + 485 + ], + "size": [ + 315, + 342 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 41 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "Off", + "CarnageStyle.safetensors", + 1, + 1, + "On", + "add_detail.safetensors", + 0.4, + 0.4, + "Off", + "None", + 1, + 1 + ] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 821, + 153 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 257 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 57 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "swimming pool filled with blood, (blood_red), carnagestyle" + ] + }, + { + "id": 58, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 1438.43115234375, + 47.56038284301758 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 77 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 78 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "links": [ + 79 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "IPAdapterUnifiedLoader" + }, + "widgets_values": [ + "PLUS (high strength)" + ] + }, + { + "id": 57, + "type": "IPAdapterAdvanced", + "pos": [ + 1884.43115234375, + 17.560382843017578 + ], + "size": [ + 315, + 278 + ], + "flags": {}, + "order": 75, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 78 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": 79 + }, + { + "name": "image", + "type": "IMAGE", + "link": 85 + }, + { + "name": "image_negative", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "attn_mask", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 80 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "IPAdapterAdvanced" + }, + "widgets_values": [ + 1, + "linear", + "concat", + 0, + 1, + "V only" + ] + }, + { + "id": 61, + "type": "LoadImage", + "pos": [ + 1499.43115234375, + 230.5603790283203 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 85 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "pasted/image (129).png", + "image" + ] + }, + { + "id": 49, + "type": "ControlNetApplyAdvanced", + "pos": [ + 2082, + -840 + ], + "size": [ + 315, + 186 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 57 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 58 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 60, + "slot_index": 2 + }, + { + "name": "image", + "type": "IMAGE", + "link": 175 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 301, + 307 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 302, + 308 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 0.71, + 0, + 0.729 + ] + }, + { + "id": 103, + "type": "GetNode", + "pos": [ + 5020.7783203125, + -2393.459228515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 152, + 160, + 203 + ], + "slot_index": 0 + } + ], + "title": "Get_empty_mask", + "properties": {}, + "widgets_values": [ + "empty_mask" + ] + }, + { + "id": 104, + "type": "ParticleEmitter", + "pos": [ + 5055.7783203125, + -2264.459228515625 + ], + "size": [ + 468.5999755859375, + 402 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "previous_emitter", + "type": "PARTICLE_EMITTER", + "link": null, + "slot_index": 0, + "shape": 7 + }, + { + "name": "emitter_movement", + "type": "EMITTER_MOVEMENT", + "link": null, + "shape": 7 + }, + { + "name": "spring_joint_setting", + "type": "SPRING_JOINT_SETTING", + "link": null, + "shape": 7 + }, + { + "name": "particle_modulation", + "type": "PARTICLE_MODULATION", + "link": null, + "shape": 7 + }, + { + "name": "emitter_modulation", + "type": "EMITTER_MODULATION", + "link": 170, + "slot_index": 4, + "shape": 7 + } + ], + "outputs": [ + { + "name": "PARTICLE_EMITTER", + "type": "PARTICLE_EMITTER", + "links": [ + 153 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ParticleEmitter" + }, + "widgets_values": [ + 0.15, + 0.75, + 270, + 50, + 50, + 167, + 0, + "(255,255,255)", + 0, + 0, + 0, + 24.5 + ] + }, + { + "id": 114, + "type": "GetNode", + "pos": [ + 4167.77783203125, + -1623.459228515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 169, + 171, + 205 + ], + "slot_index": 0 + } + ], + "title": "Get_bare_drums", + "properties": {}, + "widgets_values": [ + "bare_drums" + ] + }, + { + "id": 113, + "type": "EmitterEmissionRateModulation", + "pos": [ + 4422.77783203125, + -2305.459228515625 + ], + "size": [ + 420, + 222 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "previous_modulation", + "type": "EMITTER_MODULATION", + "link": null, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 169, + "shape": 7 + } + ], + "outputs": [ + { + "name": "EMITTER_MODULATION", + "type": "EMITTER_MODULATION", + "links": [ + 170 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmitterEmissionRateModulation" + }, + "widgets_values": [ + 0, + 0, + 0, + "ease_in_out", + false, + false, + 14.200000000000001 + ] + }, + { + "id": 115, + "type": "EmitterEmissionRateModulation", + "pos": [ + 4412.77783203125, + -1730.459228515625 + ], + "size": [ + 420, + 222 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "previous_modulation", + "type": "EMITTER_MODULATION", + "link": null, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 171, + "shape": 7 + } + ], + "outputs": [ + { + "name": "EMITTER_MODULATION", + "type": "EMITTER_MODULATION", + "links": [ + 172 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmitterEmissionRateModulation" + }, + "widgets_values": [ + 0, + 0, + 0, + "ease_in_out", + false, + false, + 14.3 + ] + }, + { + "id": 100, + "type": "ParticleEmissionMask", + "pos": [ + 5600.7783203125, + -2303.459228515625 + ], + "size": [ + 336, + 474 + ], + "flags": {}, + "order": 77, + "mode": 0, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": 152 + }, + { + "name": "emitters", + "type": "PARTICLE_EMITTER", + "link": 153, + "slot_index": 1 + }, + { + "name": "vortices", + "type": "VORTEX", + "link": null, + "shape": 7 + }, + { + "name": "wells", + "type": "GRAVITY_WELL", + "link": null, + "shape": 7 + }, + { + "name": "static_bodies", + "type": "STATIC_BODY", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 156 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "links": [], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ParticleEmissionMask" + }, + "widgets_values": [ + 1, + false, + 0, + 0, + 1323, + 4, + 0, + 0, + 382, + 0, + 0, + 0, + false, + 1, + 1 + ] + }, + { + "id": 105, + "type": "DepthShapeModifierPrecise", + "pos": [ + 6405.7783203125, + -2454.459228515625 ], "size": [ - 235.1999969482422, - 405.45624816417694 + 386.3999938964844, + 174 ], "flags": {}, - "order": 20, + "order": 87, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "depth_map", + "type": "IMAGE", + "link": 223 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "mask", + "type": "MASK", + "link": 156 } ], "outputs": [ @@ -3726,1817 +4141,1631 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 293 + 165 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_LoadVideo" + "Node name for S&R": "DepthShapeModifierPrecise" }, - "widgets_values": { - "video": "floating_in_pool_768_Water_MASK.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "floating_in_pool_768_Water_MASK.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } + "widgets_values": [ + 2, + 0.35000000000000003, + 0.51, + 1, + "depth_aware" + ] }, { - "id": 181, - "type": "Make Image Batch", + "id": 116, + "type": "SetNode", "pos": [ - -799, - -1455 + 7494.7783203125, + -1757.459228515625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 126 - }, "flags": {}, - "order": 68, + "order": 108, "mode": 0, "inputs": [ { - "name": "image1", - "type": "IMAGE", - "link": 294 - }, - { - "name": "image2", - "type": "IMAGE", - "link": 267 - }, - { - "name": "image3", - "type": "IMAGE", - "link": 295 - }, - { - "name": "image4", - "type": "IMAGE", - "link": null - }, - { - "name": "image5", - "type": "IMAGE", - "link": null - }, - { - "name": "image6", + "name": "IMAGE", "type": "IMAGE", - "link": null + "link": 211 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 272 - ], - "shape": 3, - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_depth_bubbles", "properties": { - "Node name for S&R": "Make Image Batch" - } + "previousName": "depth_bubbles" + }, + "widgets_values": [ + "depth_bubbles" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 180, - "type": "ReverseImageBatch", + "id": 117, + "type": "GetNode", "pos": [ - -1112, - -1406 + 1829, + -863 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 52, + "order": 26, "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 300 - } - ], + "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ - 267 + 175 ], - "shape": 3, "slot_index": 0 } ], - "properties": { - "Node name for S&R": "ReverseImageBatch" - } + "title": "Get_depth_bubbles", + "properties": {}, + "widgets_values": [ + "depth_bubbles" + ] }, { - "id": 175, - "type": "Display Int (rgthree)", + "id": 191, + "type": "GetNode", "pos": [ - -543, - -1581 + 3372, + -181 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 66, + "order": 27, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "input", - "type": "INT", - "link": 251, - "widget": { - "name": "input" - }, - "dir": 3 + "name": "MASK", + "type": "MASK", + "links": [ + 316 + ], + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "Display Int (rgthree)" - }, + "title": "Get_mask_water", + "properties": {}, "widgets_values": [ - 0, - "" + "mask_water" ] }, { - "id": 176, - "type": "GetImageSizeAndCount", + "id": 60, + "type": "GrowMaskWithBlur", "pos": [ - -457, - -1279 + 3577, + -96 + ], + "size": [ + 315, + 246 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 77, + "order": 45, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 272 + "name": "mask", + "type": "MASK", + "link": 316 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", + "name": "mask", + "type": "MASK", "links": [ - 254 + 83, + 273 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "768 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "464 height", - "type": "INT", - "links": null, + "slot_index": 0, "shape": 3 }, { - "name": "759 count", - "type": "INT", + "name": "mask_inverted", + "type": "MASK", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } + "Node name for S&R": "GrowMaskWithBlur" + }, + "widgets_values": [ + 10, + 0, + true, + false, + 5.4, + 1, + 1, + false + ] }, { - "id": 163, - "type": "ImageInterval", + "id": 51, + "type": "SetLatentNoiseMask", "pos": [ - -114, - -1381 + 3653, + 282 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 315, - "1": 106 - }, "flags": {}, - "order": 86, + "order": 109, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 254 - }, - { - "name": "end_at", - "type": "FLOAT", - "link": 243, - "widget": { - "name": "end_at" - }, - "slot_index": 1 + "name": "samples", + "type": "LATENT", + "link": 84 + }, + { + "name": "mask", + "type": "MASK", + "link": 83 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 248 + 66 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "ImageInterval" + "Node name for S&R": "SetLatentNoiseMask" }, - "widgets_values": [ - 1, - 0, - 0 - ] + "widgets_values": [] }, { - "id": 66, - "type": "EmptyImageAndMaskFromAudio", + "id": 23, + "type": "VHS_VideoCombine", "pos": [ - -1272, - -2191 + 4578, + -182 + ], + "size": [ + 365.99755859375, + 557.0401611328125 ], - "size": { - "0": 411.6000061035156, - "1": 168.1107940673828 - }, "flags": {}, - "order": 34, + "order": 115, "mode": 0, "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 21 + }, { "name": "audio", "type": "AUDIO", - "link": 90 - } - ], - "outputs": [ - { - "name": "empty_image", - "type": "IMAGE", - "links": [ - 89, - 150 - ], - "slot_index": 0, - "shape": 3 + "link": 121, + "shape": 7 }, { - "name": "empty_mask", - "type": "MASK", - "links": [ - 151 - ], - "slot_index": 1, - "shape": 3 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { - "name": "frame_count", - "type": "INT", - "links": [ - 240 - ], - "slot_index": 2, + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - 30, - 768, - 464 - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02346-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02346.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02346-audio.mp4" + }, + "muted": false + } + } }, { - "id": 53, - "type": "_mfc", + "id": 21, + "type": "KSampler", "pos": [ - 306, - -1404 + 4016, + -47 + ], + "size": [ + 303.4075622558594, + 262 ], - "size": { - "0": 315, - "1": 150 - }, "flags": {}, - "order": 91, + "order": 110, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 248 + "name": "model", + "type": "MODEL", + "link": 37 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 301 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 302 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 66 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "LATENT", + "type": "LATENT", "links": [ - 315 + 20, + 189 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "_mfc" + "Node name for S&R": "KSampler" }, "widgets_values": [ - 255, - 255, - 255, - 20 + 156680208700286, + "fixed", + 8, + 1, + "lcm", + "sgm_uniform", + 0.9 ] }, { - "id": 190, - "type": "SetNode", - "pos": { - "0": 782, - "1": -1405, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 123, + "type": "KSampler", + "pos": [ + 5484, + -137 + ], + "size": [ + 303.4075622558594, + 262 + ], "flags": {}, - "order": 97, + "order": 116, "mode": 0, "inputs": [ { - "name": "MASK", - "type": "MASK", - "link": 315 + "name": "model", + "type": "MODEL", + "link": 180 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 307 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 308 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 195 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "LATENT", + "type": "LATENT", + "links": [ + 184 + ], + "slot_index": 0 } ], - "title": "Set_mask_water", "properties": { - "previousName": "mask_water" + "Node name for S&R": "KSampler" }, "widgets_values": [ - "mask_water" + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.5 ] }, { - "id": 36, - "type": "VHS_LoadVideo", + "id": 125, + "type": "VHS_VideoCombine", "pos": [ - -1413, - -897 + 6407, + -216 ], "size": [ - 235.1999969482422, - 405.45624816417694 + 370, + 560.1875 ], "flags": {}, - "order": 21, + "order": 119, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "images", + "type": "IMAGE", + "link": 186 }, { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 296 - ], - "shape": 3, - "slot_index": 0 + "name": "audio", + "type": "AUDIO", + "link": 187, + "shape": 7 }, { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ { - "name": "video_info", - "type": "VHS_VIDEOINFO", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_LoadVideo" + "Node name for S&R": "VHS_VideoCombine" }, "widgets_values": { - "video": "floating_in_pool_768.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "floating_in_pool_768.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } + "filename": "AnimateDiff_02347-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02347.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02347-audio.mp4" + }, + "muted": false } } }, { - "id": 4, - "type": "CheckpointLoaderSimple", + "id": 128, + "type": "NNLatentUpscale", "pos": [ - -149, - 235 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 22, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 43 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 42 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 38, - 45, - 185 - ], - "slot_index": 2 - } + 5090, + -139 ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photonLCM_v10.safetensors" - ] - }, - { - "id": 37, - "type": "CR LoRA Stack", - "pos": [ - -137, - 485 + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 342 - }, "flags": {}, - "order": 23, + "order": 112, "mode": 0, "inputs": [ { - "name": "lora_stack", - "type": "LORA_STACK", - "link": null + "name": "latent", + "type": "LATENT", + "link": 189 } ], "outputs": [ { - "name": "LORA_STACK", - "type": "LORA_STACK", + "name": "LATENT", + "type": "LATENT", "links": [ - 41 + 192 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "CR LoRA Stack" + "Node name for S&R": "NNLatentUpscale" }, "widgets_values": [ - "Off", - "CarnageStyle.safetensors", - 1, - 1, - "On", - "add_detail.safetensors", - 0.4, - 0.4, - "Off", - "None", - 1, - 1 + "SD 1.x", + 1.67 ] }, { - "id": 6, - "type": "CLIPTextEncode", + "id": 129, + "type": "SetLatentNoiseMask", "pos": [ - 821, - 153 + 5232, + 49 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 55, + "order": 114, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 257 + "name": "samples", + "type": "LATENT", + "link": 192 + }, + { + "name": "mask", + "type": "MASK", + "link": 274 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", "links": [ - 57 + 195 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "SetLatentNoiseMask" }, - "widgets_values": [ - "swimming pool filled with blood, (blood_red), carnagestyle" - ] + "widgets_values": [] }, { - "id": 58, - "type": "IPAdapterUnifiedLoader", + "id": 194, + "type": "ImageInterval", "pos": [ - 1438.431109281862, - 47.56038255714321 + -114, + -1381 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 54, + "order": 93, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 77 + "name": "image", + "type": "IMAGE", + "link": 320 }, { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null + "name": "end_at", + "type": "INT", + "link": 322, + "widget": { + "name": "end_at" + } } ], "outputs": [ { - "name": "model", - "type": "MODEL", - "links": [ - 78 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 79 - ], - "shape": 3, - "slot_index": 1 + 321 + ] } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" + "Node name for S&R": "ImageInterval" }, "widgets_values": [ - "PLUS (high strength)" + 1, + 0, + 0 ] }, { - "id": 57, - "type": "IPAdapterAdvanced", + "id": 195, + "type": "ImageInterval", "pos": [ - 1884.431109281862, - 17.560382557143193 + 180.8875732421875, + -791.8095092773438 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 278 - }, "flags": {}, - "order": 70, + "order": 94, "mode": 0, "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 78 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 79 - }, { "name": "image", "type": "IMAGE", - "link": 85 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": null + "link": 323 }, { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null + "name": "end_at", + "type": "INT", + "link": 325, + "widget": { + "name": "end_at" + } } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 80 - ], - "shape": 3, - "slot_index": 0 + 324 + ] } ], "properties": { - "Node name for S&R": "IPAdapterAdvanced" + "Node name for S&R": "ImageInterval" }, "widgets_values": [ 1, - "linear", - "concat", 0, - 1, - "V only" + 0 ] }, { - "id": 61, - "type": "LoadImage", + "id": 168, + "type": "Reroute", "pos": [ - 1499.431109281862, - 230.56038255714319 + -708, + -1923 + ], + "size": [ + 75, + 26 ], - "size": { - "0": 315, - "1": 314 - }, "flags": {}, - "order": 24, + "order": 69, "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 240, + "widget": { + "name": "value" + } + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "", + "type": "INT", "links": [ - 85 + 251, + 322, + 325 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "pasted/image (129).png", - "image" - ] + "showOutputText": false, + "horizontal": false + } }, { - "id": 99, - "type": "GetNode", - "pos": { - "0": 1322, - "1": -520, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 196, + "type": "ImageBatchMulti", + "pos": [ + -785.3680419921875, + -1445.9117431640625 + ], + "size": [ + 210, + 122 + ], "flags": {}, - "order": 25, + "order": 73, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 326 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 327 + }, + { + "name": "image_3", + "type": "IMAGE", + "link": 328 + } + ], "outputs": [ { - "name": "IMAGE", + "name": "images", "type": "IMAGE", "links": [ - 147 + 329 ], "slot_index": 0 } ], - "title": "Get_init_img", "properties": {}, "widgets_values": [ - "init_img" + 3, + null ] }, { - "id": 47, - "type": "DepthAnything_V2", + "id": 197, + "type": "ImageBatchMulti", "pos": [ - 1677, - -583 + -606.007080078125, + -920.4907836914062 + ], + "size": [ + 210, + 122 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 42, + "order": 74, "mode": 0, "inputs": [ { - "name": "da_model", - "type": "DAMODEL", - "link": 53 + "name": "image_1", + "type": "IMAGE", + "link": 330 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 331 }, { - "name": "images", + "name": "image_3", "type": "IMAGE", - "link": 147 + "link": 332 } ], "outputs": [ { - "name": "image", + "name": "images", "type": "IMAGE", "links": [ - 143 + 333 ], - "shape": 3, "slot_index": 0 } ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } + "properties": {}, + "widgets_values": [ + 3, + null + ] }, { - "id": 48, - "type": "DownloadAndLoadDepthAnythingV2Model", + "id": 198, + "type": "AudioSeparatorSimple", "pos": [ - 1525, - -714 + -451.6066589355469, + -2057.771240234375 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 26, + "order": 54, "mode": 0, + "inputs": [ + { + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 334 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 335 + } + ], "outputs": [ { - "name": "da_v2_model", - "type": "DAMODEL", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "drums_audio", + "type": "AUDIO", "links": [ - 53 - ], - "shape": 3, - "slot_index": 0 + 340 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": null + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": null + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": null } ], "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" + "Node name for S&R": "AudioSeparatorSimple" }, - "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] + "widgets_values": [] }, { - "id": 50, - "type": "ControlNetLoader", + "id": 202, + "type": "INTConstant", "pos": [ - 1477, - -820 + -1470.3228759765625, + -2833.3154296875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 27, + "order": 28, "mode": 0, + "inputs": [], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", + "name": "value", + "type": "INT", "links": [ - 60 + 338 ], - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ControlNetLoader" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - "control_v11f1p_sd15_depth.pth" - ] + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 94, - "type": "SetNode", - "pos": { - "0": 1934, - "1": -543, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 203, + "type": "INTConstant", + "pos": [ + -1467.9849853515625, + -2656.615478515625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 57, + "order": 29, "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 143 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "value", + "type": "INT", + "links": [ + 339 + ], + "slot_index": 0 } ], - "title": "Set_depth", "properties": { - "previousName": "depth" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - "depth" - ] + 464 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 49, - "type": "ControlNetApplyAdvanced", + "id": 201, + "type": "Anything Everywhere?", "pos": [ - 2082, - -840 + -1063.6851806640625, + -2659.60205078125 ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 57 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 58 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 60, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 175 - } + "size": [ + 315, + 106 ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 301, - 307 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 302, - 308 - ], - "shape": 3, - "slot_index": 1 + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 339, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 0.71, - 0, - 0.729 + ".*", + "height", + ".*" ] }, { - "id": 103, - "type": "GetNode", - "pos": { - "0": 4400, - "1": -2351, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 200, + "type": "Anything Everywhere?", + "pos": [ + -1070.2686767578125, + -2834.5576171875 + ], + "size": [ + 315, + 106 + ], "flags": {}, - "order": 28, + "order": 46, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 152, - 160, - 203 - ], - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 338, + "shape": 7, + "color_on": "" } ], - "title": "Get_empty_mask", - "properties": {}, + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, "widgets_values": [ - "empty_mask" + ".*", + "width", + ".*" ] }, { - "id": 104, - "type": "ParticleEmitter", + "id": 199, + "type": "Anything Everywhere?", "pos": [ - 4435, - -2222 + -1056.6351318359375, + -2505.56884765625 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 468.5999755859375, - "1": 402 - }, "flags": {}, - "order": 58, + "order": 55, "mode": 0, "inputs": [ { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - }, + "name": "AUDIO", + "type": "*", + "link": 337, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "audio", + ".*" + ] + }, + { + "id": 102, + "type": "SetNode", + "pos": [ + -721.6105346679688, + -2179.030517578125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 68, + "mode": 0, + "inputs": [ { - "name": "emitter_modulation", - "type": "EMITTER_MODULATION", - "link": 170, - "slot_index": 4 + "name": "MASK", + "type": "MASK", + "link": 151 } ], "outputs": [ { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 153 - ], - "shape": 3, - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_empty_mask", "properties": { - "Node name for S&R": "ParticleEmitter" + "previousName": "empty_mask" }, "widgets_values": [ - 0.15, - 0.75, - 270, - 50, - 50, - 167, - 0, - "(255,255,255)", - 0, - 0, - 0, - 24.5 - ] + "empty_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 114, - "type": "GetNode", - "pos": { - "0": 3547, - "1": -1581, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 73, + "type": "SetNode", + "pos": [ + -724.1576538085938, + -2061.641357421875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 29, + "order": 52, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 102 + } + ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 169, - 171, - 205 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], - "title": "Get_bare_drums", - "properties": {}, + "title": "Set_audio", + "properties": { + "previousName": "audio" + }, "widgets_values": [ - "bare_drums" + "audio" ] }, { - "id": 113, - "type": "EmitterEmissionRateModulation", + "id": 204, + "type": "AudioFeatureExtractor", "pos": [ - 3802, - -2263 + -135.34500122070312, + -2109.21923828125 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 420, - "1": 222 - }, "flags": {}, - "order": 43, + "order": 71, "mode": 0, "inputs": [ { - "name": "previous_modulation", - "type": "EMITTER_MODULATION", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 340 }, { - "name": "feature", - "type": "FEATURE", - "link": 169 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "EMITTER_MODULATION", - "type": "EMITTER_MODULATION", + "name": "feature", + "type": "FEATURE", "links": [ - 170 - ], - "shape": 3, - "slot_index": 0 + 344 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "EmitterEmissionRateModulation" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ + "amplitude_envelope", + 30, 0, - 0, - 0, - "ease_in_out", - false, - false, - 14.200000000000001 + 512, + 512 ] }, { - "id": 115, - "type": "EmitterEmissionRateModulation", + "id": 205, + "type": "FloatConstant", "pos": [ - 3792, - -1688 + -1451.2197265625, + -3019.867919921875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 420, - "1": 222 - }, "flags": {}, - "order": 44, + "order": 30, "mode": 0, - "inputs": [ - { - "name": "previous_modulation", - "type": "EMITTER_MODULATION", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": 171 - } - ], + "inputs": [], "outputs": [ { - "name": "EMITTER_MODULATION", - "type": "EMITTER_MODULATION", + "name": "value", + "type": "FLOAT", "links": [ - 172 + 342 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "EmitterEmissionRateModulation" + "Node name for S&R": "FloatConstant" }, - "widgets_values": [ - 0, - 0, - 0, - "ease_in_out", - false, - false, - 14.3 - ] + "widgets_values": [ + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 136, - "type": "DepthShapeModifierPrecise", + "id": 206, + "type": "Anything Everywhere?", "pos": [ - 5759, - -1871 + -1084.755615234375, + -3015.571044921875 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 386.3999938964844, - "1": 174 - }, "flags": {}, - "order": 95, + "order": 48, "mode": 0, "inputs": [ { - "name": "depth_map", - "type": "IMAGE", - "link": 208 - }, - { - "name": "mask", - "type": "MASK", - "link": 209 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 210, - 211 - ], - "shape": 3, - "slot_index": 0 + "name": "FLOAT", + "type": "*", + "link": 342, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "DepthShapeModifierPrecise" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 2, - 0.17, - 0.32, - 1, - "depth_aware" + ".*", + "frame_rate", + ".*" ] }, { - "id": 100, - "type": "ParticleEmissionMask", + "id": 66, + "type": "EmptyImageAndMaskFromAudio", "pos": [ - 4980, - -2261 + -1272, + -2191 + ], + "size": [ + 411.6000061035156, + 168.1107940673828 ], - "size": { - "0": 336, - "1": 474 - }, "flags": {}, - "order": 72, + "order": 50, "mode": 0, "inputs": [ { - "name": "masks", - "type": "MASK", - "link": 152 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 153, - "slot_index": 1 + "name": "audio", + "type": "AUDIO", + "link": 90 }, { - "name": "vortices", - "type": "VORTEX", - "link": null + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } }, { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "MASK", + "name": "empty_image", + "type": "IMAGE", + "links": [ + 150 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "empty_mask", "type": "MASK", "links": [ - 156 + 151 ], - "shape": 3, - "slot_index": 0 + "slot_index": 1, + "shape": 3 }, { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 + "name": "frame_count", + "type": "INT", + "links": [ + 240, + 343 + ], + "slot_index": 2, + "shape": 3 } ], "properties": { - "Node name for S&R": "ParticleEmissionMask" + "Node name for S&R": "EmptyImageAndMaskFromAudio" }, "widgets_values": [ - 1, - false, - 0, - 0, - 1323, - 4, - 0, - 0, - 382, - 0, - 0, - 0, - false, - 1, - 1 + 30, + 768, + 464 ] }, { - "id": 105, - "type": "DepthShapeModifierPrecise", + "id": 207, + "type": "Anything Everywhere?", "pos": [ - 5785, - -2412 + -655.9651489257812, + -2546.548828125 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 386.3999938964844, - "1": 174 - }, "flags": {}, - "order": 80, + "order": 70, "mode": 0, "inputs": [ { - "name": "depth_map", - "type": "IMAGE", - "link": 223 - }, - { - "name": "mask", - "type": "MASK", - "link": 156 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 165 - ], - "shape": 3, - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 343, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "DepthShapeModifierPrecise" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 2, - 0.35000000000000003, - 0.51, - 1, - "depth_aware" + ".*", + "frame_count", + ".*" ] }, { - "id": 111, - "type": "DepthShapeModifierPrecise", + "id": 209, + "type": "FeatureMixer", "pos": [ - 5777, - -2171 + 305, + -2231 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 386.3999938964844, - "1": 174 - }, "flags": {}, - "order": 89, + "order": 82, "mode": 0, "inputs": [ { - "name": "depth_map", - "type": "IMAGE", - "link": 165 - }, - { - "name": "mask", - "type": "MASK", - "link": 163 + "name": "feature", + "type": "FEATURE", + "link": 344 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 167, - 208 + 345, + 346 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "DepthShapeModifierPrecise" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - 2, - 0.7000000000000001, - 0.85, 1, - "depth_aware" + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.38, + 1, + 0.5, + false ] }, { - "id": 116, - "type": "SetNode", - "pos": { - "0": 6874, - "1": -1715, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 210, + "type": "PreviewFeature", + "pos": [ + 728.6032104492188, + -2207.300048828125 + ], + "size": [ + 315, + 246 + ], "flags": {}, - "order": 101, + "order": 90, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 211 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null + "name": "feature", + "type": "FEATURE", + "link": 346 } ], - "title": "Set_depth_bubbles", + "outputs": [], "properties": { - "previousName": "depth_bubbles" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": [ - "depth_bubbles" - ] + "widgets_values": [] }, { - "id": 117, - "type": "GetNode", - "pos": { - "0": 1829, - "1": -863, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 94, + "type": "SetNode", + "pos": [ + 2206.25, + -538.1600341796875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 30, + "order": 80, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 351 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 175 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], - "title": "Get_depth_bubbles", - "properties": {}, + "title": "Set_depth", + "properties": { + "previousName": "depth" + }, "widgets_values": [ - "depth_bubbles" - ] + "depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 191, + "id": 99, "type": "GetNode", - "pos": { - "0": 3372, - "1": -181, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1551.9000244140625, + -666.4099731445312 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 31, "mode": 0, "inputs": [], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 316 + 347 ], "slot_index": 0 } ], - "title": "Get_mask_water", + "title": "Get_init_img", "properties": {}, "widgets_values": [ - "mask_water" + "init_img" ] }, { - "id": 60, - "type": "GrowMaskWithBlur", + "id": 50, + "type": "ControlNetLoader", "pos": [ - 3577, - -96 + 1550.81005859375, + -782.4900512695312 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 246 - }, "flags": {}, - "order": 46, + "order": 32, "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 316 - } - ], + "inputs": [], "outputs": [ { - "name": "mask", - "type": "MASK", + "name": "CONTROL_NET", + "type": "CONTROL_NET", "links": [ - 83, - 273 + 60 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "mask_inverted", - "type": "MASK", - "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "GrowMaskWithBlur" + "Node name for S&R": "ControlNetLoader" }, "widgets_values": [ - 10, - 0, - true, - false, - 5.4, - 1, - 1, - false + "control_v11f1p_sd15_depth.pth" ] }, { - "id": 51, - "type": "SetLatentNoiseMask", + "id": 63, + "type": "VHS_LoadAudioUpload", "pos": [ - 3653, - 282 + -1560, + -2207 + ], + "size": [ + 243.818359375, + 130 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 102, + "order": 33, "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 84 - }, - { - "name": "mask", - "type": "MASK", - "link": 83 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "audio", + "type": "AUDIO", "links": [ - 66 + 90, + 95, + 102, + 227, + 335, + 337 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "SetLatentNoiseMask" + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Delta Deez - Songfinch - Out the Mud.mp3", + "start_time": 15, + "duration": 2, + "choose audio to upload": "image" } }, { - "id": 23, + "id": 187, "type": "VHS_VideoCombine", "pos": [ - 4578, - -182 + 6187.28125, + 545.4400634765625 ], "size": [ - 365.99755859375, - 533.300983346147 + 370, + 560.1875 ], "flags": {}, - "order": 108, + "order": 123, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 21 + "link": 287 }, { "name": "audio", "type": "AUDIO", - "link": 121 + "link": 286, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -5558,175 +5787,63 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, - "paused": false, + "paused": true, "params": { - "filename": "AnimateDiff_07570-audio.mp4", + "filename": "AnimateDiff_02348-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02348.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02348-audio.mp4" }, "muted": false } } }, { - "id": 21, - "type": "KSampler", - "pos": [ - 4016, - -47 - ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 37 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 301 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 302 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 66 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 20, - 189 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 8, - 1, - "lcm", - "sgm_uniform", - 0.9 - ] - }, - { - "id": 123, - "type": "KSampler", - "pos": [ - 5484, - -137 - ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, - "flags": {}, - "order": 109, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 180 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 307 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 308 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 195 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 184 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.5 - ] - }, - { - "id": 125, + "id": 106, "type": "VHS_VideoCombine", "pos": [ - 6407, - -216 + 6003.6484375, + -1728.6363525390625 ], "size": [ - 370, - 536 + 214.7587890625, + 465.6667785644531 ], "flags": {}, - "order": 112, + "order": 88, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 186 + "link": 166 }, { "name": "audio", "type": "AUDIO", - "link": 187 + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "slot_index": 3, + "shape": 7 } ], "outputs": [ @@ -5748,173 +5865,271 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07571-audio.mp4", + "filename": "AnimateDiff_02350-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02350.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02350-audio.mp4" }, "muted": false } } }, { - "id": 128, - "type": "NNLatentUpscale", + "id": 211, + "type": "AIO_Preprocessor", "pos": [ - 5090, - -139 + 1735.9215087890625, + -539.2509155273438 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 105, + "order": 49, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 189 + "name": "image", + "type": "IMAGE", + "link": 347 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 192 + 349 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "AIO_Preprocessor" }, "widgets_values": [ - "SD 1.x", - 1.67 + "DepthAnythingV2Preprocessor", + 512 ] }, { - "id": 129, - "type": "SetLatentNoiseMask", + "id": 213, + "type": "GetNode", "pos": [ - 5232, - 49 + 1729.4423828125, + -391.8521728515625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 107, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 350 + ], + "slot_index": 0 + } + ], + "title": "Get_empty_image", + "properties": {}, + "widgets_values": [ + "empty_image" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 212, + "type": "ImageScaleToTarget", + "pos": [ + 2137.212158203125, + -410.0022277832031 + ], + "size": [ + 415.8000183105469, + 102 + ], + "flags": {}, + "order": 66, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 192 + "name": "image", + "type": "IMAGE", + "link": 349 }, { - "name": "mask", - "type": "MASK", - "link": 274 + "name": "target_image", + "type": "IMAGE", + "link": 350 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 195 + 351 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } + "Node name for S&R": "ImageScaleToTarget" + }, + "widgets_values": [ + "lanczos", + "disabled" + ] }, { - "id": 187, - "type": "VHS_VideoCombine", + "id": 108, + "type": "GetNode", "pos": [ - 6254, - 551 + 5937.22900390625, + -2503.578125 ], "size": [ - 370, - 536 + 210, + 58 ], "flags": {}, - "order": 116, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 223 + ], + "slot_index": 0 + } + ], + "title": "Get_depth", + "properties": {}, + "widgets_values": [ + "depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 111, + "type": "DepthShapeModifierPrecise", + "pos": [ + 6415.494140625, + -2176.41796875 + ], + "size": [ + 386.3999938964844, + 174 + ], + "flags": {}, + "order": 96, "mode": 0, "inputs": [ { - "name": "images", + "name": "depth_map", "type": "IMAGE", - "link": 287 + "link": 165 }, { - "name": "audio", - "type": "AUDIO", - "link": 286 - }, + "name": "mask", + "type": "MASK", + "link": 163 + } + ], + "outputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 167, + 208 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthShapeModifierPrecise" + }, + "widgets_values": [ + 2, + 0.7000000000000001, + 0.85, + 1, + "depth_aware" + ] + }, + { + "id": 136, + "type": "DepthShapeModifierPrecise", + "pos": [ + 6420.04150390625, + -1918.290771484375 + ], + "size": [ + 386.3999938964844, + 174 + ], + "flags": {}, + "order": 102, + "mode": 0, + "inputs": [ + { + "name": "depth_map", + "type": "IMAGE", + "link": 208 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "mask", + "type": "MASK", + "link": 209 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 210, + 211 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "DepthShapeModifierPrecise" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": true, - "params": { - "filename": "AnimateDiff_07572-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + 2, + 0.17, + 0.32, + 1, + "depth_aware" + ] } ], "links": [ @@ -6150,14 +6365,6 @@ 0, "IMAGE" ], - [ - 53, - 48, - 0, - 47, - 0, - "DAMODEL" - ], [ 57, 6, @@ -6243,46 +6450,22 @@ 60, 0, 51, - 1, - "MASK" - ], - [ - 84, - 35, - 0, - 51, - 0, - "LATENT" - ], - [ - 85, - 61, - 0, - 57, - 2, - "IMAGE" - ], - [ - 87, - 65, - 0, - 64, - 0, - "OPEN_UNMIX_MODEL" + 1, + "MASK" ], [ - 88, - 63, + 84, + 35, 0, - 64, - 1, - "AUDIO" + 51, + 0, + "LATENT" ], [ - 89, - 66, + 85, + 61, 0, - 64, + 57, 2, "IMAGE" ], @@ -6318,46 +6501,6 @@ 1, "AUDIO" ], - [ - 124, - 64, - 5, - 86, - 1, - "FEATURE_PIPE" - ], - [ - 137, - 64, - 1, - 86, - 0, - "AUDIO" - ], - [ - 138, - 86, - 0, - 91, - 0, - "FEATURE" - ], - [ - 140, - 91, - 1, - 88, - 0, - "IMAGE" - ], - [ - 143, - 47, - 0, - 94, - 0, - "*" - ], [ 146, 55, @@ -6366,14 +6509,6 @@ 0, "*" ], - [ - 147, - 99, - 0, - 47, - 1, - "IMAGE" - ], [ 150, 66, @@ -6462,14 +6597,6 @@ 0, "IMAGE" ], - [ - 168, - 91, - 0, - 112, - 0, - "*" - ], [ 169, 114, @@ -6590,14 +6717,6 @@ 3, "LATENT" ], - [ - 196, - 64, - 5, - 132, - 0, - "*" - ], [ 203, 103, @@ -6695,352 +6814,521 @@ "*" ], [ - 242, + 251, 168, 0, - 171, + 175, 0, "INT" ], [ - 243, - 171, + 257, + 38, + 1, + 6, 0, - 163, + "CLIP" + ], + [ + 258, + 38, 1, - "FLOAT" + 7, + 0, + "CLIP" ], [ - 244, - 168, + 273, + 60, 0, - 172, + 183, + 0, + "*" + ], + [ + 274, + 183, + 0, + 129, + 1, + "MASK" + ], + [ + 275, + 126, + 0, + 184, 0, + "IMAGE" + ], + [ + 278, + 184, + 2, + 185, + 2, "INT" ], [ - 245, - 172, + 279, + 184, + 1, + 185, + 1, + "INT" + ], + [ + 281, + 182, + 0, + 185, + 0, + "IMAGE" + ], + [ + 282, + 183, + 0, + 186, + 2, + "MASK" + ], + [ + 286, + 127, 0, - 164, + 187, 1, - "FLOAT" + "AUDIO" ], [ - 248, - 163, + 287, + 186, + 0, + 187, + 0, + "IMAGE" + ], + [ + 291, + 184, + 0, + 186, + 1, + "IMAGE" + ], + [ + 292, + 185, + 0, + 186, + 0, + "IMAGE" + ], + [ + 293, + 52, + 0, + 188, + 0, + "*" + ], + [ + 296, + 36, + 0, + 189, + 0, + "*" + ], + [ + 299, + 189, + 0, + 178, + 0, + "IMAGE" + ], + [ + 300, + 188, 0, + 180, + 0, + "IMAGE" + ], + [ + 301, + 49, + 0, + 21, + 1, + "CONDITIONING" + ], + [ + 302, + 49, + 1, + 21, + 2, + "CONDITIONING" + ], + [ + 307, + 49, + 0, + 123, + 1, + "CONDITIONING" + ], + [ + 308, + 49, + 1, + 123, + 2, + "CONDITIONING" + ], + [ + 313, + 25, + 0, + 31, + 0, + "IMAGE" + ], + [ + 314, + 25, + 0, + 33, + 0, + "IMAGE" + ], + [ + 315, 53, 0, - "IMAGE" + 190, + 0, + "*" + ], + [ + 316, + 191, + 0, + 60, + 0, + "MASK" ], [ - 251, - 168, - 0, - 175, + 318, + 33, 0, - "INT" + 42, + 2, + "IMAGE" ], [ - 254, + 320, 176, 0, - 163, + 194, 0, "IMAGE" ], [ - 256, - 177, + 321, + 194, 0, - 164, + 53, 0, "IMAGE" ], [ - 257, - 38, - 1, - 6, + 322, + 168, 0, - "CLIP" + 194, + 1, + "INT" ], [ - 258, - 38, - 1, - 7, + 323, + 177, 0, - "CLIP" + 195, + 0, + "IMAGE" ], [ - 259, - 164, + 324, + 195, 0, 55, 0, "IMAGE" ], [ - 262, - 178, + 325, + 168, 0, - 179, + 195, 1, - "IMAGE" + "INT" ], [ - 265, - 179, + 326, + 188, 0, - 177, + 196, 0, "IMAGE" ], [ - 267, + 327, 180, 0, - 181, + 196, 1, "IMAGE" ], [ - 272, - 181, - 0, - 176, + 328, + 188, 0, + 196, + 2, "IMAGE" ], [ - 273, - 60, + 329, + 196, 0, - 183, + 176, 0, - "*" + "IMAGE" ], [ - 274, - 183, + 330, + 189, 0, - 129, - 1, - "MASK" + 197, + 0, + "IMAGE" ], [ - 275, - 126, - 0, - 184, + 331, + 178, 0, + 197, + 1, "IMAGE" ], [ - 278, - 184, - 2, - 185, + 332, + 189, + 0, + 197, 2, - "INT" - ], - [ - 279, - 184, - 1, - 185, - 1, - "INT" + "IMAGE" ], [ - 281, - 182, + 333, + 197, 0, - 185, + 177, 0, "IMAGE" ], [ - 282, - 183, + 334, + 65, 0, - 186, - 2, - "MASK" + 198, + 0, + "OPEN_UNMIX_MODEL" ], [ - 286, - 127, + 335, + 63, 0, - 187, + 198, 1, "AUDIO" ], [ - 287, - 186, + 337, + 63, 0, - 187, + 199, 0, - "IMAGE" + "AUDIO" ], [ - 291, - 184, + 338, + 202, 0, - 186, - 1, - "IMAGE" + 200, + 0, + "INT" ], [ - 292, - 185, + 339, + 203, 0, - 186, + 201, 0, - "IMAGE" + "INT" ], [ - 293, - 52, - 0, - 188, + 340, + 198, + 1, + 204, 0, - "*" + "AUDIO" ], [ - 294, - 188, + 342, + 205, 0, - 181, + 206, 0, - "IMAGE" + "FLOAT" ], [ - 295, - 188, - 0, - 181, + 343, + 66, 2, - "IMAGE" + 207, + 0, + "INT" ], [ - 296, - 36, + 344, + 204, 0, - 189, + 209, 0, - "*" + "FEATURE" ], [ - 297, - 189, + 345, + 209, 0, - 179, + 112, 0, - "IMAGE" + "FEATURE" ], [ - 298, - 189, + 346, + 209, 0, - 179, - 2, - "IMAGE" + 210, + 0, + "FEATURE" ], [ - 299, - 189, + 347, + 99, 0, - 178, + 211, 0, "IMAGE" ], [ - 300, - 188, + 349, + 211, 0, - 180, + 212, 0, "IMAGE" ], [ - 301, - 49, + 350, + 213, 0, - 21, + 212, 1, - "CONDITIONING" + "IMAGE" ], [ - 302, - 49, - 1, - 21, - 2, - "CONDITIONING" + 351, + 212, + 0, + 94, + 0, + "IMAGE" ], [ - 307, - 49, + 352, + 205, 0, - 123, + 204, 1, - "CONDITIONING" + "FLOAT" ], [ - 308, - 49, - 1, - 123, + 353, + 66, 2, - "CONDITIONING" + 204, + 2, + "INT" ], [ - 313, - 25, - 0, - 31, + 354, + 202, 0, - "IMAGE" + 204, + 3, + "INT" ], [ - 314, - 25, - 0, - 33, + 355, + 203, 0, - "IMAGE" + 204, + 4, + "INT" ], [ - 315, - 53, + 356, + 202, 0, - 190, - 0, - "*" + 66, + 1, + "INT" ], [ - 316, - 191, + 357, + 203, 0, - 60, + 66, + 2, + "INT" + ], + [ + 358, + 205, 0, - "MASK" + 66, + 3, + "FLOAT" ], [ - 318, - 33, + 359, + 63, 0, - 42, - 2, - "IMAGE" + 106, + 1, + "AUDIO" ] ], "groups": [ { + "id": 1, "title": "adif", "bounding": [ 2554, @@ -7050,9 +7338,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "samp1", "bounding": [ 3539, @@ -7062,9 +7351,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "ipadap1", "bounding": [ 1425, @@ -7074,9 +7364,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "Load Audio", "bounding": [ -1469, @@ -7086,33 +7377,36 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "depth", "bounding": [ 1516, -946, - 970, - 509 + 1205.949951171875, + 666.2999877929688 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "ParticleDepth", "bounding": [ - 3536, - -2615, + 4156.77734375, + -2657.459228515625, 3652, 2050 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 7, "title": "Samp", "bounding": [ 5024, @@ -7122,9 +7416,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 8, "title": "Preprocess", "bounding": [ -5540, @@ -7134,9 +7429,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 9, "title": "Masks", "bounding": [ -1479, @@ -7146,21 +7442,23 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 10, "title": "Images", "bounding": [ - -1486, - -1020, + -1415.456787109375, + -996.0419921875, 2310, 555 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 11, "title": "paste original", "bounding": [ 5094, @@ -7170,9 +7468,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 12, "title": "Blah blah blah", "bounding": [ -192, @@ -7182,18 +7481,98 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.12100000000000294, + "scale": 0.6209213230591577, "offset": [ - 6277.735484916542, - 3972.6849448850417 + -5891.057041768552, + 2570.0936622858285 ] - } + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "comfy-core": "0.3.12", + "comfyui_segment_anything": "ab6395596399d5048639cdab7e44ec9fae857a93", + "ComfyUI_RyanOnTheInside": "e2382fa6e72d3aa18cbb4d558eb468cc14c54afc", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "rgthree-comfy": "5f2d8a1d19fcb2cac6dbc933085b20c1c0a8bb9f", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1" + }, + "ue_links": [ + { + "downstream": 204, + "downstream_slot": 1, + "upstream": "205", + "upstream_slot": 0, + "controller": 206, + "type": "FLOAT" + }, + { + "downstream": 204, + "downstream_slot": 2, + "upstream": "66", + "upstream_slot": 2, + "controller": 207, + "type": "INT" + }, + { + "downstream": 204, + "downstream_slot": 3, + "upstream": "202", + "upstream_slot": 0, + "controller": 200, + "type": "INT" + }, + { + "downstream": 204, + "downstream_slot": 4, + "upstream": "203", + "upstream_slot": 0, + "controller": 201, + "type": "INT" + }, + { + "downstream": 66, + "downstream_slot": 1, + "upstream": "202", + "upstream_slot": 0, + "controller": 200, + "type": "INT" + }, + { + "downstream": 66, + "downstream_slot": 2, + "upstream": "203", + "upstream_slot": 0, + "controller": 201, + "type": "INT" + }, + { + "downstream": 66, + "downstream_slot": 3, + "upstream": "205", + "upstream_slot": 0, + "controller": 206, + "type": "FLOAT" + }, + { + "downstream": 106, + "downstream_slot": 1, + "upstream": "63", + "upstream_slot": 0, + "controller": 199, + "type": "AUDIO" + } + ] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/circl_line_visualizer.json b/examples/circl_line_visualizerVERSION2.json similarity index 58% rename from examples/circl_line_visualizer.json rename to examples/circl_line_visualizerVERSION2.json index e1b9039..c542c36 100644 --- a/examples/circl_line_visualizer.json +++ b/examples/circl_line_visualizerVERSION2.json @@ -1,44 +1,48 @@ { - "last_node_id": 279, - "last_link_id": 486, + "last_node_id": 328, + "last_link_id": 561, "nodes": [ { "id": 165, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 5707.480888441229, - -528.7132590696225 + 5707.48095703125, + -528.7132568359375 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 17, + "order": 19, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 285, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": null, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -55,6 +59,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -64,8 +74,8 @@ "links": [ 282 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -82,21 +92,20 @@ "comfy", 0, 0, - false, - "" + false ] }, { "id": 166, "type": "ADE_MultivalDynamic", "pos": [ - 5357.480888441229, - -728.7132590696225 + 5357.48095703125, + -728.7132568359375 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 0, "mode": 0, @@ -104,7 +113,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -114,8 +124,8 @@ "links": [ 283 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -128,21 +138,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 167, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 5707.480888441229, - -838.7132590696225 + 5707.48095703125, + -838.7132568359375 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 1, "mode": 0, @@ -150,12 +159,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -165,8 +176,8 @@ "links": [ 280 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -195,13 +206,13 @@ "id": 168, "type": "ADE_MultivalDynamic", "pos": [ - 5357.480888441229, - -838.7132590696225 + 5357.48095703125, + -838.7132568359375 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 2, "mode": 0, @@ -209,7 +220,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -232,21 +244,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 169, "type": "ADE_CustomCFGSimple", "pos": [ - 5357.480888441229, - -628.7132590696225 + 5357.48095703125, + -628.7132568359375 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 3, "mode": 0, @@ -254,7 +265,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -276,21 +288,20 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 170, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 5357.480888441229, - -528.7132590696225 + 5357.48095703125, + -528.7132568359375 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 4, "mode": 0, @@ -298,7 +309,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -320,21 +332,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 171, "type": "ADE_AdjustWeightAllMult", "pos": [ - 5347.480888441229, - -998.7132590696226 + 5347.48095703125, + -998.7132568359375 + ], + "size": [ + 270.3999938964844, + 82 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, "order": 5, "mode": 0, @@ -342,7 +353,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -363,21 +375,20 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { "id": 172, "type": "ADE_AnimateDiffLoRALoader", "pos": [ - 5347.480888441229, - -1138.7132590696226 + 5347.48095703125, + -1138.7132568359375 + ], + "size": [ + 261.19134521484375, + 82 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, "flags": {}, "order": 6, "mode": 0, @@ -385,7 +396,8 @@ { "name": "prev_motion_lora", "type": "MOTION_LORA", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -395,8 +407,8 @@ "links": [ 281 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "AnimateDiff LoRA", @@ -410,23 +422,22 @@ }, "widgets_values": [ "LiquidAF-0-1.safetensors", - 0.8, - "" + 0.8 ] }, { "id": 174, "type": "CR Apply LoRA Stack", "pos": [ - 3768.6730438767927, - -913.3205474276132 + 3768.673095703125, + -913.320556640625 + ], + "size": [ + 254.40000915527344, + 66 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, "flags": {}, - "order": 24, + "order": 29, "mode": 0, "inputs": [ { @@ -452,8 +463,8 @@ "links": [ 279 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CLIP", @@ -462,8 +473,8 @@ 271, 272 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "show_help", @@ -474,62 +485,24 @@ ], "properties": { "Node name for S&R": "CR Apply LoRA Stack" - } - }, - { - "id": 211, - "type": "VAEDecode", - "pos": [ - 8298.385224487198, - -825.9747015236773 - ], - "size": { - "0": 210, - "1": 46 }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 347 - }, - { - "name": "vae", - "type": "VAE", - "link": 338 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 417 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } + "widgets_values": [] }, { "id": 11, "type": "CheckpointLoaderSimple", "pos": [ - 3242.6730438767927, - -980.3205474276132 + 3242.673095703125, + -980.320556640625 + ], + "size": [ + 315, + 98 ], - "size": { - "0": 315, - "1": 98 - }, "flags": {}, "order": 7, "mode": 0, + "inputs": [], "outputs": [ { "name": "MODEL", @@ -572,12 +545,12 @@ 4908, -938 ], - "size": { - "0": 304.79998779296875, - "1": 66 - }, + "size": [ + 304.79998779296875, + 66 + ], "flags": {}, - "order": 36, + "order": 43, "mode": 4, "inputs": [ { @@ -594,7 +567,8 @@ "name": "cnet_stack", "type": "CONTROL_NET_STACK", "link": null, - "slot_index": 2 + "slot_index": 2, + "shape": 7 } ], "outputs": [ @@ -605,8 +579,8 @@ 343, 447 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CONDITIONING-", @@ -615,8 +589,8 @@ 344, 448 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -627,21 +601,22 @@ "groupcolor": "#3f789e" } }, + "widgets_values": [], "shape": 1 }, { "id": 160, "type": "CLIPTextEncode", "pos": [ - 4188.67304387679, - -783.3205474276132 + 4188.6728515625, + -783.320556640625 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, "flags": {}, - "order": 29, + "order": 36, "mode": 0, "inputs": [ { @@ -671,21 +646,21 @@ "id": 216, "type": "Reroute", "pos": [ - 3551.6730438767927, - -1164.3205474276133 + 3551.673095703125, + -1164.320556640625 ], "size": [ 75, 26 ], "flags": {}, - "order": 52, + "order": 60, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 353 + "link": 532 } ], "outputs": [ @@ -703,91 +678,19 @@ "horizontal": false } }, - { - "id": 49, - "type": "PreviewAudio", - "pos": [ - -1747.3801746345473, - -892.9039383842822 - ], - "size": { - "0": 315, - "1": 76.00001525878906 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 56 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 45, - "type": "SetNode", - "pos": { - "0": -1747.3792724609375, - "1": -1002.9035034179688, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 48 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_audio", - "properties": { - "previousName": "audio" - }, - "widgets_values": [ - "audio" - ] - }, { "id": 164, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 5707.480888441229, - -1138.7132590696226 + 5707.48095703125, + -1138.7132568359375 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 27, + "order": 34, "mode": 0, "inputs": [ { @@ -799,47 +702,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 280, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 281, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": null, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 282, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 283, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 284, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -849,8 +760,8 @@ "links": [ 451 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -870,15 +781,15 @@ "id": 263, "type": "ModelSamplingDiscrete", "pos": [ - 5669.480888441229, - -1253.7132590696226 + 5669.48095703125, + -1253.7132568359375 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 35, + "order": 42, "mode": 0, "inputs": [ { @@ -895,8 +806,8 @@ 452, 453 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -907,66 +818,19 @@ false ] }, - { - "id": 224, - "type": "GetNode", - "pos": { - "0": 9435.060546875, - "1": -881.0486450195312, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 465 - ], - "slot_index": 0 - } - ], - "title": "Get_featrurepipe", - "properties": {}, - "widgets_values": [ - "featrurepipe" - ] - }, { "id": 46, "type": "GetNode", - "pos": { - "0": 8580.3828125, - "1": -849.9746704101562, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 8282.166015625, + -1031.9354248046875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 9, + "order": 8, "mode": 0, "inputs": [], "outputs": [ @@ -987,78 +851,767 @@ ] }, { - "id": 254, - "type": "GetNode", - "pos": { - "0": 10145.591796875, - "1": -904.9506225585938, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 415 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 236, - "type": "VHS_VideoCombine", + "id": 162, + "type": "VAEEncode", "pos": [ - 10629.600954592146, - -1071.9506468228058 + 3824, + -1094 ], "size": [ - 538.985595703125, - 638.2940733862705 + 210, + 46 ], "flags": {}, - "order": 63, + "order": 61, "mode": 0, "inputs": [ { - "name": "images", + "name": "pixels", "type": "IMAGE", - "link": 467 + "link": 354 }, { - "name": "audio", - "type": "AUDIO", - "link": 415 + "name": "vae", + "type": "VAE", + "link": 276 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 270 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 159, + "type": "CLIPTextEncode", + "pos": [ + 4150, + -1045 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 271 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 444 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "ral-acidzlime, spooky mounds of slime, sphere" + ] + }, + { + "id": 209, + "type": "NNLatentUpscale", + "pos": [ + 7627.41162109375, + -1226.911376953125 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 64, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 475 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 411 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "NNLatentUpscale" + }, + "widgets_values": [ + "SD 1.x", + 1.67 + ] + }, + { + "id": 213, + "type": "KSampler", + "pos": [ + 7641.41162109375, + -1071.9112548828125 + ], + "size": [ + 315, + 262 + ], + "flags": {}, + "order": 66, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 452 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 343 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 344 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 411 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 347 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 8, + 1, + "lcm", + "sgm_uniform", + 0.35000000000000003 + ] + }, + { + "id": 161, + "type": "VAEDecode", + "pos": [ + 6630.60498046875, + -1277.600341796875 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 273 + }, + { + "name": "vae", + "type": "VAE", + "link": 274 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 483 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 158, + "type": "KSampler", + "pos": [ + 6404.9560546875, + -1068.975830078125 + ], + "size": [ + 315, + 262 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 453 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 447 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 448 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 270 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 273, + 475 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.45 + ] + }, + { + "id": 276, + "type": "VHS_VideoCombine", + "pos": [ + 7036.9560546875, + -1227.975341796875 + ], + "size": [ + 452.57537841796875, + 609.3475952148438 + ], + "flags": {}, + "order": 65, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 483 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 482, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02389-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02389.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02389-audio.mp4" + } + } + } + }, + { + "id": 212, + "type": "VHS_VideoCombine", + "pos": [ + 8555.783203125, + -1214.960693359375 + ], + "size": [ + 452.57537841796875, + 610.2488403320312 + ], + "flags": {}, + "order": 68, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 539 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 340, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02390-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02390.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02390-audio.mp4" + } + } + } + }, + { + "id": 111, + "type": "CR LoRA Stack", + "pos": [ + 3230, + -799 + ], + "size": [ + 315, + 342 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 184 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "On", + "halloweenTech-202.safetensors", + 0.58, + 0.46, + "Off", + "add_detail.safetensors", + 1, + 1, + "Off", + "ral-acidzlime-sd15.safetensors", + 1, + 1 + ] + }, + { + "id": 29, + "type": "CR LoRA Stack", + "pos": [ + 3575, + -765 + ], + "size": [ + 315, + 342 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 184, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 289 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "On", + "AnimateLCM_sd15_t2v_lora.safetensors", + 1, + 1, + "On", + "add_detail.safetensors", + 1, + 1, + "On", + "ral-acidzlime-sd15.safetensors", + 1, + 1 + ] + }, + { + "id": 283, + "type": "SetNode", + "pos": [ + 735.22314453125, + -1010.9373779296875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_drum_featuire", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "drum_featuire" + ] + }, + { + "id": 284, + "type": "SetNode", + "pos": [ + 695.2228393554688, + -843.9659423828125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_kifck_feature", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "kifck_feature" + ] + }, + { + "id": 285, + "type": "SetNode", + "pos": [ + 703.2228393554688, + -697.9659423828125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_featrurepipe", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "featrurepipe" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 286, + "type": "SetNode", + "pos": [ + 701.2228393554688, + -573.9659423828125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 495 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_bass_feature", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 287, + "type": "DownloadOpenUnmixModel", + "pos": [ + -1232.7774658203125, + -997.9659423828125 + ], + "size": [ + 361.20001220703125, + 58 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 502 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] + }, + { + "id": 288, + "type": "VHS_VideoCombine", + "pos": [ + 1678.2227783203125, + -1200.9373779296875 + ], + "size": [ + 214.7587890625, + 467.69549560546875 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 496 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 497, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1073,188 +1626,110 @@ "Node name for S&R": "VHS_VideoCombine" }, "widgets_values": { - "frame_rate": 33, + "frame_rate": 30, "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07553-audio.mp4", + "filename": "AnimateDiff_02382-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 33 + "frame_rate": 30, + "workflow": "AnimateDiff_02382.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02382-audio.mp4" } } } }, { - "id": 51, - "type": "PreviewFeature", + "id": 289, + "type": "GetNode", "pos": [ - -198.41529810871012, - -1431.3111562631182 + 1660.22314453125, + -1337.9375 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 30, + "order": 11, "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 58 - } - ], + "inputs": [], "outputs": [ { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 59 + 497 ], - "shape": 3, "slot_index": 0 } ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - false + "audio" ] }, { - "id": 221, - "type": "SetNode", - "pos": { - "0": 762.5850219726562, - "1": -942.2825927734375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 290, + "type": "GetNode", + "pos": [ + 2323.22119140625, + -1591.9375 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 38, + "order": 12, "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 360 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "AUDIO", + "type": "AUDIO", + "links": [], + "slot_index": 0 } ], - "title": "Set_drum_featuire", - "properties": { - "previousName": "drum_featuire" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "drum_featuire" + "audio" ] }, { - "id": 52, - "type": "PreviewImage", + "id": 291, + "type": "SetNode", "pos": [ - 355.58470189129, - -1472.3111562631182 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 59 - } + -1105.20751953125, + -629.035888671875 ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 71, - "type": "PreviewImage", - "pos": [ - 350.58470189129, - -1176.3111562631182 + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 246 - }, "flags": {}, - "order": 42, + "order": 32, "mode": 0, "inputs": [ { - "name": "images", + "name": "IMAGE", "type": "IMAGE", - "link": 111 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 231, - "type": "SetNode", - "pos": { - "0": 722.584716796875, - "1": -775.3111572265625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 377 + "link": 498 } ], "outputs": [ @@ -1264,400 +1739,300 @@ "links": null } ], - "title": "Set_kifck_feature", + "title": "Set_emptyimg", "properties": { - "previousName": "kifck_feature" + "previousName": "" }, "widgets_values": [ - "kifck_feature" - ] + "emptyimg" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 222, - "type": "SetNode", - "pos": { - "0": 730.584716796875, - "1": -629.3111572265625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 361 - } + "id": 292, + "type": "Anything Everywhere?", + "pos": [ + -2257.3623046875, + -318.6548156738281 ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } + "size": [ + 315, + 106 ], - "title": "Set_featrurepipe", - "properties": { - "previousName": "featrurepipe" - }, - "widgets_values": [ - "featrurepipe" - ] - }, - { - "id": 267, - "type": "SetNode", - "pos": { - "0": 728.584716796875, - "1": -505.3111572265625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 45, + "order": 23, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 474 - } - ], - "outputs": [ - { - "name": "*", + "name": "FLOAT", "type": "*", - "links": null + "link": 499, + "shape": 7, + "color_on": "" } ], - "title": "Set_bass_feature", + "outputs": [], "properties": { - "previousName": "bass_feature" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "bass_feature" + ".*", + "frame_rate", + ".*" ] }, { - "id": 230, - "type": "PreviewImage", + "id": 293, + "type": "INTConstant", "pos": [ - 324.58470189128997, - -644.3111562631183 + -2527.3623046875, + -778.65478515625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 246 - }, "flags": {}, - "order": 44, + "order": 13, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "images", - "type": "IMAGE", - "link": 375 + "name": "value", + "type": "INT", + "links": [ + 501 + ], + "slot_index": 0 } ], "properties": { - "Node name for S&R": "PreviewImage" - } + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 42, - "type": "EmptyImageAndMaskFromAudio", + "id": 294, + "type": "INTConstant", "pos": [ - -1765.4152981087116, - -541.3111562631183 + -2497.3623046875, + -548.65478515625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 411.6000061035156, - "1": 146 - }, "flags": {}, - "order": 18, + "order": 14, "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 38 - } - ], + "inputs": [], "outputs": [ { - "name": "empty_image", - "type": "IMAGE", + "name": "value", + "type": "INT", "links": [ - 39, - 162 + 500 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "empty_mask", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": [], - "shape": 3, - "slot_index": 2 } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - 30, - 768, - 464 - ] + 468 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 101, - "type": "SetNode", - "pos": { - "0": -1219.41552734375, - "1": -479.3111267089844, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 295, + "type": "FloatConstant", + "pos": [ + -2487.3623046875, + -308.6548156738281 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 23, + "order": 15, "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 162 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "value", + "type": "FLOAT", + "links": [ + 499 + ], + "slot_index": 0 } ], - "title": "Set_emptyimg", "properties": { - "previousName": "emptyimg" + "Node name for S&R": "FloatConstant" }, "widgets_values": [ - "emptyimg" - ] + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 39, - "type": "VHS_LoadAudioUpload", + "id": 296, + "type": "Anything Everywhere?", "pos": [ - -1775.4152981087116, - -734.3111562631183 + -2267.3623046875, + -548.65478515625 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 226.8000030517578, - "1": 130 - }, "flags": {}, - "order": 11, + "order": 22, "mode": 0, - "outputs": [ + "inputs": [ { - "name": "audio", - "type": "AUDIO", - "links": [ - 37, - 38, - 48, - 56 - ], - "shape": 3, - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 500, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, - "widgets_values": { - "audio": "Delta Deez - Songfinch - Out the Mud.mp3", - "start_time": 15, - "duration": 7.5, - "choose audio to upload": "image" - } + "widgets_values": [ + ".*", + "height", + ".*" + ] }, { - "id": 41, - "type": "DownloadOpenUnmixModel", + "id": 297, + "type": "Anything Everywhere?", "pos": [ - -1205.4152981087116, - -929.3111562631183 + -2297.3623046875, + -788.65478515625 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, "flags": {}, - "order": 12, + "order": 21, "mode": 0, - "outputs": [ + "inputs": [ { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 36 - ], - "shape": 3, - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 501, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "umxl" + ".*", + "width", + ".*" ] }, { - "id": 40, - "type": "AudioSeparator", + "id": 298, + "type": "AudioSeparatorSimple", "pos": [ - -1224.4152981087116, - -792.3111562631183 + -1235.202392578125, + -841.3253173828125 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, "flags": {}, - "order": 22, + "order": 25, "mode": 0, "inputs": [ { "name": "model", "type": "OPEN_UNMIX_MODEL", - "link": 36, - "slot_index": 0 + "link": 502 }, { "name": "audio", "type": "AUDIO", - "link": 37 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 39 + "link": 503 } ], "outputs": [ { "name": "audio", "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 0 + "links": null }, { "name": "drums_audio", "type": "AUDIO", "links": [ - 41, - 436 - ], - "shape": 3, - "slot_index": 1 + 513, + 528 + ] }, { "name": "vocals_audio", "type": "AUDIO", "links": [ - 422, - 425 - ], - "shape": 3, - "slot_index": 2 + 517, + 519 + ] }, { "name": "bass_audio", "type": "AUDIO", "links": [ - 459 - ], - "shape": 3, - "slot_index": 3 + 506 + ] }, { "name": "other_audio", "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 42, - 460 - ], - "shape": 3, - "slot_index": 5 + "links": null } ], "properties": { - "Node name for S&R": "AudioSeparator" + "Node name for S&R": "AudioSeparatorSimple" }, - "widgets_values": [ - 30 - ] + "widgets_values": [] }, { - "id": 266, - "type": "AudioFeatureExtractor", + "id": 299, + "type": "EmptyImageAndMaskFromAudio", "pos": [ - -676.4152981087104, - -379.3111562631183 + -1792.77734375, + -609.9659423828125 + ], + "size": [ + 411.6000061035156, + 146 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, "order": 26, "mode": 0, @@ -1665,279 +2040,211 @@ { "name": "audio", "type": "AUDIO", - "link": 459 + "link": 504 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 460 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 472 - ], - "shape": 3, - "slot_index": 0 + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 273, - "type": "PreviewImage", - "pos": [ - 225.58470189129, - -262.3111562631182 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 473 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 272, - "type": "FeatureMixer", - "pos": [ - -215.4152981087101, - -315.3111562631183 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, { - "name": "feature", - "type": "FEATURE", - "link": 472 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "empty_image", + "type": "IMAGE", "links": [ - 474 + 498 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "empty_mask", + "type": "MASK", + "links": null, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", "links": [ - 473 + 505 ], - "shape": 3, - "slot_index": 1 + "slot_index": 2, + "shape": 3 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "EmptyImageAndMaskFromAudio" }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.15, - 1, - 0.5, - false + 30, + 768, + 464 ] }, { - "id": 229, - "type": "FeatureMixer", + "id": 300, + "type": "Anything Everywhere?", "pos": [ - -228.41529810871018, - -810.3111562631183 + -1377.32861328125, + -380.9324645996094 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 32, + "order": 33, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 376 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 377 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 375 - ], - "shape": 3, - "slot_index": 1 + "name": "INT", + "type": "*", + "link": 505, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.52, - 1, - 0.5, - false + ".*", + "frame_count", + ".*" ] }, { - "id": 43, + "id": 301, "type": "AudioFeatureExtractor", "pos": [ - -787.4152981087105, - -804.3111562631183 + -796.3421630859375, + -608.5328979492188 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 25, + "order": 31, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 41 + "link": 506 + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 42 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "FEATURE", + "name": "feature", "type": "FEATURE", "links": [ - 58, - 110, - 376 - ], - "shape": 3, - "slot_index": 0 + 507 + ] }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 361 - ], - "shape": 3, - "slot_index": 1 + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - "amplitude_envelope" + "amplitude_envelope", + 30, + 0, + 512, + 512 ] }, { - "id": 70, + "id": 302, "type": "FeatureMixer", "pos": [ - -245.41529810871003, - -1284.3111562631182 + -242.77728271484375, + -383.9659729003906 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 31, + "order": 41, "mode": 0, "inputs": [ { "name": "feature", "type": "FEATURE", - "link": 110 + "link": 507 } ], "outputs": [ { "name": "FEATURE", - "type": "FEATURE", - "links": [ - 360, - 423, - 426, - 437 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "type": "FEATURE", "links": [ - 111 + 495, + 508 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0 } ], "properties": { @@ -1952,680 +2259,813 @@ 1, 1, 0, - 0.3, + 0.15, 1, 0.5, false ] }, { - "id": 162, - "type": "VAEEncode", + "id": 303, + "type": "PreviewFeature", "pos": [ - 3824, - -1094 + 202.6227569580078, + -345.1170654296875 + ], + "size": [ + 315, + 246 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 53, + "order": 52, "mode": 0, "inputs": [ { - "name": "pixels", - "type": "IMAGE", - "link": 354 - }, - { - "name": "vae", - "type": "VAE", - "link": 276 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 270 - ], - "shape": 3, - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 508 } ], + "outputs": [], "properties": { - "Node name for S&R": "VAEEncode" - } + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] }, { - "id": 159, - "type": "CLIPTextEncode", + "id": 304, + "type": "FeatureMixer", "pos": [ - 4150, - -1045 + -236.24307250976562, + -878.9658203125 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 28, + "order": 37, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 271 + "name": "feature", + "type": "FEATURE", + "link": 509 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 444 + 493, + 510 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - "ral-acidzlime, spooky mounds of slime, sphere" + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.52, + 1, + 0.5, + false ] }, { - "id": 209, - "type": "NNLatentUpscale", + "id": 305, + "type": "PreviewFeature", "pos": [ - 7925.626945863037, - -1044.9506468228058 + 182.58547973632812, + -781.2538452148438 + ], + "size": [ + 315, + 246 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 56, + "order": 45, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 475 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 411 - ], - "shape": 3, - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 510 } ], + "outputs": [], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": [ - "SD 1.x", - 1.67 - ] + "widgets_values": [] }, { - "id": 213, - "type": "KSampler", + "id": 306, + "type": "FeatureMixer", "pos": [ - 7939.626945863037, - -889.9506468228057 + -272.77728271484375, + -1352.9659423828125 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 315, - "1": 262 - }, "flags": {}, - "order": 58, + "order": 38, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 452 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 343 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 344 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 411 + "name": "feature", + "type": "FEATURE", + "link": 511 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 347 + 492, + 512, + 518, + 520, + 529 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - 156680208700286, - "fixed", - 8, 1, - "lcm", - "sgm_uniform", - 0.35000000000000003 + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.3, + 1, + 0.5, + false ] }, { - "id": 256, - "type": "ImageCASBatch", + "id": 307, + "type": "PreviewFeature", "pos": [ - 8319.626945863034, - -1005.9506468228057 + 200.14454650878906, + -1195.9306640625 + ], + "size": [ + 315, + 246 ], - "size": { - "0": 462, - "1": 82 - }, "flags": {}, - "order": 60, + "order": 47, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 417 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 476, - 478 - ], - "shape": 3, - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 512 } ], + "outputs": [], "properties": { - "Node name for S&R": "ImageCASBatch" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": [ - 0.8, - 4 - ] + "widgets_values": [] }, { - "id": 270, - "type": "FlexImageHueShift", + "id": 308, + "type": "AudioFeatureExtractor", "pos": [ - 9720.600954592146, - -994.9506468228055 + -786.9472045898438, + -853.60595703125 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 319.20001220703125, - "1": 214 - }, "flags": {}, - "order": 61, + "order": 30, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 476 + "name": "audio", + "type": "AUDIO", + "link": 513 }, { - "name": "opt_feature", - "type": "FEATURE", - "link": 464 + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } }, { - "name": "opt_feature_pipe", - "type": "FEATURE_PIPE", - "link": 465 + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "opt_mask", - "type": "MASK", - "link": null + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 467 + 509, + 511, + 514 ], - "shape": 3, "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 494 + ] } ], "properties": { - "Node name for S&R": "FlexImageHueShift" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 1, + "amplitude_envelope", + 30, 0, - "hue_shift", - "absolute", - 210 + 512, + 512 ] }, { - "id": 223, - "type": "GetNode", - "pos": { - "0": 9438.591796875, - "1": -1052.95068359375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 309, + "type": "PreviewFeature", + "pos": [ + 218.6659698486328, + -1560.464599609375 + ], + "size": [ + 315, + 246 + ], "flags": {}, - "order": 13, + "order": 39, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "FEATURE", + "name": "feature", "type": "FEATURE", - "links": [ - 464 - ], - "slot_index": 0 + "link": 514 } ], - "title": "Get_bass_feature", - "properties": {}, - "widgets_values": [ - "bass_feature" - ] + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] }, - { - "id": 161, - "type": "VAEDecode", + { + "id": 310, + "type": "MaskComposite", "pos": [ - 6933.875209058141, - -1080.4769633121846 + 1934.8564453125, + -1511.9481201171875 + ], + "size": [ + 315, + 126 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 55, + "order": 54, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 273 + "name": "destination", + "type": "MASK", + "link": 515 }, { - "name": "vae", - "type": "VAE", - "link": 274 + "name": "source", + "type": "MASK", + "link": 516 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 483 + 521 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "VAEDecode" - } + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] }, { - "id": 158, - "type": "KSampler", + "id": 311, + "type": "FlexAudioVisualizerLine", "pos": [ - 6708.225901568219, - -871.851940468417 + 1067.222900390625, + -1871.9373779296875 + ], + "size": [ + 453.5999755859375, + 630 ], - "size": { - "0": 315, - "1": 262 - }, "flags": {}, - "order": 54, + "order": 48, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 453 + "name": "audio", + "type": "AUDIO", + "link": 517 }, { - "name": "positive", - "type": "CONDITIONING", - "link": 447 + "name": "opt_feature", + "type": "FEATURE", + "link": 518, + "shape": 7 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 448 + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } }, { - "name": "latent_image", - "type": "LATENT", - "link": 270 + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", "links": [ - 273, - 475 - ], - "slot_index": 0 + 515 + ] } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "FlexAudioVisualizerLine" }, "widgets_values": [ - 156680208700286, - "fixed", - 4, 1, - "lcm", - "sgm_uniform", - 0.45 + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 0, + 0, + 64, + 200, + 10, + 5, + 0, + 0, + 2048, + 20, + 8000, + true ] }, { - "id": 258, + "id": 312, "type": "FlexAudioVisualizerLine", "pos": [ - 1094.5848849967588, - -1803.2825382554306 + 1057.874755859375, + -1180.274169921875 + ], + "size": [ + 453.5999755859375, + 630 ], - "size": { - "0": 447.7563171386719, - "1": 606 - }, "flags": {}, - "order": 39, + "order": 49, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 422 + "link": 519 }, { "name": "opt_feature", "type": "FEATURE", - "link": 423 + "link": 520, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { "name": "IMAGE", "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 + "links": [ + 496 + ] }, { "name": "MASK", "type": "MASK", "links": [ - 484 - ], - "shape": 3, - "slot_index": 1 + 516 + ] } ], "properties": { "Node name for S&R": "FlexAudioVisualizerLine" }, "widgets_values": [ + 1, + 0, + "smoothing", + "relative", 30, 768, 464, - 1, - "max_frequency", - "relative", - "None", 0.5, 0.5, "line", "frequency", 0.5, + 180, 0, 64, 200, 10, 5, 0, - true, 0, 2048, - 200, - 8000 + 20, + 8000, + true ] }, { - "id": 259, - "type": "FlexAudioVisualizerLine", + "id": 313, + "type": "MaskComposite", "pos": [ - 1090.5848849967588, - -1115.2825382554306 + 2066.471435546875, + -1120.6600341796875 + ], + "size": [ + 315, + 126 ], - "size": { - "0": 460.1441650390625, - "1": 606 - }, "flags": {}, - "order": 40, + "order": 55, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 425 + "name": "destination", + "type": "MASK", + "link": 521 }, { - "name": "opt_feature", - "type": "FEATURE", - "link": 426 + "name": "source", + "type": "MASK", + "link": 522 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", + "links": [ + 523, + 526 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 314, + "type": "MaskFlip+", + "pos": [ + 2330.026123046875, + -1354.7342529296875 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 523 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", "links": [ - 427 + 525 ], - "shape": 3, "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskFlip+" + }, + "widgets_values": [ + "x" + ] + }, + { + "id": 315, + "type": "Anything Everywhere?", + "pos": [ + -1276.2767333984375, + -1218.492431640625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "*", + "link": 524, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "audio", + ".*" + ] + }, + { + "id": 316, + "type": "VHS_LoadAudioUpload", + "pos": [ + -1802.77734375, + -802.9659423828125 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 491, + 503, + 504, + 524, + 527 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Delta Deez - Songfinch - Out the Mud.mp3", + "start_time": 15, + "duration": 3, + "choose audio to upload": "image" + } + }, + { + "id": 317, + "type": "MaskComposite", + "pos": [ + 2542.879638671875, + -1108.701904296875 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 57, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 525 }, + { + "name": "source", + "type": "MASK", + "link": 526 + } + ], + "outputs": [ { "name": "MASK", "type": "MASK", "links": [ - 485 + 531 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "FlexAudioVisualizerLine" + "Node name for S&R": "MaskComposite" }, "widgets_values": [ - 30, - 768, - 464, - 1, - "max_frequency", - "relative", - "None", - 0.5, - 0.5, - "line", - "frequency", - 0.5, - 180, - 64, - 200, - 10, - 5, 0, - true, 0, - 2048, - 200, - 8000 + "add" ] }, { - "id": 262, - "type": "FlexAudioVisualizerCircular", + "id": 318, + "type": "PreviewAudio", "pos": [ - 1092.5848849967588, - -422.28253825543106 + -1774.7421875, + -961.5587158203125 + ], + "size": [ + 315, + 76.00001525878906 ], - "size": { - "0": 403.20001220703125, - "1": 558 - }, "flags": {}, - "order": 41, + "order": 28, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 436 - }, - { - "name": "opt_feature", - "type": "FEATURE", - "link": 437 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": [ - 486 - ], - "shape": 3, - "slot_index": 1 + "link": 527 } ], + "outputs": [], "properties": { - "Node name for S&R": "FlexAudioVisualizerCircular" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - 30, - 768, - 464, - 1, - "max_frequency", - "relative", - "None", - 0.5, - 0.5, - "bar", - "frequency", - 0.5, - 90, - 360, - 2048, - 20, - 8000, - 150, - 4, - 100, - 150 + null ] }, { - "id": 276, + "id": 320, "type": "VHS_VideoCombine", "pos": [ - 7340.225901568219, - -1030.8519404684173 + 2800.19482421875, + -479.6005859375 ], "size": [ - 452.57537841796875, - 585.3476244608562 + 214.7587890625, + 467.69549560546875 ], "flags": {}, - "order": 57, + "order": 59, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 483 + "link": 530 }, { "name": "audio", "type": "AUDIO", - "link": 482 + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2647,510 +3087,477 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07551-audio.mp4", + "filename": "AnimateDiff_02388-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02388.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02388-audio.mp4" } } } }, { - "id": 212, - "type": "VHS_VideoCombine", + "id": 321, + "type": "MaskToImage", "pos": [ - 8854, - -1033 + 2596.95166015625, + -733.9804077148438 ], "size": [ - 452.57537841796875, - 586.04566276418 + 210, + 26 ], "flags": {}, - "order": 62, + "order": 58, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 478 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 340 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "name": "mask", + "type": "MASK", + "link": 531 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 530, + 532 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "MaskToImage" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07552-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "widgets_values": [] }, { - "id": 148, - "type": "VHS_VideoCombine", + "id": 282, + "type": "SetNode", "pos": [ - 1705.5848849967572, - -1132.2825382554306 + -1774.7413330078125, + -1071.558349609375 ], "size": [ 210, - 439 + 58 ], "flags": {}, - "order": 47, + "order": 24, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 427 - }, - { - "name": "audio", + "name": "AUDIO", "type": "AUDIO", - "link": 254 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "link": 491 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_audio", "properties": { - "Node name for S&R": "VHS_VideoCombine" + "previousName": "audio" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07539-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "widgets_values": [ + "audio" + ] }, { - "id": 149, - "type": "GetNode", - "pos": { - "0": 1687.585205078125, - "1": -1269.28271484375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 319, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 1071.8720703125, + -492.2303466796875 + ], + "size": [ + 504, + 558 + ], "flags": {}, - "order": 14, + "order": 50, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "AUDIO", + "name": "audio", "type": "AUDIO", + "link": 528 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 529, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", "links": [ - 254 - ], - "slot_index": 0 + 522 + ] } ], - "title": "Get_audio", - "properties": {}, + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, "widgets_values": [ - "audio" + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 90, + 495, + 2048, + 20, + 8000, + 150, + 2, + 100, + 150 ] }, { - "id": 153, - "type": "MaskCompositePlus", + "id": 323, + "type": "ImageCASBatch", "pos": [ - 1924.5848849967574, - -1546.2825382554306 + 10534.427734375, + -1164.3585205078125 + ], + "size": [ + 462, + 82 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 48, + "order": 72, "mode": 0, "inputs": [ { - "name": "mask1", - "type": "MASK", - "link": 484 - }, - { - "name": "mask2", - "type": "MASK", - "link": 485 + "name": "image", + "type": "IMAGE", + "link": 533 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 480 + 538 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "MaskCompositePlus" + "Node name for S&R": "ImageCASBatch" }, "widgets_values": [ - "add" + 0.8, + 4 ] }, { - "id": 155, - "type": "MaskCompositePlus", + "id": 324, + "type": "FlexImageHueShift", "pos": [ - 2109.584884996756, - -805.2825382554311 + 10044.1845703125, + -1108.841064453125 + ], + "size": [ + 378, + 194 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 49, + "order": 70, "mode": 0, "inputs": [ { - "name": "mask1", - "type": "MASK", - "link": 480 + "name": "images", + "type": "IMAGE", + "link": 540 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 534, + "shape": 7 }, { - "name": "mask2", + "name": "opt_mask", "type": "MASK", - "link": 486 + "link": 535, + "shape": 7 + }, + { + "name": "hue_shift", + "type": "INT", + "link": 536, + "widget": { + "name": "hue_shift" + } } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 359 + 533 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "MaskCompositePlus" + "Node name for S&R": "FlexImageHueShift" }, "widgets_values": [ - "add" + 1, + 0, + "hue_shift", + "relative", + 0 ] }, { - "id": 146, - "type": "GetNode", - "pos": { - "0": 2350.58349609375, - "1": -1523.28271484375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 325, + "type": "ColorPicker", + "pos": [ + 9213.7783203125, + -1214.458251953125 + ], + "size": [ + 220, + 380 + ], "flags": {}, - "order": 15, + "order": 17, "mode": 0, "inputs": [], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 250 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 151, - "type": "MaskToImage", - "pos": [ - 2503.584884996755, - -802.2825382554311 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ + "name": "hex_color", + "type": "STRING", + "links": null + }, { - "name": "mask", - "type": "MASK", - "link": 359 - } - ], - "outputs": [ + "name": "rgb_color", + "type": "STRING", + "links": null + }, { - "name": "IMAGE", - "type": "IMAGE", + "name": "hue_shift", + "type": "INT", "links": [ - 249, - 353 + 536 ], - "shape": 3, - "slot_index": 0 + "slot_index": 2 } ], "properties": { - "Node name for S&R": "MaskToImage" - } + "Node name for S&R": "ColorPicker" + }, + "widgets_values": [ + null, + "{\"hex\":\"#f429ff\",\"rgb\":\"244,41,255\",\"hue\":297}" + ], + "color": "#f429ff", + "rgb": "244,41,255", + "hue": 297 }, { - "id": 111, - "type": "CR LoRA Stack", + "id": 326, + "type": "AdvancedLuminanceMask", "pos": [ - 3230, - -799 + 9188.82421875, + -728.6874389648438 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 315, - "1": 342 - }, "flags": {}, - "order": 16, + "order": 69, "mode": 0, "inputs": [ { - "name": "lora_stack", - "type": "LORA_STACK", - "link": null + "name": "image", + "type": "IMAGE", + "link": 541 } ], "outputs": [ { - "name": "LORA_STACK", - "type": "LORA_STACK", + "name": "MASK", + "type": "MASK", "links": [ - 184 + 535 ], - "shape": 3, "slot_index": 0 }, { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 537 + ], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "CR LoRA Stack" + "Node name for S&R": "AdvancedLuminanceMask" }, "widgets_values": [ - "On", - "halloweenTech-202.safetensors", - 0.58, - 0.46, - "Off", - "add_detail.safetensors", - 1, - 1, - "Off", - "ral-acidzlime-sd15.safetensors", - 1, - 1 + 0.5, + 5, + 0.5, + 10, + 0.3 ] }, { - "id": 29, - "type": "CR LoRA Stack", + "id": 327, + "type": "VHS_VideoCombine", "pos": [ - 3575, - -765 + 10010.2294921875, + -837.1151733398438 + ], + "size": [ + 538.985595703125, + 662.635009765625 ], - "size": { - "0": 315, - "1": 342 - }, "flags": {}, - "order": 21, + "order": 71, "mode": 0, "inputs": [ { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 184 + "name": "images", + "type": "IMAGE", + "link": 537 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 289 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "show_help", - "type": "STRING", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "CR LoRA Stack" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "On", - "AnimateLCM_sd15_t2v_lora.safetensors", - 1, - 1, - "On", - "add_detail.safetensors", - 1, - 1, - "On", - "ral-acidzlime-sd15.safetensors", - 1, - 1 - ] + "widgets_values": { + "frame_rate": 33, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02391-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 33, + "workflow": "AnimateDiff_02391.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02391-audio.mp4" + } + } + } }, { - "id": 145, + "id": 328, "type": "VHS_VideoCombine", "pos": [ - 2787, - -1374 + 10667, + -855.6465454101562 ], "size": [ - 210, - 439 + 538.985595703125, + 662.635009765625 ], "flags": {}, - "order": 51, + "order": 73, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 249 + "link": 538 }, { "name": "audio", - "type": "*", - "link": 250 + "type": "AUDIO", + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3165,134 +3572,107 @@ "Node name for S&R": "VHS_VideoCombine" }, "widgets_values": { - "frame_rate": 30, + "frame_rate": 33, "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07550-audio.mp4", + "filename": "AnimateDiff_02392-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 33, + "workflow": "AnimateDiff_02392.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02392-audio.mp4" } } - } + } + }, + { + "id": 211, + "type": "VAEDecode", + "pos": [ + 8000.17041015625, + -1007.935546875 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 67, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 347 + }, + { + "name": "vae", + "type": "VAE", + "link": 338 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 539, + 540, + 541 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 322, + "type": "GetNode", + "pos": [ + 9622.5390625, + -1161.4991455078125 + ], + "size": [ + 303.388427734375, + 72.0495834350586 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 534 + ], + "slot_index": 0 + } + ], + "title": "Get_bass_feature", + "properties": {}, + "widgets_values": [ + "bass_feature" + ] } ], "links": [ - [ - 36, - 41, - 0, - 40, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 37, - 39, - 0, - 40, - 1, - "AUDIO" - ], - [ - 38, - 39, - 0, - 42, - 0, - "AUDIO" - ], - [ - 39, - 42, - 0, - 40, - 2, - "IMAGE" - ], - [ - 41, - 40, - 1, - 43, - 0, - "AUDIO" - ], - [ - 42, - 40, - 5, - 43, - 1, - "FEATURE_PIPE" - ], - [ - 48, - 39, - 0, - 45, - 0, - "*" - ], - [ - 56, - 39, - 0, - 49, - 0, - "AUDIO" - ], - [ - 58, - 43, - 0, - 51, - 0, - "FEATURE" - ], - [ - 59, - 51, - 0, - 52, - 0, - "IMAGE" - ], - [ - 110, - 43, - 0, - 70, - 0, - "FEATURE" - ], - [ - 111, - 70, - 1, - 71, - 0, - "IMAGE" - ], - [ - 162, - 42, - 0, - 101, - 0, - "*" - ], [ 184, 111, @@ -3301,30 +3681,6 @@ 0, "LORA_STACK" ], - [ - 249, - 151, - 0, - 145, - 0, - "IMAGE" - ], - [ - 250, - 146, - 0, - 145, - 1, - "AUDIO" - ], - [ - 254, - 149, - 0, - 148, - 1, - "AUDIO" - ], [ 270, 162, @@ -3491,347 +3847,676 @@ 0, 211, 0, - "LATENT" + "LATENT" + ], + [ + 354, + 216, + 0, + 162, + 0, + "IMAGE" + ], + [ + 411, + 209, + 0, + 213, + 3, + "LATENT" + ], + [ + 444, + 159, + 0, + 175, + 0, + "CONDITIONING" + ], + [ + 445, + 160, + 0, + 175, + 1, + "CONDITIONING" + ], + [ + 447, + 175, + 0, + 158, + 1, + "CONDITIONING" + ], + [ + 448, + 175, + 1, + 158, + 2, + "CONDITIONING" + ], + [ + 451, + 164, + 0, + 263, + 0, + "MODEL" + ], + [ + 452, + 263, + 0, + 213, + 0, + "MODEL" + ], + [ + 453, + 263, + 0, + 158, + 0, + "MODEL" + ], + [ + 475, + 158, + 0, + 209, + 0, + "LATENT" + ], + [ + 482, + 46, + 0, + 276, + 1, + "AUDIO" + ], + [ + 483, + 161, + 0, + 276, + 0, + "IMAGE" + ], + [ + 491, + 316, + 0, + 282, + 0, + "*" + ], + [ + 492, + 306, + 0, + 283, + 0, + "*" + ], + [ + 493, + 304, + 0, + 284, + 0, + "*" + ], + [ + 494, + 308, + 1, + 285, + 0, + "*" + ], + [ + 495, + 302, + 0, + 286, + 0, + "*" + ], + [ + 496, + 312, + 0, + 288, + 0, + "IMAGE" + ], + [ + 497, + 289, + 0, + 288, + 1, + "AUDIO" + ], + [ + 498, + 299, + 0, + 291, + 0, + "*" + ], + [ + 499, + 295, + 0, + 292, + 0, + "FLOAT" + ], + [ + 500, + 294, + 0, + 296, + 0, + "INT" + ], + [ + 501, + 293, + 0, + 297, + 0, + "INT" ], [ - 353, - 151, + 502, + 287, 0, - 216, + 298, 0, - "*" + "OPEN_UNMIX_MODEL" ], [ - 354, - 216, - 0, - 162, + 503, + 316, 0, - "IMAGE" + 298, + 1, + "AUDIO" ], [ - 359, - 155, + 504, + 316, 0, - 151, + 299, 0, - "MASK" + "AUDIO" ], [ - 360, - 70, + 505, + 299, + 2, + 300, 0, - 221, + "INT" + ], + [ + 506, + 298, + 3, + 301, 0, - "*" + "AUDIO" ], [ - 361, - 43, - 1, - 222, + 507, + 301, 0, - "*" + 302, + 0, + "FEATURE" ], [ - 375, - 229, - 1, - 230, + 508, + 302, 0, - "IMAGE" + 303, + 0, + "FEATURE" ], [ - 376, - 43, + 509, + 308, 0, - 229, + 304, 0, "FEATURE" ], [ - 377, - 229, + 510, + 304, 0, - 231, + 305, 0, - "*" + "FEATURE" ], [ - 411, - 209, + 511, + 308, 0, - 213, - 3, - "LATENT" + 306, + 0, + "FEATURE" ], [ - 415, - 254, + 512, + 306, + 0, + 307, 0, - 236, + "FEATURE" + ], + [ + 513, + 298, 1, + 308, + 0, "AUDIO" ], [ - 417, - 211, + 514, + 308, 0, - 256, + 309, 0, - "IMAGE" + "FEATURE" + ], + [ + 515, + 311, + 1, + 310, + 0, + "MASK" + ], + [ + 516, + 312, + 1, + 310, + 1, + "MASK" ], [ - 422, - 40, + 517, + 298, 2, - 258, + 311, 0, "AUDIO" ], [ - 423, - 70, + 518, + 306, 0, - 258, + 311, 1, "FEATURE" ], [ - 425, - 40, + 519, + 298, 2, - 259, + 312, 0, "AUDIO" ], [ - 426, - 70, + 520, + 306, 0, - 259, + 312, 1, "FEATURE" ], [ - 427, - 259, + 521, + 310, 0, - 148, + 313, 0, - "IMAGE" + "MASK" ], [ - 436, - 40, + 522, + 319, + 1, + 313, 1, - 262, + "MASK" + ], + [ + 523, + 313, 0, - "AUDIO" + 314, + 0, + "MASK" ], [ - 437, - 70, + 524, + 316, 0, - 262, - 1, - "FEATURE" + 315, + 0, + "AUDIO" ], [ - 444, - 159, + 525, + 314, 0, - 175, + 317, 0, - "CONDITIONING" + "MASK" ], [ - 445, - 160, + 526, + 313, 0, - 175, + 317, 1, - "CONDITIONING" + "MASK" ], [ - 447, - 175, + 527, + 316, 0, - 158, + 318, + 0, + "AUDIO" + ], + [ + 528, + 298, 1, - "CONDITIONING" + 319, + 0, + "AUDIO" ], [ - 448, - 175, + 529, + 306, + 0, + 319, 1, - 158, - 2, - "CONDITIONING" + "FEATURE" ], [ - 451, - 164, + 530, + 321, 0, - 263, + 320, 0, - "MODEL" + "IMAGE" ], [ - 452, - 263, + 531, + 317, 0, - 213, + 321, 0, - "MODEL" + "MASK" ], [ - 453, - 263, + 532, + 321, 0, - 158, + 216, 0, - "MODEL" + "*" ], [ - 459, - 40, - 3, - 266, + 533, + 324, 0, - "AUDIO" + 323, + 0, + "IMAGE" ], [ - 460, - 40, - 5, - 266, + 534, + 322, + 0, + 324, 1, - "FEATURE_PIPE" + "FEATURE" ], [ - 464, - 223, + 535, + 326, 0, - 270, + 324, + 2, + "MASK" + ], + [ + 536, + 325, + 2, + 324, + 3, + "INT" + ], + [ + 537, + 326, 1, - "FEATURE" + 327, + 0, + "IMAGE" ], [ - 465, - 224, + 538, + 323, 0, - 270, - 2, - "FEATURE_PIPE" + 328, + 0, + "IMAGE" ], [ - 467, - 270, + 539, + 211, 0, - 236, + 212, 0, "IMAGE" ], [ - 472, - 266, + 540, + 211, 0, - 272, + 324, 0, - "FEATURE" + "IMAGE" ], [ - 473, - 272, - 1, - 273, + 541, + 211, + 0, + 326, 0, "IMAGE" ], [ - 474, - 272, + 542, + 293, 0, - 267, + 299, + 1, + "INT" + ], + [ + 543, + 294, 0, - "FEATURE" + 299, + 2, + "INT" ], [ - 475, - 158, + 544, + 295, 0, - 209, + 299, + 3, + "FLOAT" + ], + [ + 545, + 294, 0, - "LATENT" + 301, + 1, + "INT" ], [ - 476, - 256, + 546, + 293, 0, - 270, + 301, + 2, + "INT" + ], + [ + 547, + 299, + 2, + 301, + 3, + "INT" + ], + [ + 548, + 295, 0, - "IMAGE" + 301, + 4, + "FLOAT" ], [ - 478, - 256, + 549, + 294, 0, - 212, + 308, + 1, + "INT" + ], + [ + 550, + 293, 0, - "IMAGE" + 308, + 2, + "INT" + ], + [ + 551, + 299, + 2, + 308, + 3, + "INT" ], [ - 480, - 153, + 552, + 295, 0, - 155, + 308, + 4, + "FLOAT" + ], + [ + 553, + 293, 0, - "MASK" + 311, + 2, + "INT" ], [ - 482, - 46, + 554, + 294, 0, - 276, - 1, - "AUDIO" + 311, + 3, + "INT" ], [ - 483, - 161, + 555, + 295, 0, - 276, + 311, + 4, + "FLOAT" + ], + [ + 556, + 293, 0, - "IMAGE" + 312, + 2, + "INT" ], [ - 484, - 258, - 1, - 153, + 557, + 294, 0, - "MASK" + 312, + 3, + "INT" ], [ - 485, - 259, - 1, - 153, + 558, + 295, + 0, + 312, + 4, + "FLOAT" + ], + [ + 559, + 316, + 0, + 320, 1, - "MASK" + "AUDIO" ], [ - 486, - 262, + 560, + 316, + 0, + 327, 1, - 155, + "AUDIO" + ], + [ + 561, + 316, + 0, + 328, 1, - "MASK" + "AUDIO" ] ], "groups": [ { + "id": 1, "title": "ipadap", "bounding": [ 3766, @@ -3841,21 +4526,23 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "samp", "bounding": [ - 6463, - -1160, + 6159.72998046875, + -1357.1234130859375, 1375, 755 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "samp22", "bounding": [ 3690, @@ -3865,9 +4552,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "adiff", "bounding": [ 5318, @@ -3877,9 +4565,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "model", "bounding": [ 3184, @@ -3889,9 +4578,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "controlnet", "bounding": [ 3731, @@ -3901,66 +4591,244 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} + }, + { + "id": 10, + "title": "Samp2", + "bounding": [ + 7568.78466796875, + -1346.960693359375, + 1500, + 756 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} }, { + "id": 11, "title": "Load Audio", "bounding": [ - -1828, - -1617, + -1855.362060546875, + -1685.65478515625, 2766, 1674 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 12, "title": "Audio vidualizers", "bounding": [ - 966, - -1920, + 938.6381225585938, + -1988.65478515625, 2148, 2246 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 13, "title": "Hue shift", "bounding": [ - 9407, - -1171, - 1987, - 771 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Samp2", - "bounding": [ - 7867, - -1165, - 1500, - 756 + 9146.779296875, + -1282.349365234375, + 2238.07421875, + 1190.408203125 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.10000000000000206, - "offset": { - "0": 5449.0137232868055, - "1": 6827.253539534981 + "scale": 0.3186308177103567, + "offset": [ + -5471.606559807217, + 2350.0575187866484 + ] + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "comfy-core": "0.3.12", + "efficiency-nodes-comfyui": "3ead4afd120833f3bffdefeca0d6545df8051798", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI_essentials": "33ff89fd354d8ec3ab6affb605a79a931b445d99" + }, + "ue_links": [ + { + "downstream": 299, + "downstream_slot": 1, + "upstream": "293", + "upstream_slot": 0, + "controller": 297, + "type": "INT" + }, + { + "downstream": 299, + "downstream_slot": 2, + "upstream": "294", + "upstream_slot": 0, + "controller": 296, + "type": "INT" + }, + { + "downstream": 299, + "downstream_slot": 3, + "upstream": "295", + "upstream_slot": 0, + "controller": 292, + "type": "FLOAT" + }, + { + "downstream": 301, + "downstream_slot": 1, + "upstream": "294", + "upstream_slot": 0, + "controller": 296, + "type": "INT" + }, + { + "downstream": 301, + "downstream_slot": 2, + "upstream": "293", + "upstream_slot": 0, + "controller": 297, + "type": "INT" + }, + { + "downstream": 301, + "downstream_slot": 3, + "upstream": "299", + "upstream_slot": 2, + "controller": 300, + "type": "INT" + }, + { + "downstream": 301, + "downstream_slot": 4, + "upstream": "295", + "upstream_slot": 0, + "controller": 292, + "type": "FLOAT" + }, + { + "downstream": 308, + "downstream_slot": 1, + "upstream": "294", + "upstream_slot": 0, + "controller": 296, + "type": "INT" + }, + { + "downstream": 308, + "downstream_slot": 2, + "upstream": "293", + "upstream_slot": 0, + "controller": 297, + "type": "INT" + }, + { + "downstream": 308, + "downstream_slot": 3, + "upstream": "299", + "upstream_slot": 2, + "controller": 300, + "type": "INT" + }, + { + "downstream": 308, + "downstream_slot": 4, + "upstream": "295", + "upstream_slot": 0, + "controller": 292, + "type": "FLOAT" + }, + { + "downstream": 311, + "downstream_slot": 2, + "upstream": "293", + "upstream_slot": 0, + "controller": 297, + "type": "INT" + }, + { + "downstream": 311, + "downstream_slot": 3, + "upstream": "294", + "upstream_slot": 0, + "controller": 296, + "type": "INT" + }, + { + "downstream": 311, + "downstream_slot": 4, + "upstream": "295", + "upstream_slot": 0, + "controller": 292, + "type": "FLOAT" + }, + { + "downstream": 312, + "downstream_slot": 2, + "upstream": "293", + "upstream_slot": 0, + "controller": 297, + "type": "INT" + }, + { + "downstream": 312, + "downstream_slot": 3, + "upstream": "294", + "upstream_slot": 0, + "controller": 296, + "type": "INT" + }, + { + "downstream": 312, + "downstream_slot": 4, + "upstream": "295", + "upstream_slot": 0, + "controller": 292, + "type": "FLOAT" + }, + { + "downstream": 320, + "downstream_slot": 1, + "upstream": "316", + "upstream_slot": 0, + "controller": 315, + "type": "AUDIO" + }, + { + "downstream": 327, + "downstream_slot": 1, + "upstream": "316", + "upstream_slot": 0, + "controller": 315, + "type": "AUDIO" + }, + { + "downstream": 328, + "downstream_slot": 1, + "upstream": "316", + "upstream_slot": 0, + "controller": 315, + "type": "AUDIO" } - } + ] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/depth_chamber_image.json b/examples/depth_chamber_image VERSION22.json similarity index 77% rename from examples/depth_chamber_image.json rename to examples/depth_chamber_image VERSION22.json index 0adcbb3..d4fab44 100644 --- a/examples/depth_chamber_image.json +++ b/examples/depth_chamber_image VERSION22.json @@ -1,21 +1,22 @@ { - "last_node_id": 178, - "last_link_id": 299, + "last_node_id": 185, + "last_link_id": 319, "nodes": [ { "id": 30, "type": "ADE_SigmaSchedule", "pos": [ - 3141.5897819464126, - 1118.8759046187079 + 3141.58984375, + 1118.8758544921875 + ], + "size": [ + 244.73928833007812, + 58 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, "order": 0, "mode": 0, + "inputs": [], "outputs": [ { "name": "SIGMA_SCHEDULE", @@ -23,8 +24,8 @@ "links": [ 51 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Sigma Schedule 🎭🅐🅓", @@ -44,13 +45,13 @@ "id": 32, "type": "ADE_MultivalDynamic", "pos": [ - 3131.5897819464126, - 768.8759046187079 + 3131.58984375, + 768.8759155273438 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 1, "mode": 0, @@ -58,7 +59,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -68,8 +70,8 @@ "links": [ 48 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -82,21 +84,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 34, "type": "ADE_MultivalDynamic", "pos": [ - 3131.5897819464126, - 658.8759046187079 + 3131.58984375, + 658.8759155273438 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 2, "mode": 0, @@ -104,7 +105,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -127,21 +129,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 35, "type": "ADE_CustomCFGSimple", "pos": [ - 3131.5897819464126, - 868.8759046187079 + 3131.58984375, + 868.8759155273438 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 3, "mode": 0, @@ -149,7 +150,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -171,38 +173,39 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 36, "type": "ADE_AnimateDiffSettings", "pos": [ - 3161.5897819464126, - 1218.8759046187079 + 3161.58984375, + 1218.8758544921875 + ], + "size": [ + 226.8000030517578, + 54 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, "flags": { "collapsed": true }, - "order": 38, + "order": 35, "mode": 0, "inputs": [ { "name": "pe_adjust", "type": "PE_ADJUST", "link": 53, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "weight_adjust", "type": "WEIGHT_ADJUST", "link": 54, - "slot_index": 1 + "slot_index": 1, + "shape": 7 } ], "outputs": [ @@ -223,21 +226,19 @@ "groupcolor": "#3f789e" } }, - "widgets_values": [ - "" - ] + "widgets_values": [] }, { "id": 37, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 3131.5897819464126, - 968.8759046187079 + 3131.58984375, + 968.8759155273438 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 4, "mode": 0, @@ -245,7 +246,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -269,29 +271,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 57, "type": "GetNode", - "pos": { - "0": 981.441162109375, - "1": 1401.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 981.441162109375, + 1401.961181640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 5, "mode": 0, @@ -310,27 +303,21 @@ "properties": {}, "widgets_values": [ "depth_maps" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 58, "type": "GetNode", - "pos": { - "0": 961.441162109375, - "1": 1551.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 961.441162109375, + 1551.961181640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 6, "mode": 0, @@ -358,12 +345,12 @@ 1430, -4640 ], - "size": { - "0": 210, - "1": 246 - }, + "size": [ + 210, + 246 + ], "flags": {}, - "order": 61, + "order": 56, "mode": 4, "inputs": [ { @@ -372,23 +359,25 @@ "link": 95 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewImage" - } + }, + "widgets_values": [] }, { "id": 19, "type": "EmptyImage", "pos": [ - -309.8733202685141, - -894.0264396732274 + -309.8733215332031, + -894.0264282226562 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 62, + "order": 57, "mode": 0, "inputs": [ { @@ -423,8 +412,8 @@ "links": [ 30 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -441,15 +430,15 @@ "id": 50, "type": "LineartStandardPreprocessor", "pos": [ - -2702.5557197546927, - -976.6574720262626 + -2702.5556640625, + -976.657470703125 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 106 - }, "flags": {}, - "order": 65, + "order": 61, "mode": 0, "inputs": [ { @@ -465,8 +454,8 @@ "links": [ 92 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -482,15 +471,15 @@ "id": 60, "type": "RepeatImageBatch", "pos": [ - -2335.555719754692, - -957.6574720262623 + -2335.5556640625, + -957.657470703125 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 72, + "order": 68, "mode": 0, "inputs": [ { @@ -502,10 +491,10 @@ "name": "amount", "type": "INT", "link": 90, + "slot_index": 1, "widget": { "name": "amount" - }, - "slot_index": 1 + } } ], "outputs": [ @@ -515,45 +504,45 @@ "links": [ 93 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "RepeatImageBatch" }, "widgets_values": [ - 60 + 30 ] }, { "id": 16, "type": "RepeatImageBatch", "pos": [ - -2338.555719754692, - -667.6574720262613 + -2338.5556640625, + -667.657470703125 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 73, + "order": 69, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 17 + "link": 311 }, { "name": "amount", "type": "INT", "link": 41, + "slot_index": 1, "widget": { "name": "amount" - }, - "slot_index": 1 + } } ], "outputs": [ @@ -563,28 +552,28 @@ "links": [ 77 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "RepeatImageBatch" }, "widgets_values": [ - 60 + 30 ] }, { "id": 33, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 3481.5897819464126, - 658.8759046187079 + 3481.58984375, + 658.8759155273438 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 7, "mode": 0, @@ -592,12 +581,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -607,8 +598,8 @@ "links": [ 44 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -637,39 +628,43 @@ "id": 29, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 3481.5897819464126, - 968.8759046187079 + 3481.58984375, + 968.8759155273438 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 37, + "order": 34, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 50, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": 51, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -686,6 +681,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -695,8 +696,8 @@ "links": [ 47 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -713,66 +714,25 @@ "comfy", 0, 0, - false, - "" + false ] }, - { - "id": 14, - "type": "DepthAnything_V2", - "pos": [ - -2688.433746544838, - -613.3686263142703 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 66, - "mode": 0, - "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 15, - "slot_index": 0 - }, - { - "name": "images", - "type": "IMAGE", - "link": 130 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 17 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, { "id": 86, "type": "Note", "pos": [ - 3160.2307942589186, - 250.7002531609014 + 3160.230712890625, + 250.70025634765625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 58 - }, "flags": {}, "order": 8, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -789,18 +749,18 @@ 1562, 458 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 74, + "order": 71, "mode": 0, "inputs": [ { "name": "pixels", "type": "IMAGE", - "link": 230 + "link": 303 }, { "name": "vae", @@ -815,13 +775,14 @@ "links": [ 67 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "VAEEncode" - } + }, + "widgets_values": [] }, { "id": 43, @@ -830,12 +791,12 @@ 1524, 612 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, + "size": [ + 254.40000915527344, + 66 + ], "flags": {}, - "order": 44, + "order": 41, "mode": 0, "inputs": [ { @@ -861,8 +822,8 @@ "links": [ 65 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CLIP", @@ -871,8 +832,8 @@ 63, 64 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "show_help", @@ -883,21 +844,22 @@ ], "properties": { "Node name for S&R": "CR Apply LoRA Stack" - } + }, + "widgets_values": [] }, { "id": 44, "type": "SetLatentNoiseMask", "pos": [ - 5196.2924473208695, - 361.47099519392407 + 5196.29248046875, + 361.47100830078125 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 102, + "order": 99, "mode": 0, "inputs": [ { @@ -918,27 +880,28 @@ "links": [ 68 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "SetLatentNoiseMask" - } + }, + "widgets_values": [] }, { "id": 64, "type": "ImageScale", "pos": [ - 4420.911603734175, - 290.661003053677 + 4420.91162109375, + 290.6610107421875 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 42, + "order": 39, "mode": 0, "inputs": [ { @@ -954,8 +917,8 @@ "links": [ 98 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -972,15 +935,15 @@ "id": 40, "type": "IPAdapterUnifiedLoader", "pos": [ - 4427.911603734175, - 481.6610030536765 + 4427.91162109375, + 481.6610107421875 + ], + "size": [ + 315, + 78 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 68, + "order": 64, "mode": 0, "inputs": [ { @@ -991,7 +954,8 @@ { "name": "ipadapter", "type": "IPADAPTER", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1001,8 +965,8 @@ "links": [ 57 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "ipadapter", @@ -1010,8 +974,8 @@ "links": [ 58 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -1028,12 +992,12 @@ 1937, 702 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, + "size": [ + 425.27801513671875, + 180.6060791015625 + ], "flags": {}, - "order": 57, + "order": 53, "mode": 0, "inputs": [ { @@ -1066,10 +1030,10 @@ 3114, 356 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, + "size": [ + 261.19134521484375, + 82 + ], "flags": {}, "order": 9, "mode": 0, @@ -1077,7 +1041,8 @@ { "name": "prev_motion_lora", "type": "MOTION_LORA", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1087,8 +1052,8 @@ "links": [ 45 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "AnimateDiff LoRA", @@ -1102,8 +1067,7 @@ }, "widgets_values": [ "LiquidAF-0-1.safetensors", - 0.8, - "" + 0.8 ] }, { @@ -1113,10 +1077,10 @@ 3115, 498 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, + "size": [ + 270.3999938964844, + 82 + ], "flags": {}, "order": 10, "mode": 0, @@ -1124,7 +1088,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1147,8 +1112,7 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { @@ -1158,13 +1122,14 @@ 1094, 453 ], - "size": { - "0": 315, - "1": 98 - }, + "size": [ + 315, + 98 + ], "flags": {}, "order": 11, "mode": 0, + "inputs": [], "outputs": [ { "name": "MODEL", @@ -1206,12 +1171,12 @@ 2524, 581 ], - "size": { - "0": 304.79998779296875, - "1": 66 - }, - "flags": {}, - "order": 69, + "size": [ + 304.79998779296875, + 66 + ], + "flags": {}, + "order": 65, "mode": 0, "inputs": [ { @@ -1228,7 +1193,8 @@ "name": "cnet_stack", "type": "CONTROL_NET_STACK", "link": 84, - "slot_index": 2 + "slot_index": 2, + "shape": 7 } ], "outputs": [ @@ -1238,8 +1204,8 @@ "links": [ 134 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CONDITIONING-", @@ -1247,8 +1213,8 @@ "links": [ 135 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -1259,13 +1225,14 @@ "groupcolor": "#3f789e" } }, + "widgets_values": [], "shape": 1 }, { "id": 88, "type": "Reroute", "pos": [ - 2860.8354071366402, + 2860.83544921875, 64 ], "size": [ @@ -1273,7 +1240,7 @@ 26 ], "flags": {}, - "order": 39, + "order": 36, "mode": 0, "inputs": [ { @@ -1301,7 +1268,7 @@ "id": 89, "type": "Reroute", "pos": [ - 2860.8354071366402, + 2860.83544921875, 105 ], "size": [ @@ -1309,7 +1276,7 @@ 26 ], "flags": {}, - "order": 77, + "order": 73, "mode": 0, "inputs": [ { @@ -1337,15 +1304,15 @@ "id": 90, "type": "Reroute", "pos": [ - 2860.8354071366402, - 143.3452987595907 + 2860.83544921875, + 143.3452911376953 ], "size": [ 75, 26 ], "flags": {}, - "order": 78, + "order": 74, "mode": 0, "inputs": [ { @@ -1381,7 +1348,7 @@ 26 ], "flags": {}, - "order": 100, + "order": 97, "mode": 0, "inputs": [ { @@ -1410,15 +1377,15 @@ "id": 100, "type": "SetLatentNoiseMask", "pos": [ - 6505.217366877503, - 369.41342322069596 + 6505.21728515625, + 369.4134216308594 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 108, + "order": 105, "mode": 0, "inputs": [ { @@ -1439,13 +1406,14 @@ "links": [ 153 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "SetLatentNoiseMask" - } + }, + "widgets_values": [] }, { "id": 17, @@ -1454,12 +1422,12 @@ -3900, -866 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 40, + "order": 37, "mode": 0, "inputs": [ { @@ -1476,15 +1444,15 @@ 122, 128 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "700 width", "type": "INT", "links": null, - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "1050 height", @@ -1501,7 +1469,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 11, @@ -1510,12 +1479,12 @@ -3251, -611 ], - "size": { - "0": 315, - "1": 58 - }, + "size": [ + 315, + 58 + ], "flags": {}, - "order": 64, + "order": 60, "mode": 0, "inputs": [ { @@ -1539,15 +1508,15 @@ "links": [ 110 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "RepeatImageBatch" }, "widgets_values": [ - 60 + 30 ] }, { @@ -1557,12 +1526,12 @@ -3652, -898 ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, + "size": [ + 310.7047424316406, + 238 + ], "flags": {}, - "order": 52, + "order": 48, "mode": 0, "inputs": [ { @@ -1573,7 +1542,8 @@ { "name": "get_image_size", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "width_input", @@ -1598,10 +1568,10 @@ "type": "IMAGE", "links": [ 129, - 130 + 310 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "width", @@ -1637,12 +1607,12 @@ -3691, -1010 ], - "size": { - "0": 315, - "1": 58 - }, + "size": [ + 315, + 58 + ], "flags": {}, - "order": 46, + "order": 45, "mode": 0, "inputs": [ { @@ -1666,36 +1636,28 @@ "links": [ 164 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "RepeatImageBatch" }, "widgets_values": [ - 60 + 30 ] }, { "id": 104, "type": "SetNode", - "pos": { - "0": -3212, - "1": -997, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -3212, + -997 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 58, "mode": 0, @@ -1719,29 +1681,23 @@ }, "widgets_values": [ "init_img" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 76, "type": "SetNode", - "pos": { - "0": -3106, - "1": -475, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -3106, + -475 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 71, + "order": 67, "mode": 0, "inputs": [ { @@ -1763,29 +1719,23 @@ }, "widgets_values": [ "init_images_resize" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 52, "type": "SetNode", - "pos": { - "0": -1992, - "1": -966, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -1992, + -966 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 79, + "order": 75, "mode": 0, "inputs": [ { @@ -1807,7 +1757,9 @@ }, "widgets_values": [ "lineart" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 115, @@ -1816,13 +1768,15 @@ -2340, -859 ], - "size": { - "0": 363.1609191894531, - "1": 148.97213745117188 - }, + "size": [ + 363.1609191894531, + 148.97213745117188 + ], "flags": {}, "order": 12, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1836,16 +1790,18 @@ "id": 72, "type": "Note", "pos": [ - -326.87332026851414, - -1087.026439673227 + -326.8733215332031, + -1087.0264892578125 + ], + "size": [ + 357.3516845703125, + 135.6949462890625 ], - "size": { - "0": 357.3516845703125, - "1": 135.6949462890625 - }, "flags": {}, "order": 13, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1862,13 +1818,15 @@ 1490, 809 ], - "size": { - "0": 380.91632080078125, - "1": 230.8916015625 - }, + "size": [ + 380.91632080078125, + 230.8916015625 + ], "flags": {}, "order": 14, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1890,7 +1848,7 @@ 26 ], "flags": {}, - "order": 82, + "order": 78, "mode": 0, "inputs": [ { @@ -1927,7 +1885,7 @@ 26 ], "flags": {}, - "order": 83, + "order": 79, "mode": 0, "inputs": [ { @@ -1956,16 +1914,18 @@ "id": 125, "type": "Note", "pos": [ - 4337.8690841450125, - 699.6818760329338 + 4337.869140625, + 699.681884765625 + ], + "size": [ + 336.1888122558594, + 206.84153747558594 ], - "size": { - "0": 336.1888122558594, - "1": 206.84153747558594 - }, "flags": {}, "order": 15, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1982,12 +1942,12 @@ 4798, 303 ], - "size": { - "0": 315, - "1": 278 - }, + "size": [ + 315, + 278 + ], "flags": {}, - "order": 76, + "order": 72, "mode": 0, "inputs": [ { @@ -2009,17 +1969,20 @@ { "name": "image_negative", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "attn_mask", "type": "MASK", - "link": null + "link": null, + "shape": 7 }, { "name": "clip_vision", "type": "CLIP_VISION", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2030,8 +1993,8 @@ 66, 112 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2050,16 +2013,17 @@ "id": 10, "type": "LoadImage", "pos": [ - -4271.1294444297155, - -976.9201161093288 + -4271.12939453125, + -976.9201049804688 + ], + "size": [ + 315, + 314 ], - "size": { - "0": 315, - "1": 314 - }, "flags": {}, "order": 16, "mode": 0, + "inputs": [], "outputs": [ { "name": "IMAGE", @@ -2068,8 +2032,8 @@ 18, 163 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "MASK", @@ -2090,15 +2054,15 @@ "id": 122, "type": "FeatureMixer", "pos": [ - -72.21454028302455, - -5668.483763498456 + -72.21453857421875, + -5668.48388671875 + ], + "size": [ + 367.79998779296875, + 342 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 47, + "order": 42, "mode": 4, "inputs": [ { @@ -2114,8 +2078,8 @@ "links": [ 199 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_VISUALIZATION", @@ -2123,8 +2087,8 @@ "links": [ 196 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -2148,22 +2112,14 @@ { "id": 77, "type": "GetNode", - "pos": { - "0": 1038, - "1": 291, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1038, + 291 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 17, "mode": 0, @@ -2174,7 +2130,7 @@ "type": "IMAGE", "links": [ 220, - 228 + 300 ], "slot_index": 0 } @@ -2186,121 +2142,60 @@ ] }, { - "id": 133, - "type": "MaskToImage", + "id": 68, + "type": "Note", "pos": [ - 1292, - -368 + -4267.12939453125, + -555.9201049804688 + ], + "size": [ + 372.2613220214844, + 154.43922424316406 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 92, + "order": 18, "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 215 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 213, - 222 - ], - "shape": 3, - "slot_index": 0 - } - ], + "inputs": [], + "outputs": [], "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 139, - "type": "Image Batch", - "pos": [ - 1738, - -309 - ], - "size": { - "0": 210, - "1": 86 + "text": "" }, - "flags": {}, - "order": 95, - "mode": 0, - "inputs": [ - { - "name": "images_a", - "type": "IMAGE", - "link": 222 - }, - { - "name": "images_b", - "type": "IMAGE", - "link": 223 - }, - { - "name": "images_c", - "type": "IMAGE", - "link": null - }, - { - "name": "images_d", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 225 - ], - "shape": 3, - "slot_index": 0 - } + "widgets_values": [ + "1. Downscale the input image so the KSampler doesnt explode, but downscale another copy of the image LESS. This is specifically for the depth maps, to avoid losing detail in the maps.\n\nThen since we are dealing with a single image, we replicate it. Set that in num frames below.\n\nTo repeat the last frame and mask set extend last frame" ], - "properties": { - "Node name for S&R": "Image Batch" - } + "color": "#432", + "bgcolor": "#653" }, { - "id": 140, + "id": 136, "type": "RepeatImageBatch", "pos": [ - 1288, - -153 + 1290, + -60 ], - "size": { - "0": 315, - "1": 58 + "size": [ + 315, + 58 + ], + "flags": { + "collapsed": false }, - "flags": {}, - "order": 94, + "order": 49, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 232 + "link": 226 }, { "name": "amount", "type": "INT", - "link": 233, + "link": 218, + "slot_index": 1, "widget": { "name": "amount" - }, - "slot_index": 1 + } } ], "outputs": [ @@ -2308,127 +2203,17 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 223 + 301 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "RepeatImageBatch" }, "widgets_values": [ - 30 - ] - }, - { - "id": 137, - "type": "PrimitiveNode", - "pos": [ - -4241, - -198 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 18, - "mode": 0, - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 218, - 233 - ], - "slot_index": 0, - "widget": { - "name": "amount" - } - } - ], - "title": "Extend last frame", - "properties": { - "Run widget replace on values": false - }, - "widgets_values": [ - 30, - "fixed" - ] - }, - { - "id": 68, - "type": "Note", - "pos": [ - -4267.1294444297155, - -555.9201161093287 - ], - "size": { - "0": 372.2613220214844, - "1": 154.43922424316406 - }, - "flags": {}, - "order": 19, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "1. Downscale the input image so the KSampler doesnt explode, but downscale another copy of the image LESS. This is specifically for the depth maps, to avoid losing detail in the maps.\n\nThen since we are dealing with a single image, we replicate it. Set that in num frames below.\n\nTo repeat the last frame and mask set extend last frame" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 136, - "type": "RepeatImageBatch", - "pos": [ - 1290, - -60 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 226 - }, - { - "name": "amount", - "type": "INT", - "link": 218, - "widget": { - "name": "amount" - }, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 229 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "RepeatImageBatch" - }, - "widgets_values": [ - 30 + 16 ] }, { @@ -2438,12 +2223,12 @@ 1286, 39 ], - "size": { - "0": 315, - "1": 106 - }, + "size": [ + 315, + 106 + ], "flags": {}, - "order": 41, + "order": 38, "mode": 0, "inputs": [ { @@ -2459,8 +2244,8 @@ "links": [ 226 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2476,16 +2261,17 @@ "id": 41, "type": "LoadImage", "pos": [ - 4072.911603734174, - 274.6610030536769 + 4072.91162109375, + 274.6610107421875 + ], + "size": [ + 315, + 314.0000305175781 ], - "size": { - "0": 315, - "1": 314.0000305175781 - }, "flags": {}, - "order": 20, + "order": 19, "mode": 0, + "inputs": [], "outputs": [ { "name": "IMAGE", @@ -2493,8 +2279,8 @@ "links": [ 97 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "MASK", @@ -2516,20 +2302,21 @@ "type": "ControlNetLoaderAdvanced", "pos": [ 984, - 1273.8269519976366 + 1273.826904296875 + ], + "size": [ + 327.6000061035156, + 58 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, - "order": 21, + "order": 20, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", + "name": "tk_optional", "type": "TIMESTEP_KEYFRAME", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2559,20 +2346,21 @@ "type": "ControlNetLoaderAdvanced", "pos": [ 1339, - 1281.8269519976366 + 1281.826904296875 + ], + "size": [ + 327.6000061035156, + 58 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, - "order": 22, + "order": 21, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", + "name": "tk_optional", "type": "TIMESTEP_KEYFRAME", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2609,7 +2397,7 @@ 26 ], "flags": {}, - "order": 99, + "order": 96, "mode": 0, "inputs": [ { @@ -2640,12 +2428,12 @@ 1942, 483 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, + "size": [ + 422.84503173828125, + 164.31304931640625 + ], "flags": {}, - "order": 56, + "order": 52, "mode": 0, "inputs": [ { @@ -2678,18 +2466,19 @@ 1110, 683 ], - "size": { - "0": 315, - "1": 342 - }, + "size": [ + 315, + 342 + ], "flags": {}, - "order": 23, + "order": 22, "mode": 0, "inputs": [ { "name": "lora_stack", "type": "LORA_STACK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2699,8 +2488,8 @@ "links": [ 62 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "show_help", @@ -2727,83 +2516,6 @@ 1 ] }, - { - "id": 15, - "type": "DownloadAndLoadDepthAnythingV2Model", - "pos": [ - -2760, - -789 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 24, - "mode": 0, - "outputs": [ - { - "name": "da_v2_model", - "type": "DAMODEL", - "links": [ - 15, - 234 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" - }, - "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] - }, - { - "id": 146, - "type": "SetNode", - "pos": { - "0": -2391.599365234375, - "1": -384.9447021484375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "DAMODEL", - "type": "DAMODEL", - "link": 234 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_DA_MODEL", - "properties": { - "previousName": "DA_MODEL" - }, - "widgets_values": [ - "DA_MODEL" - ] - }, { "id": 8, "type": "VAEDecode", @@ -2811,12 +2523,12 @@ 5898, 437 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 105, + "order": 102, "mode": 0, "inputs": [ { @@ -2842,7 +2554,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 79, @@ -2851,12 +2564,12 @@ 5920, 273 ], - "size": { - "0": 315, - "1": 82 - }, + "size": [ + 315, + 82 + ], "flags": {}, - "order": 106, + "order": 103, "mode": 0, "inputs": [ { @@ -2872,8 +2585,8 @@ "links": [ 152 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2884,45 +2597,6 @@ 1.6500000000000001 ] }, - { - "id": 27, - "type": "PrimitiveNode", - "pos": [ - -4242, - -327 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 25, - "mode": 0, - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 41, - 42, - 90, - 162 - ], - "slot_index": 0, - "widget": { - "name": "amount" - } - } - ], - "title": "Num frames", - "properties": { - "Run widget replace on values": false - }, - "widgets_values": [ - 60, - "fixed" - ] - }, { "id": 91, "type": "Reroute", @@ -2935,7 +2609,7 @@ 26 ], "flags": {}, - "order": 50, + "order": 46, "mode": 0, "inputs": [ { @@ -2961,106 +2635,42 @@ } }, { - "id": 148, - "type": "DepthAnything_V2", + "id": 13, + "type": "VHS_VideoCombine", "pos": [ - 9728.386098469018, - 266.75074584506234 + 6206, + 403 + ], + "size": [ + 214.7587890625, + 640.13818359375 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 117, + "order": 104, "mode": 0, "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 235 - }, { "name": "images", "type": "IMAGE", - "link": 248 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 237, - 239 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, - { - "id": 154, - "type": "PreviewImage", - "pos": [ - 9946.386098469018, - 637.7507458450624 - ], - "size": { - "0": 481.87567138671875, - "1": 246 - }, - "flags": {}, - "order": 121, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 250 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 13, - "type": "VHS_VideoCombine", - "pos": [ - 6206, - 403 - ], - "size": [ - 210, - 609 - ], - "flags": {}, - "order": 107, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13 - }, + "link": 13 + }, { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3082,17 +2692,20 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03259.mp4", + "filename": "AnimateDiff_02423.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 20 + "frame_rate": 20, + "workflow": "AnimateDiff_02423.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02423.mp4" } } } @@ -3101,16 +2714,17 @@ "id": 113, "type": "UpscaleModelLoader", "pos": [ - 8493.811170891195, - 363.5270008378391 + 8493.8115234375, + 363.5270080566406 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 26, + "order": 23, "mode": 4, + "inputs": [], "outputs": [ { "name": "UPSCALE_MODEL", @@ -3135,12 +2749,12 @@ 5463, 294 ], - "size": { - "0": 315, - "1": 262 - }, + "size": [ + 315, + 262 + ], "flags": {}, - "order": 104, + "order": 101, "mode": 0, "inputs": [ { @@ -3188,74 +2802,19 @@ 1 ] }, - { - "id": 47, - "type": "Control Net Stacker", - "pos": [ - 1346, - 1457.8269519976366 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 76, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 81 - }, - { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": null - } - ], - "outputs": [ - { - "name": "CNET_STACK", - "type": "CONTROL_NET_STACK", - "links": [ - 83 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Control Net Stacker" - }, - "widgets_values": [ - 0.47000000000000003, - 0, - 0.5 - ], - "color": "#223322", - "bgcolor": "#335533", - "shape": 1 - }, { "id": 55, "type": "Control Net Stacker", "pos": [ 1776, - 1381.8269519976366 + 1381.826904296875 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 54, + "order": 50, "mode": 0, "inputs": [ { @@ -3272,7 +2831,8 @@ { "name": "cnet_stack", "type": "CONTROL_NET_STACK", - "link": 83 + "link": 83, + "shape": 7 } ], "outputs": [ @@ -3282,8 +2842,8 @@ "links": [ 84 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -3302,15 +2862,15 @@ "id": 28, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 3481.5897819464126, - 358.87590461870786 + 3481.58984375, + 358.87591552734375 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 55, + "order": 51, "mode": 0, "inputs": [ { @@ -3322,47 +2882,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 44, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 45, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": 46, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 47, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 48, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 49, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3372,8 +2940,8 @@ "links": [ 56 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -3401,7 +2969,7 @@ 26 ], "flags": {}, - "order": 63, + "order": 59, "mode": 0, "inputs": [ { @@ -3437,7 +3005,7 @@ 26 ], "flags": {}, - "order": 86, + "order": 82, "mode": 0, "inputs": [ { @@ -3473,7 +3041,7 @@ 26 ], "flags": {}, - "order": 87, + "order": 83, "mode": 0, "inputs": [ { @@ -3501,15 +3069,15 @@ "id": 78, "type": "KSampler", "pos": [ - 6735.217366877503, - 289.41342322069596 + 6735.21728515625, + 289.4134216308594 + ], + "size": [ + 315, + 262 ], - "size": { - "0": 315, - "1": 262 - }, "flags": {}, - "order": 109, + "order": 106, "mode": 0, "inputs": [ { @@ -3568,7 +3136,7 @@ 26 ], "flags": {}, - "order": 97, + "order": 94, "mode": 0, "inputs": [ { @@ -3597,20 +3165,20 @@ 2027, -354 ], - "size": { - "0": 315, - "1": 150 - }, + "size": [ + 315, + 150 + ], "flags": { "collapsed": false }, - "order": 96, + "order": 93, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 225 + "link": 306 } ], "outputs": [ @@ -3621,8 +3189,8 @@ 217, 270 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "IMAGE", @@ -3644,24 +3212,16 @@ { "id": 168, "type": "SetNode", - "pos": { - "0": 2392.9833984375, - "1": -244.07666015625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 2392.9833984375, + -244.07666015625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 98, + "order": 95, "mode": 0, "inputs": [ { @@ -3686,86 +3246,9 @@ }, "widgets_values": [ "depth_chamber" - ] - }, - { - "id": 82, - "type": "ImageResizeKJ", - "pos": [ - -3662, - -585 - ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 122 - }, - { - "name": "get_image_size", - "type": "IMAGE", - "link": null - }, - { - "name": "width_input", - "type": "INT", - "link": null, - "widget": { - "name": "width_input" - } - }, - { - "name": "height_input", - "type": "INT", - "link": null, - "widget": { - "name": "height_input" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 126 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": null, - "shape": 3 - } ], - "properties": { - "Node name for S&R": "ImageResizeKJ" - }, - "widgets_values": [ - 960, - 960, - "lanczos", - true, - 2, - 0, - 0, - "disabled" - ] + "color": "#1c5715", + "bgcolor": "#1f401b" }, { "id": 99, @@ -3779,7 +3262,7 @@ 26 ], "flags": {}, - "order": 101, + "order": 98, "mode": 0, "inputs": [ { @@ -3808,15 +3291,15 @@ "id": 80, "type": "VAEDecode", "pos": [ - 7092.217366877503, - 294.41342322069596 + 7092.21728515625, + 294.4134216308594 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 110, + "order": 107, "mode": 0, "inputs": [ { @@ -3842,7 +3325,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 172, @@ -3856,7 +3340,7 @@ 26 ], "flags": {}, - "order": 103, + "order": 100, "mode": 0, "inputs": [ { @@ -3881,59 +3365,18 @@ } }, { - "id": 131, - "type": "ImageInterval", + "id": 121, + "type": "TimeFeatureNode", "pos": [ - 1292, - -306 + -449.21453857421875, + -5524.48388671875 ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 93, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 213 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 232 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageInterval" - }, - "widgets_values": [ - 1, - 100000, - 0 - ] - }, - { - "id": 121, - "type": "TimeFeatureNode", - "pos": [ - -449.21454028302617, - -5524.483763498457 + "size": [ + 317.4000244140625, + 222 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 27, + "order": 24, "mode": 4, "inputs": [ { @@ -3949,8 +3392,8 @@ "links": [ 195 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_PIPE", @@ -3958,8 +3401,8 @@ "links": [ 193 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -3969,6 +3412,9 @@ 30, "smooth", 0.4, + 0, + 512, + 30, 0 ] }, @@ -3976,15 +3422,15 @@ "id": 123, "type": "PreviewImage", "pos": [ - 446.7854597169757, - -5708.483763498455 + 446.78546142578125, + -5708.48388671875 + ], + "size": [ + 443.01776123046875, + 260.46453857421875 ], - "size": { - "0": 443.01776123046875, - "1": 260.46453857421875 - }, "flags": {}, - "order": 60, + "order": 55, "mode": 4, "inputs": [ { @@ -3993,23 +3439,25 @@ "link": 196 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewImage" - } + }, + "widgets_values": [] }, { "id": 69, "type": "FlexMaskDepthChamber", "pos": [ - 487.78545971697525, - -5416.483763498458 + 487.78546142578125, + -5416.48388671875 + ], + "size": [ + 344.3999938964844, + 334 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, "flags": {}, - "order": 59, + "order": 54, "mode": 4, "inputs": [ { @@ -4018,14 +3466,15 @@ "link": null }, { - "name": "feature", - "type": "FEATURE", + "name": "depth_map", + "type": "IMAGE", "link": 199 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 193 + "name": "opt_feature", + "type": "FEATURE", + "link": 193, + "shape": 7 }, { "name": "depth_map", @@ -4038,8 +3487,8 @@ "name": "MASK", "type": "MASK", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4054,7 +3503,8 @@ 1, 0.66, "both", - "move_back" + "move_back", + 0 ] }, { @@ -4064,12 +3514,12 @@ 127, -4746 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, + "size": [ + 344.3999938964844, + 334 + ], "flags": {}, - "order": 28, + "order": 25, "mode": 4, "inputs": [ { @@ -4078,14 +3528,15 @@ "link": null }, { - "name": "feature", - "type": "FEATURE", + "name": "depth_map", + "type": "IMAGE", "link": null }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 }, { "name": "depth_map", @@ -4098,8 +3549,8 @@ "name": "MASK", "type": "MASK", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4114,7 +3565,8 @@ 0.12, 0.21, "both", - "expand" + "expand", + 0 ] }, { @@ -4124,12 +3576,12 @@ 610, -4500 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, + "size": [ + 317.4000244140625, + 222 + ], "flags": {}, - "order": 29, + "order": 26, "mode": 4, "inputs": [ { @@ -4145,15 +3597,15 @@ "links": [ 94 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_PIPE", "type": "FEATURE_PIPE", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -4163,6 +3615,9 @@ 20, "bounce", 0.5, + 0, + 512, + 30, 0 ] }, @@ -4173,12 +3628,12 @@ 1010, -4620 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, + "size": [ + 367.79998779296875, + 342 + ], "flags": {}, - "order": 48, + "order": 43, "mode": 4, "inputs": [ { @@ -4192,8 +3647,8 @@ "name": "FEATURE", "type": "FEATURE", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_VISUALIZATION", @@ -4201,8 +3656,8 @@ "links": [ 95 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -4227,16 +3682,18 @@ "id": 71, "type": "Note", "pos": [ - -1428.9870702311473, - -1013.2101283245443 + -1428.987060546875, + -1013.2101440429688 + ], + "size": [ + 344.94537353515625, + 142.8384552001953 ], - "size": { - "0": 344.94537353515625, - "1": 142.8384552001953 - }, "flags": {}, - "order": 30, + "order": 27, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -4247,124 +3704,18 @@ "bgcolor": "#653" }, { - "id": 128, - "type": "TimeFeatureNode", + "id": 74, + "type": "GetNode", "pos": [ - -1422.9870702311473, - -715.2101283245419 - ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 84, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 286 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 209 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 202 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - 30, - "accelerate", - 0.4, - 0 - ] - }, - { - "id": 49, - "type": "SetNode", - "pos": { - "0": -1970, - "1": -676, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 77 - } + -576, + -833 ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 286 - ], - "slot_index": 0 - } + "size": [ + 210, + 58 ], - "title": "Set_depth_maps", - "properties": { - "previousName": "depth_maps" - }, - "widgets_values": [ - "depth_maps" - ] - }, - { - "id": 74, - "type": "GetNode", - "pos": { - "0": -576, - "1": -833, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 31, + "order": 28, "mode": 0, "inputs": [], "outputs": [ @@ -4373,7 +3724,7 @@ "type": "IMAGE", "links": [ 108, - 203 + 317 ], "slot_index": 0 } @@ -4382,7 +3733,9 @@ "properties": {}, "widgets_values": [ "depth_maps" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 20, @@ -4391,12 +3744,12 @@ -564, -1048 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 49, + "order": 44, "mode": 0, "inputs": [ { @@ -4410,40 +3763,41 @@ "name": "image", "type": "IMAGE", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "852 width", + "name": "512 width", "type": "INT", "links": [ 26 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "1280 height", + "name": "769 height", "type": "INT", "links": [ 27 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "60 count", + "name": "30 count", "type": "INT", "links": [ 103 ], - "shape": 3, - "slot_index": 3 + "slot_index": 3, + "shape": 3 } ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 134, @@ -4457,13 +3811,13 @@ 26 ], "flags": {}, - "order": 90, + "order": 87, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 214 + "link": 319 } ], "outputs": [ @@ -4482,174 +3836,66 @@ } }, { - "id": 21, - "type": "_mfc", + "id": 114, + "type": "Note", "pos": [ - -317, - -703 + 71, + -1074 + ], + "size": [ + 484.20526123046875, + 158.15316772460938 ], - "size": { - "0": 315, - "1": 150 + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" }, + "widgets_values": [ + "see above for additional example configuration of this node that i left behind. You can do a lot" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 25, + "type": "MaskToImage", + "pos": [ + 595, + -1044 + ], + "size": [ + 210, + 26 + ], "flags": {}, - "order": 70, + "order": 86, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 30 + "name": "mask", + "type": "MASK", + "link": 318 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 200 + 37 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, + "slot_index": 0, "shape": 3 } ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 0, - 0, - 0 - ] - }, - { - "id": 127, - "type": "FlexMaskDepthChamber", - "pos": [ - 105, - -839 - ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, - "flags": {}, - "order": 88, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 200 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 209 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 202 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 203 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 207, - 214 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskDepthChamber" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.05, - 0, - "z_front", - "move_forward" - ] - }, - { - "id": 114, - "type": "Note", - "pos": [ - 71, - -1074 - ], - "size": { - "0": 484.20526123046875, - "1": 158.15316772460938 - }, - "flags": {}, - "order": 32, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "see above for additional example configuration of this node that i left behind. You can do a lot" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 25, - "type": "MaskToImage", - "pos": [ - 595, - -1044 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 89, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 207 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 37 - ], - "shape": 3, - "slot_index": 0 - } - ], "properties": { "Node name for S&R": "MaskToImage" - } + }, + "widgets_values": [] }, { "id": 24, @@ -4659,11 +3905,11 @@ -1072 ], "size": [ - 210, - 608 + 214.7587890625, + 643.1812744140625 ], "flags": {}, - "order": 91, + "order": 88, "mode": 0, "inputs": [ { @@ -4674,17 +3920,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -4706,17 +3955,20 @@ "pix_fmt": "yuv420p", "crf": 14, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03258.mp4", + "filename": "AnimateDiff_02422.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 16 + "frame_rate": 16, + "workflow": "AnimateDiff_02422.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02422.mp4" } } } @@ -4728,13 +3980,15 @@ 180, 232 ], - "size": { - "0": 565.3340454101562, - "1": 455.6415710449219 - }, + "size": [ + 565.3340454101562, + 455.6415710449219 + ], "flags": {}, - "order": 33, + "order": 30, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -4751,12 +4005,12 @@ 7108, 435 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 111, + "order": 108, "mode": 0, "inputs": [ { @@ -4772,29 +4026,29 @@ "links": [ 287 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "1056 width", + "name": "width", "type": "INT", "links": [ 283 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "1584 height", + "name": "height", "type": "INT", "links": [ 284 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "90 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -4802,7 +4056,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 143, @@ -4811,13 +4066,15 @@ 2004, -117 ], - "size": { - "0": 464.4046630859375, - "1": 224.58644104003906 - }, + "size": [ + 464.4046630859375, + 224.58644104003906 + ], "flags": {}, - "order": 34, + "order": 31, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -4828,76 +4085,118 @@ "bgcolor": "#653" }, { - "id": 141, - "type": "Image Batch", + "id": 175, + "type": "Reroute", "pos": [ - 1736, - -96 + 2859.594970703125, + -35.33431625366211 + ], + "size": [ + 75, + 26 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 67, + "order": 70, "mode": 0, "inputs": [ { - "name": "images_a", + "name": "", + "type": "*", + "link": 302 + } + ], + "outputs": [ + { + "name": "", "type": "IMAGE", - "link": 228 - }, + "links": [ + 289 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 174, + "type": "ImageScale", + "pos": [ + 7596, + 262 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 109, + "mode": 0, + "inputs": [ { - "name": "images_b", + "name": "image", "type": "IMAGE", - "link": 229 + "link": 292 }, { - "name": "images_c", - "type": "IMAGE", - "link": null + "name": "width", + "type": "INT", + "link": 283, + "widget": { + "name": "width" + } }, { - "name": "images_d", - "type": "IMAGE", - "link": null + "name": "height", + "type": "INT", + "link": 284, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "image", + "name": "IMAGE", "type": "IMAGE", "links": [ - 230, - 288 + 285 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "Image Batch" - } + "Node name for S&R": "ImageScale" + }, + "widgets_values": [ + "nearest-exact", + 512, + 512, + "disabled" + ] }, { - "id": 175, + "id": 176, "type": "Reroute", "pos": [ - 2859.5948525759013, - -35.33431721779152 + 7380, + -40 ], "size": [ 75, 26 ], "flags": {}, - "order": 75, + "order": 77, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 288 + "link": 289 } ], "outputs": [ @@ -4905,7 +4204,7 @@ "name": "", "type": "IMAGE", "links": [ - 289 + 291 ], "slot_index": 0 } @@ -4916,168 +4215,131 @@ } }, { - "id": 150, - "type": "VHS_VideoCombine", + "id": 177, + "type": "GetImageSizeAndCount", "pos": [ - 10530.386098469018, - 294.75074584506234 + 7534.39013671875, + -57.429298400878906 ], "size": [ 210, - 609 + 86 ], "flags": {}, - "order": 122, + "order": 81, "mode": 0, "inputs": [ { - "name": "images", + "name": "image", + "type": "IMAGE", + "link": 291 + } + ], + "outputs": [ + { + "name": "image", "type": "IMAGE", - "link": 242 + "links": [ + 292 + ], + "slot_index": 0, + "shape": 3 }, { - "name": "audio", - "type": "AUDIO", - "link": null + "name": "width", + "type": "INT", + "links": null, + "shape": 3 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "height", + "type": "INT", + "links": null, + "shape": 3 }, { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", + "name": "count", + "type": "INT", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "GetImageSizeAndCount" }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 16, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03261.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 20 - } - } - } + "widgets_values": [] }, { - "id": 153, - "type": "FeatureMixer", + "id": 170, + "type": "ImageCompositeMasked", "pos": [ - 9464, - 573 + 7981, + 278 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 119, + "order": 110, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 249 + "name": "destination", + "type": "IMAGE", + "link": 285 + }, + { + "name": "source", + "type": "IMAGE", + "link": 287 + }, + { + "name": "mask", + "type": "MASK", + "link": 274, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 251 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", + "name": "IMAGE", "type": "IMAGE", "links": [ - 250 + 295 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "ImageCompositeMasked" }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, 0, 0, - 1, - 0.5, false ] }, { - "id": 145, - "type": "FlexImageParallax", + "id": 111, + "type": "ImageCASharpening+", "pos": [ - 10091, - 273 + 8503, + 537 + ], + "size": [ + 310.79998779296875, + 58 ], - "size": { - "0": 315, - "1": 238 - }, "flags": {}, - "order": 120, - "mode": 0, + "order": 111, + "mode": 4, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 247 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 251 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 241 - }, - { - "name": "depth_map", + "name": "image", "type": "IMAGE", - "link": 237 + "link": 295 } ], "outputs": [ @@ -5085,355 +4347,751 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 242 + 298 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "FlexImageParallax" + "Node name for S&R": "ImageCASharpening+" }, "widgets_values": [ - 1, - 0, - "shift_x", - "relative", - 0.01, - 0 + 0.8 ] }, { - "id": 149, - "type": "TimeFeatureNode", + "id": 112, + "type": "ImageUpscaleWithModel", "pos": [ - 9472, - 377 + 8851, + 407 + ], + "size": [ + 241.79998779296875, + 46 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 118, - "mode": 0, + "order": 112, + "mode": 4, "inputs": [ { - "name": "video_frames", + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 175, + "slot_index": 0 + }, + { + "name": "image", "type": "IMAGE", - "link": 239 + "link": 298 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 249 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 241 + 177 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "TimeFeatureNode" + "Node name for S&R": "ImageUpscaleWithModel" }, - "widgets_values": [ - 20, - "accelerate", - 0.1, - 0.3 - ] + "widgets_values": [] }, { - "id": 155, - "type": "Note", + "id": 133, + "type": "MaskToImage", "pos": [ - 9936, - 87 + 1292, + -368 + ], + "size": [ + 210, + 26 ], - "size": { - "0": 434.9312438964844, - "1": 112.82051086425781 - }, "flags": {}, - "order": 35, + "order": 89, "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 215 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 213, + 304 + ], + "slot_index": 0, + "shape": 3 + } + ], "properties": { - "text": "" + "Node name for S&R": "MaskToImage" }, - "widgets_values": [ - "optionally, add parallax for additional rub. To accomplish this, we get new depth maps that include everything the AI generated" - ], - "color": "#432", - "bgcolor": "#653" + "widgets_values": [] }, { - "id": 147, - "type": "GetNode", - "pos": { - "0": 9467, - "1": 245, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 140, + "type": "RepeatImageBatch", + "pos": [ + 1288, + -153 + ], + "size": [ + 315, + 58 + ], "flags": {}, - "order": 36, + "order": 91, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 232 + }, + { + "name": "amount", + "type": "INT", + "link": 233, + "slot_index": 1, + "widget": { + "name": "amount" + } + } + ], "outputs": [ { - "name": "DAMODEL", - "type": "DAMODEL", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 235 + 305 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], - "title": "Get_DA_MODEL", - "properties": {}, + "properties": { + "Node name for S&R": "RepeatImageBatch" + }, "widgets_values": [ - "DA_MODEL" + 16 ] }, { - "id": 174, - "type": "ImageScale", + "id": 131, + "type": "ImageInterval", "pos": [ - 7596, - 262 + 1296.05419921875, + -295.1895446777344 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 112, + "order": 90, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 292 - }, + "link": 213 + } + ], + "outputs": [ { - "name": "width", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 232 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageInterval" + }, + "widgets_values": [ + 1, + 100000, + 0 + ] + }, + { + "id": 180, + "type": "ImageBatchMulti", + "pos": [ + 1726.151611328125, + -96.15489196777344 + ], + "size": [ + 210, + 102 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 300 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 301 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 302, + 303 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + 2, + null + ] + }, + { + "id": 179, + "type": "ImageBatchMulti", + "pos": [ + 1717.0975341796875, + -302.49951171875 + ], + "size": [ + 210, + 102 + ], + "flags": {}, + "order": 92, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 304 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 305 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 306 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + 2, + null + ] + }, + { + "id": 47, + "type": "Control Net Stacker", + "pos": [ + 1373.688720703125, + 1436.598388671875 + ], + "size": [ + 315, + 146 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 76, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 81 + }, + { + "name": "cnet_stack", + "type": "CONTROL_NET_STACK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "CNET_STACK", + "type": "CONTROL_NET_STACK", + "links": [ + 83 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "Control Net Stacker" + }, + "widgets_values": [ + 0.47000000000000003, + 0, + 0.5 + ], + "color": "#223322", + "bgcolor": "#335533", + "shape": 1 + }, + { + "id": 82, + "type": "ImageResizeKJ", + "pos": [ + -3643.572998046875, + -572.7154541015625 + ], + "size": [ + 310.7047424316406, + 238 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 122 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", "type": "INT", - "link": 283, + "link": null, "widget": { - "name": "width" + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": null, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 126 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ" + }, + "widgets_values": [ + 960, + 960, + "lanczos", + true, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 27, + "type": "PrimitiveNode", + "pos": [ + -4242, + -327 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 41, + 42, + 90, + 162 + ], + "slot_index": 0, + "widget": { + "name": "amount" + } + } + ], + "title": "Num frames", + "properties": { + "Run widget replace on values": false + }, + "widgets_values": [ + 30, + "fixed" + ] + }, + { + "id": 137, + "type": "PrimitiveNode", + "pos": [ + -4241, + -198 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 218, + 233 + ], + "slot_index": 0, + "widget": { + "name": "amount" } + } + ], + "title": "Extend last frame", + "properties": { + "Run widget replace on values": false + }, + "widgets_values": [ + 16, + "fixed" + ] + }, + { + "id": 49, + "type": "SetNode", + "pos": [ + -1970, + -676 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 77 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 312 + ], + "slot_index": 0 + } + ], + "title": "Set_depth_maps", + "properties": { + "previousName": "depth_maps" + }, + "widgets_values": [ + "depth_maps" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 183, + "type": "GetImageSizeAndCount", + "pos": [ + -1874.748291015625, + -838.0999755859375 + ], + "size": [ + 277.20001220703125, + 86 + ], + "flags": {}, + "order": 80, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 312 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null }, { - "name": "height", + "name": "512 width", + "type": "INT", + "links": null + }, + { + "name": "769 height", + "type": "INT", + "links": null + }, + { + "name": "30 count", + "type": "INT", + "links": [ + 313 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + } + }, + { + "id": 184, + "type": "TimeFeatureNode", + "pos": [ + -1312.18017578125, + -784.1268310546875 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ + { + "name": "frame_count", "type": "INT", - "link": 284, + "link": 313, "widget": { - "name": "height" + "name": "frame_count" } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 285 + 316 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "ImageScale" + "Node name for S&R": "TimeFeatureNode" }, "widgets_values": [ - "nearest-exact", + "smooth", + 30, + 30, 512, 512, - "disabled" + 30, + 0 ] }, { - "id": 176, - "type": "Reroute", + "id": 185, + "type": "FlexMaskDepthChamber", "pos": [ - 7380, - -40 + 105, + -839 ], "size": [ - 75, - 26 + 415.8000183105469, + 314 ], "flags": {}, - "order": 81, + "order": 85, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 289 + "name": "masks", + "type": "MASK", + "link": 315 + }, + { + "name": "depth_map", + "type": "IMAGE", + "link": 317 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 316, + "shape": 7 } ], "outputs": [ { - "name": "", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 291 - ], - "slot_index": 0 + 318, + 319 + ] } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "FlexMaskDepthChamber" + }, + "widgets_values": [ + 1, + 0, + "z_front", + "move_forward", + false, + 0, + 0, + 1, + 0.05, + 0 + ] }, { - "id": 177, - "type": "GetImageSizeAndCount", + "id": 21, + "type": "_mfc", "pos": [ - 7534.390205834786, - -57.429299055237095 + -302.1356201171875, + -700.0270385742188 + ], + "size": [ + 315, + 150 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 85, + "order": 66, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 291 + "link": 30 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 292 + 315 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "640 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "960 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "90 count", - "type": "INT", - "links": null, + "slot_index": 0, "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 170, - "type": "ImageCompositeMasked", - "pos": [ - 7981, - 278 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 113, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 285 - }, - { - "name": "source", - "type": "IMAGE", - "link": 287 }, - { - "name": "mask", - "type": "MASK", - "link": 274 - } - ], - "outputs": [ { "name": "IMAGE", "type": "IMAGE", - "links": [ - 295 - ], - "shape": 3, - "slot_index": 0 + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "ImageCompositeMasked" + "Node name for S&R": "_mfc" }, "widgets_values": [ 0, 0, - false + 0, + 0 ] }, { - "id": 111, - "type": "ImageCASharpening+", + "id": 182, + "type": "AIO_Preprocessor", "pos": [ - 8503, - 537 + -2755.53662109375, + -673.705810546875 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 310.79998779296875, - "1": 58 - }, "flags": {}, - "order": 114, - "mode": 4, + "order": 62, + "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 295 + "link": 310 } ], "outputs": [ @@ -5441,17 +5099,17 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 298 + 311 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "ImageCASharpening+" + "Node name for S&R": "AIO_Preprocessor" }, "widgets_values": [ - 0.8 + "DepthAnythingV2Preprocessor", + 512 ] }, { @@ -5462,12 +5120,12 @@ 285 ], "size": [ - 210, - 609 + 214.7587890625, + 334 ], "flags": {}, - "order": 116, - "mode": 4, + "order": 113, + "mode": 0, "inputs": [ { "name": "images", @@ -5477,17 +5135,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -5509,6 +5170,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -5523,50 +5185,6 @@ } } } - }, - { - "id": 112, - "type": "ImageUpscaleWithModel", - "pos": [ - 8851, - 407 - ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 115, - "mode": 4, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 175, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 298 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 177, - 247, - 248 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - } } ], "links": [ @@ -5586,22 +5204,6 @@ 0, "IMAGE" ], - [ - 15, - 15, - 0, - 14, - 0, - "DAMODEL" - ], - [ - 17, - 14, - 0, - 16, - 0, - "IMAGE" - ], [ 18, 10, @@ -6042,14 +5644,6 @@ 0, "IMAGE" ], - [ - 130, - 85, - 0, - 14, - 1, - "IMAGE" - ], [ 133, 4, @@ -6277,56 +5871,16 @@ [ 196, 122, - 1, - 123, - 0, - "IMAGE" - ], - [ - 199, - 122, - 0, - 69, - 1, - "FEATURE" - ], - [ - 200, - 21, - 0, - 127, - 0, - "MASK" - ], - [ - 202, - 128, - 1, - 127, - 2, - "FEATURE_PIPE" - ], - [ - 203, - 74, - 0, - 127, - 3, - "IMAGE" - ], - [ - 207, - 127, - 0, - 25, + 1, + 123, 0, - "MASK" + "IMAGE" ], [ - 209, - 128, + 199, + 122, 0, - 127, + 69, 1, "FEATURE" ], @@ -6338,14 +5892,6 @@ 0, "IMAGE" ], - [ - 214, - 127, - 0, - 134, - 0, - "*" - ], [ 215, 134, @@ -6378,30 +5924,6 @@ 0, "IMAGE" ], - [ - 222, - 133, - 0, - 139, - 0, - "IMAGE" - ], - [ - 223, - 140, - 0, - 139, - 1, - "IMAGE" - ], - [ - 225, - 139, - 0, - 135, - 0, - "IMAGE" - ], [ 226, 138, @@ -6410,30 +5932,6 @@ 0, "IMAGE" ], - [ - 228, - 77, - 0, - 141, - 0, - "IMAGE" - ], - [ - 229, - 136, - 0, - 141, - 1, - "IMAGE" - ], - [ - 230, - 141, - 0, - 12, - 0, - "IMAGE" - ], [ 232, 131, @@ -6450,54 +5948,6 @@ 1, "INT" ], - [ - 234, - 15, - 0, - 146, - 0, - "*" - ], - [ - 235, - 147, - 0, - 148, - 0, - "DAMODEL" - ], - [ - 237, - 148, - 0, - 145, - 3, - "IMAGE" - ], - [ - 239, - 148, - 0, - 149, - 0, - "IMAGE" - ], - [ - 241, - 149, - 1, - 145, - 2, - "FEATURE_PIPE" - ], - [ - 242, - 145, - 0, - 150, - 0, - "IMAGE" - ], [ 246, 3, @@ -6506,46 +5956,6 @@ 0, "LATENT" ], - [ - 247, - 112, - 0, - 145, - 0, - "IMAGE" - ], - [ - 248, - 112, - 0, - 148, - 1, - "IMAGE" - ], - [ - 249, - 149, - 0, - 153, - 0, - "FEATURE" - ], - [ - 250, - 153, - 1, - 154, - 0, - "IMAGE" - ], - [ - 251, - 153, - 0, - 145, - 1, - "FEATURE" - ], [ 270, 135, @@ -6610,14 +6020,6 @@ 0, "IMAGE" ], - [ - 286, - 49, - 0, - 128, - 0, - "IMAGE" - ], [ 287, 173, @@ -6626,14 +6028,6 @@ 1, "IMAGE" ], - [ - 288, - 141, - 0, - 175, - 0, - "*" - ], [ 289, 175, @@ -6673,10 +6067,139 @@ 112, 1, "IMAGE" + ], + [ + 300, + 77, + 0, + 180, + 0, + "IMAGE" + ], + [ + 301, + 136, + 0, + 180, + 1, + "IMAGE" + ], + [ + 302, + 180, + 0, + 175, + 0, + "*" + ], + [ + 303, + 180, + 0, + 12, + 0, + "IMAGE" + ], + [ + 304, + 133, + 0, + 179, + 0, + "IMAGE" + ], + [ + 305, + 140, + 0, + 179, + 1, + "IMAGE" + ], + [ + 306, + 179, + 0, + 135, + 0, + "IMAGE" + ], + [ + 310, + 85, + 0, + 182, + 0, + "IMAGE" + ], + [ + 311, + 182, + 0, + 16, + 0, + "IMAGE" + ], + [ + 312, + 49, + 0, + 183, + 0, + "IMAGE" + ], + [ + 313, + 183, + 3, + 184, + 0, + "INT" + ], + [ + 315, + 21, + 0, + 185, + 0, + "MASK" + ], + [ + 316, + 184, + 0, + 185, + 2, + "FEATURE" + ], + [ + 317, + 74, + 0, + 185, + 1, + "IMAGE" + ], + [ + 318, + 185, + 0, + 25, + 0, + "MASK" + ], + [ + 319, + 185, + 0, + 134, + 0, + "*" ] ], "groups": [ { + "id": 1, "title": "Load Image", "bounding": [ -4300, @@ -6686,9 +6209,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "Preprocessing", "bounding": [ -2768, @@ -6698,9 +6222,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "Feature", "bounding": [ -1457, @@ -6710,9 +6235,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "Depth Chamber", "bounding": [ -621, @@ -6722,9 +6248,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "Control net", "bounding": [ 952, @@ -6734,9 +6261,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "Animate Diff", "bounding": [ 3043, @@ -6746,9 +6274,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 7, "title": "Sampler1", "bounding": [ 5166, @@ -6758,9 +6287,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 8, "title": "Load Model", "bounding": [ 949, @@ -6770,9 +6300,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 9, "title": "IPAdapter", "bounding": [ 4036, @@ -6782,9 +6313,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 10, "title": "Sampler2", "bounding": [ 6480, @@ -6794,9 +6326,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 11, "title": "Upscale", "bounding": [ 8431, @@ -6806,9 +6339,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 12, "title": "Alternate configuration", "bounding": [ -517, @@ -6818,9 +6352,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 13, "title": "Alternate configuration1", "bounding": [ 991, @@ -6830,21 +6365,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false - }, - { - "title": "Parallax", - "bounding": [ - 9412, - 173, - 1442, - 781 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false + "flags": {} }, { + "id": 15, "title": "Extend enf", "bounding": [ 1332, @@ -6854,9 +6378,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 16, "title": "Extend", "bounding": [ 956, @@ -6866,9 +6391,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 17, "title": "Paste Orig", "bounding": [ 7394, @@ -6878,18 +6404,33 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.2143588810000008, + "scale": 0.21435888100000428, "offset": [ - 5417.992490630922, - 1945.674886206854 + 2216.8251786621577, + 1265.698423149617 ] - } + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "comfy-core": "0.3.12", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "efficiency-nodes-comfyui": "3ead4afd120833f3bffdefeca0d6545df8051798", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_essentials": "33ff89fd354d8ec3ab6affb605a79a931b445d99" + }, + "ue_links": [] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/depth_chamber_video.json b/examples/depth_chamber_videoVERSION22.json similarity index 76% rename from examples/depth_chamber_video.json rename to examples/depth_chamber_videoVERSION22.json index 9e1c35c..d31c1c4 100644 --- a/examples/depth_chamber_video.json +++ b/examples/depth_chamber_videoVERSION22.json @@ -1,21 +1,22 @@ { - "last_node_id": 179, - "last_link_id": 311, + "last_node_id": 183, + "last_link_id": 324, "nodes": [ { "id": 30, "type": "ADE_SigmaSchedule", "pos": [ - 3141.5897819464126, - 1118.8759046187079 + 3141.58984375, + 1118.8758544921875 + ], + "size": [ + 244.73928833007812, + 58 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, "order": 0, "mode": 0, + "inputs": [], "outputs": [ { "name": "SIGMA_SCHEDULE", @@ -23,8 +24,8 @@ "links": [ 51 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Sigma Schedule 🎭🅐🅓", @@ -44,13 +45,13 @@ "id": 32, "type": "ADE_MultivalDynamic", "pos": [ - 3131.5897819464126, - 768.8759046187079 + 3131.58984375, + 768.8759155273438 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 1, "mode": 0, @@ -58,7 +59,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -68,8 +70,8 @@ "links": [ 48 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -82,21 +84,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 34, "type": "ADE_MultivalDynamic", "pos": [ - 3131.5897819464126, - 658.8759046187079 + 3131.58984375, + 658.8759155273438 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 2, "mode": 0, @@ -104,7 +105,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -127,21 +129,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 35, "type": "ADE_CustomCFGSimple", "pos": [ - 3131.5897819464126, - 868.8759046187079 + 3131.58984375, + 868.8759155273438 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 3, "mode": 0, @@ -149,7 +150,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -171,38 +173,39 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 36, "type": "ADE_AnimateDiffSettings", "pos": [ - 3161.5897819464126, - 1218.8759046187079 + 3161.58984375, + 1218.8758544921875 + ], + "size": [ + 226.8000030517578, + 54 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, "flags": { "collapsed": true }, - "order": 37, + "order": 34, "mode": 0, "inputs": [ { "name": "pe_adjust", "type": "PE_ADJUST", "link": 53, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "weight_adjust", "type": "WEIGHT_ADJUST", "link": 54, - "slot_index": 1 + "slot_index": 1, + "shape": 7 } ], "outputs": [ @@ -223,21 +226,19 @@ "groupcolor": "#3f789e" } }, - "widgets_values": [ - "" - ] + "widgets_values": [] }, { "id": 37, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 3131.5897819464126, - 968.8759046187079 + 3131.58984375, + 968.8759155273438 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 4, "mode": 0, @@ -245,7 +246,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -269,29 +271,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 57, "type": "GetNode", - "pos": { - "0": 981.441162109375, - "1": 1401.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 981.441162109375, + 1401.961181640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 5, "mode": 0, @@ -310,27 +303,21 @@ "properties": {}, "widgets_values": [ "depth_maps" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 58, "type": "GetNode", - "pos": { - "0": 961.441162109375, - "1": 1551.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 961.441162109375, + 1551.961181640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 6, "mode": 0, @@ -358,12 +345,12 @@ 1430, -4640 ], - "size": { - "0": 210, - "1": 246 - }, + "size": [ + 210, + 246 + ], "flags": {}, - "order": 54, + "order": 50, "mode": 4, "inputs": [ { @@ -372,23 +359,25 @@ "link": 95 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewImage" - } + }, + "widgets_values": [] }, { "id": 19, "type": "EmptyImage", "pos": [ - -309.8733202685141, - -894.0264396732274 + -309.8733215332031, + -894.0264282226562 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 55, + "order": 51, "mode": 0, "inputs": [ { @@ -423,8 +412,8 @@ "links": [ 30 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -441,15 +430,15 @@ "id": 50, "type": "LineartStandardPreprocessor", "pos": [ - -2702.5557197546927, - -976.6574720262626 + -2702.5556640625, + -976.657470703125 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 106 - }, "flags": {}, - "order": 66, + "order": 64, "mode": 0, "inputs": [ { @@ -465,8 +454,8 @@ "links": [ 303 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -482,13 +471,13 @@ "id": 33, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 3481.5897819464126, - 658.8759046187079 + 3481.58984375, + 658.8759155273438 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 7, "mode": 0, @@ -496,12 +485,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -511,8 +502,8 @@ "links": [ 44 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -541,39 +532,43 @@ "id": 29, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 3481.5897819464126, - 968.8759046187079 + 3481.58984375, + 968.8759155273438 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 36, + "order": 33, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 50, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": 51, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -590,6 +585,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -599,8 +600,8 @@ "links": [ 47 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -617,66 +618,25 @@ "comfy", 0, 0, - false, - "" + false ] }, - { - "id": 14, - "type": "DepthAnything_V2", - "pos": [ - -2688.433746544838, - -613.3686263142703 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 67, - "mode": 0, - "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 15, - "slot_index": 0 - }, - { - "name": "images", - "type": "IMAGE", - "link": 130 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 304 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, { "id": 86, "type": "Note", "pos": [ - 3160.2307942589186, - 250.7002531609014 + 3160.230712890625, + 250.70025634765625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 58 - }, "flags": {}, "order": 8, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -693,12 +653,12 @@ 1562, 458 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 44, + "order": 40, "mode": 0, "inputs": [ { @@ -719,13 +679,14 @@ "links": [ 67 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "VAEEncode" - } + }, + "widgets_values": [] }, { "id": 43, @@ -734,12 +695,12 @@ 1524, 612 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, + "size": [ + 254.40000915527344, + 66 + ], "flags": {}, - "order": 48, + "order": 42, "mode": 0, "inputs": [ { @@ -765,8 +726,8 @@ "links": [ 65 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CLIP", @@ -775,8 +736,8 @@ 63, 64 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "show_help", @@ -787,21 +748,22 @@ ], "properties": { "Node name for S&R": "CR Apply LoRA Stack" - } + }, + "widgets_values": [] }, { "id": 44, "type": "SetLatentNoiseMask", "pos": [ - 5196.2924473208695, - 361.47099519392407 + 5196.29248046875, + 361.47100830078125 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 86, + "order": 83, "mode": 0, "inputs": [ { @@ -822,27 +784,28 @@ "links": [ 68 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "SetLatentNoiseMask" - } + }, + "widgets_values": [] }, { "id": 64, "type": "ImageScale", "pos": [ - 4420.911603734175, - 290.661003053677 + 4420.91162109375, + 290.6610107421875 + ], + "size": [ + 315, + 130 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 49, + "order": 43, "mode": 0, "inputs": [ { @@ -858,8 +821,8 @@ "links": [ 98 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -876,15 +839,15 @@ "id": 40, "type": "IPAdapterUnifiedLoader", "pos": [ - 4427.911603734175, - 481.6610030536765 + 4427.91162109375, + 481.6610107421875 + ], + "size": [ + 315, + 78 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 68, + "order": 61, "mode": 0, "inputs": [ { @@ -895,7 +858,8 @@ { "name": "ipadapter", "type": "IPADAPTER", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -905,8 +869,8 @@ "links": [ 57 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "ipadapter", @@ -914,8 +878,8 @@ "links": [ 58 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -932,12 +896,12 @@ 1937, 702 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, + "size": [ + 425.27801513671875, + 180.6060791015625 + ], "flags": {}, - "order": 61, + "order": 55, "mode": 0, "inputs": [ { @@ -970,10 +934,10 @@ 3114, 356 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, + "size": [ + 261.19134521484375, + 82 + ], "flags": {}, "order": 9, "mode": 0, @@ -981,7 +945,8 @@ { "name": "prev_motion_lora", "type": "MOTION_LORA", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -991,8 +956,8 @@ "links": [ 45 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "AnimateDiff LoRA", @@ -1006,8 +971,7 @@ }, "widgets_values": [ "LiquidAF-0-1.safetensors", - 0.8, - "" + 0.8 ] }, { @@ -1017,10 +981,10 @@ 3115, 498 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, + "size": [ + 270.3999938964844, + 82 + ], "flags": {}, "order": 10, "mode": 0, @@ -1028,7 +992,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1051,8 +1016,7 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { @@ -1062,13 +1026,14 @@ 1094, 453 ], - "size": { - "0": 315, - "1": 98 - }, + "size": [ + 315, + 98 + ], "flags": {}, "order": 11, "mode": 0, + "inputs": [], "outputs": [ { "name": "MODEL", @@ -1110,12 +1075,12 @@ 2524, 581 ], - "size": { - "0": 304.79998779296875, - "1": 66 - }, + "size": [ + 304.79998779296875, + 66 + ], "flags": {}, - "order": 69, + "order": 62, "mode": 0, "inputs": [ { @@ -1132,7 +1097,8 @@ "name": "cnet_stack", "type": "CONTROL_NET_STACK", "link": 84, - "slot_index": 2 + "slot_index": 2, + "shape": 7 } ], "outputs": [ @@ -1142,8 +1108,8 @@ "links": [ 134 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CONDITIONING-", @@ -1151,8 +1117,8 @@ "links": [ 135 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -1163,13 +1129,14 @@ "groupcolor": "#3f789e" } }, + "widgets_values": [], "shape": 1 }, { "id": 88, "type": "Reroute", "pos": [ - 2860.8354071366402, + 2860.83544921875, 64 ], "size": [ @@ -1177,7 +1144,7 @@ 26 ], "flags": {}, - "order": 38, + "order": 35, "mode": 0, "inputs": [ { @@ -1205,7 +1172,7 @@ "id": 89, "type": "Reroute", "pos": [ - 2860.8354071366402, + 2860.83544921875, 105 ], "size": [ @@ -1213,7 +1180,7 @@ 26 ], "flags": {}, - "order": 73, + "order": 67, "mode": 0, "inputs": [ { @@ -1241,15 +1208,15 @@ "id": 90, "type": "Reroute", "pos": [ - 2860.8354071366402, - 143.3452987595907 + 2860.83544921875, + 143.3452911376953 ], "size": [ 75, 26 ], "flags": {}, - "order": 74, + "order": 68, "mode": 0, "inputs": [ { @@ -1285,7 +1252,7 @@ 26 ], "flags": {}, - "order": 84, + "order": 81, "mode": 0, "inputs": [ { @@ -1314,15 +1281,15 @@ "id": 100, "type": "SetLatentNoiseMask", "pos": [ - 6505.217366877503, - 369.41342322069596 + 6505.21728515625, + 369.4134216308594 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 92, + "order": 89, "mode": 0, "inputs": [ { @@ -1343,13 +1310,14 @@ "links": [ 153 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "SetLatentNoiseMask" - } + }, + "widgets_values": [] }, { "id": 17, @@ -1358,12 +1326,12 @@ -3900, -866 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 47, + "order": 45, "mode": 0, "inputs": [ { @@ -1380,15 +1348,15 @@ 122, 128 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "2160 width", "type": "INT", "links": null, - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "4096 height", @@ -1397,7 +1365,7 @@ "shape": 3 }, { - "name": "60 count", + "name": "30 count", "type": "INT", "links": null, "shape": 3 @@ -1405,7 +1373,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 85, @@ -1414,12 +1383,12 @@ -3652, -898 ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, + "size": [ + 310.7047424316406, + 238 + ], "flags": {}, - "order": 58, + "order": 57, "mode": 0, "inputs": [ { @@ -1430,7 +1399,8 @@ { "name": "get_image_size", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "width_input", @@ -1455,10 +1425,10 @@ "type": "IMAGE", "links": [ 129, - 130 + 312 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "width", @@ -1490,24 +1460,16 @@ { "id": 104, "type": "SetNode", - "pos": { - "0": -3212, - "1": -997, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -3212, + -997 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 46, + "order": 44, "mode": 0, "inputs": [ { @@ -1529,29 +1491,23 @@ }, "widgets_values": [ "init_img" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 52, "type": "SetNode", - "pos": { - "0": -1992, - "1": -966, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -1992, + -966 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 70, + "order": 69, "mode": 0, "inputs": [ { @@ -1573,7 +1529,9 @@ }, "widgets_values": [ "lineart" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 115, @@ -1582,13 +1540,15 @@ -2340, -859 ], - "size": { - "0": 363.1609191894531, - "1": 148.97213745117188 - }, + "size": [ + 363.1609191894531, + 148.97213745117188 + ], "flags": {}, "order": 12, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1602,16 +1562,18 @@ "id": 72, "type": "Note", "pos": [ - -326.87332026851414, - -1087.026439673227 + -326.8733215332031, + -1087.0264892578125 + ], + "size": [ + 357.3516845703125, + 135.6949462890625 ], - "size": { - "0": 357.3516845703125, - "1": 135.6949462890625 - }, "flags": {}, "order": 13, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1628,13 +1590,15 @@ 1490, 809 ], - "size": { - "0": 380.91632080078125, - "1": 230.8916015625 - }, + "size": [ + 380.91632080078125, + 230.8916015625 + ], "flags": {}, "order": 14, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1656,7 +1620,7 @@ 26 ], "flags": {}, - "order": 76, + "order": 71, "mode": 0, "inputs": [ { @@ -1693,7 +1657,7 @@ 26 ], "flags": {}, - "order": 77, + "order": 72, "mode": 0, "inputs": [ { @@ -1722,16 +1686,18 @@ "id": 125, "type": "Note", "pos": [ - 4337.8690841450125, - 699.6818760329338 + 4337.869140625, + 699.681884765625 + ], + "size": [ + 336.1888122558594, + 206.84153747558594 ], - "size": { - "0": 336.1888122558594, - "1": 206.84153747558594 - }, "flags": {}, "order": 15, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1745,15 +1711,15 @@ "id": 122, "type": "FeatureMixer", "pos": [ - -72.21454028302455, - -5668.483763498456 + -72.21453857421875, + -5668.48388671875 + ], + "size": [ + 367.79998779296875, + 342 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 41, + "order": 37, "mode": 4, "inputs": [ { @@ -1769,8 +1735,8 @@ "links": [ 199 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_VISUALIZATION", @@ -1778,8 +1744,8 @@ "links": [ 196 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -1807,13 +1773,14 @@ -4241, -198 ], - "size": { - "0": 210, - "1": 82 - }, + "size": [ + 210, + 82 + ], "flags": {}, "order": 16, "mode": 0, + "inputs": [], "outputs": [ { "name": "connect to widget input", @@ -1825,23 +1792,24 @@ "title": "Extend last frame", "properties": { "Run widget replace on values": false - }, - "widgets_values": [] + } }, { "id": 68, "type": "Note", "pos": [ - -4267.1294444297155, - -555.9201161093287 + -4267.12939453125, + -555.9201049804688 + ], + "size": [ + 372.2613220214844, + 154.43922424316406 ], - "size": { - "0": 372.2613220214844, - "1": 154.43922424316406 - }, "flags": {}, "order": 17, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1856,20 +1824,21 @@ "type": "ControlNetLoaderAdvanced", "pos": [ 984, - 1273.8269519976366 + 1273.826904296875 + ], + "size": [ + 327.6000061035156, + 58 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, "order": 18, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", + "name": "tk_optional", "type": "TIMESTEP_KEYFRAME", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1899,20 +1868,21 @@ "type": "ControlNetLoaderAdvanced", "pos": [ 1339, - 1281.8269519976366 + 1281.826904296875 + ], + "size": [ + 327.6000061035156, + 58 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, "order": 19, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", + "name": "tk_optional", "type": "TIMESTEP_KEYFRAME", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1949,13 +1919,13 @@ 26 ], "flags": {}, - "order": 82, + "order": 79, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 307 + "link": 321 } ], "outputs": [ @@ -1973,39 +1943,6 @@ "horizontal": false } }, - { - "id": 15, - "type": "DownloadAndLoadDepthAnythingV2Model", - "pos": [ - -2760, - -789 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 20, - "mode": 0, - "outputs": [ - { - "name": "da_v2_model", - "type": "DAMODEL", - "links": [ - 15, - 234 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" - }, - "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] - }, { "id": 8, "type": "VAEDecode", @@ -2013,12 +1950,12 @@ 5898, 437 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 89, + "order": 86, "mode": 0, "inputs": [ { @@ -2044,7 +1981,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 79, @@ -2053,12 +1991,12 @@ 5920, 273 ], - "size": { - "0": 315, - "1": 82 - }, + "size": [ + 315, + 82 + ], "flags": {}, - "order": 90, + "order": 87, "mode": 0, "inputs": [ { @@ -2074,8 +2012,8 @@ "links": [ 152 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2093,13 +2031,14 @@ -4242, -327 ], - "size": { - "0": 210, - "1": 82 - }, + "size": [ + 210, + 82 + ], "flags": {}, - "order": 21, + "order": 20, "mode": 0, + "inputs": [], "outputs": [ { "name": "connect to widget input", @@ -2111,8 +2050,7 @@ "title": "Num frames", "properties": { "Run widget replace on values": false - }, - "widgets_values": [] + } }, { "id": 91, @@ -2126,7 +2064,7 @@ 26 ], "flags": {}, - "order": 50, + "order": 46, "mode": 0, "inputs": [ { @@ -2151,73 +2089,6 @@ "horizontal": false } }, - { - "id": 148, - "type": "DepthAnything_V2", - "pos": [ - 9728.386098469018, - 266.75074584506234 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 101, - "mode": 0, - "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 235 - }, - { - "name": "images", - "type": "IMAGE", - "link": 248 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 237, - 239 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, - { - "id": 154, - "type": "PreviewImage", - "pos": [ - 9946.386098469018, - 637.7507458450624 - ], - "size": { - "0": 481.87567138671875, - "1": 246 - }, - "flags": {}, - "order": 105, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 250 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, { "id": 13, "type": "VHS_VideoCombine", @@ -2226,11 +2097,11 @@ 403 ], "size": [ - 210, - 686 + 214.7587890625, + 718.9691162109375 ], "flags": {}, - "order": 91, + "order": 88, "mode": 0, "inputs": [ { @@ -2241,17 +2112,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2273,17 +2147,20 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03287.mp4", + "filename": "AnimateDiff_02425.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 20 + "frame_rate": 20, + "workflow": "AnimateDiff_02425.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02425.mp4" } } } @@ -2292,16 +2169,17 @@ "id": 113, "type": "UpscaleModelLoader", "pos": [ - 8493.811170891195, - 363.5270008378391 + 8493.8115234375, + 363.5270080566406 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 22, + "order": 21, "mode": 4, + "inputs": [], "outputs": [ { "name": "UPSCALE_MODEL", @@ -2326,12 +2204,12 @@ 5463, 294 ], - "size": { - "0": 315, - "1": 262 - }, + "size": [ + 315, + 262 + ], "flags": {}, - "order": 88, + "order": 85, "mode": 0, "inputs": [ { @@ -2384,14 +2262,14 @@ "type": "Control Net Stacker", "pos": [ 1346, - 1457.8269519976366 + 1457.826904296875 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 39, + "order": 36, "mode": 0, "inputs": [ { @@ -2408,7 +2286,8 @@ { "name": "cnet_stack", "type": "CONTROL_NET_STACK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2418,8 +2297,8 @@ "links": [ 83 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2439,14 +2318,14 @@ "type": "Control Net Stacker", "pos": [ 1776, - 1381.8269519976366 + 1381.826904296875 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 51, + "order": 47, "mode": 0, "inputs": [ { @@ -2463,7 +2342,8 @@ { "name": "cnet_stack", "type": "CONTROL_NET_STACK", - "link": 83 + "link": 83, + "shape": 7 } ], "outputs": [ @@ -2473,8 +2353,8 @@ "links": [ 84 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2493,15 +2373,15 @@ "id": 28, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 3481.5897819464126, - 358.87590461870786 + 3481.58984375, + 358.87591552734375 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 59, + "order": 53, "mode": 0, "inputs": [ { @@ -2513,47 +2393,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 44, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 45, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": 46, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 47, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 48, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 49, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2563,8 +2451,8 @@ "links": [ 56 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2592,7 +2480,7 @@ 26 ], "flags": {}, - "order": 62, + "order": 58, "mode": 0, "inputs": [ { @@ -2628,7 +2516,7 @@ 26 ], "flags": {}, - "order": 79, + "order": 74, "mode": 0, "inputs": [ { @@ -2664,7 +2552,7 @@ 26 ], "flags": {}, - "order": 80, + "order": 75, "mode": 0, "inputs": [ { @@ -2692,15 +2580,15 @@ "id": 78, "type": "KSampler", "pos": [ - 6735.217366877503, - 289.41342322069596 + 6735.21728515625, + 289.4134216308594 + ], + "size": [ + 315, + 262 ], - "size": { - "0": 315, - "1": 262 - }, "flags": {}, - "order": 93, + "order": 90, "mode": 0, "inputs": [ { @@ -2759,7 +2647,7 @@ 26 ], "flags": {}, - "order": 85, + "order": 82, "mode": 0, "inputs": [ { @@ -2788,15 +2676,15 @@ "id": 80, "type": "VAEDecode", "pos": [ - 7092.217366877503, - 294.41342322069596 + 7092.21728515625, + 294.4134216308594 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 94, + "order": 91, "mode": 0, "inputs": [ { @@ -2822,7 +2710,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 172, @@ -2836,7 +2725,7 @@ 26 ], "flags": {}, - "order": 87, + "order": 84, "mode": 0, "inputs": [ { @@ -2864,15 +2753,15 @@ "id": 121, "type": "TimeFeatureNode", "pos": [ - -449.21454028302617, - -5524.483763498457 + -449.21453857421875, + -5524.48388671875 + ], + "size": [ + 317.4000244140625, + 222 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 23, + "order": 22, "mode": 4, "inputs": [ { @@ -2888,8 +2777,8 @@ "links": [ 195 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_PIPE", @@ -2897,8 +2786,8 @@ "links": [ 193 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -2908,6 +2797,9 @@ 30, "smooth", 0.4, + 0, + 512, + 30, 0 ] }, @@ -2915,15 +2807,15 @@ "id": 123, "type": "PreviewImage", "pos": [ - 446.7854597169757, - -5708.483763498455 + 446.78546142578125, + -5708.48388671875 + ], + "size": [ + 443.01776123046875, + 260.46453857421875 ], - "size": { - "0": 443.01776123046875, - "1": 260.46453857421875 - }, "flags": {}, - "order": 53, + "order": 49, "mode": 4, "inputs": [ { @@ -2932,23 +2824,25 @@ "link": 196 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewImage" - } + }, + "widgets_values": [] }, { "id": 69, "type": "FlexMaskDepthChamber", "pos": [ - 487.78545971697525, - -5416.483763498458 + 487.78546142578125, + -5416.48388671875 + ], + "size": [ + 344.3999938964844, + 334 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, "flags": {}, - "order": 52, + "order": 48, "mode": 4, "inputs": [ { @@ -2957,14 +2851,15 @@ "link": null }, { - "name": "feature", - "type": "FEATURE", + "name": "depth_map", + "type": "IMAGE", "link": 199 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 193 + "name": "opt_feature", + "type": "FEATURE", + "link": 193, + "shape": 7 }, { "name": "depth_map", @@ -2977,8 +2872,8 @@ "name": "MASK", "type": "MASK", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2993,7 +2888,8 @@ 1, 0.66, "both", - "move_back" + "move_back", + 0 ] }, { @@ -3003,12 +2899,12 @@ 127, -4746 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, + "size": [ + 344.3999938964844, + 334 + ], "flags": {}, - "order": 24, + "order": 23, "mode": 4, "inputs": [ { @@ -3017,14 +2913,15 @@ "link": null }, { - "name": "feature", - "type": "FEATURE", + "name": "depth_map", + "type": "IMAGE", "link": null }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 }, { "name": "depth_map", @@ -3037,8 +2934,8 @@ "name": "MASK", "type": "MASK", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -3053,7 +2950,8 @@ 0.12, 0.21, "both", - "expand" + "expand", + 0 ] }, { @@ -3063,12 +2961,12 @@ 610, -4500 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, + "size": [ + 317.4000244140625, + 222 + ], "flags": {}, - "order": 25, + "order": 24, "mode": 4, "inputs": [ { @@ -3084,15 +2982,15 @@ "links": [ 94 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_PIPE", "type": "FEATURE_PIPE", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -3102,6 +3000,9 @@ 20, "bounce", 0.5, + 0, + 512, + 30, 0 ] }, @@ -3112,12 +3013,12 @@ 1010, -4620 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, + "size": [ + 367.79998779296875, + 342 + ], "flags": {}, - "order": 42, + "order": 38, "mode": 4, "inputs": [ { @@ -3131,8 +3032,8 @@ "name": "FEATURE", "type": "FEATURE", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "FEATURE_VISUALIZATION", @@ -3140,8 +3041,8 @@ "links": [ 95 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -3166,16 +3067,18 @@ "id": 71, "type": "Note", "pos": [ - -1428.9870702311473, - -1013.2101283245443 + -1428.987060546875, + -1013.2101440429688 + ], + "size": [ + 344.94537353515625, + 142.8384552001953 ], - "size": { - "0": 344.94537353515625, - "1": 142.8384552001953 - }, "flags": {}, - "order": 26, + "order": 25, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -3185,74 +3088,19 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 49, - "type": "SetNode", - "pos": { - "0": -1970, - "1": -676, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 304 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 286 - ], - "slot_index": 0 - } - ], - "title": "Set_depth_maps", - "properties": { - "previousName": "depth_maps" - }, - "widgets_values": [ - "depth_maps" - ] - }, { "id": 74, "type": "GetNode", - "pos": { - "0": -576, - "1": -833, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -576, + -833 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 27, + "order": 26, "mode": 0, "inputs": [], "outputs": [ @@ -3261,7 +3109,7 @@ "type": "IMAGE", "links": [ 108, - 203 + 319 ], "slot_index": 0 } @@ -3270,7 +3118,9 @@ "properties": {}, "widgets_values": [ "depth_maps" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 20, @@ -3279,12 +3129,12 @@ -564, -1048 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 43, + "order": 39, "mode": 0, "inputs": [ { @@ -3298,40 +3148,41 @@ "name": "image", "type": "IMAGE", "links": [], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "674 width", + "name": "512 width", "type": "INT", "links": [ 26 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "1280 height", + "name": "972 height", "type": "INT", "links": [ 27 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "60 count", + "name": "30 count", "type": "INT", "links": [ 103 ], - "shape": 3, - "slot_index": 3 + "slot_index": 3, + "shape": 3 } ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 21, @@ -3340,12 +3191,12 @@ -317, -703 ], - "size": { - "0": 315, - "1": 150 - }, + "size": [ + 315, + 150 + ], "flags": {}, - "order": 63, + "order": 59, "mode": 0, "inputs": [ { @@ -3359,10 +3210,10 @@ "name": "MASK", "type": "MASK", "links": [ - 200 + 317 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "IMAGE", @@ -3381,69 +3232,6 @@ 0 ] }, - { - "id": 127, - "type": "FlexMaskDepthChamber", - "pos": [ - 105, - -839 - ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, - "flags": {}, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 200 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 209 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 202 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 203 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 207, - 307 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskDepthChamber" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.05, - 0, - "z_front", - "move_forward" - ] - }, { "id": 114, "type": "Note", @@ -3451,13 +3239,15 @@ 71, -1074 ], - "size": { - "0": 484.20526123046875, - "1": 158.15316772460938 - }, + "size": [ + 484.20526123046875, + 158.15316772460938 + ], "flags": {}, - "order": 28, + "order": 27, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -3474,18 +3264,18 @@ 595, -1044 ], - "size": { - "0": 210, - "1": 26 - }, + "size": [ + 210, + 26 + ], "flags": {}, - "order": 81, + "order": 78, "mode": 0, "inputs": [ { "name": "mask", "type": "MASK", - "link": 207 + "link": 320 } ], "outputs": [ @@ -3495,13 +3285,14 @@ "links": [ 37 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "MaskToImage" - } + }, + "widgets_values": [] }, { "id": 24, @@ -3511,11 +3302,11 @@ -1072 ], "size": [ - 210, - 682 + 214.7587890625, + 719.2589111328125 ], "flags": {}, - "order": 83, + "order": 80, "mode": 0, "inputs": [ { @@ -3526,17 +3317,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3558,17 +3352,20 @@ "pix_fmt": "yuv420p", "crf": 14, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03286.mp4", + "filename": "AnimateDiff_02424.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 16 + "frame_rate": 16, + "workflow": "AnimateDiff_02424.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02424.mp4" } } } @@ -3580,13 +3377,15 @@ 180, 232 ], - "size": { - "0": 565.3340454101562, - "1": 455.6415710449219 - }, + "size": [ + 565.3340454101562, + 455.6415710449219 + ], "flags": {}, - "order": 29, + "order": 28, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -3603,12 +3402,12 @@ 7108, 435 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 95, + "order": 92, "mode": 0, "inputs": [ { @@ -3624,8 +3423,8 @@ "links": [ 287 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "832 width", @@ -3633,8 +3432,8 @@ "links": [ 283 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "1584 height", @@ -3642,11 +3441,11 @@ "links": [ 284 ], - "shape": 3, - "slot_index": 2 + "slot_index": 2, + "shape": 3 }, { - "name": "60 count", + "name": "30 count", "type": "INT", "links": null, "shape": 3 @@ -3654,21 +3453,22 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 175, "type": "Reroute", "pos": [ - 2859.5948525759013, - -35.33431721779152 + 2859.594970703125, + -35.33431625366211 ], "size": [ 75, 26 ], "flags": {}, - "order": 45, + "order": 41, "mode": 0, "inputs": [ { @@ -3693,323 +3493,22 @@ } }, { - "id": 150, - "type": "VHS_VideoCombine", + "id": 174, + "type": "ImageScale", "pos": [ - 10530.386098469018, - 294.75074584506234 + 7596, + 262 ], "size": [ - 210, - 686 + 315, + 130 ], "flags": {}, - "order": 106, + "order": 93, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 242 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 16, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03289.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 20 - } - } - } - }, - { - "id": 153, - "type": "FeatureMixer", - "pos": [ - 9464, - 573 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 249 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 251 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 250 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5, - false - ] - }, - { - "id": 145, - "type": "FlexImageParallax", - "pos": [ - 10091, - 273 - ], - "size": { - "0": 315, - "1": 238 - }, - "flags": {}, - "order": 104, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 247 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 251 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 241 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 237 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 242 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexImageParallax" - }, - "widgets_values": [ - 1, - 0, - "shift_x", - "relative", - 0.01, - 0 - ] - }, - { - "id": 149, - "type": "TimeFeatureNode", - "pos": [ - 9472, - 377 - ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 102, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 239 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 249 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 241 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - 20, - "accelerate", - 0.1, - 0.3 - ] - }, - { - "id": 155, - "type": "Note", - "pos": [ - 9936, - 87 - ], - "size": { - "0": 434.9312438964844, - "1": 112.82051086425781 - }, - "flags": {}, - "order": 30, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "optionally, add parallax for additional rub. To accomplish this, we get new depth maps that include everything the AI generated" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 147, - "type": "GetNode", - "pos": { - "0": 9467, - "1": 245, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "DAMODEL", - "type": "DAMODEL", - "links": [ - 235 - ], - "slot_index": 0 - } - ], - "title": "Get_DA_MODEL", - "properties": {}, - "widgets_values": [ - "DA_MODEL" - ] - }, - { - "id": 174, - "type": "ImageScale", - "pos": [ - 7596, - 262 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 96, - "mode": 0, - "inputs": [ - { - "name": "image", + "name": "image", "type": "IMAGE", "link": 292 }, @@ -4037,8 +3536,8 @@ "links": [ 285 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4063,7 +3562,7 @@ 26 ], "flags": {}, - "order": 56, + "order": 52, "mode": 0, "inputs": [ { @@ -4091,15 +3590,15 @@ "id": 177, "type": "GetImageSizeAndCount", "pos": [ - 7534.390205834786, - -57.429299055237095 + 7534.39013671875, + -57.429298400878906 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 64, + "order": 60, "mode": 0, "inputs": [ { @@ -4115,8 +3614,8 @@ "links": [ 292 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "506 width", @@ -4131,7 +3630,7 @@ "shape": 3 }, { - "name": "60 count", + "name": "30 count", "type": "INT", "links": null, "shape": 3 @@ -4139,7 +3638,8 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 170, @@ -4148,12 +3648,12 @@ 7981, 278 ], - "size": { - "0": 315, - "1": 146 - }, + "size": [ + 315, + 146 + ], "flags": {}, - "order": 97, + "order": 94, "mode": 0, "inputs": [ { @@ -4169,7 +3669,8 @@ { "name": "mask", "type": "MASK", - "link": 274 + "link": 274, + "shape": 7 } ], "outputs": [ @@ -4179,8 +3680,8 @@ "links": [ 295 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4199,12 +3700,12 @@ 8851, 407 ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, + "size": [ + 241.79998779296875, + 46 + ], "flags": {}, - "order": 99, + "order": 96, "mode": 4, "inputs": [ { @@ -4224,17 +3725,16 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 177, - 247, - 248 + 177 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "ImageUpscaleWithModel" - } + }, + "widgets_values": [] }, { "id": 82, @@ -4243,12 +3743,12 @@ -3662, -585 ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, + "size": [ + 310.7047424316406, + 238 + ], "flags": {}, - "order": 57, + "order": 56, "mode": 0, "inputs": [ { @@ -4259,7 +3759,8 @@ { "name": "get_image_size", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "width_input", @@ -4285,8 +3786,8 @@ "links": [ 302 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "width", @@ -4318,24 +3819,16 @@ { "id": 76, "type": "SetNode", - "pos": { - "0": -3176, - "1": -583, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -3176, + -583 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 65, + "order": 63, "mode": 0, "inputs": [ { @@ -4357,29 +3850,23 @@ }, "widgets_values": [ "init_images_resize" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 77, "type": "GetNode", - "pos": { - "0": 1038, - "1": 291, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1038, + 291 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 32, + "order": 29, "mode": 0, "inputs": [], "outputs": [ @@ -4399,134 +3886,6 @@ "init_images_resize" ] }, - { - "id": 146, - "type": "SetNode", - "pos": { - "0": -2248, - "1": -579, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "DAMODEL", - "type": "DAMODEL", - "link": 234 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_DA_MODEL", - "properties": { - "previousName": "DA_MODEL" - }, - "widgets_values": [ - "DA_MODEL" - ] - }, - { - "id": 179, - "type": "VHS_LoadVideo", - "pos": [ - -4599, - -919 - ], - "size": [ - 235.1999969482422, - 684.3795290924782 - ], - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 300, - 301 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexelswalkingcolumn.mp4", - "force_rate": 15, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 60, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 60, - "skip_first_frames": 0, - "force_rate": 15, - "filename": "pexelswalkingcolumn.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, { "id": 42, "type": "CR LoRA Stack", @@ -4534,18 +3893,19 @@ 1110, 683 ], - "size": { - "0": 315, - "1": 342 - }, + "size": [ + 315, + 342 + ], "flags": {}, - "order": 34, + "order": 30, "mode": 0, "inputs": [ { "name": "lora_stack", "type": "LORA_STACK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -4555,8 +3915,8 @@ "links": [ 62 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "show_help", @@ -4590,12 +3950,12 @@ 1942, 483 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, + "size": [ + 422.84503173828125, + 164.31304931640625 + ], "flags": {}, - "order": 60, + "order": 54, "mode": 0, "inputs": [ { @@ -4625,16 +3985,17 @@ "id": 41, "type": "LoadImage", "pos": [ - 4072.911603734174, - 274.6610030536769 + 4072.91162109375, + 274.6610107421875 + ], + "size": [ + 315, + 314.0000305175781 ], - "size": { - "0": 315, - "1": 314.0000305175781 - }, "flags": {}, - "order": 35, + "order": 31, "mode": 0, + "inputs": [], "outputs": [ { "name": "IMAGE", @@ -4642,8 +4003,8 @@ "links": [ 97 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "MASK", @@ -4667,12 +4028,12 @@ 4798, 303 ], - "size": { - "0": 315, - "1": 278 - }, + "size": [ + 315, + 278 + ], "flags": {}, - "order": 72, + "order": 66, "mode": 0, "inputs": [ { @@ -4694,17 +4055,20 @@ { "name": "image_negative", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "attn_mask", "type": "MASK", - "link": null + "link": null, + "shape": 7 }, { "name": "clip_vision", "type": "CLIP_VISION", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -4715,8 +4079,8 @@ 66, 112 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4738,12 +4102,12 @@ 8503, 537 ], - "size": { - "0": 310.79998779296875, - "1": 58 - }, + "size": [ + 310.79998779296875, + 58 + ], "flags": {}, - "order": 98, + "order": 95, "mode": 0, "inputs": [ { @@ -4759,8 +4123,8 @@ "links": [ 298 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -4771,122 +4135,398 @@ ] }, { - "id": 128, - "type": "TimeFeatureNode", + "id": 81, + "type": "VHS_VideoCombine", + "pos": [ + 9117, + 285 + ], + "size": [ + 214.7587890625, + 718.790771484375 + ], + "flags": {}, + "order": 97, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 177 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 20, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02426.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 20, + "workflow": "AnimateDiff_02426.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02426.mp4" + } + } + } + }, + { + "id": 180, + "type": "AIO_Preprocessor", "pos": [ - -1422.9870702311473, - -715.2101283245419 + -2718.727294921875, + -656.55712890625 ], - "size": { - "0": 317.4000244140625, - "1": 150 + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 65, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 312 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 313 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "AIO_Preprocessor" }, + "widgets_values": [ + "DepthAnythingV2Preprocessor", + 512 + ] + }, + { + "id": 49, + "type": "SetNode", + "pos": [ + -1984.5181884765625, + -682.70068359375 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 75, + "order": 70, "mode": 0, "inputs": [ { - "name": "video_frames", + "name": "IMAGE", "type": "IMAGE", - "link": 286 + "link": 313 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 209 + 314 ], - "shape": 3, "slot_index": 0 + } + ], + "title": "Set_depth_maps", + "properties": { + "previousName": "depth_maps" + }, + "widgets_values": [ + "depth_maps" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 182, + "type": "GetImageSizeAndCount", + "pos": [ + -2067.144775390625, + -543.501220703125 + ], + "size": [ + 277.20001220703125, + 86 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 314 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "512 width", + "type": "INT", + "links": null + }, + { + "name": "972 height", + "type": "INT", + "links": null + }, + { + "name": "30 count", + "type": "INT", "links": [ - 202 + 315 ], - "shape": 3, - "slot_index": 1 + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + } + }, + { + "id": 181, + "type": "TimeFeatureNode", + "pos": [ + -1398.9901123046875, + -742.89892578125 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "frame_count", + "type": "INT", + "link": 315, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 318 + ], + "slot_index": 0 } ], "properties": { "Node name for S&R": "TimeFeatureNode" }, "widgets_values": [ + "smooth", + 30, + 30, + 512, + 512, 30, - "accelerate", - 0.4, 0 ] }, { - "id": 81, - "type": "VHS_VideoCombine", + "id": 183, + "type": "FlexMaskDepthChamber", "pos": [ - 9117, - 285 + 105, + -839 ], "size": [ - 210, - 686 + 415.8000183105469, + 314 ], "flags": {}, - "order": 100, + "order": 77, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 177 + "name": "masks", + "type": "MASK", + "link": 317 }, { - "name": "audio", - "type": "AUDIO", - "link": null + "name": "depth_map", + "type": "IMAGE", + "link": 319 }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 318, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 320, + 321 + ] + } + ], + "properties": { + "Node name for S&R": "FlexMaskDepthChamber" + }, + "widgets_values": [ + 1, + 0, + "z_front", + "move_forward", + false, + 0, + 0, + 1, + 0.05, + 0 + ] + }, + { + "id": 179, + "type": "VHS_LoadVideo", + "pos": [ + -4269.50439453125, + -940.2282104492188 + ], + "size": [ + 247.455078125, + 262 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 300, + 301 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "VHS_LoadVideo" }, "widgets_values": { - "frame_rate": 20, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, + "video": "pexelswalkingcolumn.mp4", + "force_rate": 15, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 30, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03288.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 20 + "frame_load_cap": 30, + "skip_first_frames": 0, + "force_rate": 15, + "filename": "pexelswalkingcolumn.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 } } } @@ -4909,14 +4549,6 @@ 0, "IMAGE" ], - [ - 15, - 15, - 0, - 14, - 0, - "DAMODEL" - ], [ 26, 20, @@ -5285,14 +4917,6 @@ 0, "IMAGE" ], - [ - 130, - 85, - 0, - 14, - 1, - "IMAGE" - ], [ 133, 4, @@ -5509,94 +5133,6 @@ 1, "FEATURE" ], - [ - 200, - 21, - 0, - 127, - 0, - "MASK" - ], - [ - 202, - 128, - 1, - 127, - 2, - "FEATURE_PIPE" - ], - [ - 203, - 74, - 0, - 127, - 3, - "IMAGE" - ], - [ - 207, - 127, - 0, - 25, - 0, - "MASK" - ], - [ - 209, - 128, - 0, - 127, - 1, - "FEATURE" - ], - [ - 234, - 15, - 0, - 146, - 0, - "*" - ], - [ - 235, - 147, - 0, - 148, - 0, - "DAMODEL" - ], - [ - 237, - 148, - 0, - 145, - 3, - "IMAGE" - ], - [ - 239, - 148, - 0, - 149, - 0, - "IMAGE" - ], - [ - 241, - 149, - 1, - 145, - 2, - "FEATURE_PIPE" - ], - [ - 242, - 145, - 0, - 150, - 0, - "IMAGE" - ], [ 246, 3, @@ -5605,46 +5141,6 @@ 0, "LATENT" ], - [ - 247, - 112, - 0, - 145, - 0, - "IMAGE" - ], - [ - 248, - 112, - 0, - 148, - 1, - "IMAGE" - ], - [ - 249, - 149, - 0, - 153, - 0, - "FEATURE" - ], - [ - 250, - 153, - 1, - 154, - 0, - "IMAGE" - ], - [ - 251, - 153, - 0, - 145, - 1, - "FEATURE" - ], [ 273, 99, @@ -5693,14 +5189,6 @@ 0, "IMAGE" ], - [ - 286, - 49, - 0, - 128, - 0, - "IMAGE" - ], [ 287, 173, @@ -5782,40 +5270,97 @@ "IMAGE" ], [ - 304, - 14, + 310, + 77, 0, - 49, + 12, 0, "IMAGE" ], [ - 307, - 127, + 311, + 77, 0, - 97, + 175, 0, "*" ], [ - 310, - 77, + 312, + 85, 0, - 12, + 180, 0, "IMAGE" ], [ - 311, - 77, + 313, + 180, 0, - 175, + 49, + 0, + "IMAGE" + ], + [ + 314, + 49, + 0, + 182, + 0, + "IMAGE" + ], + [ + 315, + 182, + 3, + 181, + 0, + "INT" + ], + [ + 317, + 21, + 0, + 183, + 0, + "MASK" + ], + [ + 318, + 181, + 0, + 183, + 2, + "FEATURE" + ], + [ + 319, + 74, + 0, + 183, + 1, + "IMAGE" + ], + [ + 320, + 183, + 0, + 25, + 0, + "MASK" + ], + [ + 321, + 183, + 0, + 97, 0, "*" ] ], "groups": [ { + "id": 1, "title": "Load Image", "bounding": [ -4300, @@ -5825,9 +5370,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "Preprocessing", "bounding": [ -2768, @@ -5837,9 +5383,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "Feature", "bounding": [ -1457, @@ -5849,9 +5396,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "Depth Chamber", "bounding": [ -621, @@ -5861,9 +5409,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "Control net", "bounding": [ 952, @@ -5873,9 +5422,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "Animate Diff", "bounding": [ 3043, @@ -5885,9 +5435,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 7, "title": "Sampler1", "bounding": [ 5166, @@ -5897,9 +5448,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 8, "title": "Load Model", "bounding": [ 949, @@ -5909,9 +5461,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 9, "title": "IPAdapter", "bounding": [ 4036, @@ -5921,9 +5474,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 10, "title": "Sampler2", "bounding": [ 6480, @@ -5933,9 +5487,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 11, "title": "Upscale", "bounding": [ 8431, @@ -5945,9 +5500,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 12, "title": "Alternate configuration", "bounding": [ -517, @@ -5957,9 +5513,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 13, "title": "Alternate configuration1", "bounding": [ 991, @@ -5969,21 +5526,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false - }, - { - "title": "Parallax", - "bounding": [ - 9412, - 173, - 1442, - 781 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false + "flags": {} }, { + "id": 15, "title": "Paste Orig", "bounding": [ 7394, @@ -5993,18 +5539,33 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.16105100000000291, + "scale": 0.12100000000000277, "offset": [ - 4307.331041861666, - 1962.2032827226076 + -356.0934577218195, + 1893.2807557724689 ] - } + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "comfy-core": "0.3.12", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "efficiency-nodes-comfyui": "3ead4afd120833f3bffdefeca0d6545df8051798", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_essentials": "33ff89fd354d8ec3ab6affb605a79a931b445d99" + }, + "ue_links": [] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/face_mesh_visualizer.json b/examples/face_mesh_visualizerVERSION2.json similarity index 72% rename from examples/face_mesh_visualizer.json rename to examples/face_mesh_visualizerVERSION2.json index 9ad7376..630b4df 100644 --- a/examples/face_mesh_visualizer.json +++ b/examples/face_mesh_visualizerVERSION2.json @@ -1,28 +1,20 @@ { - "last_node_id": 446, - "last_link_id": 723, + "last_node_id": 469, + "last_link_id": 795, "nodes": [ { "id": 45, "type": "SetNode", - "pos": { - "0": 510.31048583984375, - "1": 469.7173156738281, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 510.31048583984375, + 469.7173156738281 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 46, + "order": 55, "mode": 0, "inputs": [ { @@ -50,21 +42,21 @@ "id": 50, "type": "PreviewAudio", "pos": [ - 1070.311144030928, - 199.71815844600061 + 1070.3111572265625, + 199.71815490722656 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 68, + "order": 73, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 57 + "link": 726 } ], "outputs": [], @@ -78,30 +70,22 @@ { "id": 258, "type": "SetNode", - "pos": { - "0": 1079.7158203125, - "1": 510.3684387207031, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1079.7158203125, + 510.3684387207031 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 72, + "order": 79, "mode": 0, "inputs": [ { "name": "AUDIO", "type": "AUDIO", - "link": 435 + "link": 732 } ], "outputs": [ @@ -122,30 +106,22 @@ { "id": 257, "type": "SetNode", - "pos": { - "0": 1079.7158203125, - "1": 410.36859130859375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1079.7158203125, + 410.36859130859375 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 71, + "order": 77, "mode": 0, "inputs": [ { "name": "AUDIO", "type": "AUDIO", - "link": 434 + "link": 730 } ], "outputs": [ @@ -167,21 +143,21 @@ "id": 228, "type": "AudioFilter", "pos": [ - 1139.715685046552, - 930.3692814928769 + 1139.7156982421875, + 930.3692626953125 + ], + "size": [ + 252, + 46 ], - "size": { - "0": 252, - "1": 46 - }, "flags": {}, - "order": 69, + "order": 74, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 373 + "link": 728 }, { "name": "filters", @@ -194,7 +170,7 @@ "name": "AUDIO", "type": "AUDIO", "links": [ - 374 + 741 ], "slot_index": 0, "shape": 3 @@ -202,137 +178,100 @@ ], "properties": { "Node name for S&R": "AudioFilter" - } + }, + "widgets_values": [] }, { - "id": 226, - "type": "AudioFeatureExtractor", + "id": 262, + "type": "SetNode", "pos": [ - 1099.715685046553, - 1030.3692814928772 + 1479.7158203125, + 1210.3692626953125 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 87, + "order": 91, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 374 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 371 + "name": "FEATURE", + "type": "FEATURE", + "link": 744 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 437 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_drum_feature", "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "previousName": "drum_feature" }, "widgets_values": [ - "amplitude_envelope" + "drum_feature" ] }, { - "id": 43, - "type": "AudioFeatureExtractor", + "id": 261, + "type": "SetNode", "pos": [ - 1089.715685046553, - 1200.3692814928777 + 1489.7158203125, + 1030.3690185546875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 74, + "order": 100, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 41 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 42 + "name": "FEATURE", + "type": "FEATURE", + "link": 742 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 438 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_kick_feature", "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "previousName": "kick_feature" }, "widgets_values": [ - "amplitude_envelope" + "kick_feature" ] }, { - "id": 262, + "id": 264, "type": "SetNode", - "pos": { - "0": 1479.7158203125, - "1": 1210.3692626953125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1479.7158203125, + 1350.36962890625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 88, + "order": 92, "mode": 0, "inputs": [ { "name": "FEATURE", "type": "FEATURE", - "link": 438 + "link": 748 } ], "outputs": [ @@ -342,41 +281,33 @@ "links": null } ], - "title": "Set_drum_feature", + "title": "Set_vocal_feature", "properties": { - "previousName": "drum_feature" + "previousName": "vocal_feature" }, "widgets_values": [ - "drum_feature" + "vocal_feature" ] }, { - "id": 261, + "id": 266, "type": "SetNode", - "pos": { - "0": 1489.7158203125, - "1": 1030.3690185546875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1499.7158203125, + 1460.36962890625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 95, + "order": 93, "mode": 0, "inputs": [ { "name": "FEATURE", "type": "FEATURE", - "link": 437 + "link": 750 } ], "outputs": [ @@ -386,92 +317,69 @@ "links": null } ], - "title": "Set_kick_feature", + "title": "Set_bass_feature", "properties": { - "previousName": "kick_feature" + "previousName": "bass_feature" }, "widgets_values": [ - "kick_feature" + "bass_feature" ] }, { - "id": 263, - "type": "AudioFeatureExtractor", + "id": 268, + "type": "SetNode", "pos": [ - 1089.715685046553, - 1340.3692814928772 + 1489.7158203125, + 1600.3701171875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 75, + "order": 94, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 440 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 439 + "name": "FEATURE", + "type": "FEATURE", + "link": 752 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 441 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_other_feature", "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "previousName": "other_feature" }, "widgets_values": [ - "amplitude_envelope" + "other_feature" ] }, { - "id": 264, + "id": 277, "type": "SetNode", - "pos": { - "0": 1479.7158203125, - "1": 1350.36962890625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 647.7149658203125, + 968.3689575195312 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 89, + "order": 70, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 441 + "name": "MASK", + "type": "MASK", + "link": 453 } ], "outputs": [ @@ -481,92 +389,73 @@ "links": null } ], - "title": "Set_vocal_feature", + "title": "Set_empty_mask", "properties": { - "previousName": "vocal_feature" + "previousName": "empty_mask" }, "widgets_values": [ - "vocal_feature" - ] + "empty_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 265, - "type": "AudioFeatureExtractor", + "id": 101, + "type": "SetNode", "pos": [ - 1079.715685046553, - 1460.3692814928772 + 629.715087890625, + 854.3688354492188 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 76, + "order": 69, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 443 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 442 + "name": "IMAGE", + "type": "IMAGE", + "link": 162 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 444 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_empty_img", "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "previousName": "empty_img" }, "widgets_values": [ - "amplitude_envelope" - ] + "empty_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 266, + "id": 278, "type": "SetNode", - "pos": { - "0": 1499.7158203125, - "1": 1460.36962890625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 632.715087890625, + 1085.3690185546875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 90, + "order": 71, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 444 + "name": "INT", + "type": "INT", + "link": 454 } ], "outputs": [ @@ -576,252 +465,27 @@ "links": null } ], - "title": "Set_bass_feature", - "properties": { - "previousName": "bass_feature" - }, - "widgets_values": [ - "bass_feature" - ] - }, - { - "id": 267, - "type": "AudioFeatureExtractor", - "pos": [ - 1089.715685046553, - 1610.3692814928777 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 445 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 446 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 447 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 268, - "type": "SetNode", - "pos": { - "0": 1489.7158203125, - "1": 1600.3701171875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 91, - "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 447 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_other_feature", - "properties": { - "previousName": "other_feature" - }, - "widgets_values": [ - "other_feature" - ] - }, - { - "id": 277, - "type": "SetNode", - "pos": { - "0": 647.7149658203125, - "1": 968.3689575195312, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "MASK", - "type": "MASK", - "link": 453 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_empty_mask", - "properties": { - "previousName": "empty_mask" - }, - "widgets_values": [ - "empty_mask" - ] - }, - { - "id": 101, - "type": "SetNode", - "pos": { - "0": 629.715087890625, - "1": 854.3688354492188, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 162 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_empty_img", - "properties": { - "previousName": "empty_img" - }, - "widgets_values": [ - "empty_img" - ] - }, - { - "id": 278, - "type": "SetNode", - "pos": { - "0": 632.715087890625, - "1": 1085.3690185546875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 454 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_frame_count", + "title": "Set_frame_count", "properties": { "previousName": "frame_count" }, "widgets_values": [ "frame_count" - ] + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { "id": 227, "type": "FrequencyFilterPreset", "pos": [ - 1069.715685046553, - 830.3692814928769 + 1069.7156982421875, + 830.3692626953125 + ], + "size": [ + 405.5999755859375, + 58 ], - "size": { - "0": 405.5999755859375, - "1": 58 - }, "flags": {}, "order": 0, "mode": 0, @@ -829,7 +493,8 @@ { "name": "previous_filter", "type": "FREQUENCY_FILTER", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -853,22 +518,14 @@ { "id": 281, "type": "GetNode", - "pos": { - "0": 2706.944580078125, - "1": 609.09521484375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 2706.944580078125, + 609.09521484375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 1, "mode": 0, @@ -892,30 +549,22 @@ { "id": 256, "type": "SetNode", - "pos": { - "0": 1079.7158203125, - "1": 320.36871337890625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1079.7158203125, + 320.36871337890625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 70, + "order": 75, "mode": 0, "inputs": [ { "name": "AUDIO", "type": "AUDIO", - "link": 433 + "link": 729 } ], "outputs": [ @@ -934,76 +583,24 @@ ] }, { - "id": 306, + "id": 259, "type": "SetNode", - "pos": { - "0": 1082.7158203125, - "1": 713.3687133789062, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 488 - } + "pos": [ + 1080.7158203125, + 612.3684692382812 ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } + "size": [ + 210, + 58 ], - "title": "Set_feature_pipe", - "properties": { - "previousName": "feature_pipe" - }, - "widgets_values": [ - "feature_pipe" - ] - }, - { - "id": 259, - "type": "SetNode", - "pos": { - "0": 1080.7158203125, - "1": 612.3684692382812, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 73, + "order": 81, "mode": 0, "inputs": [ { "name": "AUDIO", "type": "AUDIO", - "link": 436 + "link": 734 } ], "outputs": [ @@ -1025,15 +622,15 @@ "id": 280, "type": "VHS_DuplicateImages", "pos": [ - 3093.9438551141884, - 442.09572528624676 + 3093.94384765625, + 442.0957336425781 + ], + "size": [ + 214.232421875, + 78 ], - "size": { - "0": 214.232421875, - "1": 78 - }, "flags": {}, - "order": 65, + "order": 83, "mode": 0, "inputs": [ { @@ -1077,22 +674,14 @@ { "id": 272, "type": "GetNode", - "pos": { - "0": 3212.943359375, - "1": 1060.095458984375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 3212.943359375, + 1060.095458984375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 2, "mode": 0, @@ -1116,22 +705,14 @@ { "id": 285, "type": "GetNode", - "pos": { - "0": 3073.943359375, - "1": 1694.096435546875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 3073.943359375, + 1694.096435546875 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 3, "mode": 0, @@ -1157,13 +738,13 @@ "id": 274, "type": "CreateShapeMask", "pos": [ - 1936.943855114191, - 418.0957252862463 + 1936.94384765625, + 418.0957336425781 + ], + "size": [ + 315, + 270 ], - "size": { - "0": 315, - "1": 270 - }, "flags": {}, "order": 4, "mode": 0, @@ -1204,21 +785,21 @@ "id": 316, "type": "GetImageSizeAndCount", "pos": [ - 3121.943855114188, - 1965.0957252862472 + 3121.94384765625, + 1965.095703125 + ], + "size": [ + 277.20001220703125, + 86 ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, "flags": {}, - "order": 62, + "order": 66, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 500 + "link": 757 } ], "outputs": [ @@ -1232,19 +813,19 @@ "shape": 3 }, { - "name": "768 width", + "name": "width", "type": "INT", "links": null, "shape": 3 }, { - "name": "464 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "225 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -1252,29 +833,22 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 343, "type": "SetNode", - "pos": { - "0": 3729.943603515625, - "1": 1577.09619140625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 3729.943603515625, + 1577.09619140625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 81, + "order": 88, "mode": 0, "inputs": [ { @@ -1296,29 +870,23 @@ }, "widgets_values": [ "vis_line_mask" - ] + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { "id": 346, "type": "SetNode", - "pos": { - "0": 3701.943359375, - "1": 1471.095947265625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 3701.943359375, + 1471.095947265625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 92, + "order": 99, "mode": 0, "inputs": [ { @@ -1340,21 +908,23 @@ }, "widgets_values": [ "vis_line_img" - ] + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 279, "type": "ImageInterval", "pos": [ - 1950.943855114191, - 265.0957252862445 + 1950.94384765625, + 265.0957336425781 ], - "size": { - "0": 268.79998779296875, - "1": 106 - }, - "flags": {}, - "order": 37, + "size": [ + 268.79998779296875, + 106 + ], + "flags": {}, + "order": 40, "mode": 0, "inputs": [ { @@ -1386,22 +956,14 @@ { "id": 276, "type": "GetNode", - "pos": { - "0": 1976.946044921875, - "1": 165.0943145751953, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1976.946044921875, + 165.0943145751953 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 5, "mode": 0, @@ -1426,15 +988,15 @@ "id": 365, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 11047.056037749246, - 450.90197319525515 + 11047.0556640625, + 450.9019775390625 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 93, + "order": 101, "mode": 0, "inputs": [ { @@ -1447,47 +1009,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 572, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 573, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": 574, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 575, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 576, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 577, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1497,8 +1067,8 @@ "links": [ 589 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1518,39 +1088,43 @@ "id": 366, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 11047.056037749246, - 1060.9019731952558 + 11047.0556640625, + 1060.9019775390625 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 38, + "order": 41, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 578, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": 579, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -1567,6 +1141,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -1576,8 +1156,8 @@ "links": [ 575 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1594,24 +1174,24 @@ "comfy", 0, 0, - false, - "" + false ] }, { "id": 367, "type": "ADE_SigmaSchedule", "pos": [ - 10717.056037749246, - 1080.9019731952558 + 10717.0556640625, + 1080.9019775390625 + ], + "size": [ + 244.73928833007812, + 58 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, "order": 6, "mode": 0, + "inputs": [], "outputs": [ { "name": "SIGMA_SCHEDULE", @@ -1619,8 +1199,8 @@ "links": [ 579 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Sigma Schedule 🎭🅐🅓", @@ -1640,13 +1220,13 @@ "id": 368, "type": "ADE_MultivalDynamic", "pos": [ - 10707.056037749246, - 730.9019731952556 + 10707.0556640625, + 730.9019775390625 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 7, "mode": 0, @@ -1654,7 +1234,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1664,8 +1245,8 @@ "links": [ 576 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -1678,21 +1259,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 369, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 11047.056037749246, - 750.9019731952556 + 11047.0556640625, + 750.9019775390625 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 8, "mode": 0, @@ -1700,12 +1280,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1715,8 +1297,8 @@ "links": [ 572 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -1745,13 +1327,13 @@ "id": 370, "type": "ADE_MultivalDynamic", "pos": [ - 10707.056037749246, - 620.9019731952552 + 10707.0556640625, + 620.9019775390625 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 9, "mode": 0, @@ -1759,7 +1341,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1782,21 +1365,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 371, "type": "ADE_CustomCFGSimple", "pos": [ - 10707.056037749246, - 830.9019731952558 + 10707.0556640625, + 830.9019775390625 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 10, "mode": 0, @@ -1804,7 +1386,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1826,38 +1409,39 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 372, "type": "ADE_AnimateDiffSettings", "pos": [ - 10737.056037749246, - 1180.9019731952558 + 10737.0556640625, + 1180.9019775390625 + ], + "size": [ + 226.8000030517578, + 54 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, "flags": { "collapsed": true }, - "order": 39, + "order": 42, "mode": 0, "inputs": [ { "name": "pe_adjust", "type": "PE_ADJUST", "link": 580, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "weight_adjust", "type": "WEIGHT_ADJUST", "link": 581, - "slot_index": 1 + "slot_index": 1, + "shape": 7 } ], "outputs": [ @@ -1878,21 +1462,19 @@ "groupcolor": "#3f789e" } }, - "widgets_values": [ - "" - ] + "widgets_values": [] }, { "id": 373, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 10707.056037749246, - 930.9019731952561 + 10707.0556640625, + 930.9019775390625 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 11, "mode": 0, @@ -1900,7 +1482,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1924,21 +1507,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 374, "type": "ADE_AdjustWeightAllMult", "pos": [ - 10717.056037749246, - 470.90197319525515 + 10717.0556640625, + 470.9019775390625 + ], + "size": [ + 270.3999938964844, + 82 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, "order": 12, "mode": 0, @@ -1946,7 +1528,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1969,23 +1552,22 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { "id": 378, "type": "VHS_VideoCombine", "pos": [ - 13412.553827596734, + 13412.5537109375, 560 ], "size": [ 365.99755859375, - 533.300983346147 + 334 ], "flags": {}, - "order": 121, + "order": 128, "mode": 0, "inputs": [ { @@ -1995,18 +1577,21 @@ }, { "name": "audio", - "type": "*", - "link": 587 + "type": "AUDIO", + "link": 587, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2028,6 +1613,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -2048,15 +1634,15 @@ "id": 380, "type": "ModelSamplingDiscrete", "pos": [ - 11037.056037749246, - 320.9019731952551 + 11037.0556640625, + 320.9019775390625 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 96, + "order": 103, "mode": 0, "inputs": [ { @@ -2073,8 +1659,8 @@ 582, 603 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2089,15 +1675,15 @@ "id": 384, "type": "IPAdapterAdvanced", "pos": [ - 10157.753306612212, - 472.14391129293386 + 10157.7529296875, + 472.1439208984375 + ], + "size": [ + 315, + 278 ], - "size": { - "0": 315, - "1": 278 - }, "flags": {}, - "order": 66, + "order": 84, "mode": 4, "inputs": [ { @@ -2118,17 +1704,20 @@ { "name": "image_negative", "type": "IMAGE", - "link": null + "link": null, + "shape": 7 }, { "name": "attn_mask", "type": "MASK", - "link": null + "link": null, + "shape": 7 }, { "name": "clip_vision", "type": "CLIP_VISION", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2138,8 +1727,8 @@ "links": [ 597 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -2158,15 +1747,15 @@ "id": 386, "type": "DifferentialDiffusion", "pos": [ - 10217.753306612212, - 852.1439112929343 + 10217.7529296875, + 852.1439208984375 + ], + "size": [ + 184.8000030517578, + 26 ], - "size": { - "0": 184.8000030517578, - "1": 26 - }, "flags": {}, - "order": 84, + "order": 96, "mode": 4, "inputs": [ { @@ -2182,27 +1771,28 @@ "links": [ 571 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "DifferentialDiffusion" - } + }, + "widgets_values": [] }, { "id": 385, "type": "IPAdapterUnifiedLoader", "pos": [ - 10157.753306612212, - 342.1439112929338 + 10157.7529296875, + 342.1439208984375 + ], + "size": [ + 315, + 78 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 53, + "order": 61, "mode": 4, "inputs": [ { @@ -2213,7 +1803,8 @@ { "name": "ipadapter", "type": "IPADAPTER", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2223,8 +1814,8 @@ "links": [ 594 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "ipadapter", @@ -2232,8 +1823,8 @@ "links": [ 595 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 } ], "properties": { @@ -2246,22 +1837,14 @@ { "id": 387, "type": "GetNode", - "pos": { - "0": 13402.5546875, - "1": 430, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 13402.5546875, + 430 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 13, "mode": 0, @@ -2286,15 +1869,15 @@ "id": 282, "type": "VHS_VideoCombine", "pos": [ - 3510.94385511419, - 344.0957252862453 + 3510.94384765625, + 344.0957336425781 ], "size": [ 214.7587890625, - 441.15958404541016 + 334 ], "flags": {}, - "order": 83, + "order": 95, "mode": 4, "inputs": [ { @@ -2305,17 +1888,20 @@ { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2337,6 +1923,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -2357,15 +1944,15 @@ "id": 377, "type": "VAEDecode", "pos": [ - 12822.553827596734, + 12822.5537109375, 620 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 117, + "order": 124, "mode": 0, "inputs": [ { @@ -2391,21 +1978,22 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 379, "type": "GetImageSizeAndCount", "pos": [ - 13092.553827596734, + 13092.5537109375, 720 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 119, + "order": 126, "mode": 0, "inputs": [ { @@ -2421,24 +2009,24 @@ "links": [ 586 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "768 width", + "name": "width", "type": "INT", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "464 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "225 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -2446,27 +2034,20 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 393, "type": "GetNode", - "pos": { - "0": 14892.5546875, - "1": 370, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 14892.5546875, + 370 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 14, "mode": 0, @@ -2490,24 +2071,16 @@ { "id": 399, "type": "SetNode", - "pos": { - "0": 8472.7265625, - "1": 483.11932373046875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 8472.7265625, + 483.11932373046875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 41, + "order": 44, "mode": 0, "inputs": [ { @@ -2529,29 +2102,23 @@ }, "widgets_values": [ "clip" - ] + ], + "color": "#432", + "bgcolor": "#653" }, { "id": 398, "type": "SetNode", - "pos": { - "0": 8472.7265625, - "1": 613.119140625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 8472.7265625, + 613.119140625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 42, + "order": 45, "mode": 0, "inputs": [ { @@ -2573,29 +2140,23 @@ }, "widgets_values": [ "vae" - ] + ], + "color": "#322", + "bgcolor": "#533" }, { "id": 400, "type": "SetNode", - "pos": { - "0": 8472.7265625, - "1": 373.1192321777344, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 8472.7265625, + 373.1192321777344 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 40, + "order": 43, "mode": 0, "inputs": [ { @@ -2617,22 +2178,25 @@ }, "widgets_values": [ "model" - ] + ], + "color": "#223", + "bgcolor": "#335" }, { "id": 362, "type": "CheckpointLoaderSimple", "pos": [ - 8012.727078548793, - 653.1193378178637 + 8012.72705078125, + 653.1193237304688 + ], + "size": [ + 315, + 98 ], - "size": { - "0": 315, - "1": 98 - }, "flags": {}, "order": 15, "mode": 0, + "inputs": [], "outputs": [ { "name": "MODEL", @@ -2670,15 +2234,15 @@ "id": 383, "type": "CR Apply LoRA Stack", "pos": [ - 9287.753306612212, - 542.1439112929338 + 9287.7529296875, + 542.1439208984375 + ], + "size": [ + 254.40000915527344, + 66 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, "flags": {}, - "order": 43, + "order": 46, "mode": 0, "inputs": [ { @@ -2704,8 +2268,8 @@ "links": [ 596 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "CLIP", @@ -2714,8 +2278,8 @@ 569, 570 ], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { "name": "show_help", @@ -2726,27 +2290,20 @@ ], "properties": { "Node name for S&R": "CR Apply LoRA Stack" - } + }, + "widgets_values": [] }, { "id": 402, "type": "GetNode", - "pos": { - "0": 9057.76171875, - "1": 392.1433410644531, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 9057.76171875, + 392.1433410644531 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 16, "mode": 0, @@ -2770,22 +2327,14 @@ { "id": 403, "type": "GetNode", - "pos": { - "0": 9317.76171875, - "1": 672.14306640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 9317.76171875, + 672.14306640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 17, "mode": 0, @@ -2809,22 +2358,14 @@ { "id": 401, "type": "GetNode", - "pos": { - "0": 9047.76171875, - "1": 292.14337158203125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 9047.76171875, + 292.14337158203125 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 18, "mode": 0, @@ -2848,22 +2389,14 @@ { "id": 404, "type": "GetNode", - "pos": { - "0": 12632.5546875, - "1": 440, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 12632.5546875, + 440 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 19, "mode": 0, @@ -2889,15 +2422,15 @@ "id": 392, "type": "GetImageSizeAndCount", "pos": [ - 14582.553827596734, + 14582.5537109375, 660 ], - "size": { - "0": 210, - "1": 86 - }, + "size": [ + 210, + 86 + ], "flags": {}, - "order": 123, + "order": 130, "mode": 0, "inputs": [ { @@ -2914,24 +2447,24 @@ 614, 637 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "1152 width", + "name": "width", "type": "INT", "links": [], - "shape": 3, - "slot_index": 1 + "slot_index": 1, + "shape": 3 }, { - "name": "696 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "225 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -2939,19 +2472,20 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 41, "type": "DownloadOpenUnmixModel", "pos": [ - 191.41079024129368, - 681.6197663223751 + 191.41079711914062, + 681.6197509765625 + ], + "size": [ + 361.20001220703125, + 58 ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, "flags": {}, "order": 20, "mode": 0, @@ -2961,7 +2495,7 @@ "name": "OPEN_UNMIX_MODEL", "type": "OPEN_UNMIX_MODEL", "links": [ - 36 + 724 ], "slot_index": 0, "shape": 3 @@ -2978,15 +2512,15 @@ "id": 412, "type": "PreviewAudio", "pos": [ - 428.28595000574694, - 331.38373738886855 + 428.28594970703125, + 331.38372802734375 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, - "order": 48, + "order": 57, "mode": 0, "inputs": [ { @@ -3007,15 +2541,15 @@ "id": 336, "type": "MediaPipeFaceMeshToSEGS", "pos": [ - 5718.531146480772, - 214.5410458090749 + 5718.53125, + 214.54104614257812 + ], + "size": [ + 315, + 346 ], - "size": { - "0": 315, - "1": 346 - }, "flags": {}, - "order": 97, + "order": 104, "mode": 0, "inputs": [ { @@ -3060,21 +2594,21 @@ "id": 325, "type": "ImpactImageBatchToImageList", "pos": [ - 5367.531146480773, - 216.5410458090749 + 5367.53125, + 216.54104614257812 + ], + "size": [ + 307.0949401855469, + 26 ], - "size": { - "0": 307.0949401855469, - "1": 26 - }, "flags": {}, - "order": 86, + "order": 98, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 665 + "link": 763 } ], "outputs": [ @@ -3091,6 +2625,7 @@ "properties": { "Node name for S&R": "ImpactImageBatchToImageList" }, + "widgets_values": [], "color": "#223", "bgcolor": "#335" }, @@ -3098,15 +2633,15 @@ "id": 337, "type": "ImpactSEGSToMaskList", "pos": [ - 6059.531146480772, - 216.5410458090749 + 6059.53125, + 216.54104614257812 + ], + "size": [ + 322.8110656738281, + 36.70903778076172 ], - "size": { - "0": 322.8110656738281, - "1": 36.70903778076172 - }, "flags": {}, - "order": 99, + "order": 106, "mode": 0, "inputs": [ { @@ -3129,30 +2664,23 @@ "properties": { "Node name for S&R": "ImpactSEGSToMaskList" }, + "widgets_values": [], "color": "#223", "bgcolor": "#335" }, { "id": 407, "type": "SetNode", - "pos": { - "0": 7217.53125, - "1": 160.541015625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 7217.53125, + 160.541015625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 113, + "order": 120, "mode": 0, "inputs": [ { @@ -3174,21 +2702,23 @@ }, "widgets_values": [ "facemask" - ] + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { "id": 342, "type": "ImageCompositeMasked", "pos": [ - 7240.531146480775, - 277.5410458090749 + 7240.53125, + 277.5410461425781 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 112, + "order": 119, "mode": 0, "inputs": [ { @@ -3204,7 +2734,8 @@ { "name": "mask", "type": "MASK", - "link": 531 + "link": 531, + "shape": 7 } ], "outputs": [ @@ -3215,8 +2746,8 @@ 541, 641 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -3232,15 +2763,15 @@ "id": 339, "type": "GrowMaskWithBlur", "pos": [ - 6065.531146480772, - 312.5410458090749 + 6065.53125, + 312.5410461425781 + ], + "size": [ + 324.2040100097656, + 246 ], - "size": { - "0": 324.2040100097656, - "1": 246 - }, "flags": {}, - "order": 101, + "order": 108, "mode": 0, "inputs": [ { @@ -3286,21 +2817,21 @@ "id": 341, "type": "ImageToMask", "pos": [ - 6838.531146480775, - 198.54104580907483 + 6838.53125, + 198.54104614257812 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 111, + "order": 118, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 689 + "link": 769 } ], "outputs": [ @@ -3331,12 +2862,12 @@ 14604, 554 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 122, + "order": 129, "mode": 0, "inputs": [ { @@ -3362,7 +2893,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 391, @@ -3373,10 +2905,10 @@ ], "size": [ 365.99755859375, - 533.300983346147 + 334 ], "flags": {}, - "order": 126, + "order": 133, "mode": 0, "inputs": [ { @@ -3387,17 +2919,20 @@ { "name": "audio", "type": "AUDIO", - "link": 610 + "link": 610, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3419,6 +2954,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -3439,15 +2975,15 @@ "id": 49, "type": "PreviewAudio", "pos": [ - 423.28595000574694, - 161.38373738886852 + 423.28594970703125, + 161.3837432861328 + ], + "size": [ + 315, + 76.00000762939453 ], - "size": { - "0": 315, - "1": 76.00000762939453 - }, "flags": {}, - "order": 47, + "order": 56, "mode": 0, "inputs": [ { @@ -3468,21 +3004,21 @@ "id": 301, "type": "GetImageSizeAndCount", "pos": [ - 3150.6063047911475, - 897.318420641524 + 3150.606201171875, + 897.3184204101562 + ], + "size": [ + 277.20001220703125, + 86 ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, "flags": {}, - "order": 61, + "order": 65, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 482 + "link": 754 } ], "outputs": [ @@ -3496,19 +3032,19 @@ "shape": 3 }, { - "name": "768 width", + "name": "width", "type": "INT", "links": null, "shape": 3 }, { - "name": "464 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "225 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -3516,21 +3052,22 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 338, "type": "MaskToImage", "pos": [ - 6417.396589294935, - 151.23967724004075 + 6417.396484375, + 151.2396697998047 + ], + "size": [ + 300.6851806640625, + 26 ], - "size": { - "0": 300.6851806640625, - "1": 26 - }, "flags": {}, - "order": 104, + "order": 111, "mode": 0, "inputs": [ { @@ -3553,6 +3090,7 @@ "properties": { "Node name for S&R": "MaskToImage" }, + "widgets_values": [], "color": "#223", "bgcolor": "#335" }, @@ -3560,15 +3098,15 @@ "id": 420, "type": "ImageListToImageBatch", "pos": [ - 6422.396589294935, - 232.23967724004075 + 6422.396484375, + 232.2396697998047 + ], + "size": [ + 210, + 26 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 106, + "order": 113, "mode": 0, "inputs": [ { @@ -3582,35 +3120,28 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 685 + 767 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "ImageListToImageBatch" - } + }, + "widgets_values": [] }, { "id": 347, "type": "GetNode", - "pos": { - "0": 6907.3955078125, - "1": 311.2396545410156, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 6907.3955078125, + 311.2396545410156 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 21, "mode": 0, @@ -3635,21 +3166,21 @@ "id": 415, "type": "Reroute", "pos": [ - 6361.396589294935, - 927.2396772400408 + 6361.396484375, + 927.2396850585938 ], "size": [ 75, 26 ], "flags": {}, - "order": 103, + "order": 110, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 710 + "link": 766 } ], "outputs": [ @@ -3671,22 +3202,14 @@ { "id": 416, "type": "GetNode", - "pos": { - "0": 5906.39599609375, - "1": 1600.23974609375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 5906.39599609375, + 1600.23974609375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 22, "mode": 0, @@ -3710,22 +3233,14 @@ { "id": 436, "type": "GetNode", - "pos": { - "0": 4762.396484375, - "1": 1090.23974609375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 4762.396484375, + 1090.23974609375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 23, "mode": 0, @@ -3749,22 +3264,14 @@ { "id": 408, "type": "GetNode", - "pos": { - "0": 11805.78515625, - "1": 1846.642333984375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 11805.78515625, + 1846.642333984375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 24, "mode": 0, @@ -3788,22 +3295,14 @@ { "id": 430, "type": "GetNode", - "pos": { - "0": 11517.78515625, - "1": 1746.642333984375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 11517.78515625, + 1746.642333984375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 25, "mode": 0, @@ -3831,12 +3330,12 @@ 2359, 295 ], - "size": { - "0": 579.5999755859375, - "1": 174 - }, + "size": [ + 579.5999755859375, + 174 + ], "flags": {}, - "order": 52, + "order": 60, "mode": 0, "inputs": [ { @@ -3879,12 +3378,12 @@ 4254, 757 ], - "size": { - "0": 315, - "1": 82 - }, + "size": [ + 315, + 82 + ], "flags": {}, - "order": 56, + "order": 64, "mode": 0, "inputs": [ { @@ -3898,10 +3397,10 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 664 + 761 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -3916,36 +3415,39 @@ "id": 353, "type": "VHS_VideoCombine", "pos": [ - 5142.396589294935, - 1014.2396772400408 + 5142.396484375, + 1014.2396850585938 ], "size": [ 214.7587890625, - 435.07337188720703 + 334 ], "flags": {}, - "order": 85, + "order": 97, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 548 + "link": 762 }, { "name": "audio", "type": "AUDIO", - "link": 709 + "link": 709, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3967,6 +3469,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -3983,62 +3486,6 @@ } } }, - { - "id": 425, - "type": "FlexImageTransform", - "pos": [ - 6518, - 1122 - ], - "size": { - "0": 478.8000183105469, - "1": 242 - }, - "flags": {}, - "order": 109, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 685 - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 687, - 689 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexImageTransform" - }, - "widgets_values": [ - 1, - 0, - "None", - "relative", - "scale", - 0.5, - 0.5 - ] - }, { "id": 382, "type": "CR LoRA Stack", @@ -4046,10 +3493,10 @@ 8941, 542 ], - "size": { - "0": 315, - "1": 342 - }, + "size": [ + 315, + 342 + ], "flags": {}, "order": 26, "mode": 0, @@ -4057,7 +3504,8 @@ { "name": "lora_stack", "type": "LORA_STACK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -4067,8 +3515,8 @@ "links": [ 593 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { "name": "show_help", @@ -4099,15 +3547,15 @@ "id": 364, "type": "CLIPTextEncode", "pos": [ - 9587.753306612212, - 632.1439112929338 + 9587.7529296875, + 632.1439208984375 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, "flags": {}, - "order": 55, + "order": 63, "mode": 0, "inputs": [ { @@ -4135,99 +3583,31 @@ ] }, { - "id": 440, - "type": "FlexAudioVisualizerCircular", + "id": 315, + "type": "VHS_LoadVideo", "pos": [ - 2450, - 2288 - ], - "size": { - "0": 403.20001220703125, - "1": 558 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 715 - }, - { - "name": "opt_feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 718 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexAudioVisualizerCircular" - }, - "widgets_values": [ - 30, - 800, - 600, - 1, - "visualization_method", - "relative", - "None", - 0.5, - 0.5, - "bar", - "frequency", - 0.5, - 0, - 360, - 2048, - 20, - 8000, - 200, - 2, - 100, - 200 - ] - }, - { - "id": 315, - "type": "VHS_LoadVideo", - "pos": [ - 4264, - 289 + 4264, + 289 ], "size": [ 247.455078125, - 379.9434814453125 + 262 ], "flags": {}, - "order": 44, + "order": 47, "mode": 0, "inputs": [ { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 }, { "name": "frame_load_cap", @@ -4299,22 +3679,14 @@ { "id": 348, "type": "GetNode", - "pos": { - "0": 4163, - "1": 161, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 4163, + 161 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 27, "mode": 0, @@ -4336,828 +3708,879 @@ ] }, { - "id": 39, - "type": "VHS_LoadAudioUpload", + "id": 269, + "type": "GetNode", "pos": [ - -76, - 471 + 1968, + 1014 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 243.818359375, - "1": 130 - }, "flags": {}, "order": 28, "mode": 0, "inputs": [], "outputs": [ { - "name": "audio", + "name": "AUDIO", "type": "AUDIO", "links": [ - 37, - 38, - 48, - 56, - 639 + 753, + 756, + 759 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Delta Deez - Songfinch - Out the Mud.mp3", - "start_time": 105, - "duration": 7.5, - "choose audio to upload": "image" - } + "title": "Get_audio__vocals", + "properties": {}, + "widgets_values": [ + "audio__vocals" + ] }, { - "id": 42, - "type": "EmptyImageAndMaskFromAudio", + "id": 443, + "type": "MotionFeatureNode", "pos": [ - -63, - 833 + 1958, + 761 + ], + "size": [ + 317.4000244140625, + 222 ], - "size": { - "0": 411.6000061035156, - "1": 146 - }, "flags": {}, - "order": 45, + "order": 29, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 38 + "name": "images", + "type": "IMAGE", + "link": null } ], "outputs": [ { - "name": "empty_image", - "type": "IMAGE", - "links": [ - 39, - 162 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "empty_mask", - "type": "MASK", - "links": [ - 453 - ], - "slot_index": 1, + "name": "FEATURE", + "type": "FEATURE", + "links": null, "shape": 3 }, { - "name": "frame_count", - "type": "INT", - "links": [ - 454 - ], - "slot_index": 2, + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "MotionFeatureNode" }, "widgets_values": [ + "mean_motion", 30, - 768, - 464 + "Farneback", + 0, + 0, + 0, + 0 ] }, { - "id": 40, - "type": "AudioSeparator", + "id": 345, + "type": "MaskToImage", "pos": [ - 605, - 588 + 3639, + 1390 + ], + "size": [ + 264.5999755859375, + 26 ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, "flags": {}, - "order": 57, + "order": 89, "mode": 0, "inputs": [ { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 36, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 37 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 39 + "name": "mask", + "type": "MASK", + "link": 532 } ], "outputs": [ { - "name": "audio", - "type": "AUDIO", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 57 + 533 ], "slot_index": 0, "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 41, - 373, - 433 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 434, - 440 - ], - "slot_index": 2, - "shape": 3 - }, + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 290, + "type": "MaskComposite", + "pos": [ + 3225, + 1389 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 67, + "mode": 0, + "inputs": [ { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 435, - 443 - ], - "slot_index": 3, - "shape": 3 + "name": "destination", + "type": "MASK", + "link": 755 }, { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 436, - 445 - ], - "slot_index": 4, - "shape": 3 - }, + "name": "source", + "type": "MASK", + "link": 758 + } + ], + "outputs": [ { - "name": "feature_pipe", - "type": "FEATURE_PIPE", + "name": "MASK", + "type": "MASK", "links": [ - 42, - 371, - 439, - 442, - 446, - 488 + 529, + 532 ], - "slot_index": 5, + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "AudioSeparator" + "Node name for S&R": "MaskComposite" }, "widgets_values": [ - 30 + 0, + 0, + "add" ] }, { - "id": 269, - "type": "GetNode", - "pos": { - "0": 1968, - "1": 1014, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 448, - 460, - 715 - ], - "slot_index": 0 - } - ], - "title": "Get_audio__vocals", - "properties": {}, - "widgets_values": [ - "audio__vocals" - ] - }, - { - "id": 443, - "type": "MotionFeatureNode", + "id": 354, + "type": "VHS_VideoCombine", "pos": [ - 1958, - 761 + 7121, + 1379 + ], + "size": [ + 214.7587890625, + 334 ], - "size": { - "0": 317.4000244140625, - "1": 174 - }, "flags": {}, - "order": 30, - "mode": 0, + "order": 117, + "mode": 4, "inputs": [ { - "name": "video_frames", + "name": "images", "type": "IMAGE", - "link": null + "link": 768 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "MotionFeatureNode" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "mean_motion", - 30, - "Farneback", - 0, - 0 - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07387.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } }, { - "id": 260, - "type": "FlexAudioVisualizerLine", + "id": 363, + "type": "CLIPTextEncode", "pos": [ - 2431, - 877 + 9597, + 372 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 ], - "size": { - "0": 369.6000061035156, - "1": 606 - }, "flags": {}, - "order": 49, + "order": 62, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 448 - }, - { - "name": "opt_feature", - "type": "FEATURE", - "link": null, - "slot_index": 1 + "name": "clip", + "type": "CLIP", + "link": 569 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 482 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 485 + 711, + 713 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "FlexAudioVisualizerLine" + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 30, - 768, - 464, - 1, - "num_bars", - "relative", - "None", - 0.5, - 0.5, - "line", - "frequency", - 0.5, - 0, - 64, - 200, - 10, - 5, - 0, - true, - 0, - 2048, - 20, - 8000 + "acidzlime, dripping slime, disembodied face singing" ] }, { - "id": 284, - "type": "FlexAudioVisualizerLine", + "id": 388, + "type": "VAEEncode", "pos": [ - 2443, - 1545 + 9726, + 939 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 369.6000061035156, - "1": 611.5924682617188 - }, "flags": {}, - "order": 50, + "order": 122, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 460 + "name": "pixels", + "type": "IMAGE", + "link": 641 }, { - "name": "opt_feature", - "type": "FEATURE", - "link": null + "name": "vae", + "type": "VAE", + "link": 623 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 500 + 600 ], "slot_index": 0, "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": [ - 486 - ], - "slot_index": 1, - "shape": 3 } ], "properties": { - "Node name for S&R": "FlexAudioVisualizerLine" + "Node name for S&R": "VAEEncode" }, - "widgets_values": [ - 30, - 768, - 464, - 1, - "num_bars", - "relative", - "None", - 0.5, - 0.5, - "line", - "frequency", - 0.5, - 180, - 214, - 200, - 10, - 5, - 0, - true, - 0, - 2048, - 20, - 8000 - ] + "widgets_values": [] }, { - "id": 345, - "type": "MaskToImage", + "id": 334, + "type": "VHS_VideoCombine", "pos": [ - 3639, - 1390 + 7390, + 498 + ], + "size": [ + 214.7587890625, + 334 ], - "size": { - "0": 264.5999755859375, - "1": 26 - }, "flags": {}, - "order": 82, - "mode": 0, + "order": 121, + "mode": 4, "inputs": [ { - "name": "mask", - "type": "MASK", - "link": 532 + "name": "images", + "type": "IMAGE", + "link": 541 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 533 - ], - "shape": 3, - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "MaskToImage" + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07388.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } } }, { - "id": 290, - "type": "MaskComposite", + "id": 428, + "type": "CannyEdgePreprocessor", "pos": [ - 3225, - 1389 + 11539, + 1573 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 126 - }, "flags": {}, - "order": 63, + "order": 112, "mode": 0, "inputs": [ { - "name": "destination", - "type": "MASK", - "link": 485 - }, - { - "name": "source", - "type": "MASK", - "link": 486 + "name": "image", + "type": "IMAGE", + "link": 692 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 529, - 532 + 693, + 695 ], "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "MaskComposite" + "Node name for S&R": "CannyEdgePreprocessor" }, "widgets_values": [ - 0, - 0, - "add" + 100, + 200, + 512 ] }, { - "id": 349, - "type": "FlexImageTransform", + "id": 406, + "type": "ControlNetLoader", "pos": [ - 4641, - 500 + 12113, + 1516 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 478.8000183105469, - "1": 242 - }, "flags": {}, - "order": 67, + "order": 30, "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 664 - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], + "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONTROL_NET", + "type": "CONTROL_NET", "links": [ - 548, - 665 + 628 ], - "shape": 3, - "slot_index": 0 + "shape": 3 } ], "properties": { - "Node name for S&R": "FlexImageTransform" + "Node name for S&R": "ControlNetLoader" }, "widgets_values": [ - 1, - 0, - "None", - "relative", - "translate", - -28.1, - -27.1 + "control_v11p_sd15_canny_fp16.safetensors" ] }, { - "id": 426, - "type": "FlexImageTransform", + "id": 405, + "type": "ACN_AdvancedControlNetApply", "pos": [ - 5784, - 1095 + 12546, + 1545 + ], + "size": [ + 285.6000061035156, + 286 ], - "size": { - "0": 478.8000183105469, - "1": 242 - }, "flags": {}, - "order": 100, + "order": 114, "mode": 0, "inputs": [ { - "name": "images", + "name": "positive", + "type": "CONDITIONING", + "link": 713 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 714 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 628, + "slot_index": 2 + }, + { + "name": "image", "type": "IMAGE", - "link": 723 + "link": 693 }, { - "name": "feature", - "type": "FEATURE", - "link": null + "name": "mask_optional", + "type": "MASK", + "link": 630, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": null, + "shape": 7 + }, + { + "name": "model_optional", + "type": "MODEL", + "link": null, + "shape": 7 + }, + { + "name": "vae_optional", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "positive", + "type": "CONDITIONING", "links": [ - 686, - 710 + 633 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 634 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "model_opt", + "type": "MODEL", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "FlexImageTransform" + "Node name for S&R": "ACN_AdvancedControlNetApply" }, "widgets_values": [ - 1, + 0.85, 0, - "None", - "relative", - "scale", - 0.5, - 0.5 + 0.85 ] }, { - "id": 354, - "type": "VHS_VideoCombine", + "id": 394, + "type": "NNLatentUpscale", "pos": [ - 7121, - 1379 + 13908, + 461 ], "size": [ - 214.7587890625, - 433.55181884765625 + 315, + 82 ], "flags": {}, - "order": 110, - "mode": 4, + "order": 125, + "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 687 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "name": "latent", + "type": "LATENT", + "link": 612 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, + "name": "LATENT", + "type": "LATENT", + "links": [ + 613 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "NNLatentUpscale" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07387.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + "SD 1.x", + 1.5 + ] }, { - "id": 363, - "type": "CLIPTextEncode", + "id": 389, + "type": "KSampler", "pos": [ - 9597, - 372 + 14219, + 655 + ], + "size": [ + 303.4075622558594, + 262 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 54, + "order": 127, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 569 + "name": "model", + "type": "MODEL", + "link": 603 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 711 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 712 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 613 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", "links": [ - 711, - 713 + 607 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "KSampler" }, "widgets_values": [ - "acidzlime, dripping slime, disembodied face singing" + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.4 ] }, { - "id": 388, - "type": "VAEEncode", + "id": 395, + "type": "FlexImageHueShift", "pos": [ - 9726, - 939 + 15018, + 869 + ], + "size": [ + 319.20001220703125, + 214 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 115, - "mode": 0, + "order": 131, + "mode": 4, "inputs": [ { - "name": "pixels", + "name": "images", "type": "IMAGE", - "link": 641 + "link": 614 }, { - "name": "vae", - "type": "VAE", - "link": 623 + "name": "opt_feature", + "type": "FEATURE", + "link": 615, + "shape": 7 + }, + { + "name": "opt_mask", + "type": "MASK", + "link": 616, + "shape": 7 + }, + { + "name": "opt_mask", + "type": "MASK", + "link": null } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", + "links": [], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FlexImageHueShift" + }, + "widgets_values": [ + 1, + 0, + "None", + "relative", + 96 + ] + }, + { + "id": 396, + "type": "GetNode", + "pos": [ + 14588, + 926 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", "links": [ - 600 + 615 + ], + "slot_index": 0 + } + ], + "title": "Get_drum_feature", + "properties": {}, + "widgets_values": [ + "drum_feature" + ] + }, + { + "id": 397, + "type": "GetNode", + "pos": [ + 14545, + 1092 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": [ + 616 ], - "shape": 3, "slot_index": 0 } ], + "title": "Get_feature_pipe", + "properties": {}, + "widgets_values": [ + "feature_pipe" + ] + }, + { + "id": 411, + "type": "ImageCASBatch", + "pos": [ + 15015, + 612 + ], + "size": [ + 462, + 82 + ], + "flags": {}, + "order": 132, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 637 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 638 + ], + "slot_index": 0, + "shape": 3 + } + ], "properties": { - "Node name for S&R": "VAEEncode" - } + "Node name for S&R": "ImageCASBatch" + }, + "widgets_values": [ + 0.8, + 4 + ] }, { - "id": 334, + "id": 441, "type": "VHS_VideoCombine", "pos": [ - 7390, - 498 + 3328, + 2373 ], "size": [ 214.7587890625, - 441.15958404541016 + 334 ], "flags": {}, - "order": 114, + "order": 68, "mode": 4, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 541 + "link": 760 }, { "name": "audio", "type": "AUDIO", - "link": null + "link": 717, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -5179,13 +4602,14 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, - "paused": false, + "paused": true, "params": { - "filename": "AnimateDiff_07388.mp4", + "filename": "AnimateDiff_07383-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", @@ -5196,730 +4620,1443 @@ } }, { - "id": 428, - "type": "CannyEdgePreprocessor", + "id": 286, + "type": "VHS_VideoCombine", "pos": [ - 11539, - 1573 + 3481, + 1673 + ], + "size": [ + 214.7587890625, + 334 ], - "size": { - "0": 315, - "1": 106 - }, "flags": {}, - "order": 105, - "mode": 0, + "order": 87, + "mode": 4, "inputs": [ { - "name": "image", + "name": "images", "type": "IMAGE", - "link": 692 - } - ], - "outputs": [ + "link": 501 + }, { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 693, - 695 + "name": "audio", + "type": "AUDIO", + "link": 461, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07384-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 273, + "type": "VHS_VideoCombine", + "pos": [ + 3539, + 912 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 86, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 483 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 449, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07382-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 324, + "type": "MediaPipe-FaceMeshPreprocessor", + "pos": [ + 5353.53125, + 317.5410461425781 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 102, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 546 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 552, + 722 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MediaPipe-FaceMeshPreprocessor" + }, + "widgets_values": [ + 1, + 0.1, + 512 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 444, + "type": "ImageListToImageBatch", + "pos": [ + 5587, + 755 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 105, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 722 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 764 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToImageBatch" + }, + "widgets_values": [] + }, + { + "id": 360, + "type": "VHS_VideoCombine", + "pos": [ + 6248, + 1448 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 109, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 765 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 656, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07385-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 429, + "type": "VHS_VideoCombine", + "pos": [ + 12132, + 1649 + ], + "size": [ + 365.99755859375, + 334 + ], + "flags": {}, + "order": 115, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 695 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 696, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "CannyEdgePreprocessor" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - 100, - 200, - 512 - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07386-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } }, { - "id": 406, - "type": "ControlNetLoader", + "id": 375, + "type": "ADE_AnimateDiffLoRALoader", "pos": [ - 12113, - 1516 + 10741.302734375, + 337.758056640625 + ], + "size": [ + 261.19134521484375, + 82 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 31, + "order": 33, "mode": 0, + "inputs": [ + { + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null, + "shape": 7 + } + ], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", + "name": "MOTION_LORA", + "type": "MOTION_LORA", "links": [ - 628 + 573 ], + "slot_index": 0, "shape": 3 } ], + "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "ControlNetLoader" + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - "control_v11p_sd15_canny_fp16.safetensors" + "LiquidAF-0-1.safetensors", + 0.8 ] }, { - "id": 405, - "type": "ACN_AdvancedControlNetApply", + "id": 376, + "type": "KSampler", "pos": [ - 12546, - 1545 + 12659, + 780 + ], + "size": [ + 303.4075622558594, + 262 ], - "size": { - "0": 285.6000061035156, - "1": 286 - }, "flags": {}, - "order": 107, + "order": 123, "mode": 0, "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 582 + }, { "name": "positive", "type": "CONDITIONING", - "link": 713 + "link": 633 }, { "name": "negative", "type": "CONDITIONING", - "link": 714 + "link": 634 }, { - "name": "control_net", - "type": "CONTROL_NET", - "link": 628, - "slot_index": 2 - }, + "name": "latent_image", + "type": "LATENT", + "link": 600 + } + ], + "outputs": [ { - "name": "image", - "type": "IMAGE", - "link": 693 - }, + "name": "LATENT", + "type": "LATENT", + "links": [ + 584, + 612 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.52 + ] + }, + { + "id": 445, + "type": "Note", + "pos": [ + 4690.48681640625, + 331.3853759765625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "adjust x and y values to center your face" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 446, + "type": "Note", + "pos": [ + 6182, + 961 + ], + "size": [ + 440.62109375, + 65.99163818359375 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" + }, + "widgets_values": [ + "adjust x and y values in each to scale your face to desired size" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 447, + "type": "AudioSeparatorSimple", + "pos": [ + 594.46484375, + 678.0962524414062 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 58, + "mode": 0, + "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": 630 + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 724 }, { - "name": "timestep_kf", - "type": "TIMESTEP_KEYFRAME", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 725 + } + ], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 726 + ] }, { - "name": "latent_kf_override", - "type": "LATENT_KEYFRAME", - "link": null + "name": "drums_audio", + "type": "AUDIO", + "links": [ + 728, + 729, + 743 + ] }, { - "name": "weights_override", - "type": "CONTROL_NET_WEIGHTS", - "link": null + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 730, + 747 + ] }, { - "name": "model_optional", - "type": "MODEL", - "link": null + "name": "bass_audio", + "type": "AUDIO", + "links": [ + 732, + 749 + ] }, { - "name": "vae_optional", - "type": "VAE", - "link": null + "name": "other_audio", + "type": "AUDIO", + "links": [ + 734, + 751 + ] + } + ], + "properties": { + "Node name for S&R": "AudioSeparatorSimple" + }, + "widgets_values": [] + }, + { + "id": 448, + "type": "Anything Everywhere?", + "pos": [ + -710.2601318359375, + 1143.957763671875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "*", + "link": 736, + "shape": 7, + "color_on": "" } ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_rate", + ".*" + ] + }, + { + "id": 449, + "type": "INTConstant", + "pos": [ + -980.2600708007812, + 683.9575805664062 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", + "name": "value", + "type": "INT", "links": [ - 633 + 738 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 634 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "model_opt", - "type": "MODEL", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "ACN_AdvancedControlNetApply" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - 0.85, - 0, - 0.85, - "" - ] + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 394, - "type": "NNLatentUpscale", + "id": 450, + "type": "INTConstant", "pos": [ - 13908, - 461 + -950.2600708007812, + 913.9575805664062 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 118, + "order": 37, "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 612 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "value", + "type": "INT", "links": [ - 613 + 737 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - "SD 1.x", - 1.5 - ] + 468 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 389, - "type": "KSampler", + "id": 451, + "type": "FloatConstant", "pos": [ - 14219, - 655 + -940.2600708007812, + 1153.957763671875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, "flags": {}, - "order": 120, + "order": 38, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 603 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 711 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 712 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 613 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "value", + "type": "FLOAT", "links": [ - 607 + 736 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "FloatConstant" }, "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.4 - ] + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 395, - "type": "FlexImageHueShift", + "id": 452, + "type": "Anything Everywhere?", "pos": [ - 15018, - 869 + -720.2601318359375, + 913.9575805664062 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 319.20001220703125, - "1": 214 - }, "flags": {}, - "order": 124, - "mode": 4, + "order": 52, + "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 614 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 615 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 616 - }, - { - "name": "opt_mask", - "type": "MASK", - "link": null + "name": "INT", + "type": "*", + "link": 737, + "shape": 7, + "color_on": "" } ], - "outputs": [ + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "height", + ".*" + ] + }, + { + "id": 453, + "type": "Anything Everywhere?", + "pos": [ + -750.2601318359375, + 673.9575805664062 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 + "name": "INT", + "type": "*", + "link": 738, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "FlexImageHueShift" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 1, - 0, - "None", - "relative", - 96 + ".*", + "width", + ".*" ] }, { - "id": 396, - "type": "GetNode", - "pos": { - "0": 14588, - "1": 926, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 39, + "type": "VHS_LoadAudioUpload", + "pos": [ + -76, + 471 + ], + "size": [ + 243.818359375, + 130 + ], "flags": {}, - "order": 32, + "order": 39, "mode": 0, "inputs": [], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "audio", + "type": "AUDIO", "links": [ - 615 + 38, + 48, + 56, + 639, + 725, + 739 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], - "title": "Get_drum_feature", - "properties": {}, + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Delta Deez - Songfinch - Out the Mud.mp3", + "start_time": 105, + "duration": 7.5, + "choose audio to upload": "image" + } + }, + { + "id": 454, + "type": "Anything Everywhere?", + "pos": [ + 650.71337890625, + 193.2701416015625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "*", + "link": 739, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, "widgets_values": [ - "drum_feature" + ".*", + "audio", + ".*" ] }, { - "id": 397, - "type": "GetNode", - "pos": { - "0": 14545, - "1": 1092, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 + "id": 455, + "type": "Anything Everywhere?", + "pos": [ + 215.5220947265625, + 1164.0767822265625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 72, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 740, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, + "widgets_values": [ + ".*", + "frame_count", + ".*" + ] + }, + { + "id": 42, + "type": "EmptyImageAndMaskFromAudio", + "pos": [ + 136.47975158691406, + 909.8488159179688 + ], + "size": [ + 411.6000061035156, + 146 + ], "flags": {}, - "order": 33, + "order": 54, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 38 + } + ], "outputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "empty_image", + "type": "IMAGE", + "links": [ + 162 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "empty_mask", + "type": "MASK", "links": [ - 616 + 453 ], - "slot_index": 0 + "slot_index": 1, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 454, + 740 + ], + "slot_index": 2, + "shape": 3 } ], - "title": "Get_feature_pipe", - "properties": {}, + "properties": { + "Node name for S&R": "EmptyImageAndMaskFromAudio" + }, "widgets_values": [ - "feature_pipe" + 30, + 768, + 464 ] }, { - "id": 411, - "type": "ImageCASBatch", + "id": 457, + "type": "AudioFeatureExtractor", "pos": [ - 15015, - 612 + 1031.88037109375, + 1225.6329345703125 ], - "size": { - "0": 462, - "1": 82 + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true }, - "flags": {}, - "order": 125, + "order": 76, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 637 + "name": "audio", + "type": "AUDIO", + "link": 743 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 638 - ], - "shape": 3, - "slot_index": 0 + 744 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "ImageCASBatch" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 0.8, - 4 + "amplitude_envelope", + 30, + 0, + 512, + 512 ] }, { - "id": 441, - "type": "VHS_VideoCombine", + "id": 456, + "type": "AudioFeatureExtractor", "pos": [ - 3328, - 2373 + 1031.3394775390625, + 1022.9371337890625 ], "size": [ - 214.7587890625, - 470.069091796875 + 415.8000183105469, + 174 ], - "flags": {}, - "order": 64, - "mode": 4, + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 718 - }, { "name": "audio", "type": "AUDIO", - "link": 717 + "link": 741 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "feature", + "type": "FEATURE", + "links": [ + 742 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "AudioFeatureExtractor" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": true, - "params": { - "filename": "AnimateDiff_07383-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] }, { - "id": 286, - "type": "VHS_VideoCombine", + "id": 459, + "type": "AudioFeatureExtractor", "pos": [ - 3481, - 1673 + 1140.3900146484375, + 1411.43798828125 ], "size": [ - 214.7587890625, - 441.15958404541016 + 415.8000183105469, + 174 ], - "flags": {}, - "order": 80, - "mode": 4, + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 501 - }, { "name": "audio", "type": "AUDIO", - "link": 461 + "link": 747 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "feature", + "type": "FEATURE", + "links": [ + 748 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07384-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] }, { - "id": 273, - "type": "VHS_VideoCombine", + "id": 460, + "type": "AudioFeatureExtractor", "pos": [ - 3539, - 912 + 1133.4984130859375, + 1513.0565185546875 ], "size": [ - 210, - 438.296875 + 415.8000183105469, + 174 ], - "flags": {}, - "order": 79, - "mode": 4, + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 483 - }, { "name": "audio", "type": "AUDIO", - "link": 449 + "link": 749 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "feature", + "type": "FEATURE", + "links": [ + 750 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "AudioFeatureExtractor" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07382-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] }, { - "id": 324, - "type": "MediaPipe-FaceMeshPreprocessor", + "id": 461, + "type": "AudioFeatureExtractor", "pos": [ - 5353.531146480773, - 317.5410458090749 + 1150.3897705078125, + 1590.8916015625 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 315, - "1": 106 + "flags": { + "collapsed": true }, - "flags": {}, - "order": 94, + "order": 82, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 546 + "name": "audio", + "type": "AUDIO", + "link": 751 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 552, - 722 - ], - "slot_index": 0, - "shape": 3 + 752 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "MediaPipe-FaceMeshPreprocessor" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 1, - 0.1, + "amplitude_envelope", + 30, + 0, + 512, 512 - ], - "color": "#223", - "bgcolor": "#335" + ] }, { - "id": 444, - "type": "ImageListToImageBatch", + "id": 462, + "type": "FlexAudioVisualizerLine", "pos": [ - 5587, - 755 + 2417.581298828125, + 784.0247192382812 + ], + "size": [ + 453.5999755859375, + 630 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 98, + "order": 48, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 722 + "name": "audio", + "type": "AUDIO", + "link": 753 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ @@ -5927,1412 +6064,1656 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 723 - ], - "shape": 3, - "slot_index": 0 + 754 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 755 + ] } ], "properties": { - "Node name for S&R": "ImageListToImageBatch" - } + "Node name for S&R": "FlexAudioVisualizerLine" + }, + "widgets_values": [ + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 0, + 0, + 64, + 200, + 10, + 5, + 0, + 0, + 2048, + 20, + 8000, + true + ] }, { - "id": 360, - "type": "VHS_VideoCombine", + "id": 463, + "type": "FlexAudioVisualizerLine", "pos": [ - 6248, - 1448 + 2402.00732421875, + 1495.84228515625 ], "size": [ - 214.7587890625, - 433.55181884765625 + 453.5999755859375, + 630 ], "flags": {}, - "order": 102, - "mode": 4, + "order": 49, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 686 - }, { "name": "audio", "type": "AUDIO", - "link": 656 + "link": 756 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 757 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 758 + ] } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "FlexAudioVisualizerLine" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07385-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 180, + 0, + 64, + 200, + 10, + 5, + 0, + 0, + 2048, + 20, + 8000, + true + ] }, { - "id": 429, - "type": "VHS_VideoCombine", + "id": 464, + "type": "FlexAudioVisualizerCircular", "pos": [ - 12132, - 1649 + 2370.41259765625, + 2251.70703125 ], "size": [ - 365.99755859375, - 518.2793816705862 + 504, + 558 ], "flags": {}, - "order": 108, - "mode": 4, + "order": 50, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 695 - }, { "name": "audio", "type": "AUDIO", - "link": 696 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "link": 759 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 760 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "FlexAudioVisualizerCircular" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07386-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } + "widgets_values": [ + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 90, + 495, + 2048, + 20, + 8000, + 150, + 2, + 100, + 150 + ] }, { - "id": 375, - "type": "ADE_AnimateDiffLoRALoader", + "id": 466, + "type": "FlexImageTransform", "pos": [ - 10741.302731137033, - 337.7580619023213 + 4641, + 500 + ], + "size": [ + 378, + 222 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, "flags": {}, - "order": 34, + "order": 85, "mode": 0, "inputs": [ { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null + "name": "images", + "type": "IMAGE", + "link": 761 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "MOTION_LORA", - "type": "MOTION_LORA", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 573 - ], - "shape": 3, - "slot_index": 0 + 762, + 763 + ] } ], - "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "FlexImageTransform" }, "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8, - "" + 1, + 0, + "x_value", + "relative", + "translate", + -28, + -27 ] }, { - "id": 376, - "type": "KSampler", + "id": 468, + "type": "FlexImageTransform", "pos": [ - 12659, - 780 + 5784, + 1095 + ], + "size": [ + 378, + 222 ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, "flags": {}, - "order": 116, + "order": 107, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 582 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 633 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 634 + "name": "images", + "type": "IMAGE", + "link": 764 }, { - "name": "latent_image", - "type": "LATENT", - "link": 600 + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 584, - 612 - ], - "slot_index": 0 + 765, + 766 + ] } ], "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.52 - ] - }, - { - "id": 445, - "type": "Note", - "pos": [ - 4690.486662226939, - 331.3853761741141 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 35, - "mode": 0, - "properties": { - "text": "" + "Node name for S&R": "FlexImageTransform" }, "widgets_values": [ - "adjust x and y values to center your face" - ], - "color": "#432", - "bgcolor": "#653" + 1, + 0, + "x_value", + "relative", + "scale", + 0.5, + 0.5 + ] }, { - "id": 446, - "type": "Note", + "id": 469, + "type": "FlexImageTransform", "pos": [ - 6182, - 961 + 6510.6162109375, + 1098.0030517578125 + ], + "size": [ + 378, + 222 ], - "size": { - "0": 440.62109375, - "1": 65.99163818359375 - }, "flags": {}, - "order": 36, + "order": 116, "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 767 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 768, + 769 + ] + } + ], "properties": { - "text": "" + "Node name for S&R": "FlexImageTransform" }, "widgets_values": [ - "adjust x and y values in each to scale your face to desired size" - ], - "color": "#432", - "bgcolor": "#653" + 1, + 0, + "x_value", + "relative", + "scale", + 0.5, + 0.5 + ] } ], "links": [ [ - 36, - 41, + 38, + 39, 0, - 40, + 42, 0, - "OPEN_UNMIX_MODEL" + "AUDIO" ], [ - 37, + 48, 39, 0, - 40, - 1, - "AUDIO" + 45, + 0, + "*" ], [ - 38, + 56, 39, 0, - 42, + 49, 0, "AUDIO" ], [ - 39, + 162, 42, 0, - 40, - 2, - "IMAGE" + 101, + 0, + "*" ], [ - 41, - 40, + 372, + 227, + 0, + 228, 1, - 43, + "FREQUENCY_FILTER" + ], + [ + 449, + 272, 0, + 273, + 1, "AUDIO" ], [ + 451, + 274, + 0, + 275, + 1, + "MASK" + ], + [ + 453, 42, - 40, - 5, - 43, 1, - "FEATURE_PIPE" + 277, + 0, + "*" ], [ - 48, - 39, + 454, + 42, + 2, + 278, 0, - 45, + "*" + ], + [ + 455, + 276, + 0, + 279, + 0, + "IMAGE" + ], + [ + 456, + 279, + 0, + 275, + 0, + "IMAGE" + ], + [ + 457, + 281, + 0, + 280, + 1, + "INT" + ], + [ + 458, + 275, + 0, + 280, + 0, + "IMAGE" + ], + [ + 459, + 280, + 0, + 282, + 0, + "IMAGE" + ], + [ + 461, + 285, 0, + 286, + 1, "*" ], [ - 56, - 39, + 483, + 301, 0, - 49, + 273, 0, - "AUDIO" + "IMAGE" ], [ - 57, - 40, + 501, + 316, 0, - 50, + 286, 0, - "AUDIO" + "IMAGE" ], [ - 162, - 42, + 522, + 336, 0, - 101, + 337, + 0, + "SEGS" + ], + [ + 523, + 339, + 0, + 338, + 0, + "MASK" + ], + [ + 529, + 290, + 0, + 343, 0, "*" ], [ - 371, - 40, - 5, - 226, - 1, - "FEATURE_PIPE" + 531, + 341, + 0, + 342, + 2, + "MASK" ], [ - 372, - 227, + 532, + 290, 0, - 228, - 1, - "FREQUENCY_FILTER" + 345, + 0, + "MASK" ], [ - 373, - 40, - 1, - 228, + 533, + 345, 0, - "AUDIO" + 346, + 0, + "*" ], [ - 374, - 228, + 536, + 348, + 0, + 315, + 2, + "INT" + ], + [ + 541, + 342, 0, - 226, + 334, 0, - "AUDIO" + "IMAGE" + ], + [ + 546, + 325, + 0, + 324, + 0, + "IMAGE" + ], + [ + 552, + 324, + 0, + 336, + 0, + "IMAGE" ], [ - 433, - 40, + 569, + 383, 1, - 256, + 363, 0, - "*" + "CLIP" ], [ - 434, - 40, - 2, - 257, + 570, + 383, + 1, + 364, 0, - "*" + "CLIP" ], [ - 435, - 40, - 3, - 258, + 571, + 386, 0, - "*" + 365, + 0, + "MODEL" ], [ - 436, - 40, - 4, - 259, + 572, + 369, 0, - "*" + 365, + 1, + "CONTEXT_OPTIONS" ], [ - 437, - 226, - 0, - 261, + 573, + 375, 0, - "*" + 365, + 2, + "MOTION_LORA" ], [ - 438, - 43, - 0, - 262, + 574, + 372, 0, - "*" + 365, + 3, + "AD_SETTINGS" ], [ - 439, - 40, + 575, + 366, + 0, + 365, 5, - 263, - 1, - "FEATURE_PIPE" + "SAMPLE_SETTINGS" ], [ - 440, - 40, - 2, - 263, + 576, + 368, 0, - "AUDIO" + 365, + 6, + "MULTIVAL" ], [ - 441, - 263, - 0, - 264, + 577, + 370, 0, - "*" + 365, + 7, + "MULTIVAL" ], [ - 442, - 40, - 5, - 265, - 1, - "FEATURE_PIPE" + 578, + 371, + 0, + 366, + 2, + "CUSTOM_CFG" ], [ - 443, - 40, - 3, - 265, + 579, + 367, 0, - "AUDIO" + 366, + 3, + "SIGMA_SCHEDULE" ], [ - 444, - 265, + 580, + 373, 0, - 266, + 372, 0, - "*" + "PE_ADJUST" ], [ - 445, - 40, - 4, - 267, + 581, + 374, 0, - "AUDIO" + 372, + 1, + "WEIGHT_ADJUST" ], [ - 446, - 40, - 5, - 267, - 1, - "FEATURE_PIPE" + 582, + 380, + 0, + 376, + 0, + "MODEL" ], [ - 447, - 267, + 584, + 376, 0, - 268, + 377, 0, - "*" + "LATENT" ], [ - 448, - 269, + 586, + 379, 0, - 260, + 378, 0, - "AUDIO" + "IMAGE" ], [ - 449, - 272, + 587, + 387, 0, - 273, + 378, 1, - "AUDIO" + "*" ], [ - 451, - 274, + 588, + 377, 0, - 275, - 1, - "MASK" + 379, + 0, + "IMAGE" ], [ - 453, - 42, - 1, - 277, + 589, + 365, 0, - "*" + 380, + 0, + "MODEL" ], [ - 454, - 42, - 2, - 278, + 593, + 382, 0, - "*" + 383, + 2, + "LORA_STACK" ], [ - 455, - 276, + 594, + 385, 0, - 279, + 384, 0, - "IMAGE" + "MODEL" ], [ - 456, - 279, + 595, + 385, + 1, + 384, + 1, + "IPADAPTER" + ], + [ + 596, + 383, 0, - 275, + 385, 0, - "IMAGE" + "MODEL" ], [ - 457, - 281, + 597, + 384, 0, - 280, - 1, - "INT" + 386, + 0, + "MODEL" ], [ - 458, - 275, - 0, - 280, + 600, + 388, 0, - "IMAGE" + 376, + 3, + "LATENT" ], [ - 459, - 280, + 603, + 380, 0, - 282, + 389, 0, - "IMAGE" + "MODEL" ], [ - 460, - 269, + 607, + 389, 0, - 284, + 390, 0, - "AUDIO" + "LATENT" ], [ - 461, - 285, + 610, + 393, 0, - 286, + 391, 1, "*" ], [ - 482, - 260, + 611, + 390, 0, - 301, + 392, 0, "IMAGE" ], [ - 483, - 301, - 0, - 273, + 612, + 376, 0, - "IMAGE" - ], - [ - 485, - 260, - 1, - 290, + 394, 0, - "MASK" - ], - [ - 486, - 284, - 1, - 290, - 1, - "MASK" + "LATENT" ], [ - 488, - 40, - 5, - 306, + 613, + 394, 0, - "*" + 389, + 3, + "LATENT" ], [ - 500, - 284, + 614, + 392, 0, - 316, + 395, 0, "IMAGE" ], [ - 501, - 316, - 0, - 286, + 615, + 396, 0, - "IMAGE" + 395, + 1, + "FEATURE" ], [ - 522, - 336, - 0, - 337, + 616, + 397, 0, - "SEGS" + 395, + 2, + "FEATURE_PIPE" ], [ - 523, - 339, + 618, + 362, 0, - 338, + 400, 0, - "MASK" + "*" ], [ - 529, - 290, - 0, - 343, + 619, + 362, + 1, + 399, 0, "*" ], [ - 531, - 341, - 0, - 342, + 620, + 362, 2, - "MASK" + 398, + 0, + "*" ], [ - 532, - 290, - 0, - 345, + 621, + 401, 0, - "MASK" + 383, + 1, + "CLIP" ], [ - 533, - 345, + 622, + 402, 0, - 346, + 383, 0, - "*" + "MODEL" ], [ - 536, - 348, + 623, + 403, 0, - 315, - 2, - "INT" + 388, + 1, + "VAE" ], [ - 541, - 342, - 0, - 334, + 624, + 404, 0, - "IMAGE" + 377, + 1, + "VAE" ], [ - 546, - 325, + 625, + 404, 0, - 324, + 390, + 1, + "VAE" + ], + [ + 628, + 406, 0, - "IMAGE" + 405, + 2, + "CONTROL_NET" ], [ - 548, - 349, + 629, + 341, 0, - 353, + 407, 0, - "IMAGE" + "*" ], [ - 552, - 324, - 0, - 336, + 630, + 408, 0, - "IMAGE" + 405, + 4, + "MASK" ], [ - 569, - 383, - 1, - 363, + 633, + 405, 0, - "CLIP" + 376, + 1, + "CONDITIONING" ], [ - 570, - 383, + 634, + 405, 1, - 364, - 0, - "CLIP" + 376, + 2, + "CONDITIONING" ], [ - 571, - 386, + 637, + 392, 0, - 365, + 411, 0, - "MODEL" + "IMAGE" ], [ - 572, - 369, + 638, + 411, 0, - 365, - 1, - "CONTEXT_OPTIONS" - ], - [ - 573, - 375, + 391, 0, - 365, - 2, - "MOTION_LORA" + "IMAGE" ], [ - 574, - 372, + 639, + 39, 0, - 365, - 3, - "AD_SETTINGS" + 412, + 0, + "AUDIO" ], [ - 575, - 366, + 641, + 342, 0, - 365, - 5, - "SAMPLE_SETTINGS" + 388, + 0, + "IMAGE" ], [ - 576, - 368, + 642, + 315, 0, - 365, - 6, - "MULTIVAL" + 413, + 0, + "IMAGE" ], [ - 577, - 370, + 655, + 337, 0, - 365, - 7, - "MULTIVAL" + 339, + 0, + "MASK" ], [ - 578, - 371, + 656, + 416, 0, - 366, - 2, - "CUSTOM_CFG" + 360, + 1, + "AUDIO" ], [ - 579, - 367, + 660, + 338, 0, - 366, - 3, - "SIGMA_SCHEDULE" + 420, + 0, + "IMAGE" ], [ - 580, - 373, + 668, + 347, 0, - 372, + 342, 0, - "PE_ADJUST" + "IMAGE" ], [ - 581, - 374, + 677, + 415, 0, - 372, + 342, 1, - "WEIGHT_ADJUST" + "IMAGE" ], [ - 582, - 380, + 692, + 415, 0, - 376, + 428, 0, - "MODEL" + "IMAGE" ], [ - 584, - 376, - 0, - 377, + 693, + 428, 0, - "LATENT" + 405, + 3, + "IMAGE" ], [ - 586, - 379, + 695, + 428, 0, - 378, + 429, 0, "IMAGE" ], [ - 587, - 387, + 696, + 430, 0, - 378, + 429, 1, "*" ], [ - 588, - 377, - 0, - 379, + 709, + 436, 0, - "IMAGE" + 353, + 1, + "AUDIO" ], [ - 589, - 365, - 0, - 380, + 711, + 363, 0, - "MODEL" + 389, + 1, + "CONDITIONING" ], [ - 593, - 382, + 712, + 364, 0, - 383, + 389, 2, - "LORA_STACK" + "CONDITIONING" ], [ - 594, - 385, + 713, + 363, 0, - 384, + 405, 0, - "MODEL" + "CONDITIONING" ], [ - 595, - 385, + 714, + 364, + 0, + 405, 1, - 384, + "CONDITIONING" + ], + [ + 717, + 285, + 0, + 441, 1, - "IPADAPTER" + "AUDIO" ], [ - 596, - 383, + 722, + 324, 0, - 385, + 444, 0, - "MODEL" + "IMAGE" ], [ - 597, - 384, + 724, + 41, 0, - 386, + 447, 0, - "MODEL" + "OPEN_UNMIX_MODEL" ], [ - 600, - 388, + 725, + 39, 0, - 376, - 3, - "LATENT" + 447, + 1, + "AUDIO" ], [ - 603, - 380, + 726, + 447, 0, - 389, + 50, 0, - "MODEL" + "AUDIO" ], [ - 607, - 389, - 0, - 390, + 728, + 447, + 1, + 228, 0, - "LATENT" + "AUDIO" ], [ - 610, - 393, - 0, - 391, + 729, + 447, 1, - "*" + 256, + 0, + "AUDIO" ], [ - 611, - 390, - 0, - 392, + 730, + 447, + 2, + 257, 0, - "IMAGE" + "AUDIO" ], [ - 612, - 376, - 0, - 394, + 732, + 447, + 3, + 258, 0, - "LATENT" + "AUDIO" ], [ - 613, - 394, + 734, + 447, + 4, + 259, 0, - 389, - 3, - "LATENT" + "AUDIO" ], [ - 614, - 392, + 736, + 451, 0, - 395, + 448, 0, - "IMAGE" + "FLOAT" ], [ - 615, - 396, + 737, + 450, 0, - 395, - 1, - "FEATURE" - ], - [ - 616, - 397, + 452, 0, - 395, - 2, - "FEATURE_PIPE" + "INT" ], [ - 618, - 362, + 738, + 449, 0, - 400, + 453, 0, - "*" + "INT" ], [ - 619, - 362, - 1, - 399, + 739, + 39, 0, - "*" + 454, + 0, + "AUDIO" ], [ - 620, - 362, + 740, + 42, 2, - 398, + 455, 0, - "*" + "INT" ], [ - 621, - 401, + 741, + 228, 0, - 383, - 1, - "CLIP" + 456, + 0, + "AUDIO" ], [ - 622, - 402, + 742, + 456, 0, - 383, + 261, 0, - "MODEL" + "FEATURE" ], [ - 623, - 403, - 0, - 388, + 743, + 447, 1, - "VAE" + 457, + 0, + "AUDIO" ], [ - 624, - 404, + 744, + 457, 0, - 377, - 1, - "VAE" + 262, + 0, + "FEATURE" ], [ - 625, - 404, + 747, + 447, + 2, + 459, 0, - 390, - 1, - "VAE" + "AUDIO" ], [ - 628, - 406, + 748, + 459, 0, - 405, - 2, - "CONTROL_NET" + 264, + 0, + "FEATURE" ], [ - 629, - 341, - 0, - 407, + 749, + 447, + 3, + 460, 0, - "*" + "AUDIO" ], [ - 630, - 408, + 750, + 460, 0, - 405, - 4, - "MASK" + 266, + 0, + "FEATURE" ], [ - 633, - 405, + 751, + 447, + 4, + 461, 0, - 376, - 1, - "CONDITIONING" + "AUDIO" ], [ - 634, - 405, - 1, - 376, - 2, - "CONDITIONING" + 752, + 461, + 0, + 268, + 0, + "FEATURE" ], [ - 637, - 392, + 753, + 269, 0, - 411, + 462, 0, - "IMAGE" + "AUDIO" ], [ - 638, - 411, + 754, + 462, 0, - 391, + 301, 0, "IMAGE" ], [ - 639, - 39, - 0, - 412, + 755, + 462, + 1, + 290, 0, - "AUDIO" + "MASK" ], [ - 641, - 342, + 756, + 269, 0, - 388, + 463, 0, - "IMAGE" + "AUDIO" ], [ - 642, - 315, + 757, + 463, 0, - 413, + 316, 0, "IMAGE" ], [ - 655, - 337, - 0, - 339, - 0, + 758, + 463, + 1, + 290, + 1, "MASK" ], [ - 656, - 416, + 759, + 269, + 0, + 464, 0, - 360, - 1, "AUDIO" ], [ - 660, - 338, + 760, + 464, 0, - 420, + 441, 0, "IMAGE" ], [ - 664, + 761, 413, 0, - 349, + 466, 0, "IMAGE" ], [ - 665, - 349, + 762, + 466, 0, - 325, + 353, 0, "IMAGE" ], [ - 668, - 347, + 763, + 466, 0, - 342, + 325, 0, "IMAGE" ], [ - 677, - 415, + 764, + 444, + 0, + 468, 0, - 342, - 1, "IMAGE" ], [ - 685, - 420, + 765, + 468, 0, - 425, + 360, 0, "IMAGE" ], [ - 686, - 426, + 766, + 468, 0, - 360, + 415, + 0, + "*" + ], + [ + 767, + 420, + 0, + 469, 0, "IMAGE" ], [ - 687, - 425, + 768, + 469, 0, 354, 0, "IMAGE" ], [ - 689, - 425, + 769, + 469, 0, 341, 0, "IMAGE" ], [ - 692, - 415, - 0, - 428, + 770, + 451, 0, - "IMAGE" + 457, + 1, + "FLOAT" ], [ - 693, - 428, + 771, + 42, + 2, + 457, + 2, + "INT" + ], + [ + 772, + 449, 0, - 405, + 457, 3, - "IMAGE" + "INT" ], [ - 695, - 428, + 773, + 450, 0, - 429, - 0, - "IMAGE" + 457, + 4, + "INT" ], [ - 696, - 430, + 774, + 451, 0, - 429, + 456, 1, - "*" + "FLOAT" ], [ - 709, - 436, - 0, - 353, - 1, - "AUDIO" + 775, + 42, + 2, + 456, + 2, + "INT" ], [ - 710, - 426, + 776, + 449, 0, - 415, + 456, + 3, + "INT" + ], + [ + 777, + 450, 0, - "*" + 456, + 4, + "INT" ], [ - 711, - 363, + 778, + 451, 0, - 389, + 459, 1, - "CONDITIONING" + "FLOAT" ], [ - 712, - 364, - 0, - 389, + 779, + 42, 2, - "CONDITIONING" + 459, + 2, + "INT" ], [ - 713, - 363, + 780, + 449, 0, - 405, + 459, + 3, + "INT" + ], + [ + 781, + 450, 0, - "CONDITIONING" + 459, + 4, + "INT" ], [ - 714, - 364, + 782, + 451, 0, - 405, + 460, 1, - "CONDITIONING" + "FLOAT" ], [ - 715, - 269, + 783, + 42, + 2, + 460, + 2, + "INT" + ], + [ + 784, + 449, 0, - 440, + 460, + 3, + "INT" + ], + [ + 785, + 450, 0, - "AUDIO" + 460, + 4, + "INT" ], [ - 717, - 285, + 786, + 451, 0, - 441, + 461, 1, - "AUDIO" + "FLOAT" + ], + [ + 787, + 42, + 2, + 461, + 2, + "INT" ], [ - 718, - 440, + 788, + 449, 0, - 441, + 461, + 3, + "INT" + ], + [ + 789, + 450, 0, - "IMAGE" + 461, + 4, + "INT" ], [ - 722, - 324, + 790, + 449, 0, - 444, + 462, + 2, + "INT" + ], + [ + 791, + 450, 0, - "IMAGE" + 462, + 3, + "INT" ], [ - 723, - 444, + 792, + 451, 0, - 426, + 462, + 4, + "FLOAT" + ], + [ + 793, + 449, 0, - "IMAGE" + 463, + 2, + "INT" + ], + [ + 794, + 450, + 0, + 463, + 3, + "INT" + ], + [ + 795, + 451, + 0, + 463, + 4, + "FLOAT" ] ], "groups": [ { + "id": 1, "title": "Group", "bounding": [ 1841, @@ -7342,9 +7723,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "Group", "bounding": [ -29, @@ -7354,9 +7736,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "samp", "bounding": [ 7962, @@ -7366,9 +7749,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "samp22", "bounding": [ 8867, @@ -7378,9 +7762,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "model", "bounding": [ 4102, @@ -7390,9 +7775,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "Canny]", "bounding": [ 11431, @@ -7402,9 +7788,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 7, "title": "Adiff", "bounding": [ 10668, @@ -7414,9 +7801,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 8, "title": "Samp1", "bounding": [ 12609, @@ -7426,9 +7814,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 9, "title": "Samp2", "bounding": [ 13883, @@ -7438,18 +7827,242 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.41772481694156693, + "scale": 0.12100000000000047, "offset": [ - -3857.857373160723, - 97.383590266257 + 941.7118247261874, + 2737.4298187855707 ] - } + }, + "node_versions": { + "comfy-core": "0.3.12", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "comfyui-impact-pack": "cdb7b4d3b08994a983c26c9c6f1b905e1759f2cd", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50" + }, + "ue_links": [ + { + "downstream": 457, + "downstream_slot": 1, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 457, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 455, + "type": "INT" + }, + { + "downstream": 457, + "downstream_slot": 3, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 457, + "downstream_slot": 4, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 456, + "downstream_slot": 1, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 456, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 455, + "type": "INT" + }, + { + "downstream": 456, + "downstream_slot": 3, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 456, + "downstream_slot": 4, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 459, + "downstream_slot": 1, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 459, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 455, + "type": "INT" + }, + { + "downstream": 459, + "downstream_slot": 3, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 459, + "downstream_slot": 4, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 460, + "downstream_slot": 1, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 460, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 455, + "type": "INT" + }, + { + "downstream": 460, + "downstream_slot": 3, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 460, + "downstream_slot": 4, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 461, + "downstream_slot": 1, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 461, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 455, + "type": "INT" + }, + { + "downstream": 461, + "downstream_slot": 3, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 461, + "downstream_slot": 4, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 462, + "downstream_slot": 2, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 462, + "downstream_slot": 3, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 462, + "downstream_slot": 4, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + }, + { + "downstream": 463, + "downstream_slot": 2, + "upstream": "449", + "upstream_slot": 0, + "controller": 453, + "type": "INT" + }, + { + "downstream": 463, + "downstream_slot": 3, + "upstream": "450", + "upstream_slot": 0, + "controller": 452, + "type": "INT" + }, + { + "downstream": 463, + "downstream_slot": 4, + "upstream": "451", + "upstream_slot": 0, + "controller": 448, + "type": "FLOAT" + } + ] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/flex_tutorial.json b/examples/flex_tutorial.json deleted file mode 100644 index 3c333dd..0000000 --- a/examples/flex_tutorial.json +++ /dev/null @@ -1,2841 +0,0 @@ -{ - "last_node_id": 209, - "last_link_id": 332, - "nodes": [ - { - "id": 153, - "type": "AudioFeatureExtractor", - "pos": [ - -1647, - 1398 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 289 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 290 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 156, - "type": "AudioSeparator", - "pos": [ - -2047, - 1371 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": null - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 289 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 290 - ], - "shape": 3, - "slot_index": 5 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 160, - "type": "PreviewImage", - "pos": [ - 233.92900067078028, - 398.9078675628634 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 294 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 151, - "type": "BrightnessFeatureNode", - "pos": [ - -2040, - 494 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "BrightnessFeatureNode" - }, - "widgets_values": [ - 30, - "mean_brightness" - ] - }, - { - "id": 150, - "type": "DepthFeatureNode", - "pos": [ - -2041, - 314 - ], - "size": { - "0": 317.4000244140625, - "1": 102 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DepthFeatureNode" - }, - "widgets_values": [ - 30, - "mean_depth" - ] - }, - { - "id": 171, - "type": "FlexMaskMath", - "pos": [ - 1010, - 790 - ], - "size": { - "0": 315, - "1": 238 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - }, - { - "name": "mask_b", - "type": "MASK", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMath" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "add" - ] - }, - { - "id": 170, - "type": "FlexMaskTransform", - "pos": [ - 1010, - 1100 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskTransform" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "translate", - 10, - 10 - ] - }, - { - "id": 173, - "type": "FlexMaskOpacity", - "pos": [ - 1010, - 1480 - ], - "size": { - "0": 315, - "1": 218 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskOpacity" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 1 - ] - }, - { - "id": 172, - "type": "FlexMaskBinary", - "pos": [ - 1010, - 1800 - ], - "size": { - "0": 315, - "1": 338 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskBinary" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.5, - "simple", - 21, - 2, - "threshold", - false - ] - }, - { - "id": 174, - "type": "FlexMaskVoronoiScheduled", - "pos": [ - 1010, - 2240 - ], - "size": { - "0": 378, - "1": 482 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskVoronoiScheduled" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "euclidean", - 1, - 100, - 1, - 852404739440643, - "randomize", - 0, - 0, - "scale", - "Linear", - 1, - 1 - ] - }, - { - "id": 178, - "type": "_mfc", - "pos": [ - 420, - 1040 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": { - "collapsed": true - }, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 305 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 306 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 255, - 255, - 0 - ] - }, - { - "id": 164, - "type": "VHS_LoadVideo", - "pos": [ - -2902.2586183090575, - 644.9993637117644 - ], - "size": [ - 235.1999969482422, - 658.5777723524305 - ], - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 297 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexels-polina-tankilevitch-5385809 (1080p).mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 16, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 16, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "pexels-polina-tankilevitch-5385809 (1080p).mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 183, - "type": "FlexImagePosterize", - "pos": [ - 2556, - 420 - ], - "size": { - "0": 319.20001220703125, - "1": 266 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImagePosterize" - }, - "widgets_values": [ - 1, - 0, - "max_levels", - "relative", - 8, - 0.3, - 0.2, - 1.2 - ] - }, - { - "id": 184, - "type": "FlexImageKaleidoscope", - "pos": [ - 2556, - 770 - ], - "size": { - "0": 344.3999938964844, - "1": 338 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageKaleidoscope" - }, - "widgets_values": [ - 1, - 0, - "segments", - "relative", - 8, - 0.5, - 0.5, - 1, - 0, - 0, - 1 - ] - }, - { - "id": 168, - "type": "FlexMaskWarp", - "pos": [ - 1010, - 450 - ], - "size": { - "0": 315, - "1": 290 - }, - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskWarp" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "perlin", - 0.1, - 30, - 3 - ] - }, - { - "id": 167, - "type": "FlexMaskMorph", - "pos": [ - 1010, - 110 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 307 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 300 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 301 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 308 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 0.5700000000000001, - 0, - 0, - "dilate", - 5, - 10 - ] - }, - { - "id": 159, - "type": "Reroute", - "pos": [ - -645, - 810 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 325 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 296 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 162, - "type": "Reroute", - "pos": [ - 470, - 1170 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 296 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 301, - 313 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 192, - "type": "Reroute", - "pos": [ - 470, - 1200 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 311 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 314 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 180, - "type": "MaskToImage", - "pos": [ - 1460, - 630 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 308 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 309 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 176, - "type": "VHS_LoadVideo", - "pos": [ - 400, - 980 - ], - "size": [ - 235.1999969482422, - 598.7999954223633 - ], - "flags": { - "collapsed": true - }, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 305 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "polina809MaskFull_00001.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "polina809MaskFull_00001.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 179, - "type": "Reroute", - "pos": [ - 470, - 1105 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 306 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 307 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 195, - "type": "Reroute", - "pos": [ - 2280, - 1150 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 314 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 315 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 193, - "type": "Reroute", - "pos": [ - 2280, - 1190 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 312 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 316 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 194, - "type": "Reroute", - "pos": [ - 2280, - 1210 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 313 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 317 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 182, - "type": "FlexImageEdgeDetect", - "pos": [ - 2556, - 1148 - ], - "size": { - "0": 336, - "1": 218 - }, - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageEdgeDetect" - }, - "widgets_values": [ - 1, - 0, - "low_threshold", - "relative", - 100, - 200 - ] - }, - { - "id": 186, - "type": "FlexImageChromaticAberration", - "pos": [ - 2556, - 1419 - ], - "size": { - "0": 411.6000061035156, - "1": 218 - }, - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageChromaticAberration" - }, - "widgets_values": [ - 1, - 0, - "shift_amount", - "relative", - 0.01, - 0 - ] - }, - { - "id": 185, - "type": "FlexImageBloom", - "pos": [ - 2556, - 122 - ], - "size": { - "0": 315, - "1": 242 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 315 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 316 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 317 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 318 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexImageBloom" - }, - "widgets_values": [ - 1, - 0, - "threshold", - "relative", - 0.7, - 10, - 0.5 - ] - }, - { - "id": 190, - "type": "FlexImageTiltShift", - "pos": [ - 2556, - 2506 - ], - "size": { - "0": 327.6000061035156, - "1": 314 - }, - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageTiltShift" - }, - "widgets_values": [ - 1, - 0, - "blur_amount", - "relative", - 10, - 0.5, - 0.5, - 0.2, - 0.2, - "rectangle" - ] - }, - { - "id": 188, - "type": "FlexImagePixelate", - "pos": [ - 2556, - 1970 - ], - "size": { - "0": 315, - "1": 194 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImagePixelate" - }, - "widgets_values": [ - 1, - 0, - "pixel_size", - "relative", - 10 - ] - }, - { - "id": 187, - "type": "FlexImageGlitch", - "pos": [ - 2552, - 1681 - ], - "size": { - "0": 315, - "1": 242 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageGlitch" - }, - "widgets_values": [ - 1, - 0, - "shift_amount", - "relative", - 0.1, - 10, - 0.1 - ] - }, - { - "id": 198, - "type": "FeatureToWeightsStrategy", - "pos": [ - 3905, - 553 - ], - "size": { - "0": 378, - "1": 30.92705535888672 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "WEIGHTS_STRATEGY", - "type": "WEIGHTS_STRATEGY", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureToWeightsStrategy" - } - }, - { - "id": 200, - "type": "Note", - "pos": [ - 3910, - 429 - ], - "size": { - "0": 533.3134155273438, - "1": 70.13786315917969 - }, - "flags": {}, - "order": 19, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "simply plug this into the \"IPAdapter weights from strategy\" node and rock on\n\nSee this tutorial for more info\nhttps://civitai.com/models/688888/audio-reactive-ipadapter-weights" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 191, - "type": "Reroute", - "pos": [ - -643, - 833 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 310 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 311 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 154, - "type": "MIDILoadAndExtract", - "pos": [ - -2063, - 919 - ], - "size": { - "0": 1020, - "1": 346 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MIDI", - "type": "MIDI", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "selectedNotes": [ - 36, - 38, - 49 - ] - }, - "widgets_values": [ - "sample_midi.mid", - "all", - "Note On/Off", - 30, - false, - "36, 38, 49", - "upload", - "refresh" - ] - }, - { - "id": 199, - "type": "Note", - "pos": [ - 3824.9416156458465, - 130.69202687058203 - ], - "size": { - "0": 229.98106384277344, - "1": 72.82836151123047 - }, - "flags": {}, - "order": 21, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Thus far the only external target is the IPAdapter, but when more are added, they will go here\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 155, - "type": "Note", - "pos": [ - -2953, - 274 - ], - "size": { - "0": 515.2716674804688, - "1": 250.9127655029297 - }, - "flags": {}, - "order": 22, - "mode": 0, - "title": "Click the ? icons!", - "properties": { - "text": "" - }, - "widgets_values": [ - "This workflow is a tutorial explaining the Flex Feature system introduced by this node pack. At a high level, it works as follows:\n\n1 We get information from a source (the feature)\n2 We use that information to control a target\n\nSimple as that! \n\nThere are many sources for features, and many more targets to control, and they are all interchangeable.\n\nClick the ? icons!!\n\n\n\n\n\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 163, - "type": "Note", - "pos": [ - -307, - -79 - ], - "size": { - "0": 510.7935485839844, - "1": 120.26620483398438 - }, - "flags": {}, - "order": 23, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Step 2, optionally, you can shape your feature output all nice-like\n\n\nClick the ? icons!!" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 202, - "type": "Note", - "pos": [ - 945, - -214 - ], - "size": { - "0": 510.7935485839844, - "1": 120.26620483398438 - }, - "flags": {}, - "order": 24, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Step 3, you pick a target. Thus far, there are three categories of targets as shown below. If the category is Mask, you feed it a mask. If the category is Image, you feed it images. Otherwise, just give it the feature data\n\nThere are lots of settings, and lots of cool things, so don't forget...\nCLICK THE ? ICONS!!\n\nLove you\nRyan" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 166, - "type": "Note", - "pos": [ - -1839, - -267 - ], - "size": { - "0": 460.7952575683594, - "1": 181.07496643066406 - }, - "flags": {}, - "order": 25, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Step 1 is to pick a feature.\n\n\nClick the ? icons!!" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 203, - "type": "Note", - "pos": [ - -1214, - 1346 - ], - "size": { - "0": 455.38995361328125, - "1": 171.6157989501953 - }, - "flags": {}, - "order": 26, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "\nAudio and MIDI will have their own separate tutorials as they're a touch more complicated. Check at my civit profile.\n\nAudio:\nhttps://civitai.com/models/692203?modelVersionId=774669\n\nMIDI\nCheck here https://civitai.com/user/ryanontheinside\n\n\nClick the ? icons!!" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 196, - "type": "Note", - "pos": [ - 407, - 858 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 27, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "obtain masks to work with for mask targets" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 161, - "type": "Reroute", - "pos": [ - 470, - 1140 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 322 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 300, - 312 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 165, - "type": "Reroute", - "pos": [ - -2378, - 813 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 297 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 310, - 323 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 152, - "type": "MotionFeatureNode", - "pos": [ - -2044, - 691 - ], - "size": { - "0": 317.4000244140625, - "1": 174 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 323 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 324 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 325 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "MotionFeatureNode" - }, - "widgets_values": [ - 30, - "mean_motion", - "Farneback", - 0, - 0 - ] - }, - { - "id": 181, - "type": "VHS_VideoCombine", - "pos": [ - 1840, - 220 - ], - "size": [ - 315, - 766.5 - ], - "flags": {}, - "order": 54, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 309 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00776.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - }, - "muted": false - } - } - }, - { - "id": 197, - "type": "VHS_VideoCombine", - "pos": [ - 3118, - 124 - ], - "size": [ - 315, - 848.4444444444445 - ], - "flags": {}, - "order": 55, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 318 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00777.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - }, - "muted": false - } - } - }, - { - "id": 149, - "type": "TimeFeatureNode", - "pos": [ - -2038, - 96 - ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - 30, - "smooth", - 1, - 0 - ] - }, - { - "id": 157, - "type": "FeatureMixer", - "pos": [ - -336, - 449 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 291, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 322 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 294 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5 - ] - }, - { - "id": 204, - "type": "FeatureOscillator", - "pos": [ - -304, - 1277 - ], - "size": { - "0": 367.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureOscillator" - }, - "widgets_values": [ - "sine", - 1, - 0.5, - 0, - 0.79 - ] - }, - { - "id": 206, - "type": "FeatureMath", - "pos": [ - -292, - 1765 - ], - "size": { - "0": 380.4000244140625, - "1": 126 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "feature1", - "type": "FEATURE", - "link": null - }, - { - "name": "feature2", - "type": "FEATURE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMath" - }, - "widgets_values": [ - "subtract", - 1, - 1 - ] - }, - { - "id": 158, - "type": "Reroute", - "pos": [ - -650, - 790 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 324 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 291, - 331 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 208, - "type": "PreviewImage", - "pos": [ - 266.6696832298651, - 1493.614956995918 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 332 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 205, - "type": "FeatureSmoothing", - "pos": [ - -297, - 1529 - ], - "size": { - "0": 367.79998779296875, - "1": 150 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 331 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 332 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "gaussian", - 5, - 0.3, - 1 - ] - }, - { - "id": 189, - "type": "FlexImageColorGrade", - "pos": [ - 2556, - 2222 - ], - "size": { - "0": 336, - "1": 242 - }, - "flags": {}, - "order": 31, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageColorGrade" - }, - "widgets_values": [ - 1, - 0, - "intensity", - "relative", - 1, - 1, - "" - ] - }, - { - "id": 209, - "type": "Note", - "pos": [ - 2919, - 2257 - ], - "size": [ - 346.86633399882703, - 89.45454758908863 - ], - "flags": {}, - "order": 32, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "<----if this is red for you... its coming soon! Just disable it" - ], - "color": "#432", - "bgcolor": "#653" - } - ], - "links": [ - [ - 289, - 156, - 0, - 153, - 0, - "AUDIO" - ], - [ - 290, - 156, - 5, - 153, - 1, - "FEATURE_PIPE" - ], - [ - 291, - 158, - 0, - 157, - 0, - "FEATURE" - ], - [ - 294, - 157, - 1, - 160, - 0, - "IMAGE" - ], - [ - 296, - 159, - 0, - 162, - 0, - "*" - ], - [ - 297, - 164, - 0, - 165, - 0, - "*" - ], - [ - 300, - 161, - 0, - 167, - 1, - "FEATURE" - ], - [ - 301, - 162, - 0, - 167, - 2, - "FEATURE_PIPE" - ], - [ - 305, - 176, - 0, - 178, - 0, - "IMAGE" - ], - [ - 306, - 178, - 0, - 179, - 0, - "*" - ], - [ - 307, - 179, - 0, - 167, - 0, - "MASK" - ], - [ - 308, - 167, - 0, - 180, - 0, - "MASK" - ], - [ - 309, - 180, - 0, - 181, - 0, - "IMAGE" - ], - [ - 310, - 165, - 0, - 191, - 0, - "*" - ], - [ - 311, - 191, - 0, - 192, - 0, - "*" - ], - [ - 312, - 161, - 0, - 193, - 0, - "*" - ], - [ - 313, - 162, - 0, - 194, - 0, - "*" - ], - [ - 314, - 192, - 0, - 195, - 0, - "*" - ], - [ - 315, - 195, - 0, - 185, - 0, - "IMAGE" - ], - [ - 316, - 193, - 0, - 185, - 1, - "FEATURE" - ], - [ - 317, - 194, - 0, - 185, - 2, - "FEATURE_PIPE" - ], - [ - 318, - 185, - 0, - 197, - 0, - "IMAGE" - ], - [ - 322, - 157, - 0, - 161, - 0, - "*" - ], - [ - 323, - 165, - 0, - 152, - 0, - "IMAGE" - ], - [ - 324, - 152, - 0, - 158, - 0, - "*" - ], - [ - 325, - 152, - 1, - 159, - 0, - "*" - ], - [ - 331, - 158, - 0, - 205, - 0, - "FEATURE" - ], - [ - 332, - 205, - 1, - 208, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Feature", - "bounding": [ - -2110, - -80, - 1122, - 1949 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Mixer", - "bounding": [ - -419, - 45, - 836, - 1982 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Target", - "bounding": [ - 760, - -80, - 4084, - 3026 - ], - "color": "#444", - "font_size": 24 - }, - { - "title": "Masks", - "bounding": [ - 818, - 10, - 1392, - 2830 - ], - "color": "#8A8", - "font_size": 24 - }, - { - "title": "Images", - "bounding": [ - 2367, - 9, - 1227, - 2830 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "External / IPAdapter", - "bounding": [ - 3730, - 13, - 1003, - 2817 - ], - "color": "#a1309b", - "font_size": 24 - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 1.1918176537728016, - "offset": [ - -2356.8422592316056, - -1927.5621604220344 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/headbang_bear.json b/examples/headbang_bear.json deleted file mode 100644 index fa7f6f8..0000000 --- a/examples/headbang_bear.json +++ /dev/null @@ -1,3548 +0,0 @@ -{ - "last_node_id": 158, - "last_link_id": 327, - "nodes": [ - { - "id": 83, - "type": "DownloadAndLoadCogVideoModel", - "pos": { - "0": 2159, - "1": -516 - }, - "size": { - "0": 315.49652099609375, - "1": 194 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "pab_config", - "type": "PAB_CONFIG", - "link": null - }, - { - "name": "block_edit", - "type": "TRANSFORMERBLOCKS", - "link": null - }, - { - "name": "lora", - "type": "COGLORA", - "link": null - } - ], - "outputs": [ - { - "name": "cogvideo_pipe", - "type": "COGVIDEOPIPE", - "links": [ - 198, - 199 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadCogVideoModel" - }, - "widgets_values": [ - "kijai/CogVideoX-5b-Tora", - "bf16", - "disabled", - "disabled", - false - ] - }, - { - "id": 31, - "type": "CogVideoTextEncode", - "pos": { - "0": 2013, - "1": -57 - }, - "size": { - "0": 463.01251220703125, - "1": 124 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 56 - } - ], - "outputs": [ - { - "name": "conditioning", - "type": "CONDITIONING", - "links": [ - 123 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CogVideoTextEncode" - }, - "widgets_values": [ - "The video is not of a high quality, it has a low resolution. Watermark present in each frame. Strange motion trajectory. ", - 1, - true - ] - }, - { - "id": 84, - "type": "DownloadAndLoadToraModel", - "pos": { - "0": 2161, - "1": 116 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "tora_model", - "type": "TORAMODEL", - "links": [ - 200 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadToraModel" - }, - "widgets_values": [ - "kijai/CogVideoX-5b-Tora" - ] - }, - { - "id": 65, - "type": "CreateShapeImageOnPath", - "pos": { - "0": 2729, - "1": 410 - }, - "size": { - "0": 313.4619445800781, - "1": 270 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "coordinates", - "type": "STRING", - "link": 202, - "widget": { - "name": "coordinates" - } - }, - { - "name": "size_multiplier", - "type": "FLOAT", - "link": null, - "widget": { - "name": "size_multiplier" - }, - "shape": 7 - }, - { - "name": "frame_width", - "type": "INT", - "link": 182, - "widget": { - "name": "frame_width" - } - }, - { - "name": "frame_height", - "type": "INT", - "link": 183, - "widget": { - "name": "frame_height" - } - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 142, - 153 - ], - "slot_index": 0 - }, - { - "name": "mask", - "type": "MASK", - "links": [ - 154 - ], - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "CreateShapeImageOnPath" - }, - "widgets_values": [ - "circle", - "", - 512, - 512, - 12, - 12, - "red", - "black", - 0, - 1, - [ - 1 - ] - ] - }, - { - "id": 72, - "type": "AudioSeparator", - "pos": { - "0": -1566.5263671875, - "1": -264.8908386230469 - }, - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 159 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 232 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 162 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 211, - 214 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 164 - ], - "slot_index": 5, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 8 - ] - }, - { - "id": 88, - "type": "PreviewAudio", - "pos": { - "0": -1126.5263671875, - "1": -244.89083862304688 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 214 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 105, - "type": "GetImageSizeAndCount", - "pos": { - "0": 1021.5052490234375, - "1": 1504.89453125 - }, - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 50, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 243 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 241 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "720 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "480 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "43 count", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 106, - "type": "GetNode", - "pos": { - "0": 1041.5052490234375, - "1": 1674.89453125 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 242 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 20, - "type": "CLIPLoader", - "pos": { - "0": 1394, - "1": -156 - }, - "size": { - "0": 574.2658081054688, - "1": 95.4034652709961 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 54, - 56 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CLIPLoader" - }, - "widgets_values": [ - "t5/t5xxl_fp8_e4m3fn.safetensors", - "sd3" - ] - }, - { - "id": 66, - "type": "VHS_VideoCombine", - "pos": { - "0": 3455, - "1": 181 - }, - "size": [ - 605.3909912109375, - 714.2606608072917 - ], - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 142 - }, - { - "name": "audio", - "type": "*", - "link": 235, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 8, - "loop_count": 0, - "filename_prefix": "CogVideoX-Tora-trajectory", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "CogVideoX-Tora-trajectory_00001-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/h264-mp4", - "frame_rate": 8 - }, - "muted": false - } - } - }, - { - "id": 99, - "type": "GetNode", - "pos": { - "0": 3213, - "1": 384 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 235 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 103, - "type": "CreateShapeImageOnPath", - "pos": { - "0": 621.5052490234375, - "1": 1364.89453125 - }, - "size": { - "0": 313.4619445800781, - "1": 270 - }, - "flags": {}, - "order": 48, - "mode": 4, - "inputs": [ - { - "name": "coordinates", - "type": "STRING", - "link": 262, - "widget": { - "name": "coordinates" - } - }, - { - "name": "size_multiplier", - "type": "FLOAT", - "link": null, - "widget": { - "name": "size_multiplier" - }, - "shape": 7 - }, - { - "name": "frame_width", - "type": "INT", - "link": 239, - "widget": { - "name": "frame_width" - } - }, - { - "name": "frame_height", - "type": "INT", - "link": 240, - "widget": { - "name": "frame_height" - } - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 243 - ], - "slot_index": 0 - }, - { - "name": "mask", - "type": "MASK", - "links": [], - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "CreateShapeImageOnPath" - }, - "widgets_values": [ - "circle", - "", - 512, - 512, - 12, - 12, - "red", - "black", - 0, - 1, - [ - 1 - ] - ] - }, - { - "id": 102, - "type": "GetMaskSizeAndCount", - "pos": { - "0": 261.5052795410156, - "1": 1424.89453125 - }, - "size": { - "0": 264.5999755859375, - "1": 86 - }, - "flags": { - "collapsed": false - }, - "order": 44, - "mode": 4, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 258 - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": null, - "slot_index": 0 - }, - { - "name": "720 width", - "type": "INT", - "links": [ - 239 - ], - "slot_index": 1 - }, - { - "name": "480 height", - "type": "INT", - "links": [ - 240 - ], - "slot_index": 2 - }, - { - "name": "43 count", - "type": "INT", - "links": [], - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetMaskSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 57, - "type": "CogVideoSampler", - "pos": { - "0": 2730, - "1": -350 - }, - "size": { - "0": 399.8780822753906, - "1": 390 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "pipeline", - "type": "COGVIDEOPIPE", - "link": 198 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 122 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 123 - }, - { - "name": "samples", - "type": "LATENT", - "link": null, - "shape": 7 - }, - { - "name": "image_cond_latents", - "type": "LATENT", - "link": null, - "shape": 7 - }, - { - "name": "context_options", - "type": "COGCONTEXT", - "link": null, - "shape": 7 - }, - { - "name": "controlnet", - "type": "COGVIDECONTROLNET", - "link": null, - "shape": 7 - }, - { - "name": "tora_trajectory", - "type": "TORAFEATURES", - "link": 197, - "shape": 7 - }, - { - "name": "num_frames", - "type": "INT", - "link": 189, - "widget": { - "name": "num_frames" - } - }, - { - "name": "height", - "type": "INT", - "link": 188, - "widget": { - "name": "height" - } - }, - { - "name": "width", - "type": "INT", - "link": 187, - "widget": { - "name": "width" - } - } - ], - "outputs": [ - { - "name": "cogvideo_pipe", - "type": "COGVIDEOPIPE", - "links": [ - 128 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "samples", - "type": "LATENT", - "links": [ - 127 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CogVideoSampler" - }, - "widgets_values": [ - 480, - 720, - 49, - 37, - 6, - 65334758276105, - "fixed", - "CogVideoXDPMScheduler", - 1 - ] - }, - { - "id": 30, - "type": "CogVideoTextEncode", - "pos": { - "0": 2014, - "1": -266 - }, - "size": { - "0": 471.90142822265625, - "1": 168.08047485351562 - }, - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 54 - } - ], - "outputs": [ - { - "name": "conditioning", - "type": "CONDITIONING", - "links": [ - 122 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CogVideoTextEncode" - }, - "widgets_values": [ - "video of a brown bear in front of a waterfall", - 1, - true - ] - }, - { - "id": 82, - "type": "ToraEncodeTrajectory", - "pos": { - "0": 2731, - "1": 103 - }, - "size": { - "0": 280.8954162597656, - "1": 233.9559783935547 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "pipeline", - "type": "COGVIDEOPIPE", - "link": 199 - }, - { - "name": "tora_model", - "type": "TORAMODEL", - "link": 200, - "slot_index": 1 - }, - { - "name": "coordinates", - "type": "STRING", - "link": 203, - "widget": { - "name": "coordinates" - } - }, - { - "name": "num_frames", - "type": "INT", - "link": 194, - "widget": { - "name": "num_frames" - } - }, - { - "name": "width", - "type": "INT", - "link": 195, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 196, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "tora_trajectory", - "type": "TORAFEATURES", - "links": [ - 197 - ], - "shape": 3 - }, - { - "name": "video_flow_images", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ToraEncodeTrajectory" - }, - "widgets_values": [ - "", - 720, - 480, - 49, - 2, - 0, - 1, - false - ] - }, - { - "id": 111, - "type": "SplineFeatureModulator", - "pos": { - "0": -148.49472045898438, - "1": 1204.89453125 - }, - "size": { - "0": 352.79998779296875, - "1": 306 - }, - "flags": {}, - "order": 39, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 263 - }, - { - "name": "coordinates", - "type": "STRING", - "link": 261, - "widget": { - "name": "coordinates" - } - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [ - 258 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "coord_str", - "type": "STRING", - "links": [ - 262 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "float", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "normalized_str", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "SplineFeatureModulator" - }, - "widgets_values": [ - "", - 720, - 480, - 0, - 1, - "list", - 0, - 1 - ] - }, - { - "id": 108, - "type": "PreviewImage", - "pos": { - "0": -588.4947509765625, - "1": 1284.89453125 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 40, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 251 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 71, - "type": "DownloadOpenUnmixModel", - "pos": { - "0": -1576.5263671875, - "1": -384.8908386230469 - }, - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 159 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 90, - "type": "PreviewAudio", - "pos": { - "0": -1941.1341552734375, - "1": -193.65582275390625 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 230 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 74, - "type": "AudioFeatureExtractor", - "pos": { - "0": -1112.1341552734375, - "1": -58.65582275390625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 211 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 164 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 212, - 219, - 249 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 75, - "type": "GetMaskSizeAndCount", - "pos": { - "0": 790.7343139648438, - "1": 99.7914810180664 - }, - "size": { - "0": 264.5999755859375, - "1": 86 - }, - "flags": { - "collapsed": false - }, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 264 - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": null, - "slot_index": 0 - }, - { - "name": "720 width", - "type": "INT", - "links": [ - 182, - 187, - 195 - ], - "slot_index": 1 - }, - { - "name": "480 height", - "type": "INT", - "links": [ - 183, - 188, - 196 - ], - "slot_index": 2 - }, - { - "name": "43 count", - "type": "INT", - "links": [ - 189, - 194 - ], - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetMaskSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 81, - "type": "FeatureToSplineData", - "pos": { - "0": 84.73432159423828, - "1": -66.2085189819336 - }, - "size": { - "0": 336, - "1": 354 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 221 - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [ - 264 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "coord_str", - "type": "STRING", - "links": [ - 265 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "float", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "normalized_str", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureToSplineData" - }, - "widgets_values": [ - 720, - 480, - "time", - "cardinal", - 0.5, - 1, - "list", - 0, - 1 - ] - }, - { - "id": 85, - "type": "Reroute", - "pos": { - "0": 886.7343139648438, - "1": -119.2085189819336 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 265, - "widget": { - "name": "value" - } - } - ], - "outputs": [ - { - "name": "", - "type": "STRING", - "links": [ - 202, - 203 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 89, - "type": "FeatureRenormalize", - "pos": { - "0": -509.26568603515625, - "1": -70.2085189819336 - }, - "size": { - "0": 367.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 219 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 221 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 220 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureRenormalize" - }, - "widgets_values": [ - 0.3, - 0.7000000000000001, - false - ] - }, - { - "id": 87, - "type": "PreviewImage", - "pos": { - "0": -231.2656707763672, - "1": 162.79147338867188 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 220 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 139, - "type": "PreviewImage", - "pos": { - "0": -588.1315307617188, - "1": 162.44729614257812 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 296 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 107, - "type": "FeatureMixer", - "pos": { - "0": -1968.4947509765625, - "1": 1224.89453125 - }, - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 29, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 249 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 250 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0.3, - 0.8, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5, - false - ] - }, - { - "id": 109, - "type": "FeatureRenormalize", - "pos": { - "0": -1566.4947509765625, - "1": 1299.89453125 - }, - "size": { - "0": 367.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 35, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 250 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 263 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 251 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureRenormalize" - }, - "widgets_values": [ - 0, - 0.39, - false - ] - }, - { - "id": 73, - "type": "EmptyImageAndMaskFromAudio", - "pos": { - "0": -1589, - "1": -50 - }, - "size": { - "0": 411.6000061035156, - "1": 146 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 231 - } - ], - "outputs": [ - { - "name": "empty_image", - "type": "IMAGE", - "links": [ - 162, - 299 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "empty_mask", - "type": "MASK", - "links": null, - "slot_index": 1, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": [], - "slot_index": 2, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" - }, - "widgets_values": [ - 8, - 720, - 480 - ] - }, - { - "id": 92, - "type": "VHS_LoadAudioUpload", - "pos": { - "0": -1966.5263671875, - "1": -44.890830993652344 - }, - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 230, - 231, - 232, - 233, - 300 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Matthew Magenta - Wait a Minute.mp3", - "start_time": 35, - "duration": 5.41, - "choose audio to upload": "image" - } - }, - { - "id": 146, - "type": "GetImageSizeAndCount", - "pos": { - "0": 633.28125, - "1": 3073.278076171875 - }, - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 41, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 307 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 305 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "720 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "480 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "43 count", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 147, - "type": "GetNode", - "pos": { - "0": 653.28125, - "1": 3243.278076171875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 7, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 306 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 68, - "type": "ImageCompositeMasked", - "pos": { - "0": 3239, - "1": -95 - }, - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 155 - }, - { - "name": "source", - "type": "IMAGE", - "link": 153 - }, - { - "name": "mask", - "type": "MASK", - "link": 154, - "shape": 7 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 314 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 151, - "type": "ImageConcatMulti", - "pos": { - "0": 4556, - "1": -398 - }, - "size": { - "0": 210, - "1": 150 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "image_1", - "type": "IMAGE", - "link": 313 - }, - { - "name": "image_2", - "type": "IMAGE", - "link": 314 - } - ], - "outputs": [ - { - "name": "images", - "type": "IMAGE", - "links": [ - 322 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": {}, - "widgets_values": [ - 2, - "right", - false, - null - ] - }, - { - "id": 44, - "type": "VHS_VideoCombine", - "pos": { - "0": 5441, - "1": -473 - }, - "size": [ - 531.3980712890625, - 310 - ], - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 323 - }, - { - "name": "audio", - "type": "*", - "link": 236, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 8, - "loop_count": 0, - "filename_prefix": "CogVideoX-Tora", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "CogVideoX-Tora_00007-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/h264-mp4", - "frame_rate": 8 - }, - "muted": false - } - } - }, - { - "id": 145, - "type": "VHS_VideoCombine", - "pos": { - "0": 979, - "1": 2878 - }, - "size": [ - 605.3909912109375, - 310 - ], - "flags": {}, - "order": 45, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 305 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 306, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 8, - "loop_count": 0, - "filename_prefix": "CogVideoX-Tora-trajectory", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "CogVideoX-Tora-trajectory_00007-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/h264-mp4", - "frame_rate": 8 - }, - "muted": false - } - } - }, - { - "id": 152, - "type": "ImageUpscaleWithModel", - "pos": { - "0": 4837, - "1": -117 - }, - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 316, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 322 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 323 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - }, - "widgets_values": [] - }, - { - "id": 155, - "type": "ImageUpscaleWithModel", - "pos": { - "0": 4860, - "1": 114 - }, - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 324, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - }, - "widgets_values": [] - }, - { - "id": 153, - "type": "UpscaleModelLoader", - "pos": { - "0": 4837, - "1": -215 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "UPSCALE_MODEL", - "type": "UPSCALE_MODEL", - "links": [ - 316, - 324 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "UpscaleModelLoader" - }, - "widgets_values": [ - "RealESRGAN_x2.pth" - ] - }, - { - "id": 56, - "type": "CogVideoDecode", - "pos": { - "0": 3246, - "1": -350 - }, - "size": { - "0": 300.396484375, - "1": 198 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "pipeline", - "type": "COGVIDEOPIPE", - "link": 128 - }, - { - "name": "samples", - "type": "LATENT", - "link": 127 - } - ], - "outputs": [ - { - "name": "images", - "type": "IMAGE", - "links": [ - 155, - 313 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CogVideoDecode" - }, - "widgets_values": [ - false, - 240, - 360, - 0.2, - 0.2, - true - ] - }, - { - "id": 100, - "type": "GetNode", - "pos": { - "0": 5122, - "1": -492 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 236 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 141, - "type": "Note", - "pos": { - "0": -194, - "1": -310 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "method 1 is we just create spline data out of thin air" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 104, - "type": "VHS_VideoCombine", - "pos": { - "0": 1832, - "1": 1314 - }, - "size": [ - 605.3909912109375, - 714.2606608072917 - ], - "flags": {}, - "order": 52, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 241 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 242, - "shape": 7 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null, - "shape": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": null, - "shape": 7 - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 8, - "loop_count": 0, - "filename_prefix": "CogVideoX-Tora-trajectory", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": false, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "CogVideoX-Tora-trajectory_00003-audio.mp4", - "subfolder": "", - "type": "temp", - "format": "video/h264-mp4", - "frame_rate": 8 - }, - "muted": false - } - } - }, - { - "id": 143, - "type": "GetMaskSizeAndCount", - "pos": { - "0": -302, - "1": 3013 - }, - "size": { - "0": 264.5999755859375, - "1": 86 - }, - "flags": { - "collapsed": false - }, - "order": 30, - "mode": 4, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 308 - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": null, - "slot_index": 0 - }, - { - "name": "720 width", - "type": "INT", - "links": [ - 303 - ], - "slot_index": 1 - }, - { - "name": "480 height", - "type": "INT", - "links": [ - 304 - ], - "slot_index": 2 - }, - { - "name": "43 count", - "type": "INT", - "links": [], - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetMaskSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 60, - "type": "SplineEditor", - "pos": { - "0": -1603, - "1": 1504 - }, - "size": { - "0": 765, - "1": 910 - }, - "flags": {}, - "order": 11, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [], - "slot_index": 0 - }, - { - "name": "coord_str", - "type": "STRING", - "links": [ - 261 - ], - "slot_index": 1 - }, - { - "name": "float", - "type": "FLOAT", - "links": null - }, - { - "name": "count", - "type": "INT", - "links": null - }, - { - "name": "normalized_str", - "type": "STRING", - "links": null - } - ], - "properties": { - "Node name for S&R": "SplineEditor", - "points": "SplineEditor" - }, - "widgets_values": [ - "[{\"x\":0,\"y\":0},{\"x\":263.32734333042947,\"y\":353.74697326919136},{\"x\":412.4404172645281,\"y\":258.5684154389157},{\"x\":234.77377598134674,\"y\":190.35711566055141},{\"x\":416.1710463256701,\"y\":129.2143974478895},{\"x\":720,\"y\":480}]", - "[{\"x\":0,\"y\":0},{\"x\":41.775726318359375,\"y\":65.8663558959961},{\"x\":84.4534683227539,\"y\":131.15138244628906},{\"x\":128.4003143310547,\"y\":195.58773803710938},{\"x\":174.32730102539062,\"y\":258.6236572265625},{\"x\":224.04251098632812,\"y\":318.68707275390625},{\"x\":285.690673828125,\"y\":365.3074645996094},{\"x\":360.54327392578125,\"y\":361.12701416015625},{\"x\":406.5906066894531,\"y\":299.9382629394531},{\"x\":385.8952941894531,\"y\":236.77943420410156},{\"x\":309.9677429199219,\"y\":219.35707092285156},{\"x\":236.64279174804688,\"y\":196.15463256835938},{\"x\":269.2276306152344,\"y\":129.1408233642578},{\"x\":340.8720703125,\"y\":103.78235626220703},{\"x\":414.20391845703125,\"y\":128.05242919921875},{\"x\":474.11431884765625,\"y\":177.6868896484375},{\"x\":527.1646118164062,\"y\":234.8441619873047},{\"x\":577.380126953125,\"y\":294.5220642089844},{\"x\":625.9403686523438,\"y\":355.55743408203125},{\"x\":673.380859375,\"y\":417.4681701660156},{\"x\":720,\"y\":480}]", - 720, - 480, - 21, - "path", - "cardinal", - 0.5, - 1, - "list", - 0, - 1, - null, - null - ] - }, - { - "id": 144, - "type": "CreateShapeImageOnPath", - "pos": { - "0": 156, - "1": 2901 - }, - "size": { - "0": 313.4619445800781, - "1": 270 - }, - "flags": {}, - "order": 36, - "mode": 4, - "inputs": [ - { - "name": "coordinates", - "type": "STRING", - "link": 309, - "widget": { - "name": "coordinates" - } - }, - { - "name": "size_multiplier", - "type": "FLOAT", - "link": null, - "widget": { - "name": "size_multiplier" - }, - "shape": 7 - }, - { - "name": "frame_width", - "type": "INT", - "link": 303, - "widget": { - "name": "frame_width" - } - }, - { - "name": "frame_height", - "type": "INT", - "link": 304, - "widget": { - "name": "frame_height" - } - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 307 - ], - "slot_index": 0 - }, - { - "name": "mask", - "type": "MASK", - "links": [], - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "CreateShapeImageOnPath" - }, - "widgets_values": [ - "circle", - "", - 512, - 512, - 12, - 12, - "red", - "black", - 0, - 1, - [ - 1 - ] - ] - }, - { - "id": 142, - "type": "SplineRhythmModulator", - "pos": { - "0": -989.4947509765625, - "1": 2845.89453125 - }, - "size": { - "0": 344.3999938964844, - "1": 306 - }, - "flags": {}, - "order": 25, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 301 - }, - { - "name": "coordinates", - "type": "STRING", - "link": 325, - "widget": { - "name": "coordinates" - } - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [ - 308 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "coord_str", - "type": "STRING", - "links": [ - 309 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "float", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "normalized_str", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "SplineRhythmModulator" - }, - "widgets_values": [ - "", - 720, - 480, - 0.5, - "bounce", - "list", - 0, - 1 - ] - }, - { - "id": 156, - "type": "SplineEditor", - "pos": { - "0": -1950, - "1": 3027 - }, - "size": { - "0": 765, - "1": 910 - }, - "flags": {}, - "order": 12, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [], - "slot_index": 0 - }, - { - "name": "coord_str", - "type": "STRING", - "links": [ - 325 - ], - "slot_index": 1 - }, - { - "name": "float", - "type": "FLOAT", - "links": null - }, - { - "name": "count", - "type": "INT", - "links": null - }, - { - "name": "normalized_str", - "type": "STRING", - "links": null - } - ], - "properties": { - "Node name for S&R": "SplineEditor", - "points": "SplineEditor" - }, - "widgets_values": [ - "[{\"x\":106.83612120606712,\"y\":320.5083636182014},{\"x\":329.98885421358,\"y\":199.1824615523411},{\"x\":563.3593502114721,\"y\":310.6651825704424}]", - "[{\"x\":106.83612060546875,\"y\":320.50836181640625},{\"x\":127.13419342041016,\"y\":304.2864074707031},{\"x\":147.74716186523438,\"y\":288.46673583984375},{\"x\":168.7193603515625,\"y\":273.1268615722656},{\"x\":190.10723876953125,\"y\":258.3725891113281},{\"x\":211.98204040527344,\"y\":244.35137939453125},{\"x\":234.433837890625,\"y\":231.27587890625},{\"x\":257.5760498046875,\"y\":219.4696502685547},{\"x\":281.543212890625,\"y\":209.45449829101562},{\"x\":306.45501708984375,\"y\":202.13507080078125},{\"x\":332.2182312011719,\"y\":199.15936279296875},{\"x\":358.01605224609375,\"y\":201.9041748046875},{\"x\":383.1117248535156,\"y\":208.58013916015625},{\"x\":407.4300537109375,\"y\":217.71414184570312},{\"x\":431.0644226074219,\"y\":228.5033721923828},{\"x\":454.1207580566406,\"y\":240.48147583007812},{\"x\":476.69091796875,\"y\":253.35397338867188},{\"x\":498.84722900390625,\"y\":266.9272766113281},{\"x\":520.6480102539062,\"y\":281.0649719238281},{\"x\":542.1392211914062,\"y\":295.66937255859375},{\"x\":563.359375,\"y\":310.6651916503906}]", - 720, - 480, - 21, - "path", - "cardinal", - 0.5, - 1, - "list", - 0, - 1, - null, - null - ] - }, - { - "id": 97, - "type": "SetNode", - "pos": { - "0": -1806, - "1": 228 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 233 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_audio", - "properties": { - "previousName": "audio" - }, - "widgets_values": [ - "audio" - ] - }, - { - "id": 86, - "type": "PreviewFeature", - "pos": { - "0": -1093, - "1": 99 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 212 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 296 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, - "widgets_values": [ - false - ] - }, - { - "id": 157, - "type": "PreviewFeature", - "pos": { - "0": -919.3485717773438, - "1": 3340.039794921875 - }, - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 26, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 327 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 326 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, - "widgets_values": [ - false - ] - }, - { - "id": 158, - "type": "PreviewImage", - "pos": { - "0": -414.4800720214844, - "1": 3403.487060546875 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 31, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 326 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 113, - "type": "RhythmFeatureExtractor", - "pos": { - "0": -1779, - "1": 2808 - }, - "size": { - "0": 352.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 22, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 299 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 300 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 301, - 327 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RhythmFeatureExtractor" - }, - "widgets_values": [ - "beat_locations", - 30, - 4 - ] - }, - { - "id": 138, - "type": "Note", - "pos": { - "0": -1726, - "1": -751 - }, - "size": [ - 545.3321325309748, - 130.01349166001637 - ], - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "Thus far, I have given 2 ways to modulate spline data with feature. \n\nPlease note: the only thing that I have tested less than method 1, is method 2. If people are interested, I can make it more robust or to better specifications.\n\n\nyoutube.com/@ryanontheinside\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 148, - "type": "Note", - "pos": { - "0": -524, - "1": 991 - }, - "size": { - "0": 336.7846984863281, - "1": 159.12716674804688 - }, - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "method 2, we modulate an existing spline. Ive been messing with two ways to do this and they behave distinctly" - ], - "color": "#432", - "bgcolor": "#653" - } - ], - "links": [ - [ - 54, - 20, - 0, - 30, - 0, - "CLIP" - ], - [ - 56, - 20, - 0, - 31, - 0, - "CLIP" - ], - [ - 122, - 30, - 0, - 57, - 1, - "CONDITIONING" - ], - [ - 123, - 31, - 0, - 57, - 2, - "CONDITIONING" - ], - [ - 127, - 57, - 1, - 56, - 1, - "LATENT" - ], - [ - 128, - 57, - 0, - 56, - 0, - "COGVIDEOPIPE" - ], - [ - 142, - 65, - 0, - 66, - 0, - "IMAGE" - ], - [ - 153, - 65, - 0, - 68, - 1, - "IMAGE" - ], - [ - 154, - 65, - 1, - 68, - 2, - "MASK" - ], - [ - 155, - 56, - 0, - 68, - 0, - "IMAGE" - ], - [ - 159, - 71, - 0, - 72, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 162, - 73, - 0, - 72, - 2, - "IMAGE" - ], - [ - 164, - 72, - 5, - 74, - 1, - "FEATURE_PIPE" - ], - [ - 182, - 75, - 1, - 65, - 2, - "INT" - ], - [ - 183, - 75, - 2, - 65, - 3, - "INT" - ], - [ - 187, - 75, - 1, - 57, - 10, - "INT" - ], - [ - 188, - 75, - 2, - 57, - 9, - "INT" - ], - [ - 189, - 75, - 3, - 57, - 8, - "INT" - ], - [ - 194, - 75, - 3, - 82, - 3, - "INT" - ], - [ - 195, - 75, - 1, - 82, - 4, - "INT" - ], - [ - 196, - 75, - 2, - 82, - 5, - "INT" - ], - [ - 197, - 82, - 0, - 57, - 7, - "TORAFEATURES" - ], - [ - 198, - 83, - 0, - 57, - 0, - "COGVIDEOPIPE" - ], - [ - 199, - 83, - 0, - 82, - 0, - "COGVIDEOPIPE" - ], - [ - 200, - 84, - 0, - 82, - 1, - "TORAMODEL" - ], - [ - 202, - 85, - 0, - 65, - 0, - "STRING" - ], - [ - 203, - 85, - 0, - 82, - 2, - "STRING" - ], - [ - 211, - 72, - 1, - 74, - 0, - "AUDIO" - ], - [ - 212, - 74, - 0, - 86, - 0, - "FEATURE" - ], - [ - 214, - 72, - 1, - 88, - 0, - "AUDIO" - ], - [ - 219, - 74, - 0, - 89, - 0, - "FEATURE" - ], - [ - 220, - 89, - 1, - 87, - 0, - "IMAGE" - ], - [ - 221, - 89, - 0, - 81, - 0, - "FEATURE" - ], - [ - 230, - 92, - 0, - 90, - 0, - "AUDIO" - ], - [ - 231, - 92, - 0, - 73, - 0, - "AUDIO" - ], - [ - 232, - 92, - 0, - 72, - 1, - "AUDIO" - ], - [ - 233, - 92, - 0, - 97, - 0, - "*" - ], - [ - 235, - 99, - 0, - 66, - 1, - "AUDIO" - ], - [ - 236, - 100, - 0, - 44, - 1, - "AUDIO" - ], - [ - 239, - 102, - 1, - 103, - 2, - "INT" - ], - [ - 240, - 102, - 2, - 103, - 3, - "INT" - ], - [ - 241, - 105, - 0, - 104, - 0, - "IMAGE" - ], - [ - 242, - 106, - 0, - 104, - 1, - "AUDIO" - ], - [ - 243, - 103, - 0, - 105, - 0, - "IMAGE" - ], - [ - 249, - 74, - 0, - 107, - 0, - "FEATURE" - ], - [ - 250, - 107, - 0, - 109, - 0, - "FEATURE" - ], - [ - 251, - 109, - 1, - 108, - 0, - "IMAGE" - ], - [ - 258, - 111, - 0, - 102, - 0, - "MASK" - ], - [ - 261, - 60, - 1, - 111, - 1, - "STRING" - ], - [ - 262, - 111, - 1, - 103, - 0, - "STRING" - ], - [ - 263, - 109, - 0, - 111, - 0, - "FEATURE" - ], - [ - 264, - 81, - 0, - 75, - 0, - "MASK" - ], - [ - 265, - 81, - 1, - 85, - 0, - "*" - ], - [ - 296, - 86, - 0, - 139, - 0, - "IMAGE" - ], - [ - 299, - 73, - 0, - 113, - 0, - "IMAGE" - ], - [ - 300, - 92, - 0, - 113, - 1, - "AUDIO" - ], - [ - 301, - 113, - 0, - 142, - 0, - "FEATURE" - ], - [ - 303, - 143, - 1, - 144, - 2, - "INT" - ], - [ - 304, - 143, - 2, - 144, - 3, - "INT" - ], - [ - 305, - 146, - 0, - 145, - 0, - "IMAGE" - ], - [ - 306, - 147, - 0, - 145, - 1, - "AUDIO" - ], - [ - 307, - 144, - 0, - 146, - 0, - "IMAGE" - ], - [ - 308, - 142, - 0, - 143, - 0, - "MASK" - ], - [ - 309, - 142, - 1, - 144, - 0, - "STRING" - ], - [ - 313, - 56, - 0, - 151, - 0, - "IMAGE" - ], - [ - 314, - 68, - 0, - 151, - 1, - "IMAGE" - ], - [ - 316, - 153, - 0, - 152, - 0, - "UPSCALE_MODEL" - ], - [ - 322, - 151, - 0, - 152, - 1, - "IMAGE" - ], - [ - 323, - 152, - 0, - 44, - 0, - "IMAGE" - ], - [ - 324, - 153, - 0, - 155, - 0, - "UPSCALE_MODEL" - ], - [ - 325, - 156, - 1, - 142, - 1, - "STRING" - ], - [ - 326, - 157, - 0, - 158, - 0, - "IMAGE" - ], - [ - 327, - 113, - 0, - 157, - 0, - "FEATURE" - ] - ], - "groups": [ - { - "title": "Cog Tora Kijai", - "bounding": [ - 1433, - -723, - 2749, - 1658 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Load Audio, get feature", - "bounding": [ - -1984, - -477, - 1313, - 1026 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Method 1", - "bounding": [ - -562, - -434, - 1600, - 979 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Method 2", - "bounding": [ - -2012, - 1088, - 4739, - 2863 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Upscale", - "bounding": [ - 4448, - -696, - 1582, - 1095 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.12100000000000037, - "offset": [ - 4419.535366817648, - 2099.733789815913 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/lip_sync_visualizerVERSION2.json b/examples/lip_sync_visualizerVERSION2.json new file mode 100644 index 0000000..dd0c962 --- /dev/null +++ b/examples/lip_sync_visualizerVERSION2.json @@ -0,0 +1,6773 @@ +{ + "last_node_id": 439, + "last_link_id": 717, + "nodes": [ + { + "id": 45, + "type": "SetNode", + "pos": [ + -1674.9754638671875, + 879.3338623046875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 48 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_audio", + "properties": { + "previousName": "audio" + }, + "widgets_values": [ + "audio" + ] + }, + { + "id": 50, + "type": "PreviewAudio", + "pos": [ + -1114.974853515625, + 609.3344116210938 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 55, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 652 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 258, + "type": "SetNode", + "pos": [ + -1105.5703125, + 919.9849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 61, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 658 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_audio_bass", + "properties": { + "previousName": "audio_bass" + }, + "widgets_values": [ + "audio_bass" + ] + }, + { + "id": 257, + "type": "SetNode", + "pos": [ + -1105.5703125, + 819.985107421875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 656 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_audio__vocals", + "properties": { + "previousName": "audio__vocals" + }, + "widgets_values": [ + "audio__vocals" + ] + }, + { + "id": 262, + "type": "SetNode", + "pos": [ + -705.5696411132812, + 1619.9849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 670 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_drum_feature", + "properties": { + "previousName": "drum_feature" + }, + "widgets_values": [ + "drum_feature" + ] + }, + { + "id": 261, + "type": "SetNode", + "pos": [ + -695.5696411132812, + 1439.9847412109375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 80, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 663 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_kick_feature", + "properties": { + "previousName": "kick_feature" + }, + "widgets_values": [ + "kick_feature" + ] + }, + { + "id": 264, + "type": "SetNode", + "pos": [ + -705.5696411132812, + 1759.9853515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 74, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 671 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vocal_feature", + "properties": { + "previousName": "vocal_feature" + }, + "widgets_values": [ + "vocal_feature" + ] + }, + { + "id": 266, + "type": "SetNode", + "pos": [ + -685.5696411132812, + 1869.9853515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 75, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 673 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_bass_feature", + "properties": { + "previousName": "bass_feature" + }, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 268, + "type": "SetNode", + "pos": [ + -695.5696411132812, + 2009.98583984375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 675 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_other_feature", + "properties": { + "previousName": "other_feature" + }, + "widgets_values": [ + "other_feature" + ] + }, + { + "id": 277, + "type": "SetNode", + "pos": [ + -1537.571044921875, + 1377.9847412109375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 453 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_empty_mask", + "properties": { + "previousName": "empty_mask" + }, + "widgets_values": [ + "empty_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 101, + "type": "SetNode", + "pos": [ + -1555.5709228515625, + 1263.98486328125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 162 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_empty_img", + "properties": { + "previousName": "empty_img" + }, + "widgets_values": [ + "empty_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 278, + "type": "SetNode", + "pos": [ + -1552.5709228515625, + 1494.9847412109375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 454 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_frame_count", + "properties": { + "previousName": "frame_count" + }, + "widgets_values": [ + "frame_count" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 256, + "type": "SetNode", + "pos": [ + -1105.5703125, + 729.9852294921875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 57, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 655 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_audio_drums", + "properties": { + "previousName": "audio_drums" + }, + "widgets_values": [ + "audio_drums" + ] + }, + { + "id": 259, + "type": "SetNode", + "pos": [ + -1104.5703125, + 1021.9849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 660 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_audio_other", + "properties": { + "previousName": "audio_other" + }, + "widgets_values": [ + "audio_other" + ] + }, + { + "id": 301, + "type": "GetImageSizeAndCount", + "pos": [ + 950, + 400 + ], + "size": [ + 277.20001220703125, + 86 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 677 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 483 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 316, + "type": "GetImageSizeAndCount", + "pos": [ + 880, + 1450 + ], + "size": [ + 277.20001220703125, + 86 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 680 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 501 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 343, + "type": "SetNode", + "pos": [ + 1490, + 1060 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 69, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 529 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vis_line_mask", + "properties": { + "previousName": "vis_line_mask" + }, + "widgets_values": [ + "vis_line_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 345, + "type": "MaskToImage", + "pos": [ + 1410, + 890 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": {}, + "order": 70, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 532 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 533 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 346, + "type": "SetNode", + "pos": [ + 1460, + 960 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 78, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 533 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vis_line_img", + "properties": { + "previousName": "vis_line_img" + }, + "widgets_values": [ + "vis_line_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 347, + "type": "GetNode", + "pos": [ + 7737, + 465 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 558 + ], + "slot_index": 0 + } + ], + "title": "Get_vis_line_img", + "properties": {}, + "widgets_values": [ + "vis_line_img" + ] + }, + { + "id": 365, + "type": "ADE_AnimateDiffLoaderGen1", + "pos": [ + 10977.7529296875, + 522.1439208984375 + ], + "size": [ + 271.7644958496094, + 242 + ], + "flags": {}, + "order": 83, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 571, + "slot_index": 0 + }, + { + "name": "context_options", + "type": "CONTEXT_OPTIONS", + "link": 572, + "slot_index": 1, + "shape": 7 + }, + { + "name": "motion_lora", + "type": "MOTION_LORA", + "link": 573, + "slot_index": 2, + "shape": 7 + }, + { + "name": "ad_settings", + "type": "AD_SETTINGS", + "link": 574, + "slot_index": 3, + "shape": 7 + }, + { + "name": "ad_keyframes", + "type": "AD_KEYFRAMES", + "link": null, + "shape": 7 + }, + { + "name": "sample_settings", + "type": "SAMPLE_SETTINGS", + "link": 575, + "slot_index": 5, + "shape": 7 + }, + { + "name": "scale_multival", + "type": "MULTIVAL", + "link": 576, + "slot_index": 6, + "shape": 7 + }, + { + "name": "effect_multival", + "type": "MULTIVAL", + "link": 577, + "slot_index": 7, + "shape": 7 + }, + { + "name": "per_block", + "type": "PER_BLOCK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 589 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffLoaderGen1", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + "ALCM_sd15_t2v_beta.ckpt", + "lcm avg(sqrt_linear,linear)" + ] + }, + { + "id": 366, + "type": "ADE_AnimateDiffSamplingSettings", + "pos": [ + 10977.7529296875, + 1132.1439208984375 + ], + "size": [ + 273.3500061035156, + 274 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "noise_layers", + "type": "NOISE_LAYERS", + "link": null, + "slot_index": 0, + "shape": 7 + }, + { + "name": "iteration_opts", + "type": "ITERATION_OPTS", + "link": null, + "shape": 7 + }, + { + "name": "custom_cfg", + "type": "CUSTOM_CFG", + "link": 578, + "slot_index": 2, + "shape": 7 + }, + { + "name": "sigma_schedule", + "type": "SIGMA_SCHEDULE", + "link": 579, + "slot_index": 3, + "shape": 7 + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "settings", + "type": "SAMPLE_SETTINGS", + "links": [ + 575 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffSamplingSettings", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 0, + "FreeNoise", + "comfy", + 0, + 0, + false + ] + }, + { + "id": 367, + "type": "ADE_SigmaSchedule", + "pos": [ + 10647.7529296875, + 1152.1439208984375 + ], + "size": [ + 244.73928833007812, + 58 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SIGMA_SCHEDULE", + "type": "SIGMA_SCHEDULE", + "links": [ + 579 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Sigma Schedule 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_SigmaSchedule", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + "lcm avg(sqrt_linear,linear)" + ] + }, + { + "id": 368, + "type": "ADE_MultivalDynamic", + "pos": [ + 10637.7529296875, + 802.1439208984375 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MULTIVAL", + "type": "MULTIVAL", + "links": [ + 576 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Scale 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.1400000000000001 + ] + }, + { + "id": 369, + "type": "ADE_AnimateDiffUniformContextOptions", + "pos": [ + 10977.7529296875, + 822.1439208984375 + ], + "size": [ + 273.269775390625, + 270 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "prev_context", + "type": "CONTEXT_OPTIONS", + "link": null, + "shape": 7 + }, + { + "name": "view_opts", + "type": "VIEW_OPTS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "CONTEXT_OPTS", + "type": "CONTEXT_OPTIONS", + "links": [ + 572 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Context Options 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 16, + 1, + 4, + "uniform", + false, + "pyramid", + false, + 0, + 1, + "" + ] + }, + { + "id": 370, + "type": "ADE_MultivalDynamic", + "pos": [ + 10637.7529296875, + 692.1439208984375 + ], + "size": [ + 265.1632385253906, + 58 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MULTIVAL", + "type": "MULTIVAL", + "links": [ + 577 + ], + "shape": 3 + } + ], + "title": "Effect 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.1 + ] + }, + { + "id": 371, + "type": "ADE_CustomCFGSimple", + "pos": [ + 10637.7529296875, + 902.1439208984375 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "cfg_extras", + "type": "CFG_EXTRAS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "CUSTOM_CFG", + "type": "CUSTOM_CFG", + "links": [ + 578 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_CustomCFGSimple", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 372, + "type": "ADE_AnimateDiffSettings", + "pos": [ + 10667.7529296875, + 1252.1439208984375 + ], + "size": [ + 226.8000030517578, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "pe_adjust", + "type": "PE_ADJUST", + "link": 580, + "slot_index": 0, + "shape": 7 + }, + { + "name": "weight_adjust", + "type": "WEIGHT_ADJUST", + "link": 581, + "slot_index": 1, + "shape": 7 + } + ], + "outputs": [ + { + "name": "AD_SETTINGS", + "type": "AD_SETTINGS", + "links": [ + 574 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffSettings", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [] + }, + { + "id": 373, + "type": "ADE_AdjustPESweetspotStretch", + "pos": [ + 10637.7529296875, + 1002.1439208984375 + ], + "size": [ + 253.07310485839844, + 106 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "prev_pe_adjust", + "type": "PE_ADJUST", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "PE_ADJUST", + "type": "PE_ADJUST", + "links": [ + 580 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AdjustPESweetspotStretch", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 16, + 18, + false + ] + }, + { + "id": 374, + "type": "ADE_AdjustWeightAllMult", + "pos": [ + 10647.7529296875, + 542.1439208984375 + ], + "size": [ + 270.3999938964844, + 82 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "prev_weight_adjust", + "type": "WEIGHT_ADJUST", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "WEIGHT_ADJUST", + "type": "WEIGHT_ADJUST", + "links": [ + 581 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AdjustWeightAllMult", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.01, + false + ] + }, + { + "id": 375, + "type": "ADE_AnimateDiffLoRALoader", + "pos": [ + 10657.7529296875, + 402.1439208984375 + ], + "size": [ + 261.19134521484375, + 82 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MOTION_LORA", + "type": "MOTION_LORA", + "links": [ + 573 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "AnimateDiff LoRA", + "properties": { + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + "LiquidAF-0-1.safetensors", + 0.8 + ] + }, + { + "id": 380, + "type": "ModelSamplingDiscrete", + "pos": [ + 10967.7529296875, + 392.1439208984375 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 86, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 589 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 582, + 603 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingDiscrete" + }, + "widgets_values": [ + "lcm", + false + ] + }, + { + "id": 384, + "type": "IPAdapterAdvanced", + "pos": [ + 10107.7529296875, + 512.1439208984375 + ], + "size": [ + 315, + 278 + ], + "flags": {}, + "order": 71, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 594 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": 595 + }, + { + "name": "image", + "type": "IMAGE", + "link": null + }, + { + "name": "image_negative", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "attn_mask", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 597 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "IPAdapterAdvanced" + }, + "widgets_values": [ + 1, + "linear", + "concat", + 0, + 1, + "V only" + ] + }, + { + "id": 386, + "type": "DifferentialDiffusion", + "pos": [ + 10167.7529296875, + 892.1439208984375 + ], + "size": [ + 184.8000030517578, + 26 + ], + "flags": {}, + "order": 79, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 597 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 571 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 385, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 10107.7529296875, + 382.1439208984375 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 48, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 596 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 594 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "links": [ + 595 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "IPAdapterUnifiedLoader" + }, + "widgets_values": [ + "PLUS (high strength)" + ] + }, + { + "id": 387, + "type": "GetNode", + "pos": [ + 13352.5546875, + 470 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 587 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 273, + "type": "VHS_VideoCombine", + "pos": [ + 1300, + 400 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 67, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 483 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07006-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 286, + "type": "VHS_VideoCombine", + "pos": [ + 1240, + 1160 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 68, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 501 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07008-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 377, + "type": "VAEDecode", + "pos": [ + 12772.5537109375, + 660 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 101, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 584 + }, + { + "name": "vae", + "type": "VAE", + "link": 624 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 588 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 379, + "type": "GetImageSizeAndCount", + "pos": [ + 13042.5537109375, + 760 + ], + "size": [ + 210, + 86 + ], + "flags": {}, + "order": 103, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 588 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 586 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 393, + "type": "GetNode", + "pos": [ + 14842.5546875, + 410 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 610 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 399, + "type": "SetNode", + "pos": [ + 9401.212890625, + -274.5577697753906 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 619 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 398, + "type": "SetNode", + "pos": [ + 9401.212890625, + -144.55787658691406 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 620 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 400, + "type": "SetNode", + "pos": [ + 9401.212890625, + -384.55780029296875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 618 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 362, + "type": "CheckpointLoaderSimple", + "pos": [ + 8941.2099609375, + -104.5577621459961 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 618 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 619 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 620 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "photonLCM_v10.safetensors" + ] + }, + { + "id": 383, + "type": "CR Apply LoRA Stack", + "pos": [ + 9237.7529296875, + 582.1439208984375 + ], + "size": [ + 254.40000915527344, + 66 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 622 + }, + { + "name": "clip", + "type": "CLIP", + "link": 621 + }, + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 593 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 596 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 569, + 570 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR Apply LoRA Stack" + }, + "widgets_values": [] + }, + { + "id": 402, + "type": "GetNode", + "pos": [ + 9007.76171875, + 432.143310546875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 622 + ], + "slot_index": 0 + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ] + }, + { + "id": 403, + "type": "GetNode", + "pos": [ + 9267.76171875, + 712.14306640625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 623 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 401, + "type": "GetNode", + "pos": [ + 8997.76171875, + 332.143310546875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 621 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ] + }, + { + "id": 407, + "type": "SetNode", + "pos": [ + 7206, + 334 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 97, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 629 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mouth_mask", + "properties": { + "previousName": "mouth_mask" + }, + "widgets_values": [ + "mouth_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 409, + "type": "SetNode", + "pos": [ + 7146.2333984375, + 1010.7202758789062 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 89, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 688 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mouth_img", + "properties": { + "previousName": "mouth_img" + }, + "widgets_values": [ + "mouth_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 392, + "type": "GetImageSizeAndCount", + "pos": [ + 14532.5537109375, + 700 + ], + "size": [ + 210, + 86 + ], + "flags": {}, + "order": 107, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 611 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 637 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount" + }, + "widgets_values": [] + }, + { + "id": 315, + "type": "VHS_LoadVideo", + "pos": [ + 2313, + 342 + ], + "size": [ + 247.455078125, + 262 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + }, + { + "name": "frame_load_cap", + "type": "*", + "link": 536, + "widget": { + "name": "frame_load_cap" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 682 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "deexlipsynbc.mp4", + "force_rate": 30, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 450, + "skip_first_frames": 200, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 450, + "skip_first_frames": 200, + "force_rate": 30, + "filename": "deexlipsynbc.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + }, + "muted": false + } + } + }, + { + "id": 348, + "type": "GetNode", + "pos": [ + 2331, + 230 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 536 + ], + "slot_index": 0 + } + ], + "title": "Get_frame_count", + "properties": {}, + "widgets_values": [ + "frame_count" + ] + }, + { + "id": 353, + "type": "VHS_VideoCombine", + "pos": [ + 3179, + 323 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 65, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 683 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07010.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 324, + "type": "MediaPipe-FaceMeshPreprocessor", + "pos": [ + 3444, + 496 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 77, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 546 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 552, + 555 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MediaPipe-FaceMeshPreprocessor" + }, + "widgets_values": [ + 1, + 0.1, + 512 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 355, + "type": "ImageListToImageBatch", + "pos": [ + 3453, + 800 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 82, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 555 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 685 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToImageBatch" + }, + "widgets_values": [] + }, + { + "id": 337, + "type": "ImpactSEGSToMaskList", + "pos": [ + 4208, + 293 + ], + "size": [ + 322.8110656738281, + 36.70903778076172 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 522 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 524 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "ImpactSEGSToMaskList" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 339, + "type": "GrowMaskWithBlur", + "pos": [ + 4212, + 383 + ], + "size": [ + 324.2040100097656, + 246 + ], + "flags": {}, + "order": 87, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 524 + } + ], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": [ + 523 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "mask_inverted", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GrowMaskWithBlur" + }, + "widgets_values": [ + 7, + 0, + true, + false, + 12, + 1, + 1, + false + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 338, + "type": "MaskToImage", + "pos": [ + 4585, + 381 + ], + "size": [ + 300.6851806640625, + 26 + ], + "flags": {}, + "order": 90, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 523 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 525 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 340, + "type": "ImageListToImageBatch", + "pos": [ + 4601, + 478 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 91, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 525 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 551, + 689 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToImageBatch" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 360, + "type": "VHS_VideoCombine", + "pos": [ + 5985, + 256 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 94, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 690 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07014.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 361, + "type": "VHS_VideoCombine", + "pos": [ + 5956, + 754 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 88, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 686 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07012.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 341, + "type": "ImageToMask", + "pos": [ + 6281, + 318 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 95, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 691 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 531, + 629 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask" + }, + "widgets_values": [ + "blue" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 49, + "type": "PreviewAudio", + "pos": [ + -1762, + 571 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 56 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 412, + "type": "PreviewAudio", + "pos": [ + -1757, + 741 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 639 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 293, + "type": "GetNode", + "pos": [ + 7298, + 672 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 516 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 41, + "type": "DownloadOpenUnmixModel", + "pos": [ + -2059, + 1059 + ], + "size": [ + 361.20001220703125, + 58 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 650 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] + }, + { + "id": 269, + "type": "GetNode", + "pos": [ + -230, + 930 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 676, + 679 + ], + "slot_index": 0 + } + ], + "title": "Get_audio__vocals", + "properties": {}, + "widgets_values": [ + "audio__vocals" + ] + }, + { + "id": 290, + "type": "MaskComposite", + "pos": [ + 920, + 890 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 678 + }, + { + "name": "source", + "type": "MASK", + "link": 681 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 529, + 532 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 336, + "type": "MediaPipeFaceMeshToSEGS", + "pos": [ + 3852, + 281 + ], + "size": [ + 315, + 346 + ], + "flags": {}, + "order": 81, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 552 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 522 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MediaPipeFaceMeshToSEGS" + }, + "widgets_values": [ + 2.4000000000000004, + false, + 10, + 1, + 0, + false, + true, + false, + false, + false, + false, + false, + false + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 342, + "type": "ImageCompositeMasked", + "pos": [ + 6785, + 548 + ], + "size": [ + 315, + 146 + ], + "flags": {}, + "order": 96, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 558 + }, + { + "name": "source", + "type": "IMAGE", + "link": 687 + }, + { + "name": "mask", + "type": "MASK", + "link": 531, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 541, + 599 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + true + ] + }, + { + "id": 382, + "type": "CR LoRA Stack", + "pos": [ + 8837, + 637 + ], + "size": [ + 315, + 342 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 593 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "On", + "add_detail.safetensors", + 0.4, + 0.4, + "On", + "ral-acidzlime-sd15.safetensors", + 1, + 1, + "Off", + "halloweenTech-202.safetensors", + 0.3, + 0.3 + ] + }, + { + "id": 388, + "type": "VAEEncode", + "pos": [ + 9838, + 992 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 99, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 599 + }, + { + "name": "vae", + "type": "VAE", + "link": 623 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 600 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 363, + "type": "CLIPTextEncode", + "pos": [ + 9560, + 387 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], + "flags": {}, + "order": 49, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 569 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 641, + 643 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "acidzlime, dripping slime, disembodied mouth singing" + ] + }, + { + "id": 364, + "type": "CLIPTextEncode", + "pos": [ + 9537.7529296875, + 672.1439208984375 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 570 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 642, + 644 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "text, watermark" + ] + }, + { + "id": 404, + "type": "GetNode", + "pos": [ + 12450, + 463 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 624, + 625 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 376, + "type": "KSampler", + "pos": [ + 12419, + 631 + ], + "size": [ + 303.4075622558594, + 262 + ], + "flags": {}, + "order": 100, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 582 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 641 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 642 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 600 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 584, + 612 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.56 + ] + }, + { + "id": 334, + "type": "VHS_VideoCombine", + "pos": [ + 8445, + 389 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 98, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 541 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 516, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07391-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 378, + "type": "VHS_VideoCombine", + "pos": [ + 13344, + 514 + ], + "size": [ + 365.99755859375, + 334 + ], + "flags": {}, + "order": 105, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 586 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 587, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07392-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 394, + "type": "NNLatentUpscale", + "pos": [ + 13788, + 601 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 102, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 612 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 613 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "NNLatentUpscale" + }, + "widgets_values": [ + "SD 1.x", + 1.5 + ] + }, + { + "id": 389, + "type": "KSampler", + "pos": [ + 14156, + 732 + ], + "size": [ + 303.4075622558594, + 262 + ], + "flags": {}, + "order": 104, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 603 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 643 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 644 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 613 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 607 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.4 + ] + }, + { + "id": 390, + "type": "VAEDecode", + "pos": [ + 14518, + 571 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 106, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 607 + }, + { + "name": "vae", + "type": "VAE", + "link": 625 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 611 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 411, + "type": "ImageCASBatch", + "pos": [ + 14563, + 810 + ], + "size": [ + 462, + 103.51498413085938 + ], + "flags": {}, + "order": 108, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 637 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 638 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageCASBatch" + }, + "widgets_values": [ + 0.8, + 4 + ] + }, + { + "id": 391, + "type": "VHS_VideoCombine", + "pos": [ + 15233, + 556 + ], + "size": [ + 365.99755859375, + 334 + ], + "flags": {}, + "order": 109, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 638 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 610, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07393-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 354, + "type": "VHS_VideoCombine", + "pos": [ + 4569, + 648 + ], + "size": [ + 214.7587890625, + 334 + ], + "flags": {}, + "order": 92, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 551 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_07011.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 417, + "type": "FloatConstant", + "pos": [ + -2826.76025390625, + 844.32177734375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "FLOAT", + "links": [ + 645 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FloatConstant" + }, + "widgets_values": [ + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 418, + "type": "Anything Everywhere?", + "pos": [ + -2606.76025390625, + 604.3217163085938 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 649, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "height", + ".*" + ] + }, + { + "id": 419, + "type": "Anything Everywhere?", + "pos": [ + -2636.76025390625, + 364.32183837890625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 648, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "width", + ".*" + ] + }, + { + "id": 420, + "type": "INTConstant", + "pos": [ + -2923.78662109375, + 613.5147705078125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "INT", + "links": [ + 648 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 421, + "type": "INTConstant", + "pos": [ + -2926.76025390625, + 404.3218078613281 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "INT", + "links": [ + 649 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 464 + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 424, + "type": "AudioSeparatorSimple", + "pos": [ + -1588.1632080078125, + 1049.7010498046875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 650 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 651 + } + ], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 652 + ] + }, + { + "name": "drums_audio", + "type": "AUDIO", + "links": [ + 654, + 655, + 666, + 668 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 656 + ] + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": [ + 658, + 672 + ] + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": [ + 660, + 674 + ] + } + ], + "properties": { + "Node name for S&R": "AudioSeparatorSimple" + }, + "widgets_values": [] + }, + { + "id": 39, + "type": "VHS_LoadAudioUpload", + "pos": [ + -2168, + 869 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 38, + 48, + 56, + 639, + 651, + 664 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Delta Deez - Songfinch - Out the Mud.mp3", + "start_time": 75, + "duration": 7.5, + "choose audio to upload": "image" + } + }, + { + "id": 42, + "type": "EmptyImageAndMaskFromAudio", + "pos": [ + -2063, + 1249 + ], + "size": [ + 411.6000061035156, + 146 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 38 + } + ], + "outputs": [ + { + "name": "empty_image", + "type": "IMAGE", + "links": [ + 162 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "empty_mask", + "type": "MASK", + "links": [ + 453 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 454, + 665 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmptyImageAndMaskFromAudio" + }, + "widgets_values": [ + 30, + 768, + 464 + ] + }, + { + "id": 428, + "type": "AudioFeatureExtractor", + "pos": [ + -998.3270263671875, + 1554.645751953125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 666 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 670 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 429, + "type": "AudioFeatureExtractor", + "pos": [ + -1063.594970703125, + 1643.42626953125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 668 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 671 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 435, + "type": "FlexAudioVisualizerLine", + "pos": [ + 221.93997192382812, + 1085.797607421875 + ], + "size": [ + 453.5999755859375, + 630 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 679 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 680 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 681 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerLine" + }, + "widgets_values": [ + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 0, + 0, + 64, + 200, + 10, + 5, + 0, + 0, + 2048, + 20, + 8000, + false + ] + }, + { + "id": 434, + "type": "FlexAudioVisualizerLine", + "pos": [ + 210, + 400 + ], + "size": [ + 453.5999755859375, + 630 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 676 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 677 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 678 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerLine" + }, + "widgets_values": [ + 1, + 0, + "smoothing", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 0, + 0, + 64, + 200, + 10, + 5, + 0, + 0, + 2048, + 20, + 8000, + false + ] + }, + { + "id": 227, + "type": "FrequencyFilterPreset", + "pos": [ + -1017.4654541015625, + 1145.1510009765625 + ], + "size": [ + 405.5999755859375, + 58 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "previous_filter", + "type": "FREQUENCY_FILTER", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "FREQUENCY_FILTER", + "type": "FREQUENCY_FILTER", + "links": [ + 372 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FrequencyFilterPreset" + }, + "widgets_values": [ + "isolate_kick_drum" + ] + }, + { + "id": 228, + "type": "AudioFilter", + "pos": [ + -994.8829345703125, + 1266.406982421875 + ], + "size": [ + 252, + 46 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 654 + }, + { + "name": "filters", + "type": "FREQUENCY_FILTER", + "link": 372 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 662 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AudioFilter" + }, + "widgets_values": [] + }, + { + "id": 425, + "type": "AudioFeatureExtractor", + "pos": [ + -998.2593994140625, + 1465.2696533203125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 662 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 663 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 431, + "type": "AudioFeatureExtractor", + "pos": [ + -1055.8651123046875, + 1974.902099609375 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 674 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 675 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 430, + "type": "AudioFeatureExtractor", + "pos": [ + -1027.8121337890625, + 1765.503662109375 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 672 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 673 + ], + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 427, + "type": "Anything Everywhere?", + "pos": [ + -1955.12353515625, + 382.4744567871094 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "*", + "link": 664, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "audio", + ".*" + ] + }, + { + "id": 416, + "type": "Anything Everywhere?", + "pos": [ + -2596.76025390625, + 834.32177734375 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "*", + "link": 645, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_rate", + ".*" + ] + }, + { + "id": 426, + "type": "Anything Everywhere?", + "pos": [ + -1607.34765625, + 1765.4197998046875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 54, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 665, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_count|frame_load_cap", + ".*" + ] + }, + { + "id": 439, + "type": "FlexImageTransform", + "pos": [ + 5393, + 310 + ], + "size": [ + 378, + 222 + ], + "flags": {}, + "order": 93, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 689 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 690, + 691 + ] + } + ], + "properties": { + "Node name for S&R": "FlexImageTransform" + }, + "widgets_values": [ + 1, + 0, + "x_value", + "relative", + "scale", + 1.5, + 1.5 + ] + }, + { + "id": 438, + "type": "FlexImageTransform", + "pos": [ + 5401, + 655 + ], + "size": [ + 378, + 222 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 685 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 686, + 687, + 688 + ] + } + ], + "properties": { + "Node name for S&R": "FlexImageTransform" + }, + "widgets_values": [ + 1, + 0, + "x_value", + "relative", + "translate", + 1.5, + 1.5 + ] + }, + { + "id": 325, + "type": "ImpactImageBatchToImageList", + "pos": [ + 3421.8388671875, + 343.20367431640625 + ], + "size": [ + 307.0949401855469, + 26 + ], + "flags": {}, + "order": 66, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 684 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 546 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "ImpactImageBatchToImageList" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 437, + "type": "FlexImageTransform", + "pos": [ + 2664.79638671875, + 321.1230773925781 + ], + "size": [ + 378, + 222 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 682 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 683, + 684 + ] + } + ], + "properties": { + "Node name for S&R": "FlexImageTransform" + }, + "widgets_values": [ + 1, + 0, + "None", + "relative", + "translate", + -76, + -220 + ] + } + ], + "links": [ + [ + 38, + 39, + 0, + 42, + 0, + "AUDIO" + ], + [ + 48, + 39, + 0, + 45, + 0, + "*" + ], + [ + 56, + 39, + 0, + 49, + 0, + "AUDIO" + ], + [ + 162, + 42, + 0, + 101, + 0, + "*" + ], + [ + 372, + 227, + 0, + 228, + 1, + "FREQUENCY_FILTER" + ], + [ + 453, + 42, + 1, + 277, + 0, + "*" + ], + [ + 454, + 42, + 2, + 278, + 0, + "*" + ], + [ + 483, + 301, + 0, + 273, + 0, + "IMAGE" + ], + [ + 501, + 316, + 0, + 286, + 0, + "IMAGE" + ], + [ + 516, + 293, + 0, + 334, + 1, + "AUDIO" + ], + [ + 522, + 336, + 0, + 337, + 0, + "SEGS" + ], + [ + 523, + 339, + 0, + 338, + 0, + "MASK" + ], + [ + 524, + 337, + 0, + 339, + 0, + "MASK" + ], + [ + 525, + 338, + 0, + 340, + 0, + "IMAGE" + ], + [ + 529, + 290, + 0, + 343, + 0, + "*" + ], + [ + 531, + 341, + 0, + 342, + 2, + "MASK" + ], + [ + 532, + 290, + 0, + 345, + 0, + "MASK" + ], + [ + 533, + 345, + 0, + 346, + 0, + "*" + ], + [ + 536, + 348, + 0, + 315, + 2, + "INT" + ], + [ + 541, + 342, + 0, + 334, + 0, + "IMAGE" + ], + [ + 546, + 325, + 0, + 324, + 0, + "IMAGE" + ], + [ + 551, + 340, + 0, + 354, + 0, + "IMAGE" + ], + [ + 552, + 324, + 0, + 336, + 0, + "IMAGE" + ], + [ + 555, + 324, + 0, + 355, + 0, + "IMAGE" + ], + [ + 558, + 347, + 0, + 342, + 0, + "IMAGE" + ], + [ + 569, + 383, + 1, + 363, + 0, + "CLIP" + ], + [ + 570, + 383, + 1, + 364, + 0, + "CLIP" + ], + [ + 571, + 386, + 0, + 365, + 0, + "MODEL" + ], + [ + 572, + 369, + 0, + 365, + 1, + "CONTEXT_OPTIONS" + ], + [ + 573, + 375, + 0, + 365, + 2, + "MOTION_LORA" + ], + [ + 574, + 372, + 0, + 365, + 3, + "AD_SETTINGS" + ], + [ + 575, + 366, + 0, + 365, + 5, + "SAMPLE_SETTINGS" + ], + [ + 576, + 368, + 0, + 365, + 6, + "MULTIVAL" + ], + [ + 577, + 370, + 0, + 365, + 7, + "MULTIVAL" + ], + [ + 578, + 371, + 0, + 366, + 2, + "CUSTOM_CFG" + ], + [ + 579, + 367, + 0, + 366, + 3, + "SIGMA_SCHEDULE" + ], + [ + 580, + 373, + 0, + 372, + 0, + "PE_ADJUST" + ], + [ + 581, + 374, + 0, + 372, + 1, + "WEIGHT_ADJUST" + ], + [ + 582, + 380, + 0, + 376, + 0, + "MODEL" + ], + [ + 584, + 376, + 0, + 377, + 0, + "LATENT" + ], + [ + 586, + 379, + 0, + 378, + 0, + "IMAGE" + ], + [ + 587, + 387, + 0, + 378, + 1, + "*" + ], + [ + 588, + 377, + 0, + 379, + 0, + "IMAGE" + ], + [ + 589, + 365, + 0, + 380, + 0, + "MODEL" + ], + [ + 593, + 382, + 0, + 383, + 2, + "LORA_STACK" + ], + [ + 594, + 385, + 0, + 384, + 0, + "MODEL" + ], + [ + 595, + 385, + 1, + 384, + 1, + "IPADAPTER" + ], + [ + 596, + 383, + 0, + 385, + 0, + "MODEL" + ], + [ + 597, + 384, + 0, + 386, + 0, + "MODEL" + ], + [ + 599, + 342, + 0, + 388, + 0, + "IMAGE" + ], + [ + 600, + 388, + 0, + 376, + 3, + "LATENT" + ], + [ + 603, + 380, + 0, + 389, + 0, + "MODEL" + ], + [ + 607, + 389, + 0, + 390, + 0, + "LATENT" + ], + [ + 610, + 393, + 0, + 391, + 1, + "*" + ], + [ + 611, + 390, + 0, + 392, + 0, + "IMAGE" + ], + [ + 612, + 376, + 0, + 394, + 0, + "LATENT" + ], + [ + 613, + 394, + 0, + 389, + 3, + "LATENT" + ], + [ + 618, + 362, + 0, + 400, + 0, + "*" + ], + [ + 619, + 362, + 1, + 399, + 0, + "*" + ], + [ + 620, + 362, + 2, + 398, + 0, + "*" + ], + [ + 621, + 401, + 0, + 383, + 1, + "CLIP" + ], + [ + 622, + 402, + 0, + 383, + 0, + "MODEL" + ], + [ + 623, + 403, + 0, + 388, + 1, + "VAE" + ], + [ + 624, + 404, + 0, + 377, + 1, + "VAE" + ], + [ + 625, + 404, + 0, + 390, + 1, + "VAE" + ], + [ + 629, + 341, + 0, + 407, + 0, + "*" + ], + [ + 637, + 392, + 0, + 411, + 0, + "IMAGE" + ], + [ + 638, + 411, + 0, + 391, + 0, + "IMAGE" + ], + [ + 639, + 39, + 0, + 412, + 0, + "AUDIO" + ], + [ + 641, + 363, + 0, + 376, + 1, + "CONDITIONING" + ], + [ + 642, + 364, + 0, + 376, + 2, + "CONDITIONING" + ], + [ + 643, + 363, + 0, + 389, + 1, + "CONDITIONING" + ], + [ + 644, + 364, + 0, + 389, + 2, + "CONDITIONING" + ], + [ + 645, + 417, + 0, + 416, + 0, + "FLOAT" + ], + [ + 648, + 420, + 0, + 419, + 0, + "INT" + ], + [ + 649, + 421, + 0, + 418, + 0, + "INT" + ], + [ + 650, + 41, + 0, + 424, + 0, + "OPEN_UNMIX_MODEL" + ], + [ + 651, + 39, + 0, + 424, + 1, + "AUDIO" + ], + [ + 652, + 424, + 0, + 50, + 0, + "AUDIO" + ], + [ + 654, + 424, + 1, + 228, + 0, + "AUDIO" + ], + [ + 655, + 424, + 1, + 256, + 0, + "AUDIO" + ], + [ + 656, + 424, + 2, + 257, + 0, + "AUDIO" + ], + [ + 658, + 424, + 3, + 258, + 0, + "AUDIO" + ], + [ + 660, + 424, + 4, + 259, + 0, + "AUDIO" + ], + [ + 662, + 228, + 0, + 425, + 0, + "AUDIO" + ], + [ + 663, + 425, + 0, + 261, + 0, + "FEATURE" + ], + [ + 664, + 39, + 0, + 427, + 0, + "AUDIO" + ], + [ + 665, + 42, + 2, + 426, + 0, + "INT" + ], + [ + 666, + 424, + 1, + 428, + 0, + "AUDIO" + ], + [ + 668, + 424, + 1, + 429, + 0, + "AUDIO" + ], + [ + 670, + 428, + 0, + 262, + 0, + "FEATURE" + ], + [ + 671, + 429, + 0, + 264, + 0, + "FEATURE" + ], + [ + 672, + 424, + 3, + 430, + 0, + "AUDIO" + ], + [ + 673, + 430, + 0, + 266, + 0, + "FEATURE" + ], + [ + 674, + 424, + 4, + 431, + 0, + "AUDIO" + ], + [ + 675, + 431, + 0, + 268, + 0, + "FEATURE" + ], + [ + 676, + 269, + 0, + 434, + 0, + "AUDIO" + ], + [ + 677, + 434, + 0, + 301, + 0, + "IMAGE" + ], + [ + 678, + 434, + 1, + 290, + 0, + "MASK" + ], + [ + 679, + 269, + 0, + 435, + 0, + "AUDIO" + ], + [ + 680, + 435, + 0, + 316, + 0, + "IMAGE" + ], + [ + 681, + 435, + 1, + 290, + 1, + "MASK" + ], + [ + 682, + 315, + 0, + 437, + 0, + "IMAGE" + ], + [ + 683, + 437, + 0, + 353, + 0, + "IMAGE" + ], + [ + 684, + 437, + 0, + 325, + 0, + "IMAGE" + ], + [ + 685, + 355, + 0, + 438, + 0, + "IMAGE" + ], + [ + 686, + 438, + 0, + 361, + 0, + "IMAGE" + ], + [ + 687, + 438, + 0, + 342, + 1, + "IMAGE" + ], + [ + 688, + 438, + 0, + 409, + 0, + "IMAGE" + ], + [ + 689, + 340, + 0, + 439, + 0, + "IMAGE" + ], + [ + 690, + 439, + 0, + 360, + 0, + "IMAGE" + ], + [ + 691, + 439, + 0, + 341, + 0, + "IMAGE" + ], + [ + 692, + 417, + 0, + 428, + 1, + "FLOAT" + ], + [ + 693, + 42, + 2, + 428, + 2, + "INT" + ], + [ + 694, + 420, + 0, + 428, + 3, + "INT" + ], + [ + 695, + 421, + 0, + 428, + 4, + "INT" + ], + [ + 696, + 417, + 0, + 429, + 1, + "FLOAT" + ], + [ + 697, + 42, + 2, + 429, + 2, + "INT" + ], + [ + 698, + 420, + 0, + 429, + 3, + "INT" + ], + [ + 699, + 421, + 0, + 429, + 4, + "INT" + ], + [ + 700, + 417, + 0, + 435, + 2, + "FLOAT" + ], + [ + 701, + 420, + 0, + 435, + 3, + "INT" + ], + [ + 702, + 421, + 0, + 435, + 4, + "INT" + ], + [ + 703, + 420, + 0, + 434, + 2, + "INT" + ], + [ + 704, + 417, + 0, + 434, + 3, + "FLOAT" + ], + [ + 705, + 421, + 0, + 434, + 4, + "INT" + ], + [ + 706, + 417, + 0, + 425, + 1, + "FLOAT" + ], + [ + 707, + 42, + 2, + 425, + 2, + "INT" + ], + [ + 708, + 420, + 0, + 425, + 3, + "INT" + ], + [ + 709, + 421, + 0, + 425, + 4, + "INT" + ], + [ + 710, + 417, + 0, + 431, + 1, + "FLOAT" + ], + [ + 711, + 42, + 2, + 431, + 2, + "INT" + ], + [ + 712, + 420, + 0, + 431, + 3, + "INT" + ], + [ + 713, + 421, + 0, + 431, + 4, + "INT" + ], + [ + 714, + 417, + 0, + 430, + 1, + "FLOAT" + ], + [ + 715, + 42, + 2, + 430, + 2, + "INT" + ], + [ + 716, + 420, + 0, + 430, + 3, + "INT" + ], + [ + 717, + 421, + 0, + 430, + 4, + "INT" + ] + ], + "groups": [ + { + "id": 1, + "title": "Group", + "bounding": [ + -271, + 170, + 2428, + 2272 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Group", + "bounding": [ + -2214, + 466, + 1821, + 1681 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "samp", + "bounding": [ + 8892, + -516, + 820, + 594 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "samp22", + "bounding": [ + 8817, + 153, + 6977, + 1263 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "model", + "bounding": [ + 2239, + 145, + 6548, + 1137 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.11000000000000008, + "offset": [ + 3512.746452762388, + 3261.409354563668 + ] + }, + "node_versions": { + "comfy-core": "0.3.12", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "comfyui-impact-pack": "cdb7b4d3b08994a983c26c9c6f1b905e1759f2cd", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50" + }, + "ue_links": [ + { + "downstream": 428, + "downstream_slot": 1, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 428, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 426, + "type": "INT" + }, + { + "downstream": 428, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 428, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 429, + "downstream_slot": 1, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 429, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 426, + "type": "INT" + }, + { + "downstream": 429, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 429, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 435, + "downstream_slot": 2, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 435, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 435, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 434, + "downstream_slot": 2, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 434, + "downstream_slot": 3, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 434, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 425, + "downstream_slot": 1, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 425, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 426, + "type": "INT" + }, + { + "downstream": 425, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 425, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 431, + "downstream_slot": 1, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 431, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 426, + "type": "INT" + }, + { + "downstream": 431, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 431, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + }, + { + "downstream": 430, + "downstream_slot": 1, + "upstream": "417", + "upstream_slot": 0, + "controller": 416, + "type": "FLOAT" + }, + { + "downstream": 430, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 426, + "type": "INT" + }, + { + "downstream": 430, + "downstream_slot": 3, + "upstream": "420", + "upstream_slot": 0, + "controller": 419, + "type": "INT" + }, + { + "downstream": 430, + "downstream_slot": 4, + "upstream": "421", + "upstream_slot": 0, + "controller": 418, + "type": "INT" + } + ] + }, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/multi_instrument_audio_visualizer.json b/examples/multi_instrument_audio_visualizer.json deleted file mode 100644 index 86eafa6..0000000 --- a/examples/multi_instrument_audio_visualizer.json +++ /dev/null @@ -1,8277 +0,0 @@ -{ - "last_node_id": 349, - "last_link_id": 643, - "nodes": [ - { - "id": 15, - "type": "ADE_ApplyAnimateDiffModelSimple", - "pos": [ - 370, - -440 - ], - "size": { - "0": 304.79998779296875, - "1": 138 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "motion_model", - "type": "MOTION_MODEL_ADE", - "link": 18 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": null - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": null - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - } - ], - "outputs": [ - { - "name": "M_MODELS", - "type": "M_MODELS", - "links": [ - 16 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_ApplyAnimateDiffModelSimple" - }, - "widgets_values": [ - "" - ] - }, - { - "id": 16, - "type": "ADE_LoadAnimateDiffModel", - "pos": [ - 360, - -580 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MOTION_MODEL", - "type": "MOTION_MODEL_ADE", - "links": [ - 18 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_LoadAnimateDiffModel" - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt" - ] - }, - { - "id": 14, - "type": "ADE_UseEvolvedSampling", - "pos": [ - 370, - -260 - ], - "size": { - "0": 315, - "1": 142 - }, - "flags": {}, - "order": 130, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 294 - }, - { - "name": "m_models", - "type": "M_MODELS", - "link": 16 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 17, - "slot_index": 2 - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 10, - 108 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_UseEvolvedSampling" - }, - "widgets_values": [ - "lcm >> sqrt_linear" - ] - }, - { - "id": 151, - "type": "MaskToImage", - "pos": [ - -1239.5792892362501, - -4070.099044376746 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 111, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 244 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 247 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 129, - "type": "_mfc", - "pos": [ - -2384, - -4010 - ], - "size": { - "0": 315, - "1": 174 - }, - "flags": {}, - "order": 102, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 262 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 238 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 0, - 0, - 30 - ] - }, - { - "id": 153, - "type": "MaskToImage", - "pos": [ - -1133, - -2822 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 115, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 600 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 515 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 169, - "type": "LoadImage", - "pos": [ - 654.1794766227333, - -1642.1577364075526 - ], - "size": { - "0": 320, - "1": 314.0001220703125 - }, - "flags": {}, - "order": 1, - "mode": 4, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 291 - ], - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "FREE_psychadelicFire.webp", - "image" - ] - }, - { - "id": 168, - "type": "IPAdapterAdvanced", - "pos": [ - 214.1794766227335, - -1632.1577364075526 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 128, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 321 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 295 - }, - { - "name": "image", - "type": "IMAGE", - "link": 291, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 293 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 294 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 1.1, - "linear", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 80, - "type": "IPAdapterUnifiedLoader", - "pos": [ - -297, - -2972 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 69, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 121 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 119 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "links": [ - 120, - 148, - 255, - 295, - 319 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 189, - "type": "MaskToImage", - "pos": [ - -1074.3725874739782, - -2207.608112317848 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 116, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 511 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 477 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 166, - "type": "MaskComposite", - "pos": [ - -1529.5385301981569, - -1675.513764755127 - ], - "size": { - "0": 315, - "1": 126 - }, - "flags": {}, - "order": 114, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": 286 - }, - { - "name": "source", - "type": "MASK", - "link": 287 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 356 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "add" - ] - }, - { - "id": 207, - "type": "MaskComposite", - "pos": [ - -1534.5385301981569, - -1490.513764755127 - ], - "size": { - "0": 315, - "1": 126 - }, - "flags": {}, - "order": 120, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": 356 - }, - { - "name": "source", - "type": "MASK", - "link": 602 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 360 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "add" - ] - }, - { - "id": 185, - "type": "_mfc", - "pos": [ - -2353.3725874739785, - -2262.608112317848 - ], - "size": { - "0": 315, - "1": 174 - }, - "flags": {}, - "order": 105, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 329 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 508 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 255, - 255, - 30 - ] - }, - { - "id": 84, - "type": "LineartStandardPreprocessor", - "pos": [ - -625.2707974212142, - -719.5747229214809 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 66, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 469 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 128 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LineartStandardPreprocessor" - }, - "widgets_values": [ - 6, - 8, - 512 - ] - }, - { - "id": 83, - "type": "ControlNetLoader", - "pos": [ - -632.2707974212142, - -822.5747229214808 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 4, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 127 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11p_sd15_lineart_fp16.safetensors" - ] - }, - { - "id": 17, - "type": "ADE_StandardStaticContextOptions", - "pos": [ - 360, - -850 - ], - "size": { - "0": 319.20001220703125, - "1": 222 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null - } - ], - "outputs": [ - { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 17 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_StandardStaticContextOptions" - }, - "widgets_values": [ - 16, - 4, - "pyramid", - false, - 0, - 1 - ] - }, - { - "id": 223, - "type": "Reroute", - "pos": [ - 848.1562971048259, - -477.4030864591942 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 408 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 409, - 410 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 12, - "type": "SetLatentNoiseMask", - "pos": [ - 870.6986314309653, - -389.73938332622606 - ], - "size": { - "0": 176.39999389648438, - "1": 46 - }, - "flags": {}, - "order": 126, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 74 - }, - { - "name": "mask", - "type": "MASK", - "link": 290 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 11 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 65, - "type": "LoraLoaderModelOnly", - "pos": [ - -1937, - -735 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 90 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 121 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LoraLoaderModelOnly" - }, - "widgets_values": [ - "ral-dissolve-sd15.safetensors", - 1 - ] - }, - { - "id": 224, - "type": "Note", - "pos": [ - -7153.27503551134, - -3040.000244140627 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 4, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "441 is verse\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 228, - "type": "SetLatentNoiseMask", - "pos": [ - 2105, - -736 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 135, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 423 - }, - { - "name": "mask", - "type": "MASK", - "link": 422 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 424 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 229, - "type": "InvertMask", - "pos": [ - 1697, - -678 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 625 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 421 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "InvertMask" - } - }, - { - "id": 230, - "type": "GrowMaskWithBlur", - "pos": [ - 1673, - -603 - ], - "size": { - "0": 315, - "1": 246 - }, - "flags": {}, - "order": 64, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 421 - } - ], - "outputs": [ - { - "name": "mask", - "type": "MASK", - "links": [ - 422 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "mask_inverted", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GrowMaskWithBlur" - }, - "widgets_values": [ - 5, - 0, - true, - false, - 0, - 1, - 1, - false - ] - }, - { - "id": 236, - "type": "Note", - "pos": [ - 1039, - -1544 - ], - "size": { - "0": 210.59083557128906, - "1": 153.2702178955078 - }, - "flags": {}, - "order": 5, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "applies ipadapter to ALL masked areas" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 79, - "type": "IPAdapterAdvanced", - "pos": [ - 218.76429968005436, - -4047 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 112, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 119 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 120 - }, - { - "name": "image", - "type": "IMAGE", - "link": 124, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 260 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 146 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 0.6, - "linear", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 156, - "type": "Reroute", - "pos": [ - -2910, - -3060 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 101, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 279 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 262, - 263, - 264, - 329 - ], - "slot_index": 0 - } - ], - "title": "MASK IMAGE", - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 61, - "type": "FrequencyFilterPreset", - "pos": [ - -1969, - -4069 - ], - "size": { - "0": 344.3999938964844, - "1": 58 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 241 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "isolate_kick_drum" - ] - }, - { - "id": 147, - "type": "AudioFeatureExtractor", - "pos": [ - -1979, - -3862 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 82, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 243 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 621 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 228 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 229 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 241, - "type": "Note", - "pos": [ - -1938, - -4354 - ], - "size": { - "0": 672.896728515625, - "1": 148.70925903320312 - }, - "flags": {}, - "order": 7, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "5. Here we have the masks split by color, and modulate each of them with the audio of a different instrument.\n\nFor the drums, we use an optional audio filter to further isolate the kick drum.\n\nThe fundamental nodes here, though, are the AudioFeatureExtractor and the FlexMaskMorph.\n\nLike its name implies, the FlexMask nodes can accept \"features\" other than audio. At the time of writing this, I have implemented MIDI, Time, and Depth features.\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 242, - "type": "Note", - "pos": [ - 111.58510832419961, - -4343.152072461528 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "6. Optionally assign an IP adapter for each color" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 243, - "type": "Note", - "pos": [ - -1129.0810304375746, - -1513.6734700657614 - ], - "size": { - "0": 253.1964874267578, - "1": 129.31674194335938 - }, - "flags": {}, - "order": 9, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "we join all the modulated masks back together so we can sample these areas" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 85, - "type": "ControlNetApplyAdvanced", - "pos": [ - -197, - -502 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 81, - "mode": 4, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 140 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 139 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 138, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 137 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 141 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 142 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.5, - 0, - 0.654 - ] - }, - { - "id": 149, - "type": "AudioFeatureExtractor", - "pos": [ - -1874, - -2726 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 84, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 437 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 620 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 463, - 598 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 464, - 599 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 144, - "type": "AudioFeatureExtractor", - "pos": [ - -1963.661136666576, - -3222.9379927776727 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 83, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 440 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 619 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 226 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 227 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 86, - "type": "DWPreprocessor", - "pos": [ - -645, - -421 - ], - "size": { - "0": 315, - "1": 198 - }, - "flags": {}, - "order": 65, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 136 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 137 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "POSE_KEYPOINT", - "type": "POSE_KEYPOINT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DWPreprocessor" - }, - "widgets_values": [ - "enable", - "enable", - "enable", - 512, - "yolox_l.onnx", - "dw-ll_ucoco_384_bs5.torchscript.pt" - ] - }, - { - "id": 88, - "type": "ControlNetLoader", - "pos": [ - -642, - -533 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 10, - "mode": 4, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 138 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11p_sd15_openpose_fp16.safetensors" - ] - }, - { - "id": 154, - "type": "IPAdapterAdvanced", - "pos": [ - 239, - -2751 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 123, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 257 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 255 - }, - { - "name": "image", - "type": "IMAGE", - "link": 604, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 601 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 320 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 1, - "linear", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 251, - "type": "Note", - "pos": [ - -650, - -1085 - ], - "size": { - "0": 287.7337951660156, - "1": 97.48538208007812 - }, - "flags": {}, - "order": 11, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "I have masked off the only person so ive disabled openpose" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 82, - "type": "ControlNetApplyAdvanced", - "pos": [ - -214, - -783 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 92, - "mode": 4, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 141 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 142 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 127, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 128 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 131, - 132 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 130, - 133 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.5, - 0, - 0.654 - ] - }, - { - "id": 75, - "type": "KSampler", - "pos": [ - 2413, - -830 - ], - "size": { - "0": 315, - "1": 286 - }, - "flags": {}, - "order": 136, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 108 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 132 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 133 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 424 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 112 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 271603655952848, - "fixed", - 4, - 1.59, - "lcm", - "sgm_uniform", - 0.58 - ] - }, - { - "id": 246, - "type": "Reroute", - "pos": [ - -2115, - -3216 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 639 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 440 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 258, - "type": "VHS_VideoCombine", - "pos": [ - -818, - -3490 - ], - "size": [ - 315, - 489.9375 - ], - "flags": {}, - "order": 119, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 472 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02531-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 260, - "type": "VHS_VideoCombine", - "pos": [ - -674, - -2294 - ], - "size": [ - 320, - 492.75 - ], - "flags": {}, - "order": 122, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 477 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 520 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02532-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 161, - "type": "PrimitiveNode", - "pos": [ - -7153.27503551134, - -3360.000244140627 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 12, - "mode": 0, - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 275, - 362, - 577 - ], - "slot_index": 0, - "widget": { - "name": "width" - } - } - ], - "title": "Width", - "properties": { - "Run widget replace on values": false - }, - "widgets_values": [ - 1280, - "fixed" - ] - }, - { - "id": 162, - "type": "PrimitiveNode", - "pos": [ - -7173.27503551134, - -3480.000244140627 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 13, - "mode": 0, - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 276, - 361, - 578 - ], - "slot_index": 0, - "widget": { - "name": "height" - } - } - ], - "title": "Height", - "properties": { - "Run widget replace on values": false - }, - "widgets_values": [ - 720, - "fixed" - ] - }, - { - "id": 167, - "type": "MaskComposite", - "pos": [ - -1145.0810304375746, - -1690.6734700657614 - ], - "size": { - "0": 315, - "1": 126 - }, - "flags": {}, - "order": 124, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": 512 - }, - { - "name": "source", - "type": "MASK", - "link": 360 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 290, - 293, - 480 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "add" - ] - }, - { - "id": 263, - "type": "MaskToImage", - "pos": [ - -785.0810304375746, - -1689.6734700657614 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 127, - "mode": 4, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 480 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 481 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 262, - "type": "VHS_VideoCombine", - "pos": [ - -638, - -1682 - ], - "size": [ - 320, - 493 - ], - "flags": {}, - "order": 129, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 481 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02533.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 253, - "type": "StaticBody", - "pos": [ - -4857.194123640608, - -3164.053148376446 - ], - "size": { - "0": 317.4000244140625, - "1": 250 - }, - "flags": {}, - "order": 48, - "mode": 4, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": 455 - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 454 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "polygon", - 0.02, - 0.03, - 0.15, - 0.19, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 10, - "type": "KSampler", - "pos": [ - 835.1562971048259, - -829.4030864591936 - ], - "size": { - "0": 315, - "1": 286 - }, - "flags": {}, - "order": 131, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 10 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 131 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 130 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 11 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 12, - 117 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 271603655952848, - "fixed", - 4, - 1.59, - "lcm", - "sgm_uniform", - 1 - ] - }, - { - "id": 11, - "type": "VAEDecode", - "pos": [ - 1269, - -765 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 132, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 12 - }, - { - "name": "vae", - "type": "VAE", - "link": 409 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 88 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 90, - "type": "IPAdapterAdvanced", - "pos": [ - 316.9526873108316, - -3366 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 118, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 146 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 148 - }, - { - "name": "image", - "type": "IMAGE", - "link": 488, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 259 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 257 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 1.1, - "strong style transfer", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 268, - "type": "LoadImage", - "pos": [ - 706, - -3404 - ], - "size": { - "0": 315, - "1": 314.0000305175781 - }, - "flags": {}, - "order": 14, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 488 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "pasted/image (95).png", - "image" - ] - }, - { - "id": 276, - "type": "FlexMaskMorph", - "pos": [ - -1442, - -2223 - ], - "size": { - "0": 333.47332763671875, - "1": 266 - }, - "flags": {}, - "order": 110, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 508 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 509 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 510 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 511, - 512, - 513 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "erode", - 5, - 10 - ] - }, - { - "id": 188, - "type": "AudioFeatureExtractor", - "pos": [ - -1826, - -2264 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 93, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 519 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 622 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 509 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 510 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 132, - "type": "_mfc", - "pos": [ - -2380, - -2810 - ], - "size": { - "0": 315, - "1": 174 - }, - "flags": {}, - "order": 104, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 264 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 462, - 597 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 255, - 0, - 30 - ] - }, - { - "id": 245, - "type": "Reroute", - "pos": [ - -2003.558254000694, - -2722.9441223922195 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 640 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 437 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 280, - "type": "FrequencyFilterPreset", - "pos": [ - -2235, - -2011 - ], - "size": { - "0": 344.3999938964844, - "1": 62.53976821899414 - }, - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 517 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "remove_hiss" - ] - }, - { - "id": 244, - "type": "Reroute", - "pos": [ - -1991, - -2240 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 73, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 641 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 518 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 279, - "type": "AudioFilter", - "pos": [ - -1908.8988784876315, - -2114.2240143194176 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 85, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 518 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 517, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 519, - 520 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 254, - "type": "StaticBody", - "pos": [ - -4861.194123640608, - -2874.053148376448 - ], - "size": { - "0": 317.4000244140625, - "1": 250 - }, - "flags": {}, - "order": 16, - "mode": 4, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": null - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 455 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "polygon", - 0.85, - 0.03, - 0.98, - 0.19, - 0.9, - 0.5, - true, - "(0,255,0)" - ] - }, - { - "id": 7, - "type": "CLIPTextEncode", - "pos": [ - -1431, - -360 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 5 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 139 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "text, watermark" - ] - }, - { - "id": 6, - "type": "CLIPTextEncode", - "pos": [ - -1441, - -569 - ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 3 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 140 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "woman dancing made surrounded by psychadelic electricity made of ral-dissolve, rings of ral-dissolve, spinning cubes of ral-dissolve" - ] - }, - { - "id": 87, - "type": "Reroute", - "pos": [ - -1818, - -869 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 629 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 136, - 469, - 523 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 52, - "type": "VAEEncode", - "pos": [ - -1155, - -863 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 67, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 523 - }, - { - "name": "vae", - "type": "VAE", - "link": 58 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 74 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 284, - "type": "Reroute", - "pos": [ - -1817, - -909 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 630 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 64, - "type": "VHS_VideoCombine", - "pos": [ - 1257, - -649 - ], - "size": [ - 273.7296142578125, - 467.12952599158655 - ], - "flags": {}, - "order": 134, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 88 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03225.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 295, - "type": "UpscaleModelLoader", - "pos": [ - 3600, - -730 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 17, - "mode": 4, - "outputs": [ - { - "name": "UPSCALE_MODEL", - "type": "UPSCALE_MODEL", - "links": [ - 545 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "UpscaleModelLoader" - }, - "widgets_values": [ - "RealESRGAN_x2.pth" - ] - }, - { - "id": 76, - "type": "VAEDecode", - "pos": [ - 2765, - -670 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 137, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 112 - }, - { - "name": "vae", - "type": "VAE", - "link": 410 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 570 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 294, - "type": "ImageUpscaleWithModel", - "pos": [ - 3610, - -600 - ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 141, - "mode": 4, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 545, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 546 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 572 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - } - }, - { - "id": 293, - "type": "ImageCASharpening+", - "pos": [ - 3610, - -830 - ], - "size": { - "0": 310.79998779296875, - "1": 59.621212005615234 - }, - "flags": {}, - "order": 140, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 571 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 546 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCASharpening+" - }, - "widgets_values": [ - 0.8 - ] - }, - { - "id": 296, - "type": "Reroute", - "pos": [ - 3063, - -396 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 626 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 559 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 297, - "type": "Reroute", - "pos": [ - 3060, - -439 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 631 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 550 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 300, - "type": "ImageCompositeMasked", - "pos": [ - 3198, - -523 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 139, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 569 - }, - { - "name": "source", - "type": "IMAGE", - "link": 561 - }, - { - "name": "mask", - "type": "MASK", - "link": 559 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 571 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 299, - "type": "ImageScale", - "pos": [ - 3201, - -703 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 138, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 570 - }, - { - "name": "width", - "type": "INT", - "link": 554, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 555, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 569 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 512, - 512, - "disabled" - ] - }, - { - "id": 305, - "type": "ImageScale", - "pos": [ - -6291, - -2714 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 75, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 576 - }, - { - "name": "width", - "type": "INT", - "link": 577, - "widget": { - "name": "width" - }, - "slot_index": 1 - }, - { - "name": "height", - "type": "INT", - "link": 578, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 579 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1280, - 720, - "disabled" - ] - }, - { - "id": 208, - "type": "EmptyImage", - "pos": [ - -6634, - -2716 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 362, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 361, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 363, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 369 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EmptyImage" - }, - "widgets_values": [ - 1280, - 720, - 60, - 0 - ] - }, - { - "id": 309, - "type": "Reroute", - "pos": [ - -6486, - -4275 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 91, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 588 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 589 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 298, - "type": "GetImageSizeAndCount", - "pos": [ - 3213, - -849 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 550 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 561 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "1920 width", - "type": "INT", - "links": [ - 554 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "1080 height", - "type": "INT", - "links": [ - 555 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "25 count", - "type": "INT", - "links": [], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 312, - "type": "Note", - "pos": [ - -844, - -4272 - ], - "size": { - "0": 428.9208679199219, - "1": 114.45166778564453 - }, - "flags": {}, - "order": 18, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "enable or disable the video combine nodes below just to check your masks are coming out the way you expect" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 183, - "type": "IPAdapterAdvanced", - "pos": [ - 210, - -2180 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 125, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 320 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 319 - }, - { - "name": "image", - "type": "IMAGE", - "link": 596, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 513 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 321 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 1.1, - "strong style transfer", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 184, - "type": "LoadImage", - "pos": [ - 670, - -2220 - ], - "size": { - "0": 320, - "1": 314.0001220703125 - }, - "flags": {}, - "order": 19, - "mode": 4, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 596 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "forestBG.jpg", - "image" - ] - }, - { - "id": 256, - "type": "FlexMaskTransform", - "pos": [ - -1590, - -2477 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": { - "collapsed": true - }, - "order": 108, - "mode": 4, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 462 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 463 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 464 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexMaskTransform" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "translate", - 20.1, - -10 - ] - }, - { - "id": 315, - "type": "FlexMaskMorph", - "pos": [ - -1471, - -2735 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 109, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 597 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 598 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 599 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 600, - 601, - 602 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "dilate", - 17, - 10 - ] - }, - { - "id": 292, - "type": "VHS_VideoCombine", - "pos": [ - 3969, - -755 - ], - "size": [ - 1774.458251953125, - 1310.8827667236328 - ], - "flags": {}, - "order": 142, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 572 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "charlie/charlie", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "charlie_00010.mp4", - "subfolder": "charlie", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 248, - "type": "VHS_LoadVideo", - "pos": [ - -7140, - -4224 - ], - "size": [ - 235.1999969482422, - 373.112556422034 - ], - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - }, - { - "name": "frame_load_cap", - "type": "*", - "link": 451, - "widget": { - "name": "frame_load_cap" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 584 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "charlie724_mask_600-900.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 60, - "skip_first_frames": 200, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 60, - "skip_first_frames": 200, - "force_rate": 0, - "filename": "charlie724_mask_600-900.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 81, - "type": "LoadImage", - "pos": [ - 657, - -4034 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": {}, - "order": 20, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 124 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "FREE_psychadelicFire.webp", - "image" - ] - }, - { - "id": 146, - "type": "FlexMaskMorph", - "pos": [ - -1602, - -4032 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 106, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 238 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 228 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 229 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 244, - 260, - 286 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 0.8300000000000001, - 0.30000000000000004, - 0, - "dilate", - 17, - 10 - ] - }, - { - "id": 313, - "type": "ParticleEmitter", - "pos": [ - -5237, - -2538 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 21, - "mode": 4, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 594 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 1, - 0.5, - 200, - 136, - 49.2, - 372, - 49.2, - "(0,255,0)", - 0.05, - 55, - 0, - 0 - ] - }, - { - "id": 232, - "type": "ParticleEmitter", - "pos": [ - -5235, - -2937 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 49, - "mode": 4, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 594, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 425 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0, - 0.5, - 315, - 95, - 52.300000000000004, - 754, - 19.5, - "(0,255,0)", - 0.05, - 21, - 0, - 0 - ] - }, - { - "id": 277, - "type": "VHS_VideoCombine", - "pos": [ - -845, - -2872 - ], - "size": [ - 315, - 489.9375 - ], - "flags": {}, - "order": 121, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 515 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02606-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 307, - "type": "DyeImage", - "pos": [ - -6873, - -4204 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 79, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 584 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 585, - 588 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DyeImage" - }, - "widgets_values": [ - "255,255,255", - "0,0,255", - 0.124 - ] - }, - { - "id": 221, - "type": "ParticleEmitter", - "pos": [ - -5238.194123640608, - -3335.4633919330504 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 63, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 425, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null, - "slot_index": 1 - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 395 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.85, - 0.89, - 270, - 30, - 227.10000000000002, - 332, - 0.30000000000000004, - "(255,0,0)", - 0, - 0, - 0, - 0 - ], - "color": "#232", - "bgcolor": "#353" - }, - { - "id": 218, - "type": "ParticleEmitter", - "pos": [ - -5254, - -3726 - ], - "size": { - "0": 312.3999938964844, - "1": 382 - }, - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 395, - "slot_index": 0 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 390 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.15, - 0.89, - 270, - 30, - 227.10000000000002, - 330, - 0.4, - "(255,0,0)", - 0, - 0, - 0, - 0 - ], - "color": "#223", - "bgcolor": "#335" - }, - { - "id": 304, - "type": "Note", - "pos": [ - -6920.39209934666, - -2646.358321652289 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 22, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "remove bg since" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 155, - "type": "LoadImage", - "pos": [ - 694.0616085845941, - -2794.4554317781603 - ], - "size": { - "0": 320, - "1": 314.0001220703125 - }, - "flags": {}, - "order": 23, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 604 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "forestBG.jpg", - "image" - ] - }, - { - "id": 231, - "type": "Note", - "pos": [ - 2036, - -576 - ], - "size": { - "0": 264.4328308105469, - "1": 104.34508514404297 - }, - "flags": {}, - "order": 24, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "latent noise mask again, but this time only skip the vocalist" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 317, - "type": "Note", - "pos": [ - 3287, - -292 - ], - "size": { - "0": 275.04754638671875, - "1": 152.1307830810547 - }, - "flags": {}, - "order": 25, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "paste the vocalist back on the image\nyou can use this instead of the second latent noise mask" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 238, - "type": "Note", - "pos": [ - -4439.194123640608, - -2969.053148376447 - ], - "size": { - "0": 420.99908447265625, - "1": 117.18041229248047 - }, - "flags": {}, - "order": 26, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "3. Here we set up particle system and composite the images to extract masks by color later.\n\nClick the \"?\" icons on nodes for more information\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 314, - "type": "Note", - "pos": [ - -4879, - -2471 - ], - "size": { - "0": 349.6924133300781, - "1": 93.68490600585938 - }, - "flags": {}, - "order": 27, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "change color of the particle emitters to have their masks modulated by different instruments. You can have many particle emitters." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 225, - "type": "Note", - "pos": [ - -5724, - -3727 - ], - "size": { - "0": 404.19134521484375, - "1": 215.7861328125 - }, - "flags": {}, - "order": 28, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "1. With this workflow, we modulate different colored masks with the different instruments in a song, showcasing the FLEX mask modulating nodes, and the audio classification nodes, and particle simulations made available by RyanOnTheInside nodes. In this example, we use audio, but the Flex mods can also accept MIDI, Time, motion, and more\n\nClick the \"?\" icons on nodes for more information\n\n\n\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 222, - "type": "ImageCompositeMasked", - "pos": [ - -4454, - -3636 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 98, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 407 - }, - { - "name": "source", - "type": "IMAGE", - "link": 589 - }, - { - "name": "mask", - "type": "MASK", - "link": 483 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 400, - 413 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 137, - "type": "VHS_VideoCombine", - "pos": [ - -824, - -4106 - ], - "size": [ - 315, - 489.9375 - ], - "flags": {}, - "order": 117, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 247 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 443 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_02605-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 150, - "type": "AudioFilter", - "pos": [ - -1964, - -3966 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 70, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 638 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 241 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 243, - 443 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 180, - "type": "VHS_VideoCombine", - "pos": [ - -3993, - -3590 - ], - "size": [ - 320, - 493 - ], - "flags": {}, - "order": 99, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 400 - }, - { - "name": "audio", - "type": "*", - "link": 632 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03224-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 44, - "type": "VHS_LoadVideo", - "pos": [ - -6757, - -3243 - ], - "size": [ - 235.1999969482422, - 373.112556422034 - ], - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - }, - { - "name": "frame_load_cap", - "type": "INT", - "link": 250, - "widget": { - "name": "frame_load_cap" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 576, - 611 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [ - 610 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": [ - 297 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "Charli XCX - claws [Official Video].mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 60, - "skip_first_frames": 1524, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 60, - "skip_first_frames": 1524, - "force_rate": 0, - "filename": "Charli XCX - claws [Official Video].mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 326, - "type": "SetNode", - "pos": { - "0": -6299, - "1": -2951, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 610 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_AUDIO", - "properties": { - "previousName": "AUDIO" - }, - "widgets_values": [ - "AUDIO" - ] - }, - { - "id": 327, - "type": "SetNode", - "pos": { - "0": -6330, - "1": -3005, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 76, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 611 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_INIT_IMAGES", - "properties": { - "previousName": "INIT_IMAGES" - }, - "widgets_values": [ - "INIT_IMAGES" - ] - }, - { - "id": 331, - "type": "SetNode", - "pos": { - "0": -6338, - "1": -3060, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 89, - "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 614 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_INIT_HEIGHT", - "properties": { - "previousName": "INIT_HEIGHT" - }, - "widgets_values": [ - "INIT_HEIGHT" - ] - }, - { - "id": 330, - "type": "SetNode", - "pos": { - "0": -6308, - "1": -3122, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 88, - "mode": 0, - "inputs": [ - { - "name": "INT", - "type": "INT", - "link": 613 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_INIT_WIDTH", - "properties": { - "previousName": "INIT_WIDTH" - }, - "widgets_values": [ - "INIT_WIDTH" - ] - }, - { - "id": 328, - "type": "SetNode", - "pos": { - "0": -6299, - "1": -3180, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "FLOAT", - "type": "FLOAT", - "link": 612 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_FRAME_RATE", - "properties": { - "previousName": "FRAME_RATE" - }, - "widgets_values": [ - "FRAME_RATE" - ] - }, - { - "id": 171, - "type": "VHS_VideoInfoLoaded", - "pos": [ - -6522, - -3315 - ], - "size": { - "0": 304.79998779296875, - "1": 106 - }, - "flags": { - "collapsed": true - }, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "link": 297 - } - ], - "outputs": [ - { - "name": "fps🟦", - "type": "FLOAT", - "links": [ - 612 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count🟦", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "duration🟦", - "type": "FLOAT", - "links": null, - "shape": 3 - }, - { - "name": "width🟦", - "type": "INT", - "links": [ - 613 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "height🟦", - "type": "INT", - "links": [ - 614 - ], - "shape": 3, - "slot_index": 4 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoInfoLoaded" - }, - "widgets_values": {} - }, - { - "id": 336, - "type": "GetNode", - "pos": { - "0": -2292, - "1": -3105, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 619 - ], - "slot_index": 0 - } - ], - "title": "Get_FEATURE_PIPE", - "properties": {}, - "widgets_values": [ - "FEATURE_PIPE" - ] - }, - { - "id": 337, - "type": "GetNode", - "pos": { - "0": -2205, - "1": -2560, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 620 - ], - "slot_index": 0 - } - ], - "title": "Get_FEATURE_PIPE", - "properties": {}, - "widgets_values": [ - "FEATURE_PIPE" - ] - }, - { - "id": 338, - "type": "GetNode", - "pos": { - "0": -2348, - "1": -3746, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 621 - ], - "slot_index": 0 - } - ], - "title": "Get_FEATURE_PIPE", - "properties": {}, - "widgets_values": [ - "FEATURE_PIPE" - ] - }, - { - "id": 339, - "type": "GetNode", - "pos": { - "0": -2275, - "1": -1866, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 622 - ], - "slot_index": 0 - } - ], - "title": "Get_FEATURE_PIPE", - "properties": {}, - "widgets_values": [ - "FEATURE_PIPE" - ] - }, - { - "id": 163, - "type": "ImageScale", - "pos": [ - -4382, - -3146 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 100, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 413 - }, - { - "name": "width", - "type": "INT", - "link": 275, - "widget": { - "name": "width" - }, - "slot_index": 1 - }, - { - "name": "height", - "type": "INT", - "link": 276, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 279 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1280, - 720, - "disabled" - ] - }, - { - "id": 237, - "type": "Note", - "pos": [ - -6106, - -4362 - ], - "size": { - "0": 463.9614562988281, - "1": 129.11036682128906 - }, - "flags": {}, - "order": 33, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "2. Input your masks here. My example has one color for the vocalist" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 250, - "type": "_mfc", - "pos": [ - -6486, - -4194 - ], - "size": { - "0": 315, - "1": 174 - }, - "flags": {}, - "order": 90, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 585 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 450, - 623 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 0, - 255, - 19 - ] - }, - { - "id": 341, - "type": "GetNode", - "pos": { - "0": -6140, - "1": -2860, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 624 - ], - "slot_index": 0 - } - ], - "title": "Get_SUBJECT_MASK", - "properties": {}, - "widgets_values": [ - "SUBJECT_MASK" - ] - }, - { - "id": 249, - "type": "Reroute", - "pos": [ - -6090, - -3987 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 95, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 450 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 482, - 483 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 78, - "type": "NNLatentUpscale", - "pos": [ - 1690, - -908 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 133, - "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 117 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 423 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "NNLatentUpscale" - }, - "widgets_values": [ - "SD 1.x", - 1.1500000000000001 - ] - }, - { - "id": 342, - "type": "GetNode", - "pos": { - "0": 1400, - "1": -11, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": false - }, - "order": 35, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 625, - 626 - ], - "slot_index": 0 - } - ], - "title": "Get_SUBJECT_MASK", - "properties": {}, - "widgets_values": [ - "SUBJECT_MASK" - ] - }, - { - "id": 343, - "type": "SetNode", - "pos": { - "0": -5554.4580078125, - "1": -2597.67236328125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 94, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 634 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_GEN_AREA", - "properties": { - "previousName": "GEN_AREA" - }, - "widgets_values": [ - "GEN_AREA" - ] - }, - { - "id": 344, - "type": "GetNode", - "pos": { - "0": -2087, - "1": -831, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 629 - ], - "slot_index": 0 - } - ], - "title": "Get_GEN_AREA", - "properties": {}, - "widgets_values": [ - "GEN_AREA" - ] - }, - { - "id": 345, - "type": "GetNode", - "pos": { - "0": -2086, - "1": -937, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 630 - ], - "slot_index": 0 - } - ], - "title": "Get_AUDIO", - "properties": {}, - "widgets_values": [ - "AUDIO" - ] - }, - { - "id": 133, - "type": "_mfc", - "pos": [ - -2380, - -3464 - ], - "size": { - "0": 315, - "1": 174 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 263 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 239 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 0, - 255, - 30 - ] - }, - { - "id": 152, - "type": "MaskToImage", - "pos": [ - -1131, - -3426 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 113, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 245 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 472 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 143, - "type": "FlexMaskMorph", - "pos": [ - -1522, - -3351 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 107, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 239 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 226 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 227 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 245, - 259, - 287 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 1, - 0, - 0.3, - "dilate", - 11, - 10 - ] - }, - { - "id": 346, - "type": "GetNode", - "pos": { - "0": 1412, - "1": -113, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 631 - ], - "slot_index": 0 - } - ], - "title": "Get_INIT_IMAGES", - "properties": {}, - "widgets_values": [ - "INIT_IMAGES" - ] - }, - { - "id": 4, - "type": "CheckpointLoaderSimple", - "pos": [ - -2254, - -545 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 39, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 90 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 3, - 5 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 58, - 408 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photonLCM_v10.safetensors" - ] - }, - { - "id": 347, - "type": "GetNode", - "pos": { - "0": -4289, - "1": -3402, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 632 - ], - "slot_index": 0 - } - ], - "title": "Get_AUDIO", - "properties": {}, - "widgets_values": [ - "AUDIO" - ] - }, - { - "id": 340, - "type": "SetNode", - "pos": { - "0": -6053.337890625, - "1": -4076.483154296875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 96, - "mode": 0, - "inputs": [ - { - "name": "MASK", - "type": "MASK", - "link": 623 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null, - "slot_index": 0 - } - ], - "title": "Set_SUBJECT_MASK", - "properties": { - "previousName": "SUBJECT_MASK" - }, - "widgets_values": [ - "SUBJECT_MASK" - ] - }, - { - "id": 215, - "type": "ParticleEmissionMask", - "pos": [ - -4850, - -3685 - ], - "size": { - "0": 336, - "1": 474 - }, - "flags": {}, - "order": 97, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 482 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 390, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": 454, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 407 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 1, - 0, - 542, - 4, - 0, - 0, - 184, - 0, - 0, - 0, - 1, - 1, - 1 - ] - }, - { - "id": 318, - "type": "Note", - "pos": [ - -7711, - -3482 - ], - "size": { - "0": 331.4390869140625, - "1": 133.74197387695312 - }, - "flags": {}, - "order": 41, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Click the \"?\" icons on nodes for more information\n\nthe size you use here will drastically affect the quality of your output and also the amount of punishment inflicted on your computer." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 334, - "type": "GetNode", - "pos": { - "0": -3488, - "1": -3226, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "FLOAT", - "type": "FLOAT", - "links": [ - 637 - ], - "slot_index": 0 - } - ], - "title": "Get_FRAME_RATE", - "properties": {}, - "widgets_values": [ - "FRAME_RATE" - ] - }, - { - "id": 333, - "type": "GetNode", - "pos": { - "0": -3473, - "1": -3371, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 636 - ], - "slot_index": 0 - } - ], - "title": "Get_INIT_IMAGES", - "properties": {}, - "widgets_values": [ - "INIT_IMAGES" - ] - }, - { - "id": 332, - "type": "GetNode", - "pos": { - "0": -3460, - "1": -3469, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 635 - ], - "slot_index": 0 - } - ], - "title": "Get_AUDIO", - "properties": {}, - "widgets_values": [ - "AUDIO" - ] - }, - { - "id": 209, - "type": "ImageCompositeMasked", - "pos": [ - -5933, - -2735 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 86, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 369 - }, - { - "name": "source", - "type": "IMAGE", - "link": 579 - }, - { - "name": "mask", - "type": "MASK", - "link": 624 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 634 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 335, - "type": "SetNode", - "pos": { - "0": -2982, - "1": -3358, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": { - "collapsed": true - }, - "order": 74, - "mode": 0, - "inputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 642 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_FEATURE_PIPE", - "properties": { - "previousName": "FEATURE_PIPE" - }, - "widgets_values": [ - "FEATURE_PIPE" - ] - }, - { - "id": 348, - "type": "AudioSeparator", - "pos": [ - -3146, - -3280 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 643, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 635 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 636 - }, - { - "name": "frame_rate", - "type": "FLOAT", - "link": 637, - "widget": { - "name": "frame_rate" - } - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 638 - ], - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 639 - ], - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 640 - ], - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 641 - ], - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 642 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 349, - "type": "DownloadOpenUnmixModel", - "pos": [ - -3154.76910626233, - -3487.954722302218 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 45, - "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 643 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 140, - "type": "PrimitiveNode", - "pos": [ - -7163, - -3190 - ], - "size": { - "0": 210, - "1": 82 - }, - "flags": {}, - "order": 46, - "mode": 0, - "outputs": [ - { - "name": "INT", - "type": "INT", - "links": [ - 250, - 363, - 451 - ], - "slot_index": 0, - "widget": { - "name": "frame_load_cap" - } - } - ], - "title": "Num Frames", - "properties": { - "Run widget replace on values": false - }, - "widgets_values": [ - 60, - "fixed" - ] - } - ], - "links": [ - [ - 3, - 4, - 1, - 6, - 0, - "CLIP" - ], - [ - 5, - 4, - 1, - 7, - 0, - "CLIP" - ], - [ - 10, - 14, - 0, - 10, - 0, - "MODEL" - ], - [ - 11, - 12, - 0, - 10, - 3, - "LATENT" - ], - [ - 12, - 10, - 0, - 11, - 0, - "LATENT" - ], - [ - 16, - 15, - 0, - 14, - 1, - "M_MODELS" - ], - [ - 17, - 17, - 0, - 14, - 2, - "CONTEXT_OPTIONS" - ], - [ - 18, - 16, - 0, - 15, - 0, - "MOTION_MODEL_ADE" - ], - [ - 58, - 4, - 2, - 52, - 1, - "VAE" - ], - [ - 74, - 52, - 0, - 12, - 0, - "LATENT" - ], - [ - 88, - 11, - 0, - 64, - 0, - "IMAGE" - ], - [ - 90, - 4, - 0, - 65, - 0, - "MODEL" - ], - [ - 108, - 14, - 0, - 75, - 0, - "MODEL" - ], - [ - 112, - 75, - 0, - 76, - 0, - "LATENT" - ], - [ - 117, - 10, - 0, - 78, - 0, - "LATENT" - ], - [ - 119, - 80, - 0, - 79, - 0, - "MODEL" - ], - [ - 120, - 80, - 1, - 79, - 1, - "IPADAPTER" - ], - [ - 121, - 65, - 0, - 80, - 0, - "MODEL" - ], - [ - 124, - 81, - 0, - 79, - 2, - "IMAGE" - ], - [ - 127, - 83, - 0, - 82, - 2, - "CONTROL_NET" - ], - [ - 128, - 84, - 0, - 82, - 3, - "IMAGE" - ], - [ - 130, - 82, - 1, - 10, - 2, - "CONDITIONING" - ], - [ - 131, - 82, - 0, - 10, - 1, - "CONDITIONING" - ], - [ - 132, - 82, - 0, - 75, - 1, - "CONDITIONING" - ], - [ - 133, - 82, - 1, - 75, - 2, - "CONDITIONING" - ], - [ - 136, - 87, - 0, - 86, - 0, - "IMAGE" - ], - [ - 137, - 86, - 0, - 85, - 3, - "IMAGE" - ], - [ - 138, - 88, - 0, - 85, - 2, - "CONTROL_NET" - ], - [ - 139, - 7, - 0, - 85, - 1, - "CONDITIONING" - ], - [ - 140, - 6, - 0, - 85, - 0, - "CONDITIONING" - ], - [ - 141, - 85, - 0, - 82, - 0, - "CONDITIONING" - ], - [ - 142, - 85, - 1, - 82, - 1, - "CONDITIONING" - ], - [ - 146, - 79, - 0, - 90, - 0, - "MODEL" - ], - [ - 148, - 80, - 1, - 90, - 1, - "IPADAPTER" - ], - [ - 226, - 144, - 0, - 143, - 1, - "FEATURE" - ], - [ - 227, - 144, - 1, - 143, - 2, - "FEATURE_PIPE" - ], - [ - 228, - 147, - 0, - 146, - 1, - "FEATURE" - ], - [ - 229, - 147, - 1, - 146, - 2, - "FEATURE_PIPE" - ], - [ - 238, - 129, - 0, - 146, - 0, - "MASK" - ], - [ - 239, - 133, - 0, - 143, - 0, - "MASK" - ], - [ - 241, - 61, - 0, - 150, - 1, - "FREQUENCY_FILTER" - ], - [ - 243, - 150, - 0, - 147, - 0, - "AUDIO" - ], - [ - 244, - 146, - 0, - 151, - 0, - "MASK" - ], - [ - 245, - 143, - 0, - 152, - 0, - "MASK" - ], - [ - 247, - 151, - 0, - 137, - 0, - "IMAGE" - ], - [ - 250, - 140, - 0, - 44, - 2, - "INT" - ], - [ - 255, - 80, - 1, - 154, - 1, - "IPADAPTER" - ], - [ - 257, - 90, - 0, - 154, - 0, - "MODEL" - ], - [ - 259, - 143, - 0, - 90, - 4, - "MASK" - ], - [ - 260, - 146, - 0, - 79, - 4, - "MASK" - ], - [ - 262, - 156, - 0, - 129, - 0, - "IMAGE" - ], - [ - 263, - 156, - 0, - 133, - 0, - "IMAGE" - ], - [ - 264, - 156, - 0, - 132, - 0, - "IMAGE" - ], - [ - 275, - 161, - 0, - 163, - 1, - "INT" - ], - [ - 276, - 162, - 0, - 163, - 2, - "INT" - ], - [ - 279, - 163, - 0, - 156, - 0, - "*" - ], - [ - 286, - 146, - 0, - 166, - 0, - "MASK" - ], - [ - 287, - 143, - 0, - 166, - 1, - "MASK" - ], - [ - 290, - 167, - 0, - 12, - 1, - "MASK" - ], - [ - 291, - 169, - 0, - 168, - 2, - "IMAGE" - ], - [ - 293, - 167, - 0, - 168, - 4, - "MASK" - ], - [ - 294, - 168, - 0, - 14, - 0, - "MODEL" - ], - [ - 295, - 80, - 1, - 168, - 1, - "IPADAPTER" - ], - [ - 297, - 44, - 3, - 171, - 0, - "VHS_VIDEOINFO" - ], - [ - 319, - 80, - 1, - 183, - 1, - "IPADAPTER" - ], - [ - 320, - 154, - 0, - 183, - 0, - "MODEL" - ], - [ - 321, - 183, - 0, - 168, - 0, - "MODEL" - ], - [ - 329, - 156, - 0, - 185, - 0, - "IMAGE" - ], - [ - 356, - 166, - 0, - 207, - 0, - "MASK" - ], - [ - 360, - 207, - 0, - 167, - 1, - "MASK" - ], - [ - 361, - 162, - 0, - 208, - 1, - "INT" - ], - [ - 362, - 161, - 0, - 208, - 0, - "INT" - ], - [ - 363, - 140, - 0, - 208, - 2, - "INT" - ], - [ - 369, - 208, - 0, - 209, - 0, - "IMAGE" - ], - [ - 390, - 218, - 0, - 215, - 1, - "PARTICLE_EMITTER" - ], - [ - 395, - 221, - 0, - 218, - 0, - "PARTICLE_EMITTER" - ], - [ - 400, - 222, - 0, - 180, - 0, - "IMAGE" - ], - [ - 407, - 215, - 1, - 222, - 0, - "IMAGE" - ], - [ - 408, - 4, - 2, - 223, - 0, - "*" - ], - [ - 409, - 223, - 0, - 11, - 1, - "VAE" - ], - [ - 410, - 223, - 0, - 76, - 1, - "VAE" - ], - [ - 413, - 222, - 0, - 163, - 0, - "IMAGE" - ], - [ - 421, - 229, - 0, - 230, - 0, - "MASK" - ], - [ - 422, - 230, - 0, - 228, - 1, - "MASK" - ], - [ - 423, - 78, - 0, - 228, - 0, - "LATENT" - ], - [ - 424, - 228, - 0, - 75, - 3, - "LATENT" - ], - [ - 425, - 232, - 0, - 221, - 0, - "PARTICLE_EMITTER" - ], - [ - 437, - 245, - 0, - 149, - 0, - "AUDIO" - ], - [ - 440, - 246, - 0, - 144, - 0, - "AUDIO" - ], - [ - 443, - 150, - 0, - 137, - 1, - "AUDIO" - ], - [ - 450, - 250, - 0, - 249, - 0, - "*" - ], - [ - 451, - 140, - 0, - 248, - 2, - "INT" - ], - [ - 454, - 253, - 0, - 215, - 4, - "STATIC_BODY" - ], - [ - 455, - 254, - 0, - 253, - 0, - "STATIC_BODY" - ], - [ - 462, - 132, - 0, - 256, - 0, - "MASK" - ], - [ - 463, - 149, - 0, - 256, - 1, - "FEATURE" - ], - [ - 464, - 149, - 1, - 256, - 2, - "FEATURE_PIPE" - ], - [ - 469, - 87, - 0, - 84, - 0, - "IMAGE" - ], - [ - 472, - 152, - 0, - 258, - 0, - "IMAGE" - ], - [ - 477, - 189, - 0, - 260, - 0, - "IMAGE" - ], - [ - 480, - 167, - 0, - 263, - 0, - "MASK" - ], - [ - 481, - 263, - 0, - 262, - 0, - "IMAGE" - ], - [ - 482, - 249, - 0, - 215, - 0, - "MASK" - ], - [ - 483, - 249, - 0, - 222, - 2, - "MASK" - ], - [ - 488, - 268, - 0, - 90, - 2, - "IMAGE" - ], - [ - 508, - 185, - 0, - 276, - 0, - "MASK" - ], - [ - 509, - 188, - 0, - 276, - 1, - "FEATURE" - ], - [ - 510, - 188, - 1, - 276, - 2, - "FEATURE_PIPE" - ], - [ - 511, - 276, - 0, - 189, - 0, - "MASK" - ], - [ - 512, - 276, - 0, - 167, - 0, - "MASK" - ], - [ - 513, - 276, - 0, - 183, - 4, - "MASK" - ], - [ - 515, - 153, - 0, - 277, - 0, - "IMAGE" - ], - [ - 517, - 280, - 0, - 279, - 1, - "FREQUENCY_FILTER" - ], - [ - 518, - 244, - 0, - 279, - 0, - "AUDIO" - ], - [ - 519, - 279, - 0, - 188, - 0, - "AUDIO" - ], - [ - 520, - 279, - 0, - 260, - 1, - "AUDIO" - ], - [ - 523, - 87, - 0, - 52, - 0, - "IMAGE" - ], - [ - 545, - 295, - 0, - 294, - 0, - "UPSCALE_MODEL" - ], - [ - 546, - 293, - 0, - 294, - 1, - "IMAGE" - ], - [ - 550, - 297, - 0, - 298, - 0, - "IMAGE" - ], - [ - 554, - 298, - 1, - 299, - 1, - "INT" - ], - [ - 555, - 298, - 2, - 299, - 2, - "INT" - ], - [ - 559, - 296, - 0, - 300, - 2, - "MASK" - ], - [ - 561, - 298, - 0, - 300, - 1, - "IMAGE" - ], - [ - 569, - 299, - 0, - 300, - 0, - "IMAGE" - ], - [ - 570, - 76, - 0, - 299, - 0, - "IMAGE" - ], - [ - 571, - 300, - 0, - 293, - 0, - "IMAGE" - ], - [ - 572, - 294, - 0, - 292, - 0, - "IMAGE" - ], - [ - 576, - 44, - 0, - 305, - 0, - "IMAGE" - ], - [ - 577, - 161, - 0, - 305, - 1, - "INT" - ], - [ - 578, - 162, - 0, - 305, - 2, - "INT" - ], - [ - 579, - 305, - 0, - 209, - 1, - "IMAGE" - ], - [ - 584, - 248, - 0, - 307, - 0, - "IMAGE" - ], - [ - 585, - 307, - 0, - 250, - 0, - "IMAGE" - ], - [ - 588, - 307, - 0, - 309, - 0, - "*" - ], - [ - 589, - 309, - 0, - 222, - 1, - "IMAGE" - ], - [ - 594, - 313, - 0, - 232, - 0, - "PARTICLE_EMITTER" - ], - [ - 596, - 184, - 0, - 183, - 2, - "IMAGE" - ], - [ - 597, - 132, - 0, - 315, - 0, - "MASK" - ], - [ - 598, - 149, - 0, - 315, - 1, - "FEATURE" - ], - [ - 599, - 149, - 1, - 315, - 2, - "FEATURE_PIPE" - ], - [ - 600, - 315, - 0, - 153, - 0, - "MASK" - ], - [ - 601, - 315, - 0, - 154, - 4, - "MASK" - ], - [ - 602, - 315, - 0, - 207, - 1, - "MASK" - ], - [ - 604, - 155, - 0, - 154, - 2, - "IMAGE" - ], - [ - 610, - 44, - 2, - 326, - 0, - "*" - ], - [ - 611, - 44, - 0, - 327, - 0, - "*" - ], - [ - 612, - 171, - 0, - 328, - 0, - "*" - ], - [ - 613, - 171, - 3, - 330, - 0, - "*" - ], - [ - 614, - 171, - 4, - 331, - 0, - "*" - ], - [ - 619, - 336, - 0, - 144, - 1, - "FEATURE_PIPE" - ], - [ - 620, - 337, - 0, - 149, - 1, - "FEATURE_PIPE" - ], - [ - 621, - 338, - 0, - 147, - 1, - "FEATURE_PIPE" - ], - [ - 622, - 339, - 0, - 188, - 1, - "FEATURE_PIPE" - ], - [ - 623, - 250, - 0, - 340, - 0, - "*" - ], - [ - 624, - 341, - 0, - 209, - 2, - "MASK" - ], - [ - 625, - 342, - 0, - 229, - 0, - "MASK" - ], - [ - 626, - 342, - 0, - 296, - 0, - "*" - ], - [ - 629, - 344, - 0, - 87, - 0, - "*" - ], - [ - 630, - 345, - 0, - 284, - 0, - "*" - ], - [ - 631, - 346, - 0, - 297, - 0, - "*" - ], - [ - 632, - 347, - 0, - 180, - 1, - "AUDIO" - ], - [ - 634, - 209, - 0, - 343, - 0, - "IMAGE" - ], - [ - 635, - 332, - 0, - 348, - 1, - "AUDIO" - ], - [ - 636, - 333, - 0, - 348, - 2, - "IMAGE" - ], - [ - 637, - 334, - 0, - 348, - 3, - "FLOAT" - ], - [ - 638, - 348, - 1, - 150, - 0, - "AUDIO" - ], - [ - 639, - 348, - 2, - 246, - 0, - "*" - ], - [ - 640, - 348, - 3, - 245, - 0, - "*" - ], - [ - 641, - 348, - 4, - 244, - 0, - "*" - ], - [ - 642, - 348, - 5, - 335, - 0, - "FEATURE_PIPE" - ], - [ - 643, - 349, - 0, - 348, - 0, - "OPEN_UNMIX_MODEL" - ] - ], - "groups": [ - { - "title": "DRUMS", - "bounding": [ - -2415, - -4214, - 2070, - 627 - ], - "color": "#A88", - "font_size": 24, - "locked": false - }, - { - "title": "VOCALS", - "bounding": [ - -2418, - -3566, - 2081, - 584 - ], - "color": "#88A", - "font_size": 24, - "locked": false - }, - { - "title": "Bass", - "bounding": [ - -2418, - -2957, - 2082, - 569 - ], - "color": "#8A8", - "font_size": 24, - "locked": false - }, - { - "title": "IPAdapter", - "bounding": [ - 39, - -4215, - 1037, - 601 - ], - "color": "#A88", - "font_size": 24, - "locked": false - }, - { - "title": "Vox IPAdapter", - "bounding": [ - 73, - -3550, - 1053, - 545 - ], - "color": "#88A", - "font_size": 24, - "locked": false - }, - { - "title": "Guitar IPAdapter", - "bounding": [ - 73, - -2916, - 1084, - 532 - ], - "color": "#8A8", - "font_size": 24, - "locked": false - }, - { - "title": "Composite IPAdapter", - "bounding": [ - 79, - -1736, - 1154, - 525 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Composit", - "bounding": [ - -1643, - -1769, - 1363, - 599 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load Video / Masks / Audio", - "bounding": [ - -7205, - -3806, - 1865, - 1282 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Other", - "bounding": [ - -2417, - -2366, - 2131, - 575 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Other IPAdapter", - "bounding": [ - 81, - -2314, - 1063, - 520 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Control Net", - "bounding": [ - -748, - -954, - 978, - 749 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Anim Diff", - "bounding": [ - 332, - -950, - 384, - 882 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Samp", - "bounding": [ - 814, - -947, - 729, - 629 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Samp2", - "bounding": [ - 1619, - -942, - 1399, - 598 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Particle", - "bounding": [ - -5292, - -3785, - 1753, - 1229 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "MASK input", - "bounding": [ - -7200, - -4325, - 1760, - 506 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "upscale", - "bounding": [ - 3071, - -941, - 1191, - 577 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.21435888100000167, - "offset": [ - 1177.4792012031467, - 2878.774805902092 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/particle_systems_tutorial.json b/examples/particle_systems_tutorial.json deleted file mode 100644 index a2e9cf4..0000000 --- a/examples/particle_systems_tutorial.json +++ /dev/null @@ -1,2745 +0,0 @@ -{ - "last_node_id": 168, - "last_link_id": 263, - "nodes": [ - { - "id": 107, - "type": "ParticleEmissionMask", - "pos": [ - -790, - 90 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 219 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 201, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 203 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 200, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - true, - 1, - 1 - ] - }, - { - "id": 110, - "type": "ParticleEmitter", - "pos": [ - -1350, - 500 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 202 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 1, - 0.5, - 180, - 30, - 17.4, - 330, - 10, - "(255,0,0)", - 0, - 0, - 0 - ] - }, - { - "id": 112, - "type": "VHS_VideoCombine", - "pos": [ - -440, - 100 - ], - "size": [ - 214.8000030517578, - 694.3110961914062 - ], - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 203 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/nvenc_h264-mp4", - "pix_fmt": "yuv420p", - "bitrate": 10, - "megabit": true, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00653.mp4", - "subfolder": "", - "type": "output", - "format": "video/nvenc_h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 109, - "type": "ParticleEmitter", - "pos": [ - -1340, - 80 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 202 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 201 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0, - 0.5, - 0, - 30, - 17.4, - 330, - 10, - "(0,0,255)", - 0, - 0, - 0 - ] - }, - { - "id": 108, - "type": "_mfc", - "pos": [ - -2164, - 122 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 199 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 208 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 255, - 255, - 0 - ], - "shape": 4 - }, - { - "id": 104, - "type": "VHS_LoadVideo", - "pos": [ - -2489, - 27 - ], - "size": [ - 235.1999969482422, - 658.5777723524305 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 199, - 213 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "music_square.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 30, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 30, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "music_square.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 121, - "type": "_mfc", - "pos": [ - -2163, - -133 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 213 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 214 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 420, - 420, - 69, - 0 - ], - "shape": 4 - }, - { - "id": 123, - "type": "StaticBody", - "pos": [ - 390, - 620 - ], - "size": { - "0": 317.4000244140625, - "1": 250 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": 218, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 217 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 0.85, - 0.2, - 0.85, - 0.6, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 124, - "type": "StaticBody", - "pos": [ - 28, - 618 - ], - "size": { - "0": 317.4000244140625, - "1": 250 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": null - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 218 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 0.85, - 0.6, - 0.15, - 0.6, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 125, - "type": "Note", - "pos": [ - 398.87343045930527, - 503.9184890962709 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 3, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "draw fish tank\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 120, - "type": "StaticBody", - "pos": [ - 730, - 620 - ], - "size": { - "0": 317.4000244140625, - "1": 250 - }, - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "previous_body", - "type": "STATIC_BODY", - "link": 217 - } - ], - "outputs": [ - { - "name": "STATIC_BODY", - "type": "STATIC_BODY", - "links": [ - 211 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "StaticBody" - }, - "widgets_values": [ - "segment", - 0.15, - 0.2, - 0.15, - 0.6, - 0.9, - 0.5, - true, - "(255,255,255)" - ] - }, - { - "id": 114, - "type": "ParticleEmitter", - "pos": [ - 39, - 33 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 205 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.5, - 0.1, - 90, - 29, - 38.5, - 330, - 18.6, - "(0,0,255)", - 0, - 0, - 0 - ] - }, - { - "id": 116, - "type": "VHS_VideoCombine", - "pos": [ - 1391, - 8 - ], - "size": [ - 363.0020404593031, - 933.7814052609833 - ], - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 207 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00663.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 122, - "type": "Reroute", - "pos": [ - -1589, - -198 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 214 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 215 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 117, - "type": "Reroute", - "pos": [ - -1594, - -133 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 208 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 209 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 126, - "type": "Note", - "pos": [ - -2146, - -251 - ], - "size": [ - 286.507407342717, - 72.89825855180612 - ], - "flags": {}, - "order": 5, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "get empty mask, and mask of the square" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 113, - "type": "ParticleEmissionMask", - "pos": [ - 951, - 38 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 216 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 205, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": 211, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 207 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 503, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - true, - 1, - 1 - ] - }, - { - "id": 118, - "type": "Reroute", - "pos": [ - -906, - -130 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 209 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 219 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 119, - "type": "Reroute", - "pos": [ - 306, - -203 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 215 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 216, - 233 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 145, - "type": "Vortex", - "pos": [ - 2762, - 508 - ], - "size": { - "0": 315, - "1": 226 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "previous_vortex", - "type": "VORTEX", - "link": null - } - ], - "outputs": [ - { - "name": "VORTEX", - "type": "VORTEX", - "links": [ - 239 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "Vortex" - }, - "widgets_values": [ - 0.5, - 0.73, - 1000, - 330, - 1, - 1, - "(0,127,255)", - 1 - ] - }, - { - "id": 144, - "type": "Vortex", - "pos": [ - 2755, - 157 - ], - "size": { - "0": 315, - "1": 226 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "previous_vortex", - "type": "VORTEX", - "link": 239, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "VORTEX", - "type": "VORTEX", - "links": [ - 238 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "Vortex" - }, - "widgets_values": [ - 0.5, - 0.27, - 1000, - 330, - 1, - 1, - "(0,127,255)", - 1 - ] - }, - { - "id": 142, - "type": "ParticleEmitter", - "pos": [ - 2160, - 30 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 236 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 237 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.22, - 0.25, - 0, - 360, - 17.4, - 72, - 10, - "(0,0,255)", - 0, - 0, - 0 - ] - }, - { - "id": 143, - "type": "ParticleEmitter", - "pos": [ - 2150, - 450 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 236 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.74, - 0.75, - 180, - 360, - 17.4, - 55, - 10, - "(255,0,0)", - 0, - 0, - 0 - ] - }, - { - "id": 134, - "type": "ParticleEmissionMask", - "pos": [ - 3140, - 40 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 226 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 237, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": 238, - "slot_index": 2 - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 229 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 503, - 4, - 0, - 0, - 0, - 10, - 0, - 0, - true, - 1, - 1 - ] - }, - { - "id": 147, - "type": "VHS_VideoCombine", - "pos": [ - 5220, - 10 - ], - "size": [ - 360, - 928.4444444444445 - ], - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 243 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00679.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 137, - "type": "Reroute", - "pos": [ - 2490, - -200 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 233 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 226, - 247 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 146, - "type": "ParticleEmissionMask", - "pos": [ - 4870, - 70 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 248 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 241, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null, - "slot_index": 2 - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": 249, - "slot_index": 3 - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 243 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 503, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - true, - 1, - 1 - ] - }, - { - "id": 150, - "type": "ParticleEmitter", - "pos": [ - 3880, - 480 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 245 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.9, - 0.75, - 180, - 31, - 17.4, - 179, - 13, - "(255,0,0)", - 0, - 0, - 0 - ] - }, - { - "id": 111, - "type": "Note", - "pos": [ - -1474, - -398 - ], - "size": [ - 545.4315055154448, - 176.34508026260346 - ], - "flags": {}, - "order": 9, - "mode": 0, - "title": "Click the question marks on the nodes!", - "properties": { - "text": "" - }, - "widgets_values": [ - "Demonstrating a few things with particle systems.\n\nClick the question marks in the nodes!" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 154, - "type": "GravityWell", - "pos": [ - 4493, - 467 - ], - "size": { - "0": 330, - "1": 202 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "previous_well", - "type": "GRAVITY_WELL", - "link": null - } - ], - "outputs": [ - { - "name": "GRAVITY_WELL", - "type": "GRAVITY_WELL", - "links": [ - 250 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GravityWell" - }, - "widgets_values": [ - 0.4, - 0.73, - 5000, - 250, - "repel", - "(255,127,0)", - 1 - ] - }, - { - "id": 153, - "type": "GravityWell", - "pos": [ - 4483, - 211 - ], - "size": { - "0": 330, - "1": 202 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "previous_well", - "type": "GRAVITY_WELL", - "link": 250, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "GRAVITY_WELL", - "type": "GRAVITY_WELL", - "links": [ - 249 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GravityWell" - }, - "widgets_values": [ - 0.6, - 0.27, - 5000, - 250, - "attract", - "(255,127,0)", - 1 - ] - }, - { - "id": 149, - "type": "ParticleEmitter", - "pos": [ - 3890, - 60 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 245 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 241 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.23, - 0.25, - 360, - 28, - 17.4, - 202, - 13.9, - "(0,0,255)", - 0.08, - 0, - 0 - ] - }, - { - "id": 155, - "type": "Note", - "pos": [ - -806, - 621 - ], - "size": [ - 296.753182927981, - 128.7836855605558 - ], - "flags": {}, - "order": 11, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "the particles treat the mask as an object in the simulation" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 148, - "type": "Reroute", - "pos": [ - 4107, - -201 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 247 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 248, - 257 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 158, - "type": "Reroute", - "pos": [ - 6000, - -185 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 257 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 251 - ] - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 157, - "type": "VHS_VideoCombine", - "pos": [ - 7534, - 32 - ], - "size": [ - 360, - 928.4444444444445 - ], - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 254 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00682.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 156, - "type": "ParticleEmissionMask", - "pos": [ - 7112, - 14 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 251 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 252, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null, - "slot_index": 2 - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null, - "slot_index": 3 - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 254 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 503, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - true, - 1, - 1 - ] - }, - { - "id": 159, - "type": "ParticleEmitter", - "pos": [ - 6539, - 9 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 259 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": 260, - "slot_index": 2 - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 252 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.23, - 0.25, - 360, - 28, - 17.4, - 202, - 13.9, - "(0,0,255)", - 0.08, - 0, - 0 - ] - }, - { - "id": 163, - "type": "ParticleEmitter", - "pos": [ - 6541, - 412 - ], - "size": { - "0": 468.5999755859375, - "1": 358 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": 261, - "slot_index": 3 - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 259 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0.9, - 0.75, - 180, - 31, - 17.4, - 179, - 13, - "(255,0,0)", - 0, - 0, - 0 - ] - }, - { - "id": 164, - "type": "SpringJointSetting", - "pos": [ - 5751, - 33 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 12, - "mode": 0, - "outputs": [ - { - "name": "SPRING_JOINT_SETTING", - "type": "SPRING_JOINT_SETTING", - "links": [ - 260 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "SpringJointSetting" - }, - "widgets_values": [ - 100, - 10, - 0, - 50 - ] - }, - { - "id": 167, - "type": "ParticleSpeedModulation", - "pos": [ - 5955, - 796 - ], - "size": [ - 361.20001220703125, - 178 - ], - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "previous_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_MODULATION", - "type": "PARTICLE_MODULATION", - "links": [ - 263 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleSpeedModulation" - }, - "widgets_values": [ - 0, - 0, - 0, - "ease_in_out", - false, - 100 - ] - }, - { - "id": 165, - "type": "ParticleColorModulation", - "pos": [ - 5951, - 344 - ], - "size": [ - 361.20001220703125, - 178 - ], - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "previous_modulation", - "type": "PARTICLE_MODULATION", - "link": 262, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "PARTICLE_MODULATION", - "type": "PARTICLE_MODULATION", - "links": [ - 261 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleColorModulation" - }, - "widgets_values": [ - 0, - 0, - 0, - "ease_in_out", - false, - "(420,420,69)" - ] - }, - { - "id": 166, - "type": "ParticleSizeModulation", - "pos": [ - 5950, - 566 - ], - "size": [ - 352.79998779296875, - 178 - ], - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "previous_modulation", - "type": "PARTICLE_MODULATION", - "link": 263, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "PARTICLE_MODULATION", - "type": "PARTICLE_MODULATION", - "links": [ - 262 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ParticleSizeModulation" - }, - "widgets_values": [ - 0, - 0, - 0, - "ease_in_out", - true, - 93.30000000000001 - ] - }, - { - "id": 168, - "type": "Note", - "pos": [ - 5663.026864025873, - 599.2102892984099 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 14, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "palindrome true" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 136, - "type": "VHS_VideoCombine", - "pos": [ - 3504, - 5 - ], - "size": [ - 360, - 928.4444444444445 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 229 - }, - { - "name": "audio", - "type": "AUDIO", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00671.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - } - ], - "links": [ - [ - 199, - 104, - 0, - 108, - 0, - "IMAGE" - ], - [ - 201, - 109, - 0, - 107, - 1, - "PARTICLE_EMITTER" - ], - [ - 202, - 110, - 0, - 109, - 0, - "PARTICLE_EMITTER" - ], - [ - 203, - 107, - 1, - 112, - 0, - "IMAGE" - ], - [ - 205, - 114, - 0, - 113, - 1, - "PARTICLE_EMITTER" - ], - [ - 207, - 113, - 1, - 116, - 0, - "IMAGE" - ], - [ - 208, - 108, - 0, - 117, - 0, - "*" - ], - [ - 209, - 117, - 0, - 118, - 0, - "*" - ], - [ - 211, - 120, - 0, - 113, - 4, - "STATIC_BODY" - ], - [ - 213, - 104, - 0, - 121, - 0, - "IMAGE" - ], - [ - 214, - 121, - 0, - 122, - 0, - "*" - ], - [ - 215, - 122, - 0, - 119, - 0, - "*" - ], - [ - 216, - 119, - 0, - 113, - 0, - "MASK" - ], - [ - 217, - 123, - 0, - 120, - 0, - "STATIC_BODY" - ], - [ - 218, - 124, - 0, - 123, - 0, - "STATIC_BODY" - ], - [ - 219, - 118, - 0, - 107, - 0, - "MASK" - ], - [ - 226, - 137, - 0, - 134, - 0, - "MASK" - ], - [ - 229, - 134, - 1, - 136, - 0, - "IMAGE" - ], - [ - 233, - 119, - 0, - 137, - 0, - "*" - ], - [ - 236, - 143, - 0, - 142, - 0, - "PARTICLE_EMITTER" - ], - [ - 237, - 142, - 0, - 134, - 1, - "PARTICLE_EMITTER" - ], - [ - 238, - 144, - 0, - 134, - 2, - "VORTEX" - ], - [ - 239, - 145, - 0, - 144, - 0, - "VORTEX" - ], - [ - 241, - 149, - 0, - 146, - 1, - "PARTICLE_EMITTER" - ], - [ - 243, - 146, - 1, - 147, - 0, - "IMAGE" - ], - [ - 245, - 150, - 0, - 149, - 0, - "PARTICLE_EMITTER" - ], - [ - 247, - 137, - 0, - 148, - 0, - "*" - ], - [ - 248, - 148, - 0, - 146, - 0, - "MASK" - ], - [ - 249, - 153, - 0, - 146, - 3, - "GRAVITY_WELL" - ], - [ - 250, - 154, - 0, - 153, - 0, - "GRAVITY_WELL" - ], - [ - 251, - 158, - 0, - 156, - 0, - "MASK" - ], - [ - 252, - 159, - 0, - 156, - 1, - "PARTICLE_EMITTER" - ], - [ - 254, - 156, - 1, - 157, - 0, - "IMAGE" - ], - [ - 257, - 148, - 0, - 158, - 0, - "*" - ], - [ - 259, - 163, - 0, - 159, - 0, - "PARTICLE_EMITTER" - ], - [ - 260, - 164, - 0, - 159, - 2, - "SPRING_JOINT_SETTING" - ], - [ - 261, - 165, - 0, - 163, - 3, - "PARTICLE_MODULATION" - ], - [ - 262, - 166, - 0, - 165, - 0, - "PARTICLE_MODULATION" - ], - [ - 263, - 167, - 0, - 166, - 0, - "PARTICLE_MODULATION" - ] - ], - "groups": [ - { - "title": "Multiple Particle Emitters", - "bounding": [ - -1523, - -70, - 1480, - 994 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Static bodies", - "bounding": [ - -17, - -76, - 2121, - 1008 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Vortex / Gravity Well", - "bounding": [ - 2128, - -75, - 3444, - 1007 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Particle Modulation", - "bounding": [ - 5639, - -75, - 2268, - 1083 - ], - "color": "#3f789e", - "font_size": 24 - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.1635079908265581, - "offset": [ - 4425.9102655421375, - 2454.955484849879 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/playhead_tutorial.json b/examples/playhead_tutorial.json deleted file mode 100644 index 72d3d96..0000000 --- a/examples/playhead_tutorial.json +++ /dev/null @@ -1,4509 +0,0 @@ -{ - "last_node_id": 244, - "last_link_id": 510, - "nodes": [ - { - "id": 165, - "type": "FeatureSmoothing", - "pos": { - "0": 1767.974609375, - "1": 1058.024658203125 - }, - "size": { - "0": 478.8000183105469, - "1": 174 - }, - "flags": { - "collapsed": false - }, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 374 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 370 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 371 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 7, - 0.3, - 1, - false - ] - }, - { - "id": 153, - "type": "FeatureSmoothing", - "pos": { - "0": 1674.97509765625, - "1": -693.136962890625 - }, - "size": { - "0": 478.8000183105469, - "1": 174 - }, - "flags": { - "collapsed": false - }, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 351 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 357 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 358 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 7, - 0.3, - 1, - false - ] - }, - { - "id": 157, - "type": "PreviewImage", - "pos": { - "0": 2260.976318359375, - "1": -1098.1416015625 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 358 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 180, - "type": "VHS_VideoCombine", - "pos": { - "0": 8987.7255859375, - "1": -793.009765625 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 63, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 405 - }, - { - "name": "audio", - "type": "*", - "link": 494 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00201-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 175, - "type": "GetImageSizeAndCount", - "pos": { - "0": 7767.72509765625, - "1": -543.01025390625 - }, - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 49, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 396 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 409 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "360 width", - "type": "INT", - "links": [ - 397 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "640 height", - "type": "INT", - "links": [ - 398 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "726 count", - "type": "INT", - "links": [ - 399 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 185, - "type": "GetImageSizeAndCount", - "pos": { - "0": 7807.72509765625, - "1": 1446.989501953125 - }, - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 51, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 427 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 422 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "360 width", - "type": "INT", - "links": [ - 419 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "640 height", - "type": "INT", - "links": [ - 420 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "726 count", - "type": "INT", - "links": [ - 421 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 188, - "type": "VHS_VideoCombine", - "pos": { - "0": 9027.7255859375, - "1": 1196.989501953125 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 64, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 425 - }, - { - "name": "audio", - "type": "*", - "link": 500 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00202-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 181, - "type": "GetImageSizeAndCount", - "pos": { - "0": 7845.7255859375, - "1": 257.989501953125 - }, - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 47, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 426 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 415 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "360 width", - "type": "INT", - "links": [ - 412 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "640 height", - "type": "INT", - "links": [ - 413 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "726 count", - "type": "INT", - "links": [ - 414 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 184, - "type": "VHS_VideoCombine", - "pos": { - "0": 9196.7255859375, - "1": 187.989501953125 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 62, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 418 - }, - { - "name": "audio", - "type": "*", - "link": 497 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00203-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 164, - "type": "FlexVideoDirection", - "pos": { - "0": 1781.974609375, - "1": 1278.0252685546875 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 391 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 370 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 375 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 369, - 427 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "relative", - "direction", - 0 - ] - }, - { - "id": 179, - "type": "ImageCompositeMasked", - "pos": { - "0": 8557.7255859375, - "1": -603.009765625 - }, - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 59, - "mode": 4, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 409 - }, - { - "name": "source", - "type": "IMAGE", - "link": 411 - }, - { - "name": "mask", - "type": "MASK", - "link": 404 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 405, - 428 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 183, - "type": "ImageCompositeMasked", - "pos": { - "0": 8777.7255859375, - "1": 252.989501953125 - }, - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 58, - "mode": 4, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 415 - }, - { - "name": "source", - "type": "IMAGE", - "link": 416 - }, - { - "name": "mask", - "type": "MASK", - "link": 417 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 418, - 429 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 187, - "type": "ImageCompositeMasked", - "pos": { - "0": 8597.7255859375, - "1": 1386.989501953125 - }, - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 60, - "mode": 4, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 422 - }, - { - "name": "source", - "type": "IMAGE", - "link": 423 - }, - { - "name": "mask", - "type": "MASK", - "link": 424 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 425, - 430 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 195, - "type": "Reroute", - "pos": { - "0": 1644, - "1": 900 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 442 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 443, - 498 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 198, - "type": "FeatureSmoothing", - "pos": { - "0": 1790, - "1": 1950 - }, - "size": { - "0": 478.8000183105469, - "1": 174 - }, - "flags": { - "collapsed": false - }, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 450 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 448 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 451 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 7, - 0.3, - 1, - false - ] - }, - { - "id": 201, - "type": "Reroute", - "pos": { - "0": 1670, - "1": 1800 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 454 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 452, - 501 - ] - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 200, - "type": "AudioFeatureExtractor", - "pos": { - "0": 1760, - "1": 1800 - }, - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 452 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 455 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 450 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 449 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 172, - "type": "Reroute", - "pos": { - "0": 952.9832763671875, - "1": 422.727294921875 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 386 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 388, - 389, - 391, - 453 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 191, - "type": "Reroute", - "pos": { - "0": 9654, - "1": 929 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 11, - "mode": 4, - "inputs": [ - { - "name": "", - "type": "*", - "link": 432 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 433 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 202, - "type": "GetImageSizeAndCount", - "pos": { - "0": 7820, - "1": 2260 - }, - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 53, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 464 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 459 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "360 width", - "type": "INT", - "links": [ - 456 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "640 height", - "type": "INT", - "links": [ - 457 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "726 count", - "type": "INT", - "links": [ - 458 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - }, - "widgets_values": [] - }, - { - "id": 205, - "type": "VHS_VideoCombine", - "pos": { - "0": 9040, - "1": 2010 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 65, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 462 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 503 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00204-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 189, - "type": "ImageConcatMulti", - "pos": { - "0": 9917, - "1": 981 - }, - "size": { - "0": 210, - "1": 190 - }, - "flags": {}, - "order": 66, - "mode": 4, - "inputs": [ - { - "name": "image_1", - "type": "IMAGE", - "link": 428 - }, - { - "name": "image_2", - "type": "IMAGE", - "link": 429 - }, - { - "name": "image_3", - "type": "IMAGE", - "link": 430 - }, - { - "name": "image_4", - "type": "IMAGE", - "link": 463 - } - ], - "outputs": [ - { - "name": "images", - "type": "IMAGE", - "links": [ - 431 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": {}, - "widgets_values": [ - 4, - "right", - false, - null - ] - }, - { - "id": 204, - "type": "ImageCompositeMasked", - "pos": { - "0": 8610, - "1": 2200 - }, - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 61, - "mode": 4, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 459 - }, - { - "name": "source", - "type": "IMAGE", - "link": 460 - }, - { - "name": "mask", - "type": "MASK", - "link": 461 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 462, - 463 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 197, - "type": "FlexVideoDirection", - "pos": { - "0": 1800, - "1": 2170 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 453 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 448 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 449 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 446, - 464 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "relative", - "direction", - 0 - ] - }, - { - "id": 193, - "type": "EmptyImageFromAudio", - "pos": { - "0": -371.01666259765625, - "1": 441.72735595703125 - }, - "size": { - "0": 336, - "1": 113.79998779296875 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 434 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 439, - 465 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyImageFromAudio" - }, - "widgets_values": [ - 30, - 512, - 512 - ] - }, - { - "id": 208, - "type": "PreviewFeature", - "pos": { - "0": -182.3755340576172, - "1": 1588.4697265625 - }, - "size": { - "0": 415.8000183105469, - "1": 58 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 466 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 467 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, - "widgets_values": [ - false - ] - }, - { - "id": 213, - "type": "EffectVisualizer", - "pos": { - "0": -164.37551879882812, - "1": 1925.4698486328125 - }, - "size": { - "0": 441, - "1": 102 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 472 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 473 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 474 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EffectVisualizer" - }, - "widgets_values": [ - "(255,255,255)", - 1 - ] - }, - { - "id": 210, - "type": "FlexVideoDirection", - "pos": { - "0": -169.37551879882812, - "1": 1701.4698486328125 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 470 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 469 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 479 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 472 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "absolute", - "direction", - 0 - ] - }, - { - "id": 221, - "type": "PreviewImage", - "pos": { - "0": -52.375545501708984, - "1": 2606.470458984375 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 506 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 225, - "type": "VHS_VideoCombine", - "pos": { - "0": 738.624267578125, - "1": 2394.470458984375 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 487 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00218.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 211, - "type": "VHS_VideoCombine", - "pos": { - "0": 591.624267578125, - "1": 1546.4697265625 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 474 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00223.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 207, - "type": "Note", - "pos": { - "0": 173.1876983642578, - "1": 473.1287841796875 - }, - "size": { - "0": 689.7115478515625, - "1": 270.1275634765625 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "THANK YOU for checking this out!!! I developed these nodes as well as this workflow.\n\nIf you think this is cool please consider a sub to my youtube and a star to the repo :)\n\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\nhttps://www.youtube.com/@ryanontheinside\n\nLove, \nRyan\n\nPS\n\nAudio is just one powerful example\n\nBut ANY FLEX FEATURE CAN CONTROL THIS EFFECT. Including proximity, motion, depth, MIDI, color, brightness........etc\n\nSee Time example below, and flex features tutorial for more info https://youtu.be/fobd9mEzkBU\n\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 186, - "type": "TextMaskNode", - "pos": { - "0": 8148, - "1": 1457 - }, - "size": { - "0": 403.1999816894531, - "1": 342 - }, - "flags": {}, - "order": 56, - "mode": 4, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 419, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 420, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 421, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 424 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 423 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TextMaskNode" - }, - "widgets_values": [ - 512, - 512, - "VOCALS", - "Arial", - 32, - "(255,255,255)", - "(0,0,0)", - 0.5, - 0, - 0, - 0.9, - 1 - ] - }, - { - "id": 182, - "type": "TextMaskNode", - "pos": { - "0": 8251.7255859375, - "1": 251.989501953125 - }, - "size": { - "0": 403.1999816894531, - "1": 342 - }, - "flags": {}, - "order": 54, - "mode": 4, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 412, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 413, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 414, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 417 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 416 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TextMaskNode" - }, - "widgets_values": [ - 512, - 512, - "BASS", - "Arial", - 32, - "(255,255,255)", - "(0,0,0)", - 0.5, - 0, - 0, - 0.9, - 1 - ] - }, - { - "id": 177, - "type": "TextMaskNode", - "pos": { - "0": 8097.7255859375, - "1": -533.010498046875 - }, - "size": { - "0": 403.1999816894531, - "1": 342 - }, - "flags": {}, - "order": 55, - "mode": 4, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 397, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 398, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 399, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 404 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 411 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TextMaskNode" - }, - "widgets_values": [ - 512, - 512, - "DRUMS", - "Arial", - 32, - "(255,255,255)", - "(0,0,0)", - 0.5, - 0, - 0, - 0.9, - 1 - ] - }, - { - "id": 203, - "type": "TextMaskNode", - "pos": { - "0": 8160, - "1": 2270 - }, - "size": { - "0": 403.1999816894531, - "1": 342 - }, - "flags": {}, - "order": 57, - "mode": 4, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 456, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 457, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 458, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 461 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 460 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TextMaskNode" - }, - "widgets_values": [ - 512, - 512, - "OTHER INSTRUMENTS", - "Arial", - 32, - "(255,255,255)", - "(0,0,0)", - 0.5, - 0, - 0, - 0.9, - 1 - ] - }, - { - "id": 192, - "type": "VHS_LoadAudioUpload", - "pos": { - "0": -739, - "1": 252 - }, - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 434, - 437, - 438 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "juicy.mp3", - "start_time": 10.06, - "duration": 24.23, - "choose audio to upload": "image" - } - }, - { - "id": 194, - "type": "PreviewAudio", - "pos": { - "0": -255.94879150390625, - "1": -81.42230224609375 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 437 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 117, - "type": "DownloadOpenUnmixModel", - "pos": { - "0": -250, - "1": 93 - }, - "size": { - "0": 541.800048828125, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 250 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 106, - "type": "VHS_LoadVideo", - "pos": { - "0": -690, - "1": 593 - }, - "size": [ - 247.455078125, - 680.3645833333333 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 386, - 470, - 483 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": [], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "flower_timelapse.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 36, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 36, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "flower_timelapse.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 115, - "type": "AudioSeparator", - "pos": { - "0": 319, - "1": 229 - }, - "size": { - "0": 415.8000183105469, - "1": 158 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 250 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 438 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 439 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 432 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 252 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 442 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 296, - 495 - ], - "slot_index": 3, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 454 - ], - "slot_index": 4, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 297, - 394, - 445, - 455 - ], - "slot_index": 5, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 120, - "type": "FrequencyFilterPreset", - "pos": { - "0": 1598, - "1": -1066 - }, - "size": { - "0": 516.5999755859375, - "1": 58 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 253 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "isolate_kick_drum" - ] - }, - { - "id": 119, - "type": "AudioFilter", - "pos": { - "0": 1625, - "1": -948 - }, - "size": { - "0": 378, - "1": 46 - }, - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 252 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 253 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 256, - 492 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - }, - "widgets_values": [] - }, - { - "id": 161, - "type": "FeatureSmoothing", - "pos": { - "0": 1676, - "1": 124 - }, - "size": { - "0": 478.8000183105469, - "1": 174 - }, - "flags": { - "collapsed": false - }, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 366 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 362 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 365 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 7, - 0.3, - 1, - false - ] - }, - { - "id": 138, - "type": "AudioFeatureExtractor", - "pos": { - "0": 1683, - "1": -34 - }, - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 296 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 297 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 366, - 490 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 367 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 233, - "type": "PreviewFeature", - "pos": { - "0": 2175, - "1": -134 - }, - "size": { - "0": 415.8000183105469, - "1": 58 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 490 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 491 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, - "widgets_values": [ - false - ] - }, - { - "id": 234, - "type": "PreviewImage", - "pos": { - "0": 3022.890380859375, - "1": -176.58802795410156 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 491 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 162, - "type": "PreviewImage", - "pos": { - "0": 2277, - "1": 60 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 365 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 108, - "type": "VHS_VideoCombine", - "pos": { - "0": 2598, - "1": -1059 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 48, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 316 - }, - { - "name": "audio", - "type": "*", - "link": 493 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00219-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 238, - "type": "Reroute", - "pos": { - "0": 2541.888916015625, - "1": -1148.8082275390625 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 492 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 493, - 494 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 159, - "type": "VHS_VideoCombine", - "pos": { - "0": 2610, - "1": -7 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 359 - }, - { - "name": "audio", - "type": "*", - "link": 496 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00221-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 239, - "type": "Reroute", - "pos": { - "0": 2451.01806640625, - "1": -21.460708618164062 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 495 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 496, - 497 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 166, - "type": "PreviewImage", - "pos": { - "0": 2363, - "1": 1046 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 371 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 163, - "type": "VHS_VideoCombine", - "pos": { - "0": 2682.668701171875, - "1": 897.24755859375 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 369 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 499 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00224-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 240, - "type": "Reroute", - "pos": { - "0": 2513.22705078125, - "1": 919.3145751953125 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 498 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 499, - 500 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 199, - "type": "PreviewImage", - "pos": { - "0": 2362, - "1": 1912 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 451 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 196, - "type": "VHS_VideoCombine", - "pos": { - "0": 2710, - "1": 1790 - }, - "size": [ - 214.7587890625, - 670.2378472222222 - ], - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 446 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 502 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00222-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 241, - "type": "Reroute", - "pos": { - "0": 2527.7314453125, - "1": 1820.163818359375 - }, - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 501 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 502, - 503 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 220, - "type": "Note", - "pos": { - "0": -467.3756408691406, - "1": 2279.470458984375 - }, - "size": { - "0": 269.4545593261719, - "1": 75.10535430908203 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "you can do a lot with FeatureMod nodes, too" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 224, - "type": "FlexVideoDirection", - "pos": { - "0": 199, - "1": 2400 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 483 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 505 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 485 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 487 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "absolute", - "direction", - 0 - ] - }, - { - "id": 209, - "type": "PreviewImage", - "pos": { - "0": 329, - "1": 1541 - }, - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 467 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 206, - "type": "TimeFeatureNode", - "pos": { - "0": -690, - "1": 1683 - }, - "size": { - "0": 378, - "1": 150 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 465 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 466, - 469, - 473, - 504 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 479, - 485 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - "pulse", - 30, - 0.30000000000000004, - 0 - ] - }, - { - "id": 242, - "type": "FeatureOscillator", - "pos": { - "0": -624, - "1": 2510 - }, - "size": { - "0": 491.4000244140625, - "1": 198 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 504 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 505 - ], - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 506 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureOscillator" - }, - "widgets_values": [ - "sine", - 1, - 0.5, - 0, - 0.5, - false - ] - }, - { - "id": 121, - "type": "AudioFeatureExtractor", - "pos": { - "0": 1642, - "1": -841 - }, - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 256 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 394 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 351 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 327 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 142, - "type": "FlexVideoDirection", - "pos": { - "0": 1654, - "1": -435 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 389 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 357 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 327 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 316, - 396 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "relative", - "direction", - 0 - ] - }, - { - "id": 167, - "type": "AudioFeatureExtractor", - "pos": { - "0": 2050, - "1": 860 - }, - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 443 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 445 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 374 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 375 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 160, - "type": "FlexVideoDirection", - "pos": { - "0": 1722, - "1": 432 - }, - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 388 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 362 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 367 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 359, - 426 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "relative", - "direction", - 0 - ] - }, - { - "id": 190, - "type": "VHS_VideoCombine", - "pos": { - "0": 10165, - "1": 828 - }, - "size": [ - 214.7587890625, - 410.55946180555554 - ], - "flags": {}, - "order": 67, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 431 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 433 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00200-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - } - ], - "links": [ - [ - 250, - 117, - 0, - 115, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 252, - 115, - 1, - 119, - 0, - "AUDIO" - ], - [ - 253, - 120, - 0, - 119, - 1, - "FREQUENCY_FILTER" - ], - [ - 256, - 119, - 0, - 121, - 0, - "AUDIO" - ], - [ - 296, - 115, - 3, - 138, - 0, - "AUDIO" - ], - [ - 297, - 115, - 5, - 138, - 1, - "FEATURE_PIPE" - ], - [ - 316, - 142, - 0, - 108, - 0, - "IMAGE" - ], - [ - 327, - 121, - 1, - 142, - 2, - "FEATURE_PIPE" - ], - [ - 351, - 121, - 0, - 153, - 0, - "FEATURE" - ], - [ - 357, - 153, - 0, - 142, - 1, - "FEATURE" - ], - [ - 358, - 153, - 1, - 157, - 0, - "IMAGE" - ], - [ - 359, - 160, - 0, - 159, - 0, - "IMAGE" - ], - [ - 362, - 161, - 0, - 160, - 1, - "FEATURE" - ], - [ - 365, - 161, - 1, - 162, - 0, - "IMAGE" - ], - [ - 366, - 138, - 0, - 161, - 0, - "FEATURE" - ], - [ - 367, - 138, - 1, - 160, - 2, - "FEATURE_PIPE" - ], - [ - 369, - 164, - 0, - 163, - 0, - "IMAGE" - ], - [ - 370, - 165, - 0, - 164, - 1, - "FEATURE" - ], - [ - 371, - 165, - 1, - 166, - 0, - "IMAGE" - ], - [ - 374, - 167, - 0, - 165, - 0, - "FEATURE" - ], - [ - 375, - 167, - 1, - 164, - 2, - "FEATURE_PIPE" - ], - [ - 386, - 106, - 0, - 172, - 0, - "*" - ], - [ - 388, - 172, - 0, - 160, - 0, - "IMAGE" - ], - [ - 389, - 172, - 0, - 142, - 0, - "IMAGE" - ], - [ - 391, - 172, - 0, - 164, - 0, - "IMAGE" - ], - [ - 394, - 115, - 5, - 121, - 1, - "FEATURE_PIPE" - ], - [ - 396, - 142, - 0, - 175, - 0, - "IMAGE" - ], - [ - 397, - 175, - 1, - 177, - 0, - "INT" - ], - [ - 398, - 175, - 2, - 177, - 1, - "INT" - ], - [ - 399, - 175, - 3, - 177, - 2, - "INT" - ], - [ - 404, - 177, - 0, - 179, - 2, - "MASK" - ], - [ - 405, - 179, - 0, - 180, - 0, - "IMAGE" - ], - [ - 409, - 175, - 0, - 179, - 0, - "IMAGE" - ], - [ - 411, - 177, - 1, - 179, - 1, - "IMAGE" - ], - [ - 412, - 181, - 1, - 182, - 0, - "INT" - ], - [ - 413, - 181, - 2, - 182, - 1, - "INT" - ], - [ - 414, - 181, - 3, - 182, - 2, - "INT" - ], - [ - 415, - 181, - 0, - 183, - 0, - "IMAGE" - ], - [ - 416, - 182, - 1, - 183, - 1, - "IMAGE" - ], - [ - 417, - 182, - 0, - 183, - 2, - "MASK" - ], - [ - 418, - 183, - 0, - 184, - 0, - "IMAGE" - ], - [ - 419, - 185, - 1, - 186, - 0, - "INT" - ], - [ - 420, - 185, - 2, - 186, - 1, - "INT" - ], - [ - 421, - 185, - 3, - 186, - 2, - "INT" - ], - [ - 422, - 185, - 0, - 187, - 0, - "IMAGE" - ], - [ - 423, - 186, - 1, - 187, - 1, - "IMAGE" - ], - [ - 424, - 186, - 0, - 187, - 2, - "MASK" - ], - [ - 425, - 187, - 0, - 188, - 0, - "IMAGE" - ], - [ - 426, - 160, - 0, - 181, - 0, - "IMAGE" - ], - [ - 427, - 164, - 0, - 185, - 0, - "IMAGE" - ], - [ - 428, - 179, - 0, - 189, - 0, - "IMAGE" - ], - [ - 429, - 183, - 0, - 189, - 1, - "IMAGE" - ], - [ - 430, - 187, - 0, - 189, - 2, - "IMAGE" - ], - [ - 431, - 189, - 0, - 190, - 0, - "IMAGE" - ], - [ - 432, - 115, - 0, - 191, - 0, - "*" - ], - [ - 433, - 191, - 0, - 190, - 1, - "AUDIO" - ], - [ - 434, - 192, - 0, - 193, - 0, - "AUDIO" - ], - [ - 437, - 192, - 0, - 194, - 0, - "AUDIO" - ], - [ - 438, - 192, - 0, - 115, - 1, - "AUDIO" - ], - [ - 439, - 193, - 0, - 115, - 2, - "IMAGE" - ], - [ - 442, - 115, - 2, - 195, - 0, - "*" - ], - [ - 443, - 195, - 0, - 167, - 0, - "AUDIO" - ], - [ - 445, - 115, - 5, - 167, - 1, - "FEATURE_PIPE" - ], - [ - 446, - 197, - 0, - 196, - 0, - "IMAGE" - ], - [ - 448, - 198, - 0, - 197, - 1, - "FEATURE" - ], - [ - 449, - 200, - 1, - 197, - 2, - "FEATURE_PIPE" - ], - [ - 450, - 200, - 0, - 198, - 0, - "FEATURE" - ], - [ - 451, - 198, - 1, - 199, - 0, - "IMAGE" - ], - [ - 452, - 201, - 0, - 200, - 0, - "AUDIO" - ], - [ - 453, - 172, - 0, - 197, - 0, - "IMAGE" - ], - [ - 454, - 115, - 4, - 201, - 0, - "*" - ], - [ - 455, - 115, - 5, - 200, - 1, - "FEATURE_PIPE" - ], - [ - 456, - 202, - 1, - 203, - 0, - "INT" - ], - [ - 457, - 202, - 2, - 203, - 1, - "INT" - ], - [ - 458, - 202, - 3, - 203, - 2, - "INT" - ], - [ - 459, - 202, - 0, - 204, - 0, - "IMAGE" - ], - [ - 460, - 203, - 1, - 204, - 1, - "IMAGE" - ], - [ - 461, - 203, - 0, - 204, - 2, - "MASK" - ], - [ - 462, - 204, - 0, - 205, - 0, - "IMAGE" - ], - [ - 463, - 204, - 0, - 189, - 3, - "IMAGE" - ], - [ - 464, - 197, - 0, - 202, - 0, - "IMAGE" - ], - [ - 465, - 193, - 0, - 206, - 0, - "IMAGE" - ], - [ - 466, - 206, - 0, - 208, - 0, - "FEATURE" - ], - [ - 467, - 208, - 0, - 209, - 0, - "IMAGE" - ], - [ - 469, - 206, - 0, - 210, - 1, - "FEATURE" - ], - [ - 470, - 106, - 0, - 210, - 0, - "IMAGE" - ], - [ - 472, - 210, - 0, - 213, - 0, - "IMAGE" - ], - [ - 473, - 206, - 0, - 213, - 1, - "FEATURE" - ], - [ - 474, - 213, - 0, - 211, - 0, - "IMAGE" - ], - [ - 479, - 206, - 1, - 210, - 2, - "FEATURE_PIPE" - ], - [ - 483, - 106, - 0, - 224, - 0, - "IMAGE" - ], - [ - 485, - 206, - 1, - 224, - 2, - "FEATURE_PIPE" - ], - [ - 487, - 224, - 0, - 225, - 0, - "IMAGE" - ], - [ - 490, - 138, - 0, - 233, - 0, - "FEATURE" - ], - [ - 491, - 233, - 0, - 234, - 0, - "IMAGE" - ], - [ - 492, - 119, - 0, - 238, - 0, - "*" - ], - [ - 493, - 238, - 0, - 108, - 1, - "AUDIO" - ], - [ - 494, - 238, - 0, - 180, - 1, - "AUDIO" - ], - [ - 495, - 115, - 3, - 239, - 0, - "*" - ], - [ - 496, - 239, - 0, - 159, - 1, - "AUDIO" - ], - [ - 497, - 239, - 0, - 184, - 1, - "AUDIO" - ], - [ - 498, - 195, - 0, - 240, - 0, - "*" - ], - [ - 499, - 240, - 0, - 163, - 1, - "*" - ], - [ - 500, - 240, - 0, - 188, - 1, - "AUDIO" - ], - [ - 501, - 201, - 0, - 241, - 0, - "*" - ], - [ - 502, - 241, - 0, - 196, - 1, - "*" - ], - [ - 503, - 241, - 0, - 205, - 1, - "AUDIO" - ], - [ - 504, - 206, - 0, - 242, - 0, - "FEATURE" - ], - [ - 505, - 242, - 0, - 224, - 1, - "FEATURE" - ], - [ - 506, - 242, - 1, - 221, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Time", - "bounding": [ - -819, - 1452, - 1924, - 1726 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Other", - "bounding": [ - 1678, - 1737, - 1388, - 644 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Bass", - "bounding": [ - 1625, - -193, - 1295, - 901 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Vocals", - "bounding": [ - 1652, - 776, - 1367, - 831 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Audio Separation", - "bounding": [ - -739, - -168, - 1831, - 1481 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Drums", - "bounding": [ - 1598, - -1218, - 1317, - 941 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Text Overlay\\", - "bounding": [ - 7810, - -1086, - 3484, - 4046 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.12100000000000158, - "offset": [ - 2650.1600993659995, - 2837.7087895071204 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/playhead_tutorialVERSION2.json b/examples/playhead_tutorialVERSION2.json new file mode 100644 index 0000000..023879c --- /dev/null +++ b/examples/playhead_tutorialVERSION2.json @@ -0,0 +1,2650 @@ +{ + "last_node_id": 264, + "last_link_id": 580, + "nodes": [ + { + "id": 195, + "type": "Reroute", + "pos": [ + 1644, + 900 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 515 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 498, + 545 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 201, + "type": "Reroute", + "pos": [ + 1670, + 1800 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 518 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 501, + 531 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 172, + "type": "Reroute", + "pos": [ + 952.9832763671875, + 422.727294921875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 386 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 535, + 539, + 547, + 556 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 225, + "type": "VHS_VideoCombine", + "pos": [ + 738.624267578125, + 2394.470458984375 + ], + "size": [ + 214.7587890625, + 691.6919555664062 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 575 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_00218.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + }, + "muted": false + } + } + }, + { + "id": 211, + "type": "VHS_VideoCombine", + "pos": [ + 591.624267578125, + 1546.4697265625 + ], + "size": [ + 214.7587890625, + 694.2378540039062 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 474 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02418.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02418.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02418.mp4" + }, + "muted": false + } + } + }, + { + "id": 207, + "type": "Note", + "pos": [ + 173.1876983642578, + 473.1287841796875 + ], + "size": [ + 689.7115478515625, + 270.1275634765625 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "THANK YOU for checking this out!!! I developed these nodes as well as this workflow.\n\nIf you think this is cool please consider a sub to my youtube and a star to the repo :)\n\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\nhttps://www.youtube.com/@ryanontheinside\n\nLove, \nRyan\n\nPS\n\nAudio is just one powerful example\n\nBut ANY FLEX FEATURE CAN CONTROL THIS EFFECT. Including proximity, motion, depth, MIDI, color, brightness........etc\n\nSee Time example below, and flex features tutorial for more info https://youtu.be/fobd9mEzkBU\n\n" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 194, + "type": "PreviewAudio", + "pos": [ + -255.94879150390625, + -81.42230224609375 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 437 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 117, + "type": "DownloadOpenUnmixModel", + "pos": [ + -250, + 93 + ], + "size": [ + 541.800048828125, + 58 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 511 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] + }, + { + "id": 106, + "type": "VHS_LoadVideo", + "pos": [ + -690, + 593 + ], + "size": [ + 247.455078125, + 262 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 386, + 527, + 573 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": [], + "slot_index": 3, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "flower_timelapse.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 36, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 36, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "flower_timelapse.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + }, + "muted": false + } + } + }, + { + "id": 120, + "type": "FrequencyFilterPreset", + "pos": [ + 1598, + -1066 + ], + "size": [ + 516.5999755859375, + 58 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "previous_filter", + "type": "FREQUENCY_FILTER", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "FREQUENCY_FILTER", + "type": "FREQUENCY_FILTER", + "links": [ + 253 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FrequencyFilterPreset" + }, + "widgets_values": [ + "isolate_kick_drum" + ] + }, + { + "id": 119, + "type": "AudioFilter", + "pos": [ + 1625, + -948 + ], + "size": [ + 378, + 46 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 514 + }, + { + "name": "filters", + "type": "FREQUENCY_FILTER", + "link": 253 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 492, + 562 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AudioFilter" + }, + "widgets_values": [] + }, + { + "id": 233, + "type": "PreviewFeature", + "pos": [ + 2175, + -134 + ], + "size": [ + 415.8000183105469, + 246 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 554 + } + ], + "outputs": [ + { + "name": "FEATURE_PREVIEW", + "type": "IMAGE", + "links": [], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] + }, + { + "id": 108, + "type": "VHS_VideoCombine", + "pos": [ + 2598, + -1059 + ], + "size": [ + 214.7587890625, + 694.2378540039062 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 558 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 493, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02420-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02420.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02420-audio.mp4" + }, + "muted": false + } + } + }, + { + "id": 238, + "type": "Reroute", + "pos": [ + 2541.888916015625, + -1148.8082275390625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 492 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 493 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 159, + "type": "VHS_VideoCombine", + "pos": [ + 2610, + -7 + ], + "size": [ + 214.7587890625, + 694.2378540039062 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 549 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 496, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02417-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02417.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02417-audio.mp4" + }, + "muted": false + } + } + }, + { + "id": 239, + "type": "Reroute", + "pos": [ + 2451.01806640625, + -21.460708618164062 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 517 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 496 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 163, + "type": "VHS_VideoCombine", + "pos": [ + 2682.668701171875, + 897.24755859375 + ], + "size": [ + 214.7587890625, + 694.2378540039062 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 541 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 499, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02421-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02421.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02421-audio.mp4" + }, + "muted": false + } + } + }, + { + "id": 240, + "type": "Reroute", + "pos": [ + 2513.22705078125, + 919.3145751953125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 498 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 499 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 196, + "type": "VHS_VideoCombine", + "pos": [ + 2710, + 1790 + ], + "size": [ + 214.7587890625, + 694.2378540039062 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 537 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 502, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02419-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02419.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02419-audio.mp4" + }, + "muted": false + } + } + }, + { + "id": 241, + "type": "Reroute", + "pos": [ + 2527.7314453125, + 1820.163818359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 501 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 502 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 220, + "type": "Note", + "pos": [ + -467.3756408691406, + 2279.470458984375 + ], + "size": [ + 269.4545593261719, + 75.10535430908203 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "you can do a lot with FeatureMod nodes, too" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 192, + "type": "VHS_LoadAudioUpload", + "pos": [ + -739, + 252 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 434, + 437, + 512 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "juicy.mp3", + "start_time": 10.06, + "duration": 8.36, + "choose audio to upload": "image" + } + }, + { + "id": 245, + "type": "AudioSeparatorSimple", + "pos": [ + 380.8441162109375, + 30.808849334716797 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 511 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 512 + } + ], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [] + }, + { + "name": "drums_audio", + "type": "AUDIO", + "links": [ + 514 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 515 + ] + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": [ + 517, + 553 + ] + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": [ + 518 + ] + } + ], + "properties": { + "Node name for S&R": "AudioSeparatorSimple" + } + }, + { + "id": 193, + "type": "EmptyImageFromAudio", + "pos": [ + -475.334716796875, + 380.57537841796875 + ], + "size": [ + 336, + 126 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 434 + } + ], + "outputs": [ + { + "name": "empty_image", + "type": "IMAGE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 519 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "EmptyImageFromAudio" + }, + "widgets_values": [ + 30, + 512, + 512 + ] + }, + { + "id": 246, + "type": "Anything Everywhere?", + "pos": [ + -78.31401824951172, + 284.6726379394531 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 519, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_count", + ".*" + ] + }, + { + "id": 248, + "type": "FeatureOscillator", + "pos": [ + -503.73370361328125, + 2489.72998046875 + ], + "size": [ + 352.79998779296875, + 178 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 524 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 526, + 574 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FeatureOscillator" + }, + "widgets_values": [ + "sine", + 1, + 0.5, + 0, + 0.5, + false + ] + }, + { + "id": 249, + "type": "PreviewFeature", + "pos": [ + 100.41519927978516, + 2743.287109375 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 526 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + } + }, + { + "id": 213, + "type": "EffectVisualizer", + "pos": [ + -160.68368530273438, + 1968.8489990234375 + ], + "size": [ + 441, + 102 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "video_frames", + "type": "IMAGE", + "link": 529 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 522 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 474 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EffectVisualizer" + }, + "widgets_values": [ + "(255,255,255)", + 1 + ] + }, + { + "id": 250, + "type": "FlexVideoDirection", + "pos": [ + -159.2229766845703, + 1718.0833740234375 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 527 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 528, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 529 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + }, + { + "id": 247, + "type": "TimeFeatureNode", + "pos": [ + -690, + 1683 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 522, + 524, + 528, + 530 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "smooth", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, + { + "id": 251, + "type": "PreviewFeature", + "pos": [ + 181.33267211914062, + 1559.62841796875 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 530 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + } + }, + { + "id": 253, + "type": "FeatureSmoothing", + "pos": [ + 1791.6351318359375, + 2043.1995849609375 + ], + "size": [ + 340.20001220703125, + 154 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 533 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 536 + ] + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 7, + 0.3, + 1, + false + ] + }, + { + "id": 254, + "type": "FlexVideoDirection", + "pos": [ + 1777.8875732421875, + 2252.532958984375 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 535 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 536, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 537 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + }, + { + "id": 252, + "type": "AudioFeatureExtractor", + "pos": [ + 1805.4014892578125, + 1804.9228515625 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 531 + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 533 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 255, + "type": "FlexVideoDirection", + "pos": [ + 1781.974609375, + 1278.0252685546875 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 539 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 544, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 541 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + }, + { + "id": 256, + "type": "FeatureSmoothing", + "pos": [ + 1767.974609375, + 1058.024658203125 + ], + "size": [ + 340.20001220703125, + 154 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 546 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 544 + ] + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 7, + 0.3, + 1, + false + ] + }, + { + "id": 257, + "type": "AudioFeatureExtractor", + "pos": [ + 2047.5430908203125, + 805.9478149414062 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 545 + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 546 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 258, + "type": "FlexVideoDirection", + "pos": [ + 1722, + 432 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 547 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 552, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 549 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + }, + { + "id": 259, + "type": "FeatureSmoothing", + "pos": [ + 1682.142333984375, + 197.70758056640625 + ], + "size": [ + 340.20001220703125, + 154 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 555 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 552 + ] + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 7, + 0.3, + 1, + false + ] + }, + { + "id": 260, + "type": "AudioFeatureExtractor", + "pos": [ + 1683, + -34 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 553 + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 554, + 555 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 263, + "type": "AudioFeatureExtractor", + "pos": [ + 1615.465087890625, + -846.8966674804688 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 562 + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 563 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 262, + "type": "FeatureSmoothing", + "pos": [ + 1638.1209716796875, + -637.4877319335938 + ], + "size": [ + 340.20001220703125, + 154 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 563 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 561 + ] + } + ], + "properties": { + "Node name for S&R": "FeatureSmoothing" + }, + "widgets_values": [ + "moving_average", + 5, + 0.3, + 1, + false + ] + }, + { + "id": 261, + "type": "FlexVideoDirection", + "pos": [ + 1620.8314208984375, + -420.258544921875 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 556 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 561, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 558 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + }, + { + "id": 264, + "type": "FlexVideoDirection", + "pos": [ + 199, + 2400 + ], + "size": [ + 378, + 150 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 573 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 574, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 575 + ] + } + ], + "properties": { + "Node name for S&R": "FlexVideoDirection" + }, + "widgets_values": [ + 1, + 0, + "direction", + "relative" + ] + } + ], + "links": [ + [ + 253, + 120, + 0, + 119, + 1, + "FREQUENCY_FILTER" + ], + [ + 386, + 106, + 0, + 172, + 0, + "*" + ], + [ + 434, + 192, + 0, + 193, + 0, + "AUDIO" + ], + [ + 437, + 192, + 0, + 194, + 0, + "AUDIO" + ], + [ + 474, + 213, + 0, + 211, + 0, + "IMAGE" + ], + [ + 492, + 119, + 0, + 238, + 0, + "*" + ], + [ + 493, + 238, + 0, + 108, + 1, + "AUDIO" + ], + [ + 496, + 239, + 0, + 159, + 1, + "AUDIO" + ], + [ + 498, + 195, + 0, + 240, + 0, + "*" + ], + [ + 499, + 240, + 0, + 163, + 1, + "*" + ], + [ + 501, + 201, + 0, + 241, + 0, + "*" + ], + [ + 502, + 241, + 0, + 196, + 1, + "*" + ], + [ + 511, + 117, + 0, + 245, + 0, + "OPEN_UNMIX_MODEL" + ], + [ + 512, + 192, + 0, + 245, + 1, + "AUDIO" + ], + [ + 514, + 245, + 1, + 119, + 0, + "AUDIO" + ], + [ + 515, + 245, + 2, + 195, + 0, + "*" + ], + [ + 517, + 245, + 3, + 239, + 0, + "*" + ], + [ + 518, + 245, + 4, + 201, + 0, + "*" + ], + [ + 519, + 193, + 1, + 246, + 0, + "INT" + ], + [ + 522, + 247, + 0, + 213, + 1, + "FEATURE" + ], + [ + 524, + 247, + 0, + 248, + 0, + "FEATURE" + ], + [ + 526, + 248, + 0, + 249, + 0, + "FEATURE" + ], + [ + 527, + 106, + 0, + 250, + 0, + "IMAGE" + ], + [ + 528, + 247, + 0, + 250, + 1, + "FEATURE" + ], + [ + 529, + 250, + 0, + 213, + 0, + "IMAGE" + ], + [ + 530, + 247, + 0, + 251, + 0, + "FEATURE" + ], + [ + 531, + 201, + 0, + 252, + 0, + "AUDIO" + ], + [ + 533, + 252, + 0, + 253, + 0, + "FEATURE" + ], + [ + 535, + 172, + 0, + 254, + 0, + "IMAGE" + ], + [ + 536, + 253, + 0, + 254, + 1, + "FEATURE" + ], + [ + 537, + 254, + 0, + 196, + 0, + "IMAGE" + ], + [ + 539, + 172, + 0, + 255, + 0, + "IMAGE" + ], + [ + 541, + 255, + 0, + 163, + 0, + "IMAGE" + ], + [ + 544, + 256, + 0, + 255, + 1, + "FEATURE" + ], + [ + 545, + 195, + 0, + 257, + 0, + "AUDIO" + ], + [ + 546, + 257, + 0, + 256, + 0, + "FEATURE" + ], + [ + 547, + 172, + 0, + 258, + 0, + "IMAGE" + ], + [ + 549, + 258, + 0, + 159, + 0, + "IMAGE" + ], + [ + 552, + 259, + 0, + 258, + 1, + "FEATURE" + ], + [ + 553, + 245, + 3, + 260, + 0, + "AUDIO" + ], + [ + 554, + 260, + 0, + 233, + 0, + "FEATURE" + ], + [ + 555, + 260, + 0, + 259, + 0, + "FEATURE" + ], + [ + 556, + 172, + 0, + 261, + 0, + "IMAGE" + ], + [ + 558, + 261, + 0, + 108, + 0, + "IMAGE" + ], + [ + 561, + 262, + 0, + 261, + 1, + "FEATURE" + ], + [ + 562, + 119, + 0, + 263, + 0, + "AUDIO" + ], + [ + 563, + 263, + 0, + 262, + 0, + "FEATURE" + ], + [ + 573, + 106, + 0, + 264, + 0, + "IMAGE" + ], + [ + 574, + 248, + 0, + 264, + 1, + "FEATURE" + ], + [ + 575, + 264, + 0, + 225, + 0, + "IMAGE" + ], + [ + 576, + 193, + 1, + 247, + 0, + "INT" + ], + [ + 577, + 193, + 1, + 252, + 1, + "INT" + ], + [ + 578, + 193, + 1, + 257, + 1, + "INT" + ], + [ + 579, + 193, + 1, + 260, + 1, + "INT" + ], + [ + 580, + 193, + 1, + 263, + 1, + "INT" + ] + ], + "groups": [ + { + "id": 1, + "title": "Time", + "bounding": [ + -819, + 1452, + 1924, + 1726 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Other", + "bounding": [ + 1678, + 1737, + 1388, + 644 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "Bass", + "bounding": [ + 1625, + -193, + 1295, + 901 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "Vocals", + "bounding": [ + 1652, + 776, + 1367, + 831 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "Audio Separation", + "bounding": [ + -739, + -168, + 1831, + 1481 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "Drums", + "bounding": [ + 1598, + -1218, + 1317, + 941 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8140274938684103, + "offset": [ + 441.66631958748064, + -1946.983432424807 + ] + }, + "node_versions": { + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "comfy-core": "0.3.12", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50" + }, + "ue_links": [ + { + "downstream": 247, + "downstream_slot": 0, + "upstream": "193", + "upstream_slot": 1, + "controller": 246, + "type": "INT" + }, + { + "downstream": 252, + "downstream_slot": 1, + "upstream": "193", + "upstream_slot": 1, + "controller": 246, + "type": "INT" + }, + { + "downstream": 257, + "downstream_slot": 1, + "upstream": "193", + "upstream_slot": 1, + "controller": 246, + "type": "INT" + }, + { + "downstream": 260, + "downstream_slot": 1, + "upstream": "193", + "upstream_slot": 1, + "controller": 246, + "type": "INT" + }, + { + "downstream": 263, + "downstream_slot": 1, + "upstream": "193", + "upstream_slot": 1, + "controller": 246, + "type": "INT" + } + ] + }, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/proximity_particle.json b/examples/proximity_particle.json deleted file mode 100644 index 3cb5e5e..0000000 --- a/examples/proximity_particle.json +++ /dev/null @@ -1,8414 +0,0 @@ -{ - "last_node_id": 339, - "last_link_id": 614, - "nodes": [ - { - "id": 30, - "type": "ADE_SigmaSchedule", - "pos": [ - 3141.5897819464126, - 1118.8759046187079 - ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "SIGMA_SCHEDULE", - "type": "SIGMA_SCHEDULE", - "links": [ - 51 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "Sigma Schedule 🎭🅐🅓", - "properties": { - "Node name for S&R": "ADE_SigmaSchedule", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "lcm avg(sqrt_linear,linear)" - ] - }, - { - "id": 32, - "type": "ADE_MultivalDynamic", - "pos": [ - 3131.5897819464126, - 768.8759046187079 - ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "mask_optional", - "type": "MASK", - "link": null - } - ], - "outputs": [ - { - "name": "MULTIVAL", - "type": "MULTIVAL", - "links": [ - 48 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "Scale 🎭🅐🅓", - "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1.1400000000000001, - "" - ] - }, - { - "id": 34, - "type": "ADE_MultivalDynamic", - "pos": [ - 3131.5897819464126, - 658.8759046187079 - ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "mask_optional", - "type": "MASK", - "link": null - } - ], - "outputs": [ - { - "name": "MULTIVAL", - "type": "MULTIVAL", - "links": [ - 49 - ], - "shape": 3 - } - ], - "title": "Effect 🎭🅐🅓", - "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1.1, - "" - ] - }, - { - "id": 35, - "type": "ADE_CustomCFGSimple", - "pos": [ - 3131.5897819464126, - 868.8759046187079 - ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "cfg_extras", - "type": "CFG_EXTRAS", - "link": null - } - ], - "outputs": [ - { - "name": "CUSTOM_CFG", - "type": "CUSTOM_CFG", - "links": [ - 50 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_CustomCFGSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 2, - "" - ] - }, - { - "id": 36, - "type": "ADE_AnimateDiffSettings", - "pos": [ - 3161.5897819464126, - 1218.8759046187079 - ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, - "flags": { - "collapsed": true - }, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "pe_adjust", - "type": "PE_ADJUST", - "link": 53, - "slot_index": 0 - }, - { - "name": "weight_adjust", - "type": "WEIGHT_ADJUST", - "link": 54, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "AD_SETTINGS", - "type": "AD_SETTINGS", - "links": [ - 46 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AnimateDiffSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "" - ] - }, - { - "id": 37, - "type": "ADE_AdjustPESweetspotStretch", - "pos": [ - 3131.5897819464126, - 968.8759046187079 - ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "prev_pe_adjust", - "type": "PE_ADJUST", - "link": null - } - ], - "outputs": [ - { - "name": "PE_ADJUST", - "type": "PE_ADJUST", - "links": [ - 53 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AdjustPESweetspotStretch", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 16, - 18, - false, - "" - ] - }, - { - "id": 57, - "type": "GetNode", - "pos": { - "0": 981.441162109375, - "1": 1401.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 81 - ], - "slot_index": 0 - } - ], - "title": "Get_depth_maps", - "properties": {}, - "widgets_values": [ - "depth_maps" - ] - }, - { - "id": 58, - "type": "GetNode", - "pos": { - "0": 961.441162109375, - "1": 1551.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 82 - ], - "slot_index": 0 - } - ], - "title": "Get_lineart", - "properties": {}, - "widgets_values": [ - "lineart" - ] - }, - { - "id": 63, - "type": "PreviewImage", - "pos": [ - 1430, - -4640 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 65, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 95 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 19, - "type": "EmptyImage", - "pos": [ - -54.53860047793418, - -848.1971880599185 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 26, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 27, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 103, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 30 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EmptyImage" - }, - "widgets_values": [ - 512, - 512, - 60, - 0 - ] - }, - { - "id": 33, - "type": "ADE_AnimateDiffUniformContextOptions", - "pos": [ - 3481.5897819464126, - 658.8759046187079 - ], - "size": { - "0": 273.269775390625, - "1": 270 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null - } - ], - "outputs": [ - { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 44 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "Context Options 🎭🅐🅓", - "properties": { - "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 16, - 1, - 4, - "uniform", - false, - "pyramid", - false, - 0, - 1, - "" - ] - }, - { - "id": 29, - "type": "ADE_AnimateDiffSamplingSettings", - "pos": [ - 3481.5897819464126, - 968.8759046187079 - ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "noise_layers", - "type": "NOISE_LAYERS", - "link": null, - "slot_index": 0 - }, - { - "name": "iteration_opts", - "type": "ITERATION_OPTS", - "link": null - }, - { - "name": "custom_cfg", - "type": "CUSTOM_CFG", - "link": 50, - "slot_index": 2 - }, - { - "name": "sigma_schedule", - "type": "SIGMA_SCHEDULE", - "link": 51, - "slot_index": 3 - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } - } - ], - "outputs": [ - { - "name": "settings", - "type": "SAMPLE_SETTINGS", - "links": [ - 47 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_AnimateDiffSamplingSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 0, - "FreeNoise", - "comfy", - 0, - 0, - false, - "" - ] - }, - { - "id": 86, - "type": "Note", - "pos": [ - 3160.2307942589186, - 250.7002531609014 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Shoutout Akatz" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 40, - "type": "IPAdapterUnifiedLoader", - "pos": [ - 4427.911603734175, - 481.6610030536765 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 83, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 56 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 57 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "links": [ - 58 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 38, - "type": "ADE_AdjustWeightAllMult", - "pos": [ - 3115, - 498 - ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "prev_weight_adjust", - "type": "WEIGHT_ADJUST", - "link": null - } - ], - "outputs": [ - { - "name": "WEIGHT_ADJUST", - "type": "WEIGHT_ADJUST", - "links": [ - 54 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AdjustWeightAllMult", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 1.01, - false, - "" - ] - }, - { - "id": 88, - "type": "Reroute", - "pos": [ - 2860.8354071366402, - 64 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 133 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 136 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 89, - "type": "Reroute", - "pos": [ - 2860.8354071366402, - 105 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 89, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 134 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 139 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 90, - "type": "Reroute", - "pos": [ - 2860.8354071366402, - 143.3452987595907 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 90, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 135 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 141 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 72, - "type": "Note", - "pos": [ - -71.5386004779342, - -1041.1971880599176 - ], - "size": { - "0": 357.3516845703125, - "1": 135.6949462890625 - }, - "flags": {}, - "order": 10, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "4. I want the whole image to be included in the depth chamber, so I create a mask the size of the image. You could pass in masks of anything here." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 116, - "type": "Note", - "pos": [ - 1490, - 809 - ], - "size": { - "0": 380.91632080078125, - "1": 230.8916015625 - }, - "flags": {}, - "order": 11, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "5. finally we do all this " - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 93, - "type": "Reroute", - "pos": [ - 5183, - 99 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 97, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 139 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 140, - 143 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 94, - "type": "Reroute", - "pos": [ - 5180, - 136 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 98, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 141 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 142, - 144 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 125, - "type": "Note", - "pos": [ - 4337.8690841450125, - 699.6818760329338 - ], - "size": { - "0": 336.1888122558594, - "1": 206.84153747558594 - }, - "flags": {}, - "order": 12, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "enable this if you want" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 122, - "type": "FeatureMixer", - "pos": [ - -72.21454028302455, - -5668.483763498456 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 47, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 195 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 199 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 196 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.5, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.5, - false - ] - }, - { - "id": 48, - "type": "ControlNetLoaderAdvanced", - "pos": [ - 984, - 1273.8269519976366 - ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "timestep_keyframe", - "type": "TIMESTEP_KEYFRAME", - "link": null - } - ], - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 76 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoaderAdvanced", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "control_v11f1p_sd15_depth_fp16.safetensors" - ] - }, - { - "id": 56, - "type": "ControlNetLoaderAdvanced", - "pos": [ - 1339, - 1281.8269519976366 - ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "timestep_keyframe", - "type": "TIMESTEP_KEYFRAME", - "link": null - } - ], - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 80 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoaderAdvanced", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "control_v11p_sd15_lineart_fp16.safetensors" - ] - }, - { - "id": 113, - "type": "UpscaleModelLoader", - "pos": [ - 8493.811170891195, - 363.5270008378391 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 15, - "mode": 4, - "outputs": [ - { - "name": "UPSCALE_MODEL", - "type": "UPSCALE_MODEL", - "links": [ - 175 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "UpscaleModelLoader" - }, - "widgets_values": [ - "RealESRGAN_x2.pth" - ] - }, - { - "id": 28, - "type": "ADE_AnimateDiffLoaderGen1", - "pos": [ - 3481.5897819464126, - 358.87590461870786 - ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, - "flags": {}, - "order": 73, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 65 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 44, - "slot_index": 1 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": 45, - "slot_index": 2 - }, - { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": 46, - "slot_index": 3 - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": 47, - "slot_index": 5 - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": 48, - "slot_index": 6 - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": 49, - "slot_index": 7 - }, - { - "name": "per_block", - "type": "PER_BLOCK", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 56 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ADE_AnimateDiffLoaderGen1", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt", - "lcm avg(sqrt_linear,linear)" - ] - }, - { - "id": 95, - "type": "Reroute", - "pos": [ - 6320, - 110 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 104, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 143 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 145 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 96, - "type": "Reroute", - "pos": [ - 6320, - 140 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 105, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 144 - } - ], - "outputs": [ - { - "name": "", - "type": "CONDITIONING", - "links": [ - 146 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 78, - "type": "KSampler", - "pos": [ - 6735.217366877503, - 289.41342322069596 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 137, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 112 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 145 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 146 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 153 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 121 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.36 - ] - }, - { - "id": 80, - "type": "VAEDecode", - "pos": [ - 7092.217366877503, - 294.41342322069596 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 138, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 121 - }, - { - "name": "vae", - "type": "VAE", - "link": 147 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 278 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 172, - "type": "Reroute", - "pos": [ - 7635, - 38 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 131, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 273 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 274 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 121, - "type": "TimeFeatureNode", - "pos": [ - -449.21454028302617, - -5524.483763498457 - ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 16, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 195 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 193 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - 30, - "smooth", - 0.4, - 0 - ] - }, - { - "id": 123, - "type": "PreviewImage", - "pos": [ - 446.7854597169757, - -5708.483763498455 - ], - "size": { - "0": 443.01776123046875, - "1": 260.46453857421875 - }, - "flags": {}, - "order": 64, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 196 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 69, - "type": "FlexMaskDepthChamber", - "pos": [ - 487.78545971697525, - -5416.483763498458 - ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, - "flags": {}, - "order": 63, - "mode": 4, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": 199 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 193 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskDepthChamber" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 1, - 0.66, - "both", - "move_back" - ] - }, - { - "id": 22, - "type": "FlexMaskDepthChamber", - "pos": [ - 127, - -4746 - ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, - "flags": {}, - "order": 17, - "mode": 4, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": null - }, - { - "name": "feature", - "type": "FEATURE", - "link": null - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskDepthChamber" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.12, - 0.21, - "both", - "expand" - ] - }, - { - "id": 23, - "type": "TimeFeatureNode", - "pos": [ - 610, - -4500 - ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, - "flags": {}, - "order": 18, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 94 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "TimeFeatureNode" - }, - "widgets_values": [ - 20, - "bounce", - 0.5, - 0 - ] - }, - { - "id": 62, - "type": "FeatureMixer", - "pos": [ - 1010, - -4620 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 48, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 94 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 95 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 2.32, - 0, - 2.17, - 1, - 1, - 1, - 1, - 0, - 0, - 0.3, - 0.5, - false - ] - }, - { - "id": 20, - "type": "GetImageSizeAndCount", - "pos": [ - -308.6652802094187, - -1002.1707483866909 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 108 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "960 width", - "type": "INT", - "links": [ - 26 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "540 height", - "type": "INT", - "links": [ - 27 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "90 count", - "type": "INT", - "links": [ - 103 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 114, - "type": "Note", - "pos": [ - 326.3347197905803, - -1028.1707483866905 - ], - "size": { - "0": 484.20526123046875, - "1": 158.15316772460938 - }, - "flags": {}, - "order": 19, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "see above for additional example configuration of this node that i left behind. You can do a lot" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 173, - "type": "GetImageSizeAndCount", - "pos": [ - 7108, - 435 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 139, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 278 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 287 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "1584 width", - "type": "INT", - "links": [ - 283 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "888 height", - "type": "INT", - "links": [ - 284 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "90 count", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 170, - "type": "ImageCompositeMasked", - "pos": [ - 7981, - 278 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 141, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 285 - }, - { - "name": "source", - "type": "IMAGE", - "link": 287 - }, - { - "name": "mask", - "type": "MASK", - "link": 274 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 295 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 194, - "type": "GetNode", - "pos": { - "0": 8749, - "1": 664, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 336 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 99, - "type": "Reroute", - "pos": [ - 6315, - 43 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 129, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 150 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 154, - 273 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 98, - "type": "Reroute", - "pos": [ - 5181, - 38 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 128, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 149 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 150, - 151 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 97, - "type": "Reroute", - "pos": [ - 2861, - 33 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 127, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 518 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 149 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 175, - "type": "Reroute", - "pos": [ - 2863, - -7 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 311 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 289 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 246, - "type": "GetNode", - "pos": { - "0": -2131.515869140625, - "1": -988.43212890625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 439 - ], - "slot_index": 0 - } - ], - "title": "Get_init_images_resize", - "properties": {}, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 52, - "type": "SetNode", - "pos": { - "0": -2435.7626953125, - "1": -992, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 108, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 303 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_lineart", - "properties": { - "previousName": "lineart" - }, - "widgets_values": [ - "lineart" - ] - }, - { - "id": 43, - "type": "CR Apply LoRA Stack", - "pos": [ - 1524, - 612 - ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, - "flags": {}, - "order": 61, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 60 - }, - { - "name": "clip", - "type": "CLIP", - "link": 61 - }, - { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 62 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 65 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 63, - 64 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CR Apply LoRA Stack" - } - }, - { - "id": 77, - "type": "GetNode", - "pos": { - "0": 1017, - "1": 270, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 310, - 311 - ], - "slot_index": 0 - } - ], - "title": "Get_init_images_resize", - "properties": {}, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 193, - "type": "GetNode", - "pos": { - "0": 5864, - "1": 647, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 335 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 245, - "type": "GetNode", - "pos": { - "0": -2132.515869140625, - "1": -495.4327392578125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 438 - ], - "slot_index": 0 - } - ], - "title": "Get_mask_anchor", - "properties": {}, - "widgets_values": [ - "mask_anchor" - ] - }, - { - "id": 12, - "type": "VAEEncode", - "pos": [ - 1562, - 458 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 310 - }, - { - "name": "vae", - "type": "VAE", - "link": 12 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 467 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEEncode" - } - }, - { - "id": 256, - "type": "Reroute", - "pos": [ - 2867.44374280025, - -38.29445145366094 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 67, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 467 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 468 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 257, - "type": "Reroute", - "pos": [ - 4204, - -40 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 76, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 468 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 469 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 258, - "type": "Reroute", - "pos": [ - 5027, - -40 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 85, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 469 - } - ], - "outputs": [ - { - "name": "", - "type": "LATENT", - "links": [ - 470 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 7, - "type": "CLIPTextEncode", - "pos": [ - 1937, - 702 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 75, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 64 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 86 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "text, watermark" - ] - }, - { - "id": 4, - "type": "CheckpointLoaderSimple", - "pos": [ - 1094, - 453 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 25, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 60 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 61 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 12, - 133 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "photon_v1.safetensors" - ] - }, - { - "id": 8, - "type": "VAEDecode", - "pos": [ - 5898, - 437 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 133, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 100 - }, - { - "name": "vae", - "type": "VAE", - "link": 138 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 59, - "type": "Apply ControlNet Stack", - "pos": [ - 2411, - 622 - ], - "size": { - "0": 304.79998779296875, - "1": 66 - }, - "flags": {}, - "order": 84, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 85 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 86 - }, - { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": 84, - "slot_index": 2 - } - ], - "outputs": [ - { - "name": "CONDITIONING+", - "type": "CONDITIONING", - "links": [ - 134 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "CONDITIONING-", - "type": "CONDITIONING", - "links": [ - 135 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "Apply ControlNet Stack", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "shape": 1 - }, - { - "id": 176, - "type": "Reroute", - "pos": [ - 7423, - 2 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 66, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 289 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 509 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 277, - "type": "Reroute", - "pos": [ - -850, - -130 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 112, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 506 - } - ], - "outputs": [ - { - "name": "", - "type": "LOCATION", - "links": [ - 511 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 279, - "type": "Reroute", - "pos": [ - -850, - -100 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 114, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 508 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 512 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 280, - "type": "Reroute", - "pos": [ - 7970, - -110 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 113, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 510 - } - ], - "outputs": [ - { - "name": "", - "type": "LOCATION", - "links": [ - 513 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 281, - "type": "Reroute", - "pos": [ - 7970, - -80 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 118, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 511 - } - ], - "outputs": [ - { - "name": "", - "type": "LOCATION", - "links": [ - 514 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 282, - "type": "Reroute", - "pos": [ - 7970, - -50 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 119, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 512 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 515 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 111, - "type": "ImageCASharpening+", - "pos": [ - 8503, - 537 - ], - "size": { - "0": 310.79998779296875, - "1": 58 - }, - "flags": {}, - "order": 142, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 295 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 298, - 516 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCASharpening+" - }, - "widgets_values": [ - 0.8 - ] - }, - { - "id": 278, - "type": "Reroute", - "pos": [ - -850, - -160 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 110, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 507 - } - ], - "outputs": [ - { - "name": "", - "type": "LOCATION", - "links": [ - 510 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 39, - "type": "ADE_AnimateDiffLoRALoader", - "pos": [ - 3114, - 356 - ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null - } - ], - "outputs": [ - { - "name": "MOTION_LORA", - "type": "MOTION_LORA", - "links": [ - 45 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "AnimateDiff LoRA", - "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8, - "" - ] - }, - { - "id": 186, - "type": "GetNode", - "pos": { - "0": 500, - "1": -462, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 323 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 91, - "type": "Reroute", - "pos": [ - 5633, - 74 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 136 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 137, - 138 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 92, - "type": "Reroute", - "pos": [ - 6757, - 74 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 137 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 147 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 117, - "type": "Note", - "pos": [ - 180, - 232 - ], - "size": { - "0": 565.3340454101562, - "1": 455.6415710449219 - }, - "flags": {}, - "order": 28, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "0. In this workflow we demonstrate a way to use FlexMaskDepthChamber in combination with a proximity feature, both introduced by my node pack. \n\nBe sure to click the \"?\" icons for information about the nodes\n\nGive her a star https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\n\nFor other tutorials \nhttps://civitai.com/user/ryanontheinside\nhttps://www.youtube.com/@ryanontheinside" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 64, - "type": "ImageScale", - "pos": [ - 4420.911603734175, - 290.661003053677 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 52, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 521, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 98 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "nearest-exact", - 1000, - 1000, - "disabled" - ] - }, - { - "id": 13, - "type": "VHS_VideoCombine", - "pos": [ - 6185, - 452 - ], - "size": [ - 210, - 430 - ], - "flags": {}, - "order": 135, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 335 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03715.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 230, - "type": "PreviewFeature", - "pos": [ - -1000, - -919 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 115, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 527 - } - ], - "outputs": [ - { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", - "links": [ - 528 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "PreviewFeature" - }, - "widgets_values": [ - false - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 47, - "type": "Control Net Stacker", - "pos": [ - 1346, - 1457.8269519976366 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 76, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 81 - }, - { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": null - } - ], - "outputs": [ - { - "name": "CNET_STACK", - "type": "CONTROL_NET_STACK", - "links": [ - 83 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Control Net Stacker" - }, - "widgets_values": [ - 0.48, - 0, - 0.534 - ], - "color": "#223322", - "bgcolor": "#335533", - "shape": 1 - }, - { - "id": 55, - "type": "Control Net Stacker", - "pos": [ - 1717, - 1454 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 62, - "mode": 0, - "inputs": [ - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 80, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 82 - }, - { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": 83 - } - ], - "outputs": [ - { - "name": "CNET_STACK", - "type": "CONTROL_NET_STACK", - "links": [ - 84 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "Control Net Stacker" - }, - "widgets_values": [ - 0.48, - 0, - 0.47900000000000004 - ], - "color": "#223322", - "bgcolor": "#335533", - "shape": 1 - }, - { - "id": 287, - "type": "LoadImage", - "pos": [ - 4053, - 275 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": {}, - "order": 29, - "mode": 4, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 521 - ], - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "dmtvis1.webp", - "image" - ] - }, - { - "id": 304, - "type": "GetImageSizeAndCount", - "pos": [ - -5019, - 200 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 57, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 551 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "960 width", - "type": "INT", - "links": [ - 552 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "540 height", - "type": "INT", - "links": [ - 553 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "90 count", - "type": "INT", - "links": [ - 554 - ], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 306, - "type": "_mfc", - "pos": [ - -5061, - 536 - ], - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 555 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 556 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 255, - 255, - 0 - ] - }, - { - "id": 146, - "type": "SetNode", - "pos": { - "0": -2690, - "1": -879, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ - { - "name": "DAMODEL", - "type": "DAMODEL", - "link": 234 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_DA_MODEL", - "properties": { - "previousName": "DA_MODEL" - }, - "widgets_values": [ - "DA_MODEL" - ] - }, - { - "id": 15, - "type": "DownloadAndLoadDepthAnythingV2Model", - "pos": [ - -3434, - -760 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 30, - "mode": 0, - "outputs": [ - { - "name": "da_v2_model", - "type": "DAMODEL", - "links": [ - 15, - 234 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" - }, - "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] - }, - { - "id": 318, - "type": "ImageCompositeMasked", - "pos": [ - -3383, - -482 - ], - "size": { - "0": 315, - "1": 146 - }, - "flags": {}, - "order": 96, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 576 - }, - { - "name": "source", - "type": "IMAGE", - "link": 575 - }, - { - "name": "mask", - "type": "MASK", - "link": 574 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 578 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageCompositeMasked" - }, - "widgets_values": [ - 0, - 0, - false - ] - }, - { - "id": 49, - "type": "SetNode", - "pos": { - "0": -2462, - "1": -458, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 99, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 571 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 458, - 573 - ], - "slot_index": 0 - } - ], - "title": "Set_depth_maps", - "properties": { - "previousName": "depth_maps" - }, - "widgets_values": [ - "depth_maps" - ] - }, - { - "id": 115, - "type": "Note", - "pos": [ - -3174, - -199 - ], - "size": { - "0": 363.1609191894531, - "1": 148.97213745117188 - }, - "flags": {}, - "order": 31, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "2. We create some particles and fire them at one another. We add the particles to the depth map to give the model more to work with. For tutorials on the particle emitters, see my civitai page or youtube channel." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 26, - "type": "IPAdapterAdvanced", - "pos": [ - 4798, - 303 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 88, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 57 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 58 - }, - { - "name": "image", - "type": "IMAGE", - "link": 98, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": null - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 66, - 112 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "IPAdapterAdvanced" - }, - "widgets_values": [ - 0.5, - "style transfer", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 3, - "type": "KSampler", - "pos": [ - 5463, - 294 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 132, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 66 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 140 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 142 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 68 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 100, - 246 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 8, - 1, - "lcm", - "sgm_uniform", - 0.85 - ] - }, - { - "id": 104, - "type": "SetNode", - "pos": { - "0": -3789, - "1": -1046, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 300 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_init_img", - "properties": { - "previousName": "init_img" - }, - "widgets_values": [ - "init_img" - ] - }, - { - "id": 76, - "type": "SetNode", - "pos": { - "0": -3793, - "1": -922, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 78, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 302 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": [], - "slot_index": 0 - } - ], - "title": "Set_init_images_resize", - "properties": { - "previousName": "init_images_resize" - }, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 185, - "type": "SetNode", - "pos": { - "0": -3801, - "1": -803, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 322 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_audio", - "properties": { - "previousName": "audio" - }, - "widgets_values": [ - "audio" - ] - }, - { - "id": 326, - "type": "GetNode", - "pos": { - "0": -4906.345703125, - "1": 1453.89306640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 591 - ], - "slot_index": 0 - } - ], - "title": "Get_init_images_resize", - "properties": {}, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 327, - "type": "Reroute", - "pos": [ - -848, - 53 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 81, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 601 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 593 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 283, - "type": "Reroute", - "pos": [ - 1647, - 25 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 126, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 596 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 518 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 321, - "type": "Reroute", - "pos": [ - 671, - 68 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 92, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 585 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 594 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 71, - "type": "Note", - "pos": [ - -1494, - -555 - ], - "size": { - "0": 344.94537353515625, - "1": 142.8384552001953 - }, - "flags": {}, - "order": 33, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "3. We create a proximity feature between our two masked objects" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 333, - "type": "Note", - "pos": [ - 842, - -108 - ], - "size": [ - 504.4923902062144, - 62.73726822622507 - ], - "flags": {}, - "order": 34, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "here we remove the SKY and add the PARTICLES to the area we are sampling." - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 179, - "type": "VHS_LoadVideo", - "pos": [ - -4974, - -1051 - ], - "size": [ - 362.49700291695535, - 468.27901918144863 - ], - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 300, - 301 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [ - 322 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": [], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "pexels_bus.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 90, - "skip_first_frames": 68, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 90, - "skip_first_frames": 68, - "force_rate": 30, - "filename": "pexels_bus.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } - } - }, - { - "id": 6, - "type": "CLIPTextEncode", - "pos": [ - 1942, - 483 - ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, - "flags": {}, - "order": 74, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 63 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 85 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "two orbs colliding over metallic delicate intricate pattern of lava in the shape a city street, made of fiery burning lava string, mesh, pattern, weave, thin, pale, pipes, machinery, industrial, complex, engineering, ral-lava " - ] - }, - { - "id": 305, - "type": "GetNode", - "pos": { - "0": -5011, - "1": 70, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 551 - ], - "slot_index": 0 - } - ], - "title": "Get_init_images_resize", - "properties": {}, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 303, - "type": "EmptyImage", - "pos": [ - -5057, - 332 - ], - "size": [ - 315, - 130 - ], - "flags": {}, - "order": 70, - "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 552, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 553, - "widget": { - "name": "height" - } - }, - { - "name": "batch_size", - "type": "INT", - "link": 554, - "widget": { - "name": "batch_size" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 555 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EmptyImage" - }, - "widgets_values": [ - 512, - 512, - 1, - 0 - ] - }, - { - "id": 324, - "type": "GroundingDinoSAMSegment (segment anything)", - "pos": [ - -4485.345470156843, - 1294.8929658540392 - ], - "size": { - "0": 330, - "1": 122 - }, - "flags": {}, - "order": 58, - "mode": 0, - "inputs": [ - { - "name": "sam_model", - "type": "SAM_MODEL", - "link": 589 - }, - { - "name": "grounding_dino_model", - "type": "GROUNDING_DINO_MODEL", - "link": 590 - }, - { - "name": "image", - "type": "IMAGE", - "link": 591 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": [ - 600 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "GroundingDinoSAMSegment (segment anything)" - }, - "widgets_values": [ - "sky", - 0.3 - ] - }, - { - "id": 325, - "type": "SAMModelLoader (segment anything)", - "pos": [ - -4938.345470156843, - 1216.8929658540392 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 37, - "mode": 0, - "outputs": [ - { - "name": "SAM_MODEL", - "type": "SAM_MODEL", - "links": [ - 589 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SAMModelLoader (segment anything)" - }, - "widgets_values": [ - "sam_vit_h (2.56GB)" - ] - }, - { - "id": 323, - "type": "GroundingDinoModelLoader (segment anything)", - "pos": [ - -4931.345470156843, - 1342.8929658540392 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 38, - "mode": 0, - "outputs": [ - { - "name": "GROUNDING_DINO_MODEL", - "type": "GROUNDING_DINO_MODEL", - "links": [ - 590 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "GroundingDinoModelLoader (segment anything)" - }, - "widgets_values": [ - "GroundingDINO_SwinT_OGC (694MB)" - ] - }, - { - "id": 332, - "type": "SwapDevice", - "pos": [ - -4015.345470156843, - 1366.8929658540392 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 71, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": null - }, - { - "name": "mask", - "type": "MASK", - "link": 600 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": [ - 601 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "SwapDevice" - }, - "widgets_values": [ - "cpu" - ] - }, - { - "id": 317, - "type": "VHS_VideoCombine", - "pos": [ - -2561, - 41 - ], - "size": [ - 210, - 432 - ], - "flags": {}, - "order": 100, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 582 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 14, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03697.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 240, - "type": "LocationFromMask", - "pos": [ - -1895, - -686 - ], - "size": { - "0": 317.4000244140625, - "1": 122 - }, - "flags": {}, - "order": 106, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 438 - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": 458 - } - ], - "outputs": [ - { - "name": "LOCATION", - "type": "LOCATION", - "links": [ - 431, - 507 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LocationFromMask" - }, - "widgets_values": [ - "mask_boundary" - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 74, - "type": "GetNode", - "pos": { - "0": -342, - "1": -875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 108, - 203 - ], - "slot_index": 0 - } - ], - "title": "Get_depth_maps", - "properties": {}, - "widgets_values": [ - "depth_maps" - ] - }, - { - "id": 336, - "type": "Reroute", - "pos": [ - -263, - -776 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 116, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 603 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 605, - 607 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 337, - "type": "Reroute", - "pos": [ - -256, - -741 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 117, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 604 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 606, - 608 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 127, - "type": "FlexMaskDepthChamber", - "pos": [ - 368, - -826 - ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, - "flags": {}, - "order": 121, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 200 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 605 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 606 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 203 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 609 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskDepthChamber" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.03, - 0, - "z_front", - "move_forward" - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 25, - "type": "MaskToImage", - "pos": [ - 1041, - -981 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 123, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 610 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 37 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - }, - { - "id": 24, - "type": "VHS_VideoCombine", - "pos": [ - 1293, - -888 - ], - "size": [ - 210, - 432 - ], - "flags": {}, - "order": 125, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 37 - }, - { - "name": "audio", - "type": "*", - "link": 323 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 14, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03710.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 68, - "type": "Note", - "pos": [ - -4399, - -662 - ], - "size": { - "0": 372.2613220214844, - "1": 154.43922424316406 - }, - "flags": {}, - "order": 40, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "1. Downscale the input image so the KSampler doesnt explode, but downscale another copy of the image LESS. This is specifically for the depth maps, to avoid losing detail in the maps. Not actually sure if it makes a difference, but it sounds smart.\n" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 17, - "type": "GetImageSizeAndCount", - "pos": [ - -4526, - -967 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 55, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 301 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 122 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "1920 width", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 1 - }, - { - "name": "1080 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "90 count", - "type": "INT", - "links": [], - "shape": 3, - "slot_index": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 82, - "type": "ImageResizeKJ", - "pos": [ - -4218, - -974 - ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, - "flags": {}, - "order": 69, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 122 - }, - { - "name": "get_image_size", - "type": "IMAGE", - "link": null - }, - { - "name": "width_input", - "type": "INT", - "link": null, - "widget": { - "name": "width_input" - } - }, - { - "name": "height_input", - "type": "INT", - "link": null, - "widget": { - "name": "height_input" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 302, - 570, - 576 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ImageResizeKJ" - }, - "widgets_values": [ - 960, - 960, - "lanczos", - true, - 2, - 0, - 0, - "disabled" - ] - }, - { - "id": 307, - "type": "ParticleEmitter", - "pos": [ - -4655, - 45 - ], - "size": { - "0": 468.5999755859375, - "1": 382 - }, - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": 557 - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 559 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 1, - 0.35000000000000003, - 180, - 0, - 120, - 160, - 1, - "(255,0,0)", - 0, - 0, - 0, - 0 - ] - }, - { - "id": 308, - "type": "ParticleEmitter", - "pos": [ - -4643, - 489 - ], - "size": { - "0": 468.5999755859375, - "1": 382 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "previous_emitter", - "type": "PARTICLE_EMITTER", - "link": null - }, - { - "name": "emitter_movement", - "type": "EMITTER_MOVEMENT", - "link": null - }, - { - "name": "spring_joint_setting", - "type": "SPRING_JOINT_SETTING", - "link": null - }, - { - "name": "particle_modulation", - "type": "PARTICLE_MODULATION", - "link": null - } - ], - "outputs": [ - { - "name": "PARTICLE_EMITTER", - "type": "PARTICLE_EMITTER", - "links": [ - 557 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ParticleEmitter" - }, - "widgets_values": [ - 0, - 0.35000000000000003, - 0, - 0, - 120, - 150, - 1, - "(0,0,255)", - 0, - 0, - 0, - 0 - ] - }, - { - "id": 301, - "type": "ParticleEmissionMask", - "pos": [ - -4080, - 92 - ], - "size": { - "0": 315, - "1": 474 - }, - "flags": {}, - "order": 86, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 556 - }, - { - "name": "emitters", - "type": "PARTICLE_EMITTER", - "link": 559, - "slot_index": 1 - }, - { - "name": "vortices", - "type": "VORTEX", - "link": null - }, - { - "name": "wells", - "type": "GRAVITY_WELL", - "link": null - }, - { - "name": "static_bodies", - "type": "STATIC_BODY", - "link": null - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 566, - 574, - 585 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 558, - 560, - 561, - 575 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ParticleEmissionMask" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 2, - 4, - 0, - 0, - 0, - 5, - 0, - 0, - false, - 1, - 1 - ] - }, - { - "id": 311, - "type": "_mfc", - "pos": [ - -3642, - 198 - ], - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 94, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 560 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 562 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 255, - 0, - 0, - 0 - ] - }, - { - "id": 312, - "type": "_mfc", - "pos": [ - -3628, - 466 - ], - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 95, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 561 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 563 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 0, - 255, - 0 - ] - }, - { - "id": 309, - "type": "VHS_VideoCombine", - "pos": [ - -2863, - 33 - ], - "size": [ - 210, - 432 - ], - "flags": {}, - "order": 93, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 558 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 14, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03696.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 14, - "type": "DepthAnything_V2", - "pos": [ - -3385, - -616 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 79, - "mode": 0, - "inputs": [ - { - "name": "da_model", - "type": "DAMODEL", - "link": 15, - "slot_index": 0 - }, - { - "name": "images", - "type": "IMAGE", - "link": 570 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 567 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthAnything_V2" - } - }, - { - "id": 314, - "type": "DepthShapeModifier", - "pos": [ - -2907, - -602 - ], - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 91, - "mode": 0, - "inputs": [ - { - "name": "depth_map", - "type": "IMAGE", - "link": 567 - }, - { - "name": "mask", - "type": "MASK", - "link": 566 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 571, - 582 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DepthShapeModifier" - }, - "widgets_values": [ - 2, - 0, - 1, - 1 - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 319, - "type": "VHS_VideoCombine", - "pos": [ - -2283, - 48 - ], - "size": [ - 210, - 431 - ], - "flags": {}, - "order": 109, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 583 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 14, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03698.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 50, - "type": "LineartStandardPreprocessor", - "pos": [ - -3121, - -1002 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 578 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 303, - 583 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LineartStandardPreprocessor" - }, - "widgets_values": [ - 6, - 8, - 512 - ] - }, - { - "id": 310, - "type": "SetNode", - "pos": { - "0": -3193, - "1": 175, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 101, - "mode": 0, - "inputs": [ - { - "name": "MASK", - "type": "MASK", - "link": 562 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_mask_anchor", - "properties": { - "previousName": "mask_anchor" - }, - "widgets_values": [ - "mask_anchor" - ] - }, - { - "id": 243, - "type": "SetNode", - "pos": { - "0": -3205, - "1": 360, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 102, - "mode": 0, - "inputs": [ - { - "name": "MASK", - "type": "MASK", - "link": 563 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_mask_query", - "properties": { - "previousName": "mask_query" - }, - "widgets_values": [ - "mask_query" - ] - }, - { - "id": 244, - "type": "GetNode", - "pos": { - "0": -2148, - "1": -877, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 437 - ], - "slot_index": 0 - } - ], - "title": "Get_mask_query", - "properties": {}, - "widgets_values": [ - "mask_query" - ] - }, - { - "id": 206, - "type": "ProximityFeatureNode", - "pos": [ - -1480, - -857 - ], - "size": { - "0": 430.8000183105469, - "1": 122 - }, - "flags": {}, - "order": 111, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 439 - }, - { - "name": "anchor_locations", - "type": "LOCATION", - "link": 431 - }, - { - "name": "query_locations", - "type": "LOCATION", - "link": 393 - } - ], - "outputs": [ - { - "name": "proximity_feature", - "type": "FEATURE", - "links": [ - 508, - 527, - 603 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 604 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "ProximityFeatureNode" - }, - "widgets_values": [ - 30, - "minmax" - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 205, - "type": "LocationFromMask", - "pos": [ - -1880, - -907 - ], - "size": { - "0": 310.43048095703125, - "1": 95.0680160522461 - }, - "flags": {}, - "order": 107, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 437 - }, - { - "name": "depth_maps", - "type": "IMAGE", - "link": 573 - } - ], - "outputs": [ - { - "name": "LOCATION", - "type": "LOCATION", - "links": [ - 393, - 506 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "LocationFromMask" - }, - "widgets_values": [ - "mask_boundary" - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 231, - "type": "PreviewImage", - "pos": [ - -950, - -748 - ], - "size": [ - 549.6893936852398, - 327.1048672679128 - ], - "flags": {}, - "order": 120, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 528 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 21, - "type": "_mfc", - "pos": [ - -51, - -655 - ], - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 82, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 30 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 200 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "IMAGE", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "_mfc" - }, - "widgets_values": [ - 0, - 0, - 0, - 0 - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 335, - "type": "FlexMaskWarp", - "pos": [ - 779, - -820 - ], - "size": { - "0": 315, - "1": 290 - }, - "flags": {}, - "order": 122, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 609 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 607 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 608 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 610, - 612 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskWarp" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "perlin", - 0.1, - 500, - 3 - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 322, - "type": "MaskComposite", - "pos": [ - 814, - -1 - ], - "size": { - "0": 315, - "1": 126 - }, - "flags": {}, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": null - }, - { - "name": "source", - "type": "MASK", - "link": 593 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "subtract" - ] - }, - { - "id": 328, - "type": "MaskComposite", - "pos": [ - 1200, - 37 - ], - "size": { - "0": 315, - "1": 126 - }, - "flags": {}, - "order": 124, - "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "MASK", - "link": 594 - }, - { - "name": "source", - "type": "MASK", - "link": 612 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 596 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskComposite" - }, - "widgets_values": [ - 0, - 0, - "add" - ] - }, - { - "id": 42, - "type": "CR LoRA Stack", - "pos": [ - 1069, - 680 - ], - "size": { - "0": 315, - "1": 342 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "lora_stack", - "type": "LORA_STACK", - "link": null - } - ], - "outputs": [ - { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 62 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CR LoRA Stack" - }, - "widgets_values": [ - "On", - "AnimateLCM_sd15_t2v_lora.safetensors", - 1, - 1, - "On", - "add_detail.safetensors", - 1, - 1, - "On", - "ral-lava-sd15.safetensors", - 1, - 1 - ] - }, - { - "id": 44, - "type": "SetLatentNoiseMask", - "pos": [ - 5200, - 365 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 130, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 470 - }, - { - "name": "mask", - "type": "MASK", - "link": 151 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 68 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 100, - "type": "SetLatentNoiseMask", - "pos": [ - 6504, - 363 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 136, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 152 - }, - { - "name": "mask", - "type": "MASK", - "link": 154 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 153 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 79, - "type": "NNLatentUpscale", - "pos": [ - 6061, - 278 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 134, - "mode": 0, - "inputs": [ - { - "name": "latent", - "type": "LATENT", - "link": 246 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 152 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "NNLatentUpscale" - }, - "widgets_values": [ - "SD 1.x", - 1.6500000000000001 - ] - }, - { - "id": 174, - "type": "ImageScale", - "pos": [ - 7547, - 272 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 140, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 509 - }, - { - "name": "width", - "type": "INT", - "link": 283, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 284, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 285 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScale" - }, - "widgets_values": [ - "bilinear", - 512, - 512, - "disabled" - ] - }, - { - "id": 216, - "type": "ProximityVisualizer", - "pos": [ - 8861, - -230 - ], - "size": { - "0": 319.20001220703125, - "1": 214 - }, - "flags": {}, - "order": 144, - "mode": 0, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 516 - }, - { - "name": "anchor_locations", - "type": "LOCATION", - "link": 513 - }, - { - "name": "query_locations", - "type": "LOCATION", - "link": 514 - }, - { - "name": "proximity_feature", - "type": "FEATURE", - "link": 515 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 418 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ProximityVisualizer" - }, - "widgets_values": [ - "(255,0,0)", - "(255,0,255)", - "(255,255,255)", - "(255,255,255)", - 0.8 - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 233, - "type": "VHS_VideoCombine", - "pos": [ - 9223, - -303 - ], - "size": [ - 416.640570361611, - 499.37127685546875 - ], - "flags": {}, - "order": 148, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 418 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/ffmpeg-gif", - "dither": "sierra2_4a", - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03718.gif", - "subfolder": "", - "type": "output", - "format": "video/ffmpeg-gif", - "frame_rate": 20 - } - } - } - }, - { - "id": 81, - "type": "VHS_VideoCombine", - "pos": [ - 9117, - 285 - ], - "size": [ - 257.5010156250737, - 457.7505798339844 - ], - "flags": {}, - "order": 145, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 177 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 336 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03717.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 20 - } - } - } - }, - { - "id": 232, - "type": "VHS_VideoCombine", - "pos": [ - 10052, - 259 - ], - "size": [ - 658.5394466164435, - 634.0221172884678 - ], - "flags": {}, - "order": 146, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 417 - }, - { - "name": "audio", - "type": "*", - "link": null - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/ffmpeg-gif", - "dither": "sierra2_4a", - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03716.gif", - "subfolder": "", - "type": "output", - "format": "video/ffmpeg-gif", - "frame_rate": 20 - } - } - } - }, - { - "id": 112, - "type": "ImageUpscaleWithModel", - "pos": [ - 8851, - 407 - ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, - "flags": {}, - "order": 143, - "mode": 4, - "inputs": [ - { - "name": "upscale_model", - "type": "UPSCALE_MODEL", - "link": 175, - "slot_index": 0 - }, - { - "name": "image", - "type": "IMAGE", - "link": 298 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 177, - 417, - 613 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageUpscaleWithModel" - } - }, - { - "id": 338, - "type": "ImageInterval", - "pos": [ - 9541.018356636252, - 595.6964080163126 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 147, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 613 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 614 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageInterval" - }, - "widgets_values": [ - 5, - 13, - 95 - ] - }, - { - "id": 339, - "type": "PreviewImage", - "pos": [ - 9891, - 956 - ], - "size": [ - 210, - 246 - ], - "flags": {}, - "order": 149, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 614 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - } - ], - "links": [ - [ - 12, - 4, - 2, - 12, - 1, - "VAE" - ], - [ - 13, - 8, - 0, - 13, - 0, - "IMAGE" - ], - [ - 15, - 15, - 0, - 14, - 0, - "DAMODEL" - ], - [ - 26, - 20, - 1, - 19, - 0, - "INT" - ], - [ - 27, - 20, - 2, - 19, - 1, - "INT" - ], - [ - 30, - 19, - 0, - 21, - 0, - "IMAGE" - ], - [ - 37, - 25, - 0, - 24, - 0, - "IMAGE" - ], - [ - 44, - 33, - 0, - 28, - 1, - "CONTEXT_OPTIONS" - ], - [ - 45, - 39, - 0, - 28, - 2, - "MOTION_LORA" - ], - [ - 46, - 36, - 0, - 28, - 3, - "AD_SETTINGS" - ], - [ - 47, - 29, - 0, - 28, - 5, - "SAMPLE_SETTINGS" - ], - [ - 48, - 32, - 0, - 28, - 6, - "MULTIVAL" - ], - [ - 49, - 34, - 0, - 28, - 7, - "MULTIVAL" - ], - [ - 50, - 35, - 0, - 29, - 2, - "CUSTOM_CFG" - ], - [ - 51, - 30, - 0, - 29, - 3, - "SIGMA_SCHEDULE" - ], - [ - 53, - 37, - 0, - 36, - 0, - "PE_ADJUST" - ], - [ - 54, - 38, - 0, - 36, - 1, - "WEIGHT_ADJUST" - ], - [ - 56, - 28, - 0, - 40, - 0, - "MODEL" - ], - [ - 57, - 40, - 0, - 26, - 0, - "MODEL" - ], - [ - 58, - 40, - 1, - 26, - 1, - "IPADAPTER" - ], - [ - 60, - 4, - 0, - 43, - 0, - "MODEL" - ], - [ - 61, - 4, - 1, - 43, - 1, - "CLIP" - ], - [ - 62, - 42, - 0, - 43, - 2, - "LORA_STACK" - ], - [ - 63, - 43, - 1, - 6, - 0, - "CLIP" - ], - [ - 64, - 43, - 1, - 7, - 0, - "CLIP" - ], - [ - 65, - 43, - 0, - 28, - 0, - "MODEL" - ], - [ - 66, - 26, - 0, - 3, - 0, - "MODEL" - ], - [ - 68, - 44, - 0, - 3, - 3, - "LATENT" - ], - [ - 76, - 48, - 0, - 47, - 0, - "CONTROL_NET" - ], - [ - 80, - 56, - 0, - 55, - 0, - "CONTROL_NET" - ], - [ - 81, - 57, - 0, - 47, - 1, - "IMAGE" - ], - [ - 82, - 58, - 0, - 55, - 1, - "IMAGE" - ], - [ - 83, - 47, - 0, - 55, - 2, - "CONTROL_NET_STACK" - ], - [ - 84, - 55, - 0, - 59, - 2, - "CONTROL_NET_STACK" - ], - [ - 85, - 6, - 0, - 59, - 0, - "CONDITIONING" - ], - [ - 86, - 7, - 0, - 59, - 1, - "CONDITIONING" - ], - [ - 94, - 23, - 0, - 62, - 0, - "FEATURE" - ], - [ - 95, - 62, - 1, - 63, - 0, - "IMAGE" - ], - [ - 98, - 64, - 0, - 26, - 2, - "IMAGE" - ], - [ - 100, - 3, - 0, - 8, - 0, - "LATENT" - ], - [ - 103, - 20, - 3, - 19, - 2, - "INT" - ], - [ - 108, - 74, - 0, - 20, - 0, - "IMAGE" - ], - [ - 112, - 26, - 0, - 78, - 0, - "MODEL" - ], - [ - 121, - 78, - 0, - 80, - 0, - "LATENT" - ], - [ - 122, - 17, - 0, - 82, - 0, - "IMAGE" - ], - [ - 133, - 4, - 2, - 88, - 0, - "*" - ], - [ - 134, - 59, - 0, - 89, - 0, - "*" - ], - [ - 135, - 59, - 1, - 90, - 0, - "*" - ], - [ - 136, - 88, - 0, - 91, - 0, - "*" - ], - [ - 137, - 91, - 0, - 92, - 0, - "*" - ], - [ - 138, - 91, - 0, - 8, - 1, - "VAE" - ], - [ - 139, - 89, - 0, - 93, - 0, - "*" - ], - [ - 140, - 93, - 0, - 3, - 1, - "CONDITIONING" - ], - [ - 141, - 90, - 0, - 94, - 0, - "*" - ], - [ - 142, - 94, - 0, - 3, - 2, - "CONDITIONING" - ], - [ - 143, - 93, - 0, - 95, - 0, - "*" - ], - [ - 144, - 94, - 0, - 96, - 0, - "*" - ], - [ - 145, - 95, - 0, - 78, - 1, - "CONDITIONING" - ], - [ - 146, - 96, - 0, - 78, - 2, - "CONDITIONING" - ], - [ - 147, - 92, - 0, - 80, - 1, - "VAE" - ], - [ - 149, - 97, - 0, - 98, - 0, - "*" - ], - [ - 150, - 98, - 0, - 99, - 0, - "*" - ], - [ - 151, - 98, - 0, - 44, - 1, - "MASK" - ], - [ - 152, - 79, - 0, - 100, - 0, - "LATENT" - ], - [ - 153, - 100, - 0, - 78, - 3, - "LATENT" - ], - [ - 154, - 99, - 0, - 100, - 1, - "MASK" - ], - [ - 175, - 113, - 0, - 112, - 0, - "UPSCALE_MODEL" - ], - [ - 177, - 112, - 0, - 81, - 0, - "IMAGE" - ], - [ - 193, - 121, - 1, - 69, - 2, - "FEATURE_PIPE" - ], - [ - 195, - 121, - 0, - 122, - 0, - "FEATURE" - ], - [ - 196, - 122, - 1, - 123, - 0, - "IMAGE" - ], - [ - 199, - 122, - 0, - 69, - 1, - "FEATURE" - ], - [ - 200, - 21, - 0, - 127, - 0, - "MASK" - ], - [ - 203, - 74, - 0, - 127, - 3, - "IMAGE" - ], - [ - 234, - 15, - 0, - 146, - 0, - "*" - ], - [ - 246, - 3, - 0, - 79, - 0, - "LATENT" - ], - [ - 273, - 99, - 0, - 172, - 0, - "*" - ], - [ - 274, - 172, - 0, - 170, - 2, - "MASK" - ], - [ - 278, - 80, - 0, - 173, - 0, - "IMAGE" - ], - [ - 283, - 173, - 1, - 174, - 1, - "INT" - ], - [ - 284, - 173, - 2, - 174, - 2, - "INT" - ], - [ - 285, - 174, - 0, - 170, - 0, - "IMAGE" - ], - [ - 287, - 173, - 0, - 170, - 1, - "IMAGE" - ], - [ - 289, - 175, - 0, - 176, - 0, - "*" - ], - [ - 295, - 170, - 0, - 111, - 0, - "IMAGE" - ], - [ - 298, - 111, - 0, - 112, - 1, - "IMAGE" - ], - [ - 300, - 179, - 0, - 104, - 0, - "IMAGE" - ], - [ - 301, - 179, - 0, - 17, - 0, - "IMAGE" - ], - [ - 302, - 82, - 0, - 76, - 0, - "IMAGE" - ], - [ - 303, - 50, - 0, - 52, - 0, - "IMAGE" - ], - [ - 310, - 77, - 0, - 12, - 0, - "IMAGE" - ], - [ - 311, - 77, - 0, - 175, - 0, - "*" - ], - [ - 322, - 179, - 2, - 185, - 0, - "*" - ], - [ - 323, - 186, - 0, - 24, - 1, - "AUDIO" - ], - [ - 335, - 193, - 0, - 13, - 1, - "AUDIO" - ], - [ - 336, - 194, - 0, - 81, - 1, - "AUDIO" - ], - [ - 393, - 205, - 0, - 206, - 2, - "LOCATION" - ], - [ - 417, - 112, - 0, - 232, - 0, - "IMAGE" - ], - [ - 418, - 216, - 0, - 233, - 0, - "IMAGE" - ], - [ - 431, - 240, - 0, - 206, - 1, - "LOCATION" - ], - [ - 437, - 244, - 0, - 205, - 0, - "MASK" - ], - [ - 438, - 245, - 0, - 240, - 0, - "MASK" - ], - [ - 439, - 246, - 0, - 206, - 0, - "IMAGE" - ], - [ - 458, - 49, - 0, - 240, - 1, - "IMAGE" - ], - [ - 467, - 12, - 0, - 256, - 0, - "*" - ], - [ - 468, - 256, - 0, - 257, - 0, - "*" - ], - [ - 469, - 257, - 0, - 258, - 0, - "*" - ], - [ - 470, - 258, - 0, - 44, - 0, - "LATENT" - ], - [ - 506, - 205, - 0, - 277, - 0, - "*" - ], - [ - 507, - 240, - 0, - 278, - 0, - "*" - ], - [ - 508, - 206, - 0, - 279, - 0, - "*" - ], - [ - 509, - 176, - 0, - 174, - 0, - "IMAGE" - ], - [ - 510, - 278, - 0, - 280, - 0, - "*" - ], - [ - 511, - 277, - 0, - 281, - 0, - "*" - ], - [ - 512, - 279, - 0, - 282, - 0, - "*" - ], - [ - 513, - 280, - 0, - 216, - 1, - "LOCATION" - ], - [ - 514, - 281, - 0, - 216, - 2, - "LOCATION" - ], - [ - 515, - 282, - 0, - 216, - 3, - "FEATURE" - ], - [ - 516, - 111, - 0, - 216, - 0, - "IMAGE" - ], - [ - 518, - 283, - 0, - 97, - 0, - "*" - ], - [ - 521, - 287, - 0, - 64, - 0, - "IMAGE" - ], - [ - 527, - 206, - 0, - 230, - 0, - "FEATURE" - ], - [ - 528, - 230, - 0, - 231, - 0, - "IMAGE" - ], - [ - 551, - 305, - 0, - 304, - 0, - "IMAGE" - ], - [ - 552, - 304, - 1, - 303, - 0, - "INT" - ], - [ - 553, - 304, - 2, - 303, - 1, - "INT" - ], - [ - 554, - 304, - 3, - 303, - 2, - "INT" - ], - [ - 555, - 303, - 0, - 306, - 0, - "IMAGE" - ], - [ - 556, - 306, - 0, - 301, - 0, - "MASK" - ], - [ - 557, - 308, - 0, - 307, - 0, - "PARTICLE_EMITTER" - ], - [ - 558, - 301, - 1, - 309, - 0, - "IMAGE" - ], - [ - 559, - 307, - 0, - 301, - 1, - "PARTICLE_EMITTER" - ], - [ - 560, - 301, - 1, - 311, - 0, - "IMAGE" - ], - [ - 561, - 301, - 1, - 312, - 0, - "IMAGE" - ], - [ - 562, - 311, - 0, - 310, - 0, - "*" - ], - [ - 563, - 312, - 0, - 243, - 0, - "MASK" - ], - [ - 566, - 301, - 0, - 314, - 1, - "MASK" - ], - [ - 567, - 14, - 0, - 314, - 0, - "IMAGE" - ], - [ - 570, - 82, - 0, - 14, - 1, - "IMAGE" - ], - [ - 571, - 314, - 0, - 49, - 0, - "IMAGE" - ], - [ - 573, - 49, - 0, - 205, - 1, - "IMAGE" - ], - [ - 574, - 301, - 0, - 318, - 2, - "MASK" - ], - [ - 575, - 301, - 1, - 318, - 1, - "IMAGE" - ], - [ - 576, - 82, - 0, - 318, - 0, - "IMAGE" - ], - [ - 578, - 318, - 0, - 50, - 0, - "IMAGE" - ], - [ - 582, - 314, - 0, - 317, - 0, - "IMAGE" - ], - [ - 583, - 50, - 0, - 319, - 0, - "IMAGE" - ], - [ - 585, - 301, - 0, - 321, - 0, - "*" - ], - [ - 589, - 325, - 0, - 324, - 0, - "SAM_MODEL" - ], - [ - 590, - 323, - 0, - 324, - 1, - "GROUNDING_DINO_MODEL" - ], - [ - 591, - 326, - 0, - 324, - 2, - "IMAGE" - ], - [ - 593, - 327, - 0, - 322, - 1, - "MASK" - ], - [ - 594, - 321, - 0, - 328, - 0, - "MASK" - ], - [ - 596, - 328, - 0, - 283, - 0, - "*" - ], - [ - 600, - 324, - 1, - 332, - 1, - "MASK" - ], - [ - 601, - 332, - 1, - 327, - 0, - "*" - ], - [ - 603, - 206, - 0, - 336, - 0, - "*" - ], - [ - 604, - 206, - 1, - 337, - 0, - "*" - ], - [ - 605, - 336, - 0, - 127, - 1, - "FEATURE" - ], - [ - 606, - 337, - 0, - 127, - 2, - "FEATURE_PIPE" - ], - [ - 607, - 336, - 0, - 335, - 1, - "FEATURE" - ], - [ - 608, - 337, - 0, - 335, - 2, - "FEATURE_PIPE" - ], - [ - 609, - 127, - 0, - 335, - 0, - "MASK" - ], - [ - 610, - 335, - 0, - 25, - 0, - "MASK" - ], - [ - 612, - 335, - 0, - 328, - 1, - "MASK" - ], - [ - 613, - 112, - 0, - 338, - 0, - "IMAGE" - ], - [ - 614, - 338, - 0, - 339, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Load Image", - "bounding": [ - -4997, - -1133, - 1484, - 1038 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Preprocessing", - "bounding": [ - -3467, - -1111, - 1306, - 863 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Proximity Feature", - "bounding": [ - -2166, - -1107, - 1793, - 721 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Depth Chamber", - "bounding": [ - -365, - -1108, - 2053, - 748 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Control net", - "bounding": [ - 952, - 1174, - 1155, - 451 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Animate Diff", - "bounding": [ - 3043, - 177, - 978, - 1075 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sampler1", - "bounding": [ - 5166, - 173, - 1290, - 808 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load Model", - "bounding": [ - 949, - 177, - 2062, - 990 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "IPAdapter", - "bounding": [ - 4036, - 172, - 1111, - 817 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sampler2", - "bounding": [ - 6480, - 176, - 881, - 421 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Upscale", - "bounding": [ - 8431, - 174, - 953, - 771 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Alternate configuration", - "bounding": [ - -517, - -5817, - 2411, - 1839 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Alternate configuration1", - "bounding": [ - 991, - -5410, - 1518, - 463 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Paste Orig", - "bounding": [ - 7394, - 175, - 1000, - 279 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Mask1", - "bounding": [ - -5072, - -52, - 1790, - 1108 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Mask2", - "bounding": [ - -4993, - 1102, - 1336, - 537 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.15091133223263858, - "offset": [ - 6301.276164596855, - 2445.0030396651223 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/ryanontheinside_audio_classification.json b/examples/ryanontheinside_audio_classification.json deleted file mode 100644 index c4d9b08..0000000 --- a/examples/ryanontheinside_audio_classification.json +++ /dev/null @@ -1,2274 +0,0 @@ -{ - "last_node_id": 109, - "last_link_id": 200, - "nodes": [ - { - "id": 50, - "type": "PreviewAudio", - "pos": [ - -457.3854243971404, - 398.0789760818987 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 126 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 51, - "type": "PreviewAudio", - "pos": [ - -460.3854243971404, - 539.0789760818983 - ], - "size": { - "0": 315, - "1": 76.00000762939453 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 127 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 52, - "type": "PreviewAudio", - "pos": [ - -448.38542439714047, - 696.0789760818984 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 128 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 48, - "type": "PreviewAudio", - "pos": [ - -463.3854243971404, - 115.07897608189853 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 124 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 65, - "type": "FrequencyFilterCustom", - "pos": [ - 540, - 791 - ], - "size": { - "0": 344.3999938964844, - "1": 111.91889190673828 - }, - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": 142, - "slot_index": 0 - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 138 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterCustom" - }, - "widgets_values": [ - "lowpass", - 4, - 1000 - ] - }, - { - "id": 68, - "type": "FrequencyFilterPreset", - "pos": [ - 85, - 801 - ], - "size": { - "0": 405.5999755859375, - "1": 58 - }, - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 142 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "remove_rumble" - ] - }, - { - "id": 64, - "type": "AudioFilter", - "pos": [ - 566, - 683 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 137 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 138, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 139 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 62, - "type": "FrequencyFilterPreset", - "pos": [ - 190, - 511 - ], - "size": { - "0": 344.3999938964844, - "1": 58 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 135 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "brighten_mix" - ] - }, - { - "id": 63, - "type": "PreviewAudio", - "pos": [ - 951, - 425 - ], - "size": { - "0": 315, - "1": 76.00001525878906 - }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 136 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 55, - "type": "AudioFilter", - "pos": [ - 559, - 243 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 25, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 133 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 130, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 131 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 57, - "type": "PreviewAudio", - "pos": [ - 947, - 211 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 131 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 56, - "type": "FrequencyFilterPreset", - "pos": [ - 125, - 186 - ], - "size": { - "0": 344.3999938964844, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "previous_filter", - "type": "FREQUENCY_FILTER", - "link": null - } - ], - "outputs": [ - { - "name": "FREQUENCY_FILTER", - "type": "FREQUENCY_FILTER", - "links": [ - 130 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FrequencyFilterPreset" - }, - "widgets_values": [ - "isolate_kick_drum" - ] - }, - { - "id": 66, - "type": "PreviewAudio", - "pos": [ - 947, - 685 - ], - "size": { - "0": 315, - "1": 76.00001525878906 - }, - "flags": {}, - "order": 33, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 139 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 60, - "type": "Reroute", - "pos": [ - 56, - 371 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 132 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 133, - 134, - 137 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 78, - "type": "Reroute", - "pos": [ - -522, - 1012 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 153 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 154 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 79, - "type": "Reroute", - "pos": [ - 2302, - 1008 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 29, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 154 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 156 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 61, - "type": "AudioFilter", - "pos": [ - 559, - 448 - ], - "size": { - "0": 252, - "1": 46 - }, - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 134 - }, - { - "name": "filters", - "type": "FREQUENCY_FILTER", - "link": 135, - "slot_index": 1 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 136 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AudioFilter" - } - }, - { - "id": 49, - "type": "PreviewAudio", - "pos": [ - -455.3854243971404, - 255.07897608189876 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 125 - } - ], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 58, - "type": "Note", - "pos": [ - -990.384267683644, - 23.09884316828786 - ], - "size": { - "0": 405.9549865722656, - "1": 185.00900268554688 - }, - "flags": {}, - "order": 3, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "This classifies and separates the audio using a pretrained model.\n\nClick the ?s for more info" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 70, - "type": "Reroute", - "pos": [ - -519, - 978 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 143 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 145 - ], - "slot_index": 0 - } - ], - "title": "Drums", - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 75, - "type": "Reroute", - "pos": [ - -522, - 1047 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 15, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 167 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 148 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 81, - "type": "PreviewImage", - "pos": [ - 3027.324109375, - 328.0279923095703 - ], - "size": { - "0": 766.489990234375, - "1": 420.3683166503906 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 158 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 80, - "type": "FeatureMixer", - "pos": [ - 2604.324109375, - 317.0279923095703 - ], - "size": { - "0": 367.79998779296875, - "1": 318 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 157 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 170 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 158 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 0.1 - ] - }, - { - "id": 43, - "type": "AudioFeatureExtractor", - "pos": [ - 2246.324109375, - 320.0279923095703 - ], - "size": { - "0": 361.20001220703125, - "1": 78 - }, - "flags": {}, - "order": 35, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 155 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 156 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 157 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 172 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 72, - "type": "Reroute", - "pos": [ - 2306, - 974 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 145 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 155, - 183 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 95, - "type": "VHS_VideoCombine", - "pos": [ - 5420, - -240 - ], - "size": [ - 315, - 848.4444444444445 - ], - "flags": {}, - "order": 46, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 181 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 184 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00691-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 83, - "type": "FlexMaskMorph", - "pos": [ - 4710, - -230 - ], - "size": { - "0": 315, - "1": 266 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK", - "link": 177 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 178 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 179 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 180 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FlexMaskMorph" - }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "erode", - 5, - 10 - ] - }, - { - "id": 98, - "type": "FeatureToWeightsStrategy", - "pos": [ - 4720, - 330 - ], - "size": { - "0": 378, - "1": 28.334583282470703 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 188 - } - ], - "outputs": [ - { - "name": "WEIGHTS_STRATEGY", - "type": "WEIGHTS_STRATEGY", - "links": [], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FeatureToWeightsStrategy" - } - }, - { - "id": 97, - "type": "VHS_VideoCombine", - "pos": [ - 5520, - 680 - ], - "size": [ - 315, - 848.4444444444445 - ], - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 195 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 186 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_00690-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 102, - "type": "Note", - "pos": [ - 4710, - 210 - ], - "size": { - "0": 430.4454040527344, - "1": 83.45369720458984 - }, - "flags": {}, - "order": 4, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "for the sake of limiting the complexity and number of custom node packs required for this demonstration of audio classification, I am excluding the IPAdapter target. See the other workflows posted on my civit profile to work with Features and IPAdapters" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 92, - "type": "ImageToMask", - "pos": [ - 4430, - -230 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 36, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 176 - } - ], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 177 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageToMask" - }, - "widgets_values": [ - "red" - ] - }, - { - "id": 96, - "type": "Reroute", - "pos": [ - 5294, - 983 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 183 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 184, - 186 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 76, - "type": "Reroute", - "pos": [ - 4377, - 1045 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 148 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 174 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 45, - "type": "DownloadOpenUnmixModel", - "pos": [ - -1457, - 88 - ], - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 5, - "mode": 0, - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 121 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 44, - "type": "AudioSeparator", - "pos": [ - -949, - 321 - ], - "size": { - "0": 317.4000244140625, - "1": 158 - }, - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 121, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 191 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 166 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 124, - 132 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 125, - 143 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 126 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 127 - ], - "shape": 3, - "slot_index": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 128 - ], - "shape": 3, - "slot_index": 4 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 153 - ], - "shape": 3, - "slot_index": 5 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 89, - "type": "Reroute", - "pos": [ - -1199, - 361 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 190 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 166, - 167 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 105, - "type": "Note", - "pos": [ - -1215, - 655 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 6, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "for expediency I am using a video load, but you can directly load audio as well" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 106, - "type": "VHS_LoadAudioUpload", - "pos": [ - -1218, - 757 - ], - "size": { - "0": 226.8000030517578, - "1": 130 - }, - "flags": {}, - "order": 7, - "mode": 4, - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "music_square.mp4", - "start_time": 0, - "duration": 0, - "choose audio to upload": "image" - } - }, - { - "id": 59, - "type": "Note", - "pos": [ - 1349, - 183 - ], - "size": { - "0": 420.59600830078125, - "1": 192.9949951171875 - }, - "flags": {}, - "order": 8, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "The audio can be further manipulated with rudimentary frequency filters.\n\nThere are presets and custom filters, and they can be chained together.\n\nUltimately, we only need to process the audio to extract features from it to drive things in our pipelines, not to actually make it sound good!\n\nThis step will often be unnecessary " - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 82, - "type": "Note", - "pos": [ - 2299, - 24 - ], - "size": { - "0": 771.9349365234375, - "1": 179.70501708984375 - }, - "flags": {}, - "order": 9, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "Here we can extract features from the audio to drive things later.\n\nYou can optionally manipulate the features by fiddling with the feature mixer, and preview your changes. The settings I have left in the mixer will essentially do nothing to the features. " - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 103, - "type": "Note", - "pos": [ - 4700, - -464 - ], - "size": { - "0": 416.1949157714844, - "1": 144.5247344970703 - }, - "flags": {}, - "order": 10, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "We can then use the features to manipulate a target.\n\nAt the time of this demonstration, the targets include masks, images, and IPAdapters. I have picked arbitrary mask and image targets, but there are many of each!\n\nFor more info\nhttps://github.com/ryanontheinside/ComfyUI_RyanOnTheInside/" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 107, - "type": "FlexImageKaleidoscope", - "pos": [ - 4912, - 734 - ], - "size": { - "0": 344.3999938964844, - "1": 352.36376953125 - }, - "flags": {}, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 192 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 193 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 194 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 195 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexImageKaleidoscope" - }, - "widgets_values": [ - 1, - 0, - "segments", - "relative", - 8, - 0.5, - 0.5, - 1, - 0, - 0, - 1 - ] - }, - { - "id": 93, - "type": "Reroute", - "pos": [ - 4420, - 420 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 174 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 176, - 192 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 90, - "type": "Reroute", - "pos": [ - 4410, - 330 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 170 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE", - "links": [ - 178, - 188, - 193 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 91, - "type": "Reroute", - "pos": [ - 4410, - 370 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 172 - } - ], - "outputs": [ - { - "name": "", - "type": "FEATURE_PIPE", - "links": [ - 179, - 194 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 104, - "type": "VHS_LoadVideo", - "pos": [ - -1498, - 208 - ], - "size": [ - 235.1999969482422, - 658.5777723524305 - ], - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 190 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [ - 191 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "music_square.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 90, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 90, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "music_square.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 94, - "type": "MaskToImage", - "pos": [ - 5089, - -228 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 180 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 181 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - } - } - ], - "links": [ - [ - 121, - 45, - 0, - 44, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 124, - 44, - 0, - 48, - 0, - "AUDIO" - ], - [ - 125, - 44, - 1, - 49, - 0, - "AUDIO" - ], - [ - 126, - 44, - 2, - 50, - 0, - "AUDIO" - ], - [ - 127, - 44, - 3, - 51, - 0, - "AUDIO" - ], - [ - 128, - 44, - 4, - 52, - 0, - "AUDIO" - ], - [ - 130, - 56, - 0, - 55, - 1, - "FREQUENCY_FILTER" - ], - [ - 131, - 55, - 0, - 57, - 0, - "AUDIO" - ], - [ - 132, - 44, - 0, - 60, - 0, - "*" - ], - [ - 133, - 60, - 0, - 55, - 0, - "AUDIO" - ], - [ - 134, - 60, - 0, - 61, - 0, - "AUDIO" - ], - [ - 135, - 62, - 0, - 61, - 1, - "FREQUENCY_FILTER" - ], - [ - 136, - 61, - 0, - 63, - 0, - "AUDIO" - ], - [ - 137, - 60, - 0, - 64, - 0, - "AUDIO" - ], - [ - 138, - 65, - 0, - 64, - 1, - "FREQUENCY_FILTER" - ], - [ - 139, - 64, - 0, - 66, - 0, - "AUDIO" - ], - [ - 142, - 68, - 0, - 65, - 0, - "FREQUENCY_FILTER" - ], - [ - 143, - 44, - 1, - 70, - 0, - "*" - ], - [ - 145, - 70, - 0, - 72, - 0, - "*" - ], - [ - 148, - 75, - 0, - 76, - 0, - "*" - ], - [ - 153, - 44, - 5, - 78, - 0, - "*" - ], - [ - 154, - 78, - 0, - 79, - 0, - "*" - ], - [ - 155, - 72, - 0, - 43, - 0, - "AUDIO" - ], - [ - 156, - 79, - 0, - 43, - 1, - "FEATURE_PIPE" - ], - [ - 157, - 43, - 0, - 80, - 0, - "FEATURE" - ], - [ - 158, - 80, - 1, - 81, - 0, - "IMAGE" - ], - [ - 166, - 89, - 0, - 44, - 2, - "IMAGE" - ], - [ - 167, - 89, - 0, - 75, - 0, - "*" - ], - [ - 170, - 80, - 0, - 90, - 0, - "*" - ], - [ - 172, - 43, - 1, - 91, - 0, - "*" - ], - [ - 174, - 76, - 0, - 93, - 0, - "*" - ], - [ - 176, - 93, - 0, - 92, - 0, - "IMAGE" - ], - [ - 177, - 92, - 0, - 83, - 0, - "MASK" - ], - [ - 178, - 90, - 0, - 83, - 1, - "FEATURE" - ], - [ - 179, - 91, - 0, - 83, - 2, - "FEATURE_PIPE" - ], - [ - 180, - 83, - 0, - 94, - 0, - "MASK" - ], - [ - 181, - 94, - 0, - 95, - 0, - "IMAGE" - ], - [ - 183, - 72, - 0, - 96, - 0, - "*" - ], - [ - 184, - 96, - 0, - 95, - 1, - "AUDIO" - ], - [ - 186, - 96, - 0, - 97, - 1, - "AUDIO" - ], - [ - 188, - 90, - 0, - 98, - 0, - "FEATURE" - ], - [ - 190, - 104, - 0, - 89, - 0, - "*" - ], - [ - 191, - 104, - 2, - 44, - 1, - "AUDIO" - ], - [ - 192, - 93, - 0, - 107, - 0, - "IMAGE" - ], - [ - 193, - 90, - 0, - 107, - 1, - "FEATURE" - ], - [ - 194, - 91, - 0, - 107, - 2, - "FEATURE_PIPE" - ], - [ - 195, - 107, - 0, - 97, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Separate Audio", - "bounding": [ - -1523, - -70, - 1480, - 994 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Filter Audio", - "bounding": [ - -17, - -76, - 2121, - 1008 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Audio Features", - "bounding": [ - 2167, - -77, - 1666, - 975 - ], - "color": "#3f789e", - "font_size": 24 - }, - { - "title": "Manipulate Target", - "bounding": [ - 4117, - -354, - 1840, - 1504 - ], - "color": "#3f789e", - "font_size": 24 - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.19784466890013533, - "offset": [ - 2250.364932192568, - 1936.2073084754438 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/seek_tutorial.json b/examples/seek_tutorial.json deleted file mode 100644 index 6c97b3d..0000000 --- a/examples/seek_tutorial.json +++ /dev/null @@ -1,3319 +0,0 @@ -{ - "last_node_id": 359, - "last_link_id": 590, - "nodes": [ - { - "id": 123, - "type": "PreviewImage", - "pos": [ - -50, - -2510 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 48, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 171 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 136, - "type": "PreviewAudio", - "pos": [ - -1130, - -2660 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 36, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 198 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 152, - "type": "RhythmFeatureExtractor", - "pos": [ - -1930, - -2040 - ], - "size": { - "0": 529.199951171875, - "1": 146 - }, - "flags": {}, - "order": 19, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 251 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 244 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 245 - ], - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 298 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RhythmFeatureExtractor" - }, - "widgets_values": [ - "beat_locations", - 30, - 4 - ] - }, - { - "id": 126, - "type": "PreviewImage", - "pos": [ - 630, - -2390 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 33, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 172 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 133, - "type": "PreviewAudio", - "pos": [ - -1130, - -2760 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 34, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 188 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 175, - "type": "GetImageSizeAndCount", - "pos": [ - -2360, - -2300 - ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 20, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 287 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 288 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "1920 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "1072 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "676 count", - "type": "INT", - "links": [], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 178, - "type": "FlexVideoSeek", - "pos": [ - 50, - -2080 - ], - "size": { - "0": 434.6160888671875, - "1": 194 - }, - "flags": {}, - "order": 47, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 296 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 297 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 298 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 301 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoSeek" - }, - "widgets_values": [ - 1, - "relative", - "seek", - 0, - false - ] - }, - { - "id": 110, - "type": "AudioSeparator", - "pos": [ - -1930, - -2250 - ], - "size": { - "0": 415.8000183105469, - "1": 158 - }, - "flags": {}, - "order": 25, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 385 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 141 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 288 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 188 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 189, - 190 - ], - "slot_index": 3, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 198 - ], - "slot_index": 4, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 146 - ], - "slot_index": 5, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 134, - "type": "PreviewAudio", - "pos": [ - -1630, - -2460 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 35, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 189 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 111, - "type": "DownloadOpenUnmixModel", - "pos": [ - -2360, - -2660 - ], - "size": { - "0": 541.800048828125, - "1": 58 - }, - "flags": {}, - "order": 0, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 154, - "type": "GetImageSizeAndCount", - "pos": [ - -3070, - -2700 - ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 12, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 253 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "512 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "512 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "676 count", - "type": "INT", - "links": [ - 254 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 153, - "type": "EmptyImageFromAudio", - "pos": [ - -3610, - -2710 - ], - "size": { - "0": 336, - "1": 106 - }, - "flags": {}, - "order": 9, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 252 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 253 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyImageFromAudio" - }, - "widgets_values": [ - 30, - 512, - 512 - ] - }, - { - "id": 125, - "type": "FeatureCombine", - "pos": [ - -580, - -2380 - ], - "size": { - "0": 453.5999755859375, - "1": 150 - }, - "flags": {}, - "order": 42, - "mode": 4, - "inputs": [ - { - "name": "feature1", - "type": "FEATURE", - "link": 191 - }, - { - "name": "feature2", - "type": "FEATURE", - "link": 193 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 297 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 171 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureCombine" - }, - "widgets_values": [ - "add", - 0.62, - 1, - false - ] - }, - { - "id": 229, - "type": "VHS_LoadAudioUpload", - "pos": [ - -5061, - 998 - ], - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Leakage (Original).mp3", - "start_time": 22.54, - "duration": 5.5, - "choose audio to upload": "image" - } - }, - { - "id": 114, - "type": "AudioFeatureExtractor", - "pos": [ - -1330, - -2350 - ], - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 37, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 190 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 146 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 191 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 122, - "type": "FeatureMixer", - "pos": [ - -1100, - -2030 - ], - "size": { - "0": 428.4000244140625, - "1": 342 - }, - "flags": { - "collapsed": false - }, - "order": 24, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 245 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 193 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 172 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 2, - false - ] - }, - { - "id": 320, - "type": "AudioSeparator", - "pos": [ - -1770, - -4640 - ], - "size": { - "0": 415.8000183105469, - "1": 158 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 526 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 527 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 528 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 537 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [], - "slot_index": 2, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 538 - ], - "slot_index": 3, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [], - "slot_index": 4, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 530 - ], - "slot_index": 5, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 322, - "type": "AudioFeatureExtractor", - "pos": [ - -330, - -4850 - ], - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 529 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 530 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 533 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 532 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 324, - "type": "FeatureSmoothing", - "pos": [ - -330, - -4710 - ], - "size": { - "0": 478.8000183105469, - "1": 174 - }, - "flags": { - "collapsed": false - }, - "order": 43, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 533 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 531 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 534 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 7, - 0.3, - 1, - false - ] - }, - { - "id": 328, - "type": "AudioCombine", - "pos": [ - -1050, - -4570 - ], - "size": { - "0": 390.5999755859375, - "1": 102 - }, - "flags": {}, - "order": 26, - "mode": 0, - "inputs": [ - { - "name": "audio1", - "type": "AUDIO", - "link": 537 - }, - { - "name": "audio2", - "type": "AUDIO", - "link": 538 - } - ], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 529, - 539 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioCombine" - }, - "widgets_values": [ - 0.5, - 0.5 - ] - }, - { - "id": 329, - "type": "PreviewAudio", - "pos": [ - -720, - -4760 - ], - "size": { - "0": 315, - "1": 76.00023651123047 - }, - "flags": {}, - "order": 39, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 539 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 321, - "type": "DownloadOpenUnmixModel", - "pos": [ - -1850, - -4750 - ], - "size": { - "0": 541.800048828125, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 526 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 330, - "type": "GetImageSizeAndCount", - "pos": [ - -2227, - -4589 - ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 540 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 528 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "512 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "512 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "330 count", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 326, - "type": "EmptyImageFromAudio", - "pos": [ - -2495, - -4867 - ], - "size": { - "0": 336, - "1": 113.79998779296875 - }, - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 535 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 540 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyImageFromAudio" - }, - "widgets_values": [ - 30, - 512, - 512 - ] - }, - { - "id": 323, - "type": "FlexVideoDirection", - "pos": [ - -368, - -4496 - ], - "size": { - "0": 466.279296875, - "1": 170 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 542 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 531 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 532 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 543 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoDirection" - }, - "widgets_values": [ - 0.99, - "relative", - "direction", - 0 - ] - }, - { - "id": 325, - "type": "PreviewImage", - "pos": [ - 389, - -4940 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 534 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 327, - "type": "Reroute", - "pos": [ - -2570, - -4690 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 536 - } - ], - "outputs": [ - { - "name": "", - "type": "AUDIO", - "links": [ - 527, - 535, - 547 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 346, - "type": "PreviewAudio", - "pos": [ - -690, - -6310 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 31, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 564 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 349, - "type": "EmptyImageFromAudio", - "pos": [ - -3170, - -6360 - ], - "size": { - "0": 336, - "1": 106 - }, - "flags": {}, - "order": 8, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 570 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 571 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyImageFromAudio" - }, - "widgets_values": [ - 30, - 512, - 512 - ] - }, - { - "id": 350, - "type": "GetImageSizeAndCount", - "pos": [ - -2630, - -6350 - ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 11, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 571 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": null, - "shape": 3 - }, - { - "name": "512 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "512 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "330 count", - "type": "INT", - "links": [ - 548 - ], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 351, - "type": "GetImageSizeAndCount", - "pos": [ - -1920, - -5950 - ], - "size": { - "0": 277.20001220703125, - "1": 86 - }, - "flags": {}, - "order": 18, - "mode": 4, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 572 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 553 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "1920 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "1072 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "330 count", - "type": "INT", - "links": [], - "slot_index": 3, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 338, - "type": "AudioFeatureExtractor", - "pos": [ - -830, - -6080 - ], - "size": { - "0": 541.800048828125, - "1": 78 - }, - "flags": {}, - "order": 32, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 554 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 555 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 558 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "amplitude_envelope" - ] - }, - { - "id": 342, - "type": "PreviewImage", - "pos": [ - -120, - -5670 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 27, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 560 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 348, - "type": "RhythmFeatureExtractor", - "pos": [ - -1520, - -5680 - ], - "size": { - "0": 529.199951171875, - "1": 146 - }, - "flags": {}, - "order": 17, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 568 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 569 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 556 - ], - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 575 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RhythmFeatureExtractor" - }, - "widgets_values": [ - "beat_locations", - 30, - 4 - ] - }, - { - "id": 336, - "type": "AudioSeparator", - "pos": [ - -1560, - -6140 - ], - "size": { - "0": 415.8000183105469, - "1": 158 - }, - "flags": {}, - "order": 23, - "mode": 4, - "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 551 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 552 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 553 - } - ], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": null, - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 562 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [ - 554, - 563, - 580 - ], - "slot_index": 3, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": [ - 564 - ], - "slot_index": 4, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 555 - ], - "slot_index": 5, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, - "widgets_values": [ - 30 - ] - }, - { - "id": 355, - "type": "RhythmFeatureExtractor", - "pos": [ - -1710, - -6450 - ], - "size": { - "0": 529.199951171875, - "1": 146 - }, - "flags": {}, - "order": 30, - "mode": 4, - "inputs": [ - { - "name": "video_frames", - "type": "IMAGE", - "link": 578 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 580 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 576 - ], - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RhythmFeatureExtractor" - }, - "widgets_values": [ - "onset_strength", - 30, - 4 - ] - }, - { - "id": 354, - "type": "PreviewImage", - "pos": [ - 330, - -7100 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 51, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 582 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 356, - "type": "FeatureSmoothing", - "pos": [ - -250, - -6910 - ], - "size": { - "0": 367.79998779296875, - "1": 174 - }, - "flags": {}, - "order": 44, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 581 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": null, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 582 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 5, - 0.3, - 1, - false - ] - }, - { - "id": 353, - "type": "FeatureMixer", - "pos": [ - -870, - -6940 - ], - "size": { - "0": 428.4000244140625, - "1": 342 - }, - "flags": { - "collapsed": false - }, - "order": 40, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 576 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 581 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.31, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 5, - false - ] - }, - { - "id": 335, - "type": "VHS_VideoCombine", - "pos": [ - 1040, - -6180 - ], - "size": [ - 214.7587890625, - 433.14502831780203 - ], - "flags": {}, - "order": 52, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 549 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 550 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03125-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 339, - "type": "FeatureMixer", - "pos": [ - -660, - -5680 - ], - "size": { - "0": 428.4000244140625, - "1": 342 - }, - "flags": { - "collapsed": false - }, - "order": 22, - "mode": 4, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 556 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 559 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 560 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.31, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 5, - false - ] - }, - { - "id": 341, - "type": "FeatureCombine", - "pos": [ - -140, - -6030 - ], - "size": { - "0": 453.5999755859375, - "1": 150 - }, - "flags": {}, - "order": 41, - "mode": 4, - "inputs": [ - { - "name": "feature1", - "type": "FEATURE", - "link": 558 - }, - { - "name": "feature2", - "type": "FEATURE", - "link": 559 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 574 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 557 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FeatureCombine" - }, - "widgets_values": [ - "subtract", - 0.62, - 1, - false - ] - }, - { - "id": 340, - "type": "PreviewImage", - "pos": [ - 460, - -5900 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 46, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 557 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 332, - "type": "VHS_VideoCombine", - "pos": [ - 863, - -4147 - ], - "size": [ - 315, - 490 - ], - "flags": {}, - "order": 54, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 543 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 547 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03100-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } - }, - { - "id": 352, - "type": "FlexVideoSeek", - "pos": [ - 480, - -6170 - ], - "size": { - "0": 434.6160888671875, - "1": 194 - }, - "flags": {}, - "order": 45, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 573 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 574 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 575 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 549 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "FlexVideoSeek" - }, - "widgets_values": [ - 1, - "relative", - "seek", - 0, - false - ] - }, - { - "id": 333, - "type": "VHS_LoadAudioUpload", - "pos": [ - -4632, - -5627 - ], - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 3, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 550, - 552, - 569, - 570 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Leakage (Original).mp3", - "start_time": 33.54, - "duration": 11, - "choose audio to upload": "image" - } - }, - { - "id": 36, - "type": "VHS_LoadAudioUpload", - "pos": [ - -5412, - -2735 - ], - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 4, - "mode": 4, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 141, - 195, - 244, - 252 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Leakage (Original).mp3", - "start_time": 0, - "duration": 22.54, - "choose audio to upload": "image" - } - }, - { - "id": 218, - "type": "DownloadOpenUnmixModel", - "pos": [ - -6039, - -2003 - ], - "size": { - "0": 541.800048828125, - "1": 58 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", - "links": [ - 385, - 551 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" - }, - "widgets_values": [ - "umxl" - ] - }, - { - "id": 104, - "type": "VHS_VideoCombine", - "pos": [ - 1142, - -2652 - ], - "size": [ - 214.7587890625, - 433.14502831780203 - ], - "flags": {}, - "order": 53, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 301 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 195 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03123-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 102, - "type": "VHS_LoadVideo", - "pos": [ - -2738, - -2162 - ], - "size": [ - 247.455078125, - 379.25460318006606 - ], - "flags": {}, - "order": 15, - "mode": 4, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - }, - { - "name": "frame_load_cap", - "type": "INT", - "link": 254, - "widget": { - "name": "frame_load_cap" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 251, - 287, - 296 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "slot_index": 1, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 2, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "1.2.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 1500, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 1500, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "1.2.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 334, - "type": "VHS_LoadVideo", - "pos": [ - -2290, - -5840 - ], - "size": [ - 247.455078125, - 379.25460318006606 - ], - "flags": {}, - "order": 14, - "mode": 4, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - }, - { - "name": "frame_load_cap", - "type": "INT", - "link": 548, - "widget": { - "name": "frame_load_cap" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 568, - 572, - 573, - 578 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "slot_index": 1, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 2, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "22.2.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 1500, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 1500, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "22.2.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 345, - "type": "PreviewAudio", - "pos": [ - -712, - -6201 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 29, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 563 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 344, - "type": "PreviewAudio", - "pos": [ - -680, - -6476 - ], - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 28, - "mode": 4, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 562 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 301, - "type": "VHS_LoadVideo", - "pos": [ - -2853, - -4364 - ], - "size": [ - 247.455078125, - 403.25460318006606 - ], - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 542 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "slot_index": 1, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": [], - "slot_index": 2, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "3.1.mp4", - "force_rate": 30, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 30, - "filename": "3.1.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - }, - "muted": false - } - } - }, - { - "id": 331, - "type": "VHS_LoadAudioUpload", - "pos": [ - -3402, - -4667 - ], - "size": { - "0": 243.818359375, - "1": 130 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "audio", - "type": "AUDIO", - "links": [ - 536 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Leakage (Original).mp3", - "start_time": 22.54, - "duration": 11, - "choose audio to upload": "image" - } - } - ], - "links": [ - [ - 141, - 36, - 0, - 110, - 1, - "AUDIO" - ], - [ - 146, - 110, - 5, - 114, - 1, - "FEATURE_PIPE" - ], - [ - 171, - 125, - 1, - 123, - 0, - "IMAGE" - ], - [ - 172, - 122, - 1, - 126, - 0, - "IMAGE" - ], - [ - 188, - 110, - 1, - 133, - 0, - "AUDIO" - ], - [ - 189, - 110, - 3, - 134, - 0, - "AUDIO" - ], - [ - 190, - 110, - 3, - 114, - 0, - "AUDIO" - ], - [ - 191, - 114, - 0, - 125, - 0, - "FEATURE" - ], - [ - 193, - 122, - 0, - 125, - 1, - "FEATURE" - ], - [ - 195, - 36, - 0, - 104, - 1, - "AUDIO" - ], - [ - 198, - 110, - 4, - 136, - 0, - "AUDIO" - ], - [ - 244, - 36, - 0, - 152, - 1, - "AUDIO" - ], - [ - 245, - 152, - 0, - 122, - 0, - "FEATURE" - ], - [ - 251, - 102, - 0, - 152, - 0, - "IMAGE" - ], - [ - 252, - 36, - 0, - 153, - 0, - "AUDIO" - ], - [ - 253, - 153, - 0, - 154, - 0, - "IMAGE" - ], - [ - 254, - 154, - 3, - 102, - 2, - "INT" - ], - [ - 287, - 102, - 0, - 175, - 0, - "IMAGE" - ], - [ - 288, - 175, - 0, - 110, - 2, - "IMAGE" - ], - [ - 296, - 102, - 0, - 178, - 0, - "IMAGE" - ], - [ - 297, - 125, - 0, - 178, - 1, - "FEATURE" - ], - [ - 298, - 152, - 1, - 178, - 2, - "FEATURE_PIPE" - ], - [ - 301, - 178, - 0, - 104, - 0, - "IMAGE" - ], - [ - 385, - 218, - 0, - 110, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 526, - 321, - 0, - 320, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 527, - 327, - 0, - 320, - 1, - "AUDIO" - ], - [ - 528, - 330, - 0, - 320, - 2, - "IMAGE" - ], - [ - 529, - 328, - 0, - 322, - 0, - "AUDIO" - ], - [ - 530, - 320, - 5, - 322, - 1, - "FEATURE_PIPE" - ], - [ - 531, - 324, - 0, - 323, - 1, - "FEATURE" - ], - [ - 532, - 322, - 1, - 323, - 2, - "FEATURE_PIPE" - ], - [ - 533, - 322, - 0, - 324, - 0, - "FEATURE" - ], - [ - 534, - 324, - 1, - 325, - 0, - "IMAGE" - ], - [ - 535, - 327, - 0, - 326, - 0, - "AUDIO" - ], - [ - 536, - 331, - 0, - 327, - 0, - "*" - ], - [ - 537, - 320, - 1, - 328, - 0, - "AUDIO" - ], - [ - 538, - 320, - 3, - 328, - 1, - "AUDIO" - ], - [ - 539, - 328, - 0, - 329, - 0, - "AUDIO" - ], - [ - 540, - 326, - 0, - 330, - 0, - "IMAGE" - ], - [ - 542, - 301, - 0, - 323, - 0, - "IMAGE" - ], - [ - 543, - 323, - 0, - 332, - 0, - "IMAGE" - ], - [ - 547, - 327, - 0, - 332, - 1, - "AUDIO" - ], - [ - 548, - 350, - 3, - 334, - 2, - "INT" - ], - [ - 549, - 352, - 0, - 335, - 0, - "IMAGE" - ], - [ - 550, - 333, - 0, - 335, - 1, - "AUDIO" - ], - [ - 551, - 218, - 0, - 336, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 552, - 333, - 0, - 336, - 1, - "AUDIO" - ], - [ - 553, - 351, - 0, - 336, - 2, - "IMAGE" - ], - [ - 554, - 336, - 3, - 338, - 0, - "AUDIO" - ], - [ - 555, - 336, - 5, - 338, - 1, - "FEATURE_PIPE" - ], - [ - 556, - 348, - 0, - 339, - 0, - "FEATURE" - ], - [ - 557, - 341, - 1, - 340, - 0, - "IMAGE" - ], - [ - 558, - 338, - 0, - 341, - 0, - "FEATURE" - ], - [ - 559, - 339, - 0, - 341, - 1, - "FEATURE" - ], - [ - 560, - 339, - 1, - 342, - 0, - "IMAGE" - ], - [ - 562, - 336, - 1, - 344, - 0, - "AUDIO" - ], - [ - 563, - 336, - 3, - 345, - 0, - "AUDIO" - ], - [ - 564, - 336, - 4, - 346, - 0, - "AUDIO" - ], - [ - 568, - 334, - 0, - 348, - 0, - "IMAGE" - ], - [ - 569, - 333, - 0, - 348, - 1, - "AUDIO" - ], - [ - 570, - 333, - 0, - 349, - 0, - "AUDIO" - ], - [ - 571, - 349, - 0, - 350, - 0, - "IMAGE" - ], - [ - 572, - 334, - 0, - 351, - 0, - "IMAGE" - ], - [ - 573, - 334, - 0, - 352, - 0, - "IMAGE" - ], - [ - 574, - 341, - 0, - 352, - 1, - "FEATURE" - ], - [ - 575, - 348, - 1, - 352, - 2, - "FEATURE_PIPE" - ], - [ - 576, - 355, - 0, - 353, - 0, - "FEATURE" - ], - [ - 578, - 334, - 0, - 355, - 0, - "IMAGE" - ], - [ - 580, - 336, - 3, - 355, - 1, - "AUDIO" - ], - [ - 581, - 353, - 0, - 356, - 0, - "FEATURE" - ], - [ - 582, - 356, - 1, - 354, - 0, - "IMAGE" - ] - ], - "groups": [ - { - "title": "Audio Utility", - "bounding": [ - 3893, - 3111, - 1610, - 1406 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Audio Effects", - "bounding": [ - 2196, - -1799, - 1352, - 968 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - } - ], - "config": {}, - "extra": { - "ds": { - "scale": 0.1, - "offset": [ - 7430.396765572208, - 6945.398232376904 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/examples/slilme_tutorial.json b/examples/slilme_tutorialVERSION2.json similarity index 80% rename from examples/slilme_tutorial.json rename to examples/slilme_tutorialVERSION2.json index 73c6a77..4e43cbb 100644 --- a/examples/slilme_tutorial.json +++ b/examples/slilme_tutorialVERSION2.json @@ -1,18 +1,18 @@ { - "last_node_id": 201, - "last_link_id": 366, + "last_node_id": 209, + "last_link_id": 380, "nodes": [ { "id": 70, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 5110.983725773823, - 2768.9627533500015 + 5110.98388671875, + 2768.962646484375 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, "order": 19, "mode": 0, @@ -21,24 +21,28 @@ "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", "link": 127, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", "link": 128, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -55,6 +59,12 @@ "widget": { "name": "seed_override" } + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -64,8 +74,8 @@ "links": [ 124 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -82,21 +92,20 @@ "comfy", 0, 0, - false, - "" + false ] }, { "id": 72, "type": "ADE_MultivalDynamic", "pos": [ - 4760.983725773823, - 2568.9627533500015 + 4760.98388671875, + 2568.962646484375 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, "order": 0, "mode": 0, @@ -104,7 +113,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -114,8 +124,8 @@ "links": [ 125 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Scale 🎭🅐🅓", @@ -128,21 +138,20 @@ } }, "widgets_values": [ - 1.1400000000000001, - "" + 1.1400000000000001 ] }, { "id": 73, "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 5110.983725773823, - 2458.9627533500015 + 5110.98388671875, + 2458.962646484375 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, "order": 1, "mode": 0, @@ -150,12 +159,14 @@ { "name": "prev_context", "type": "CONTEXT_OPTIONS", - "link": null + "link": null, + "shape": 7 }, { "name": "view_opts", "type": "VIEW_OPTS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -165,8 +176,8 @@ "links": [ 121 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Context Options 🎭🅐🅓", @@ -195,13 +206,13 @@ "id": 74, "type": "ADE_MultivalDynamic", "pos": [ - 4760.983725773823, - 2458.9627533500015 + 4760.98388671875, + 2458.962646484375 + ], + "size": [ + 265.1632385253906, + 58 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, "order": 2, "mode": 0, @@ -209,7 +220,8 @@ { "name": "mask_optional", "type": "MASK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -232,21 +244,20 @@ } }, "widgets_values": [ - 1.1, - "" + 1.1 ] }, { "id": 75, "type": "ADE_CustomCFGSimple", "pos": [ - 4760.983725773823, - 2668.9627533500015 + 4760.98388671875, + 2668.962646484375 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, "order": 3, "mode": 0, @@ -254,7 +265,8 @@ { "name": "cfg_extras", "type": "CFG_EXTRAS", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -276,21 +288,20 @@ } }, "widgets_values": [ - 2, - "" + 2 ] }, { "id": 77, "type": "ADE_AdjustPESweetspotStretch", "pos": [ - 4760.983725773823, - 2768.9627533500015 + 4760.98388671875, + 2768.962646484375 + ], + "size": [ + 253.07310485839844, + 106 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, "order": 4, "mode": 0, @@ -298,7 +309,8 @@ { "name": "prev_pe_adjust", "type": "PE_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -322,21 +334,20 @@ "widgets_values": [ 16, 18, - false, - "" + false ] }, { "id": 78, "type": "ADE_AdjustWeightAllMult", "pos": [ - 4740.983725773823, - 2298.9627533500015 + 4740.98388671875, + 2298.962646484375 + ], + "size": [ + 270.3999938964844, + 82 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, "order": 5, "mode": 0, @@ -344,7 +355,8 @@ { "name": "prev_weight_adjust", "type": "WEIGHT_ADJUST", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -367,21 +379,20 @@ }, "widgets_values": [ 1.01, - false, - "" + false ] }, { "id": 79, "type": "ADE_AnimateDiffLoRALoader", "pos": [ - 4788.983725773823, - 2133.9627533500015 + 4788.98388671875, + 2133.962646484375 + ], + "size": [ + 261.19134521484375, + 82 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, "flags": {}, "order": 6, "mode": 0, @@ -389,7 +400,8 @@ { "name": "prev_motion_lora", "type": "MOTION_LORA", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -399,8 +411,8 @@ "links": [ 122 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "AnimateDiff LoRA", @@ -414,23 +426,22 @@ }, "widgets_values": [ "LiquidAF-0-1.safetensors", - 0.8, - "" + 0.8 ] }, { "id": 69, "type": "ADE_AnimateDiffLoaderGen1", "pos": [ - 5110.983725773823, - 2158.9627533500015 + 5110.98388671875, + 2158.962646484375 + ], + "size": [ + 271.7644958496094, + 242 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 29, + "order": 33, "mode": 0, "inputs": [ { @@ -442,47 +453,55 @@ "name": "context_options", "type": "CONTEXT_OPTIONS", "link": 121, - "slot_index": 1 + "slot_index": 1, + "shape": 7 }, { "name": "motion_lora", "type": "MOTION_LORA", "link": 122, - "slot_index": 2 + "slot_index": 2, + "shape": 7 }, { "name": "ad_settings", "type": "AD_SETTINGS", "link": 123, - "slot_index": 3 + "slot_index": 3, + "shape": 7 }, { "name": "ad_keyframes", "type": "AD_KEYFRAMES", - "link": null + "link": null, + "shape": 7 }, { "name": "sample_settings", "type": "SAMPLE_SETTINGS", "link": 124, - "slot_index": 5 + "slot_index": 5, + "shape": 7 }, { "name": "scale_multival", "type": "MULTIVAL", "link": 125, - "slot_index": 6 + "slot_index": 6, + "shape": 7 }, { "name": "effect_multival", "type": "MULTIVAL", "link": 126, - "slot_index": 7 + "slot_index": 7, + "shape": 7 }, { "name": "per_block", "type": "PER_BLOCK", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -493,8 +512,8 @@ 132, 192 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -510,58 +529,19 @@ "lcm avg(sqrt_linear,linear)" ] }, - { - "id": 129, - "type": "LoadImage", - "pos": [ - 8057.064797627498, - 2216.240312695332 - ], - "size": { - "0": 315, - "1": 314.00006103515625 - }, - "flags": {}, - "order": 7, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 289 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "pasted/image (115).png", - "image" - ] - }, { "id": 165, "type": "Reroute", "pos": [ - 7114.3663594199315, - 2396.2375429897693 + 7114.3662109375, + 2396.237548828125 ], "size": [ 75, 26 ], "flags": {}, - "order": 31, + "order": 35, "mode": 0, "inputs": [ { @@ -590,16 +570,17 @@ "id": 71, "type": "ADE_SigmaSchedule", "pos": [ - 4788.983725773823, - 2893.9627533500015 + 4788.98388671875, + 2893.962646484375 + ], + "size": [ + 244.73928833007812, + 58 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, - "order": 8, + "order": 7, "mode": 0, + "inputs": [], "outputs": [ { "name": "SIGMA_SCHEDULE", @@ -607,8 +588,8 @@ "links": [ 128 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "title": "Sigma Schedule 🎭🅐🅓", @@ -628,13 +609,13 @@ "id": 76, "type": "ADE_AnimateDiffSettings", "pos": [ - 4811.983725773823, - 2997.9627533500015 + 4811.98388671875, + 2997.962646484375 + ], + "size": [ + 226.8000030517578, + 54 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, "flags": { "collapsed": true }, @@ -645,13 +626,15 @@ "name": "pe_adjust", "type": "PE_ADJUST", "link": 129, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "weight_adjust", "type": "WEIGHT_ADJUST", "link": 130, - "slot_index": 1 + "slot_index": 1, + "shape": 7 } ], "outputs": [ @@ -672,23 +655,21 @@ "groupcolor": "#3f789e" } }, - "widgets_values": [ - "" - ] + "widgets_values": [] }, { "id": 51, "type": "CLIPTextEncode", "pos": [ - 4077.063944939706, - 2490.602859208382 + 4077.06396484375, + 2490.602783203125 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, "flags": {}, - "order": 25, + "order": 26, "mode": 0, "inputs": [ { @@ -719,13 +700,13 @@ "id": 67, "type": "Display Int (rgthree)", "pos": [ - 1146.5720319404418, - 2718.602859208382 + 1146.572021484375, + 2718.602783203125 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, "order": 28, "mode": 0, @@ -740,6 +721,7 @@ "dir": 3 } ], + "outputs": [], "properties": { "Node name for S&R": "Display Int (rgthree)" }, @@ -751,22 +733,14 @@ { "id": 16, "type": "SetNode", - "pos": { - "0": 1436.572265625, - "1": 2378.60302734375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 1436.572265625, + 2378.60302734375 + ], + "size": [ + 210, + 58 + ], "flags": {}, "order": 20, "mode": 0, @@ -795,24 +769,16 @@ { "id": 64, "type": "GetNode", - "pos": { - "0": 2836.5732421875, - "1": 2128.60302734375, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 2836.5732421875, + 2128.60302734375 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 9, + "order": 8, "mode": 0, "inputs": [], "outputs": [ @@ -834,24 +800,16 @@ { "id": 68, "type": "GetNode", - "pos": { - "0": 5596.7412109375, - "1": 2687.58642578125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 5596.7412109375, + 2687.58642578125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 10, + "order": 9, "mode": 0, "inputs": [], "outputs": [ @@ -874,15 +832,15 @@ "id": 166, "type": "Reroute", "pos": [ - 7111.180051242829, - 2291.0893731453525 + 7111.18017578125, + 2291.08935546875 ], "size": [ 75, 26 ], "flags": {}, - "order": 30, + "order": 34, "mode": 0, "inputs": [ { @@ -910,15 +868,15 @@ "id": 134, "type": "KSampler", "pos": [ - 10475.850399830004, - 2188.299429387806 + 10475.8505859375, + 2188.29931640625 + ], + "size": [ + 303.4075622558594, + 262 ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, "flags": {}, - "order": 60, + "order": 59, "mode": 0, "inputs": [ { @@ -969,15 +927,15 @@ "id": 135, "type": "VAEDecode", "pos": [ - 10529.186265257058, - 2499.059174984508 + 10529.1865234375, + 2499.05908203125 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 61, + "order": 60, "mode": 0, "inputs": [ { @@ -1003,21 +961,22 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 116, "type": "GetImageSizeAndCount", "pos": [ - 5623.739027487058, - 2504.5866225556706 + 5623.7392578125, + 2504.586669921875 + ], + "size": [ + 210, + 86 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 54, + "order": 53, "mode": 0, "inputs": [ { @@ -1033,23 +992,23 @@ "links": [ 204 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 }, { - "name": "800 width", + "name": "width", "type": "INT", "links": null, "shape": 3 }, { - "name": "448 height", + "name": "height", "type": "INT", "links": null, "shape": 3 }, { - "name": "360 count", + "name": "count", "type": "INT", "links": null, "shape": 3 @@ -1057,29 +1016,22 @@ ], "properties": { "Node name for S&R": "GetImageSizeAndCount" - } + }, + "widgets_values": [] }, { "id": 122, "type": "GetNode", - "pos": { - "0": 9353.1953125, - "1": 2024, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 9353.1953125, + 2024 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 11, + "order": 10, "mode": 0, "inputs": [], "outputs": [ @@ -1103,15 +1055,15 @@ "id": 127, "type": "DifferentialDiffusion", "pos": [ - 8483.071650605185, - 2431.000244140624 + 8483.0712890625, + 2431.000244140625 + ], + "size": [ + 210, + 26 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 45, + "order": 46, "mode": 4, "inputs": [ { @@ -1128,27 +1080,28 @@ 232, 241 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { "Node name for S&R": "DifferentialDiffusion" - } + }, + "widgets_values": [] }, { "id": 121, "type": "VHS_VideoCombine", "pos": [ - 9754.194827497888, + 9754.1953125, 2061 ], "size": [ 565.05419921875, - 629.2303515625 + 334 ], "flags": {}, - "order": 59, + "order": 58, "mode": 0, "inputs": [ { @@ -1158,18 +1111,21 @@ }, { "name": "audio", - "type": "*", - "link": 219 + "type": "AUDIO", + "link": 219, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1191,6 +1147,7 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { @@ -1210,24 +1167,16 @@ { "id": 167, "type": "SetNode", - "pos": { - "0": 2410, - "1": 2363, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 2410, + 2363 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 38, + "order": 36, "mode": 0, "inputs": [ { @@ -1249,44 +1198,21 @@ }, "widgets_values": [ "waveforem" - ] - }, - { - "id": 184, - "type": "PreviewImage", - "pos": [ - 2173, - 3668 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 336 - } ], - "properties": { - "Node name for S&R": "PreviewImage" - } + "color": "#2a363b", + "bgcolor": "#3f5159" }, { "id": 86, "type": "PreviewAudio", "pos": [ - 1456.5720319404418, - 2248.602859208382 + 1456.572021484375, + 2248.602783203125 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 76 - }, "flags": {}, "order": 22, "mode": 0, @@ -1297,6 +1223,7 @@ "link": 144 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewAudio" }, @@ -1311,20 +1238,21 @@ 2434, 2126 ], - "size": { - "0": 315, - "1": 75.99998474121094 - }, + "size": [ + 315, + 76 + ], "flags": {}, - "order": 34, + "order": 31, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 366 + "link": 372 } ], + "outputs": [], "properties": { "Node name for S&R": "PreviewAudio" }, @@ -1336,16 +1264,18 @@ "id": 80, "type": "Note", "pos": [ - 4846.983725773823, - 2022.9627533500015 + 4846.98388671875, + 2022.9627685546875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 12, + "order": 11, "mode": 0, + "inputs": [], + "outputs": [], "properties": { "text": "" }, @@ -1359,15 +1289,15 @@ "id": 85, "type": "NNLatentUpscale", "pos": [ - 8864.194827497888, + 8864.1953125, 2028 ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 53, + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 52, "mode": 4, "inputs": [ { @@ -1383,8 +1313,8 @@ "links": [ 240 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -1402,12 +1332,12 @@ 1845, 2025 ], - "size": { - "0": 541.800048828125, - "1": 58 - }, + "size": [ + 541.800048828125, + 58 + ], "flags": {}, - "order": 13, + "order": 12, "mode": 0, "inputs": [], "outputs": [ @@ -1415,7 +1345,7 @@ "name": "OPEN_UNMIX_MODEL", "type": "OPEN_UNMIX_MODEL", "links": [ - 10 + 367 ], "shape": 3 } @@ -1427,100 +1357,6 @@ "umxl" ] }, - { - "id": 140, - "type": "SetNode", - "pos": { - "0": 2153, - "1": 2761, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 211.60000610351562, - "1": 58 - }, - "flags": {}, - "order": 42, - "mode": 0, - "inputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 253 - } - ], - "outputs": [ - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 354 - ], - "slot_index": 0 - } - ], - "title": "Set_featurepiupr", - "properties": { - "previousName": "featurepiupr" - }, - "widgets_values": [ - "featurepiupr" - ] - }, - { - "id": 141, - "type": "SetNode", - "pos": { - "0": 2135, - "1": 2875, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 252 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 339 - ], - "slot_index": 0 - } - ], - "title": "Set_drumfeature", - "properties": { - "previousName": "drumfeature" - }, - "widgets_values": [ - "drumfeature" - ] - }, { "id": 53, "type": "VAEEncode", @@ -1528,12 +1364,12 @@ 4137, 2144 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 50, + "order": 49, "mode": 0, "inputs": [ { @@ -1560,7 +1396,8 @@ ], "properties": { "Node name for S&R": "VAEEncode" - } + }, + "widgets_values": [] }, { "id": 52, @@ -1569,12 +1406,12 @@ 5596, 2368 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 52, + "order": 51, "mode": 0, "inputs": [ { @@ -1600,7 +1437,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 56, @@ -1611,10 +1449,10 @@ ], "size": [ 370, - 520 + 544 ], "flags": {}, - "order": 56, + "order": 55, "mode": 0, "inputs": [ { @@ -1625,17 +1463,20 @@ { "name": "audio", "type": "AUDIO", - "link": 120 + "link": 120, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -1657,17 +1498,20 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_05582-audio.mp4", + "filename": "AnimateDiff_02410-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02410.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02410-audio.mp4" }, "muted": false } @@ -1682,11 +1526,12 @@ ], "size": [ 315, - 313.9999084472656 + 314 ], "flags": {}, - "order": 14, + "order": 13, "mode": 0, + "inputs": [], "outputs": [ { "name": "IMAGE", @@ -1713,15 +1558,15 @@ "id": 119, "type": "KSampler", "pos": [ - 8889.194827497888, + 8889.1953125, 2171 ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, + "size": [ + 303.4075622558594, + 262 + ], "flags": {}, - "order": 55, + "order": 54, "mode": 0, "inputs": [ { @@ -1773,15 +1618,15 @@ "id": 120, "type": "VAEDecode", "pos": [ - 9050.194827497888, + 9050.1953125, 2515 ], - "size": { - "0": 210, - "1": 46 - }, + "size": [ + 210, + 46 + ], "flags": {}, - "order": 57, + "order": 56, "mode": 0, "inputs": [ { @@ -1807,7 +1652,8 @@ ], "properties": { "Node name for S&R": "VAEDecode" - } + }, + "widgets_values": [] }, { "id": 47, @@ -1816,12 +1662,12 @@ 5553, 2025 ], - "size": { - "0": 303.4075622558594, - "1": 262 - }, + "size": [ + 303.4075622558594, + 262 + ], "flags": {}, - "order": 51, + "order": 50, "mode": 0, "inputs": [ { @@ -1876,10 +1722,10 @@ 1130, 2488 ], - "size": { - "0": 617.4000244140625, - "1": 146 - }, + "size": [ + 617.4000244140625, + 146 + ], "flags": {}, "order": 21, "mode": 0, @@ -1895,7 +1741,6 @@ "name": "empty_image", "type": "IMAGE", "links": [ - 72, 110 ], "slot_index": 0, @@ -1934,12 +1779,12 @@ 1141, 2029 ], - "size": { - "0": 243.818359375, - "1": 130 - }, + "size": [ + 243.818359375, + 130 + ], "flags": {}, - "order": 15, + "order": 14, "mode": 0, "inputs": [], "outputs": [ @@ -1947,10 +1792,10 @@ "name": "audio", "type": "AUDIO", "links": [ - 11, 18, 52, - 144 + 144, + 368 ], "slot_index": 0, "shape": 3 @@ -1967,629 +1812,472 @@ } }, { - "id": 11, - "type": "AudioSeparator", + "id": 170, + "type": "PreviewAudio", "pos": [ - 1879, - 2135 + 2832, + 2428 + ], + "size": [ + 315, + 76.00003051757812 ], - "size": { - "0": 415.8000183105469, - "1": 158 - }, "flags": {}, - "order": 27, + "order": 29, "mode": 0, "inputs": [ - { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 10 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 11 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 72 - } - ], - "outputs": [ { "name": "audio", "type": "AUDIO", - "links": [], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 238, - 321, - 322, - 366 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": [], - "slot_index": 3, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "links": [ - 162 - ], - "slot_index": 5, - "shape": 3 + "link": 370 } ], + "outputs": [], "properties": { - "Node name for S&R": "AudioSeparator" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - 30 + null ] }, { - "id": 87, - "type": "AudioFeatureExtractor", + "id": 191, + "type": "ImageToMask", "pos": [ - 1844, - 2619 + 2678, + 3215 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 541.800048828125, - "1": 78 - }, "flags": {}, - "order": 35, + "order": 38, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 238 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 162 + "name": "image", + "type": "IMAGE", + "link": 351 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MASK", + "type": "MASK", "links": [ - 252 + 378 ], "slot_index": 0, "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 253 - ], - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "ImageToMask" }, "widgets_values": [ - "amplitude_envelope" + "red" ] }, { - "id": 170, - "type": "PreviewAudio", + "id": 185, + "type": "VHS_VideoCombine", "pos": [ - 2832, - 2428 + 3244, + 3227 + ], + "size": [ + 214.7587890625, + 459.01251220703125 ], - "size": { - "0": 315, - "1": 76.00003051757812 - }, "flags": {}, - "order": 32, + "order": 37, "mode": 0, "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 338 + }, { "name": "audio", "type": "AUDIO", - "link": 321 + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "PreviewAudio" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - null - ] - }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02408.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02408.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02408.mp4" + }, + "muted": false + } + } + }, { - "id": 62, - "type": "AudioFeatureVisualizer", + "id": 48, + "type": "CheckpointLoaderSimple", "pos": [ - 1838, - 2357 + 3547, + 2222 + ], + "size": [ + 315, + 98 ], - "size": { - "0": 529.199951171875, - "1": 198 - }, "flags": {}, - "order": 33, + "order": 15, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 322 + "name": "MODEL", + "type": "MODEL", + "links": [ + 107 + ], + "slot_index": 0 }, { - "name": "video_frames", - "type": "IMAGE", - "link": 110 - } - ], - "outputs": [ + "name": "CLIP", + "type": "CLIP", + "links": [ + 86, + 87, + 225 + ], + "slot_index": 1 + }, { - "name": "IMAGE", - "type": "IMAGE", + "name": "VAE", + "type": "VAE", "links": [ - 319, - 338, - 351 + 89, + 90, + 217, + 246 ], - "slot_index": 0, - "shape": 3 + "slot_index": 2 } ], "properties": { - "Node name for S&R": "AudioFeatureVisualizer" + "Node name for S&R": "CheckpointLoaderSimple" }, "widgets_values": [ - "waveform", - 30, - "time", - "linear", - "inferno", - "pygame" + "photonLCM_v10.safetensors" ] }, { - "id": 191, - "type": "ImageToMask", + "id": 61, + "type": "LoraLoaderModelOnly", "pos": [ - 2678, - 3215 + 3536, + 2381 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 40, + "order": 24, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 351 + "name": "model", + "type": "MODEL", + "link": 107 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "MODEL", + "type": "MODEL", "links": [ - 352 + 315 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "ImageToMask" + "Node name for S&R": "LoraLoaderModelOnly" }, "widgets_values": [ - "red" + "ral-acidzlime-sd15.safetensors", + 1 ] }, { - "id": 183, - "type": "FeatureMixer", + "id": 50, + "type": "CLIPTextEncode", "pos": [ - 2120, - 3224 + 4065, + 2245 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 44, + "order": 25, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 339 + "name": "clip", + "type": "CLIP", + "link": 86 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 358 + 303, + 307 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 336 - ], - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1, - 0, - 0.25, - 1, - 1, - 1, - 1, - 0, - 0.2, - 1, - 0.5, - true + "acidzlime" ] }, { - "id": 192, - "type": "FlexMaskMorph", + "id": 125, + "type": "ConditioningCombine", "pos": [ - 2676, - 3350 + 7458, + 2247 + ], + "size": [ + 342.5999755859375, + 46 ], - "size": { - "0": 315, - "1": 266 - }, "flags": {}, - "order": 46, + "order": 42, "mode": 0, "inputs": [ { - "name": "masks", - "type": "MASK", - "link": 352 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 358 + "name": "conditioning_1", + "type": "CONDITIONING", + "link": 308 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 354 + "name": "conditioning_2", + "type": "CONDITIONING", + "link": 229 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 356 + 242, + 311 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "FlexMaskMorph" + "Node name for S&R": "ConditioningCombine" }, - "widgets_values": [ - 1, - false, - 0, - 0, - 0, - "dilate", - 3, - 3 - ] + "widgets_values": [] }, { - "id": 193, - "type": "MaskToImage", + "id": 126, + "type": "CLIPTextEncode", "pos": [ - 2746, - 3662 + 7092, + 1975 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 48, + "order": 27, "mode": 0, "inputs": [ { - "name": "mask", - "type": "MASK", - "link": 356 + "name": "clip", + "type": "CLIP", + "link": 225 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 357, - 360 + 229 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "MaskToImage" - } + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "kamala harris, terrified, sobbing" + ] }, { - "id": 185, - "type": "VHS_VideoCombine", + "id": 150, + "type": "IPAAdapterFaceIDBatch", "pos": [ - 3244, - 3227 + 8437, + 1998 ], "size": [ - 214.7587890625, - 435.14768938785346 + 317.4000244140625, + 322 ], "flags": {}, - "order": 39, + "order": 44, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 338 + "name": "model", + "type": "MODEL", + "link": 267 }, { - "name": "audio", - "type": "*", - "link": null + "name": "ipadapter", + "type": "IPADAPTER", + "link": 268 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "image", + "type": "IMAGE", + "link": 289 }, { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_05580.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false - } - } - }, - { - "id": 63, - "type": "VHS_VideoCombine", - "pos": [ - 3473, - 3187 - ], - "size": [ - 214.7587890625, - 435.14768938785346 - ], - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "images", + "name": "image_negative", "type": "IMAGE", - "link": 357 + "link": null, + "shape": 7 }, { - "name": "audio", - "type": "AUDIO", - "link": 111 + "name": "attn_mask", + "type": "MASK", + "link": null, + "shape": 7 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "clip_vision", + "type": "CLIP_VISION", + "link": null, + "shape": 7 }, { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_05581-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - }, - "muted": false + "name": "insightface", + "type": "INSIGHTFACE", + "link": null, + "shape": 7 } - } - }, - { - "id": 48, - "type": "CheckpointLoaderSimple", - "pos": [ - 3547, - 2222 ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [], "outputs": [ { "name": "MODEL", "type": "MODEL", "links": [ - 107 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 86, - 87, - 225 + 270 ], - "slot_index": 1 + "shape": 3 }, { - "name": "VAE", - "type": "VAE", - "links": [ - 89, - 90, - 217, - 246 - ], - "slot_index": 2 + "name": "face_image", + "type": "IMAGE", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "IPAAdapterFaceIDBatch" }, "widgets_values": [ - "photonLCM_v10.safetensors" + 1, + 1, + "linear", + "concat", + 0, + 1, + "V only" ] }, { - "id": 61, - "type": "LoraLoaderModelOnly", + "id": 110, + "type": "IPAdapterUnifiedLoaderFaceID", "pos": [ - 3536, - 2381 + 8044, + 2003 + ], + "size": [ + 315, + 126 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 23, + "order": 41, "mode": 0, "inputs": [ { "name": "model", "type": "MODEL", - "link": 107 + "link": 192 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "link": null, + "shape": 7 } ], "outputs": [ @@ -2597,93 +2285,107 @@ "name": "MODEL", "type": "MODEL", "links": [ - 315 + 267 ], "slot_index": 0, "shape": 3 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "links": [ + 268 + ], + "slot_index": 1, + "shape": 3 } ], "properties": { - "Node name for S&R": "LoraLoaderModelOnly" + "Node name for S&R": "IPAdapterUnifiedLoaderFaceID" }, "widgets_values": [ - "ral-acidzlime-sd15.safetensors", - 1 + "FACEID PLUS V2", + 0.6, + "CUDA" ] }, { - "id": 50, - "type": "CLIPTextEncode", + "id": 137, + "type": "NNLatentUpscale", "pos": [ - 4065, - 2245 + 10440, + 2022 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 24, + "order": 57, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 86 + "name": "latent", + "type": "LATENT", + "link": 249 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", "links": [ - 303, - 307 + 250 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "NNLatentUpscale" }, "widgets_values": [ - "acidzlime" + "SD 1.x", + 1.5 ] }, { - "id": 194, + "id": 136, "type": "VHS_VideoCombine", "pos": [ - 6512, - 2058 + 10869.6943359375, + 2046.0330810546875 ], "size": [ - 370, - 520 + 565.05419921875, + 334 ], "flags": {}, - "order": 17, + "order": 61, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": null + "link": 247 }, { "name": "audio", "type": "AUDIO", - "link": null + "link": 248, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -2704,14 +2406,15 @@ "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, - "save_metadata": true, + "save_metadata": false, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_05563-audio.mp4", + "filename": "AnimateDiff_05588-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", @@ -2722,294 +2425,421 @@ } }, { - "id": 125, - "type": "ConditioningCombine", + "id": 193, + "type": "MaskToImage", "pos": [ - 7458, - 2247 + 3012.575927734375, + 3754.134033203125 + ], + "size": [ + 210, + 26 ], - "size": { - "0": 342.5999755859375, - "1": 46 - }, "flags": {}, - "order": 37, + "order": 47, "mode": 0, "inputs": [ { - "name": "conditioning_1", - "type": "CONDITIONING", - "link": 308 - }, - { - "name": "conditioning_2", - "type": "CONDITIONING", - "link": 229 + "name": "mask", + "type": "MASK", + "link": 380 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 242, - 311 + 357, + 360 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "ConditioningCombine" - } + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] }, { - "id": 126, - "type": "CLIPTextEncode", + "id": 203, + "type": "AudioSeparatorSimple", "pos": [ - 7092, - 1975 + 1941.595703125, + 2161.7919921875 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 26, + "order": 23, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 225 + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 367 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 368 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "drums_audio", + "type": "AUDIO", "links": [ - 229 - ], - "slot_index": 0 + 370, + 371, + 372, + 373 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": null + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": null + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": null } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "AudioSeparatorSimple" }, - "widgets_values": [ - "kamala harris, terrified, sobbing" - ] + "widgets_values": [] }, { - "id": 150, - "type": "IPAAdapterFaceIDBatch", + "id": 204, + "type": "AudioFeatureExtractor", "pos": [ - 8437, - 1998 + 1844, + 2619 + ], + "size": [ + 415.8000183105469, + 174 ], - "size": { - "0": 317.4000244140625, - "1": 322 - }, "flags": {}, - "order": 43, + "order": 32, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 267 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 268 - }, + "name": "audio", + "type": "AUDIO", + "link": 373 + } + ], + "outputs": [ { - "name": "image", - "type": "IMAGE", - "link": 289 + "name": "feature", + "type": "FEATURE", + "links": [ + 374 + ] }, { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, + "name": "frame_count", + "type": "INT", + "links": [ + 375 + ] + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 140, + "type": "SetNode", + "pos": [ + 2309.075439453125, + 2778.837158203125 + ], + "size": [ + 211.60000610351562, + 58 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ { - "name": "attn_mask", - "type": "MASK", - "link": null - }, + "name": "INT", + "type": "INT", + "link": 375 + } + ], + "outputs": [ { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - }, + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_featurepiupr", + "properties": { + "previousName": "featurepiupr" + }, + "widgets_values": [ + "featurepiupr" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 141, + "type": "SetNode", + "pos": [ + 2262.83349609375, + 2921.079833984375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ { - "name": "insightface", - "type": "INSIGHTFACE", - "link": null + "name": "FEATURE", + "type": "FEATURE", + "link": 374 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 270 + 376 ], - "shape": 3 - }, + "slot_index": 0 + } + ], + "title": "Set_drumfeature", + "properties": { + "previousName": "drumfeature" + }, + "widgets_values": [ + "drumfeature" + ] + }, + { + "id": 206, + "type": "FeatureMixer", + "pos": [ + 2120, + 3224 + ], + "size": [ + 315, + 322 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ { - "name": "face_image", - "type": "IMAGE", - "links": null, - "shape": 3 + "name": "feature", + "type": "FEATURE", + "link": 376 + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 379 + ] } ], "properties": { - "Node name for S&R": "IPAAdapterFaceIDBatch" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ + 1, + 0, + 0.25, + 1, + 1, 1, 1, - "linear", - "concat", 0, + 0.2, 1, - "V only" + 0.5, + false ] }, { - "id": 110, - "type": "IPAdapterUnifiedLoaderFaceID", + "id": 207, + "type": "FlexMaskMorph", "pos": [ - 8044, - 2003 + 2676, + 3350 + ], + "size": [ + 315, + 318 ], - "size": { - "0": 315, - "1": 126 - }, "flags": {}, - "order": 36, + "order": 45, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 192 + "name": "masks", + "type": "MASK", + "link": 378 }, { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null + "name": "opt_feature", + "type": "FEATURE", + "link": 379, + "shape": 7 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 267 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "MASK", + "type": "MASK", "links": [ - 268 - ], - "shape": 3, - "slot_index": 1 + 380 + ] } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoaderFaceID" + "Node name for S&R": "FlexMaskMorph" }, "widgets_values": [ - "FACEID PLUS V2", - 0.6, - "CUDA" + 1, + 0, + "max_kernel_size", + "relative", + false, + 0, + 0, + 1, + "dilate", + 3, + 3 ] }, { - "id": 137, - "type": "NNLatentUpscale", + "id": 62, + "type": "AudioFeatureVisualizer", "pos": [ - 10440, - 2022 + 1818.8599853515625, + 2347.552978515625 + ], + "size": [ + 529.199951171875, + 198 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 58, + "order": 30, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 249 + "name": "audio", + "type": "AUDIO", + "link": 371 + }, + { + "name": "video_frames", + "type": "IMAGE", + "link": 110 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 250 + 319, + 338, + 351 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "AudioFeatureVisualizer" }, "widgets_values": [ - "SD 1.x", - 1.5 + "waveform", + 30, + "time", + "linear", + "inferno", + "pygame" ] }, { - "id": 136, + "id": 63, "type": "VHS_VideoCombine", "pos": [ - 10869.694002435086, - 2046.033112080377 + 3782.592041015625, + 3276.060791015625 ], "size": [ - 565.05419921875, - 629.0303316728784 + 214.7587890625, + 459.01251220703125 ], "flags": {}, - "order": 62, + "order": 48, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 247 + "link": 357 }, { "name": "audio", - "type": "*", - "link": 248 + "type": "AUDIO", + "link": 111, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -3030,41 +2860,122 @@ "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, - "save_metadata": false, + "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_05588-audio.mp4", + "filename": "AnimateDiff_02409-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02409.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02409-audio.mp4" }, "muted": false } } + }, + { + "id": 129, + "type": "LoadImage", + "pos": [ + 8037.478515625, + 2181.419921875 + ], + "size": [ + 315, + 314.00006103515625 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 289 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "pasted/image (115).png", + "image" + ] + }, + { + "id": 208, + "type": "AdvancedLivePortrait", + "pos": [ + 8115.21875, + 816.7516479492188 + ], + "size": [ + 400, + 260 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "src_images", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "motion_link", + "type": "EDITOR_LINK", + "link": null, + "shape": 7 + }, + { + "name": "driving_images", + "type": "IMAGE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "Node name for S&R": "AdvancedLivePortrait" + }, + "widgets_values": [ + 0, + 0, + 1.7, + true, + false, + false, + "" + ] } ], "links": [ - [ - 10, - 12, - 0, - 11, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 11, - 10, - 0, - 11, - 1, - "AUDIO" - ], [ 18, 10, @@ -3081,14 +2992,6 @@ 0, "AUDIO" ], - [ - 72, - 37, - 0, - 11, - 2, - "IMAGE" - ], [ 86, 48, @@ -3273,14 +3176,6 @@ 0, "AUDIO" ], - [ - 162, - 11, - 5, - 87, - 1, - "FEATURE_PIPE" - ], [ 192, 69, @@ -3361,14 +3256,6 @@ 0, "MODEL" ], - [ - 238, - 11, - 1, - 87, - 0, - "AUDIO" - ], [ 240, 85, @@ -3441,22 +3328,6 @@ 3, "LATENT" ], - [ - 252, - 87, - 0, - 141, - 0, - "*" - ], - [ - 253, - 87, - 1, - 140, - 0, - "*" - ], [ 267, 110, @@ -3570,120 +3441,145 @@ "*" ], [ - 321, - 11, - 1, - 170, + 338, + 62, 0, - "AUDIO" + 185, + 0, + "IMAGE" ], [ - 322, - 11, - 1, + 351, 62, 0, - "AUDIO" - ], - [ - 336, - 183, - 1, - 184, + 191, 0, "IMAGE" ], [ - 338, - 62, + 357, + 193, 0, - 185, + 63, 0, "IMAGE" ], [ - 339, - 141, + 359, + 47, 0, - 183, + 85, 0, - "FEATURE" + "LATENT" ], [ - 351, - 62, + 360, + 193, 0, - 191, + 53, 0, "IMAGE" ], [ - 352, - 191, + 367, + 12, 0, - 192, + 203, 0, - "MASK" + "OPEN_UNMIX_MODEL" ], [ - 354, - 140, + 368, + 10, 0, - 192, - 2, - "FEATURE_PIPE" + 203, + 1, + "AUDIO" ], [ - 356, - 192, + 370, + 203, + 1, + 170, 0, - 193, + "AUDIO" + ], + [ + 371, + 203, + 1, + 62, 0, - "MASK" + "AUDIO" ], [ - 357, - 193, + 372, + 203, + 1, + 201, 0, - 63, + "AUDIO" + ], + [ + 373, + 203, + 1, + 204, 0, - "IMAGE" + "AUDIO" ], [ - 358, - 183, + 374, + 204, + 0, + 141, 0, - 192, - 1, "FEATURE" ], [ - 359, - 47, + 375, + 204, + 1, + 140, 0, - 85, + "INT" + ], + [ + 376, + 141, 0, - "LATENT" + 206, + 0, + "FEATURE" ], [ - 360, - 193, + 378, + 191, 0, - 53, + 207, 0, - "IMAGE" + "MASK" ], [ - 366, - 11, + 379, + 206, + 0, + 207, 1, - 201, + "FEATURE" + ], + [ + 380, + 207, 0, - "AUDIO" + 193, + 0, + "MASK" ] ], "groups": [ { + "id": 1, "title": "goo", "bounding": [ 5467, @@ -3693,9 +3589,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 2, "title": "ipadapter", "bounding": [ 7949, @@ -3705,9 +3602,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 3, "title": "Samp2", "bounding": [ 8850, @@ -3717,9 +3615,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 4, "title": "Samp3", "bounding": [ 10407, @@ -3729,9 +3628,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 5, "title": "Add condition", "bounding": [ 7047, @@ -3741,9 +3641,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 6, "title": "Model", "bounding": [ 3477, @@ -3753,9 +3654,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 7, "title": "AnimDiff", "bounding": [ 4741, @@ -3765,9 +3667,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 8, "title": "Audio", "bounding": [ 1105, @@ -3777,9 +3680,10 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { + "id": 9, "title": "Fatten up for winter", "bounding": [ 2060, @@ -3789,18 +3693,30 @@ ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.11338191753015442, + "scale": 0.6727499949325646, "offset": [ - 2426.25474100263, - 2384.853044971122 + -1463.3519301979481, + -2756.847429359734 ] - } + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "comfy-core": "0.3.12", + "rgthree-comfy": "5f2d8a1d19fcb2cac6dbc933085b20c1c0a8bb9f", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "ComfyUI-AdvancedLivePortrait": "3bba732915e22f18af0d221b9c5c282990181f1b" + }, + "ue_links": [] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/smiley_interp_tutoprial.json b/examples/smiley_interp_tutoprial_VERSION2.json similarity index 58% rename from examples/smiley_interp_tutoprial.json rename to examples/smiley_interp_tutoprial_VERSION2.json index 8f1a30e..3149db6 100644 --- a/examples/smiley_interp_tutoprial.json +++ b/examples/smiley_interp_tutoprial_VERSION2.json @@ -1,87 +1,39 @@ { - "last_node_id": 201, - "last_link_id": 315, + "last_node_id": 245, + "last_link_id": 433, "nodes": [ { - "id": 18, - "type": "ADE_AnimateDiffLoaderGen1", - "pos": { - "0": 5267.17529296875, - "1": 1352.8338623046875 - }, - "size": { - "0": 271.7644958496094, - "1": 242 - }, + "id": 25, + "type": "ADE_AdjustWeightAllMult", + "pos": [ + 4907.17529296875, + 1492.8338623046875 + ], + "size": [ + 270.3999938964844, + 82 + ], "flags": {}, - "order": 69, + "order": 0, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 20 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 21, - "slot_index": 1 - }, - { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": 22, - "slot_index": 2 - }, - { - "name": "ad_settings", - "type": "AD_SETTINGS", + "name": "prev_weight_adjust", + "type": "WEIGHT_ADJUST", "link": null, - "slot_index": 3 - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": 23, - "slot_index": 5 - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": 24, - "slot_index": 6 - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": 25, - "slot_index": 7 - }, - { - "name": "per_block", - "type": "PER_BLOCK", - "link": null + "shape": 7 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 27 - ], - "slot_index": 0, + "name": "WEIGHT_ADJUST", + "type": "WEIGHT_ADJUST", + "links": [], "shape": 3 } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffLoaderGen1", + "Node name for S&R": "ADE_AdjustWeightAllMult", "ttNbgOverride": { "color": "#2a363b", "bgcolor": "#3f5159", @@ -89,552 +41,429 @@ } }, "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt", - "lcm avg(sqrt_linear,linear)" + 1.01, + false ] }, { - "id": 19, - "type": "ADE_AnimateDiffSamplingSettings", - "pos": { - "0": 5267.17529296875, - "1": 1962.8338623046875 - }, - "size": { - "0": 273.3500061035156, - "1": 254 + "id": 36, + "type": "Note", + "pos": [ + 2650, + 1790 + ], + "size": [ + 380.91632080078125, + 230.8916015625 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "text": "" }, + "widgets_values": [ + "5. finally we do all this " + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 64, + "type": "IPAdapterClipVisionEnhancerBatch", + "pos": [ + 6169.6884765625, + 1321.1038818359375 + ], + "size": [ + 316.3516845703125, + 326 + ], "flags": {}, - "order": 46, + "order": 80, "mode": 0, "inputs": [ { - "name": "noise_layers", - "type": "NOISE_LAYERS", - "link": null, - "slot_index": 0 + "name": "model", + "type": "MODEL", + "link": 86 }, { - "name": "iteration_opts", - "type": "ITERATION_OPTS", - "link": null + "name": "ipadapter", + "type": "IPADAPTER", + "link": 87 }, { - "name": "custom_cfg", - "type": "CUSTOM_CFG", - "link": 26, - "slot_index": 2 + "name": "image", + "type": "IMAGE", + "link": 290 }, { - "name": "sigma_schedule", - "type": "SIGMA_SCHEDULE", + "name": "image_negative", + "type": "IMAGE", "link": null, - "slot_index": 3 + "shape": 7 }, { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } + "name": "attn_mask", + "type": "MASK", + "link": 289, + "shape": 7 }, { - "name": "seed_override", - "type": "INT", + "name": "clip_vision", + "type": "CLIP_VISION", "link": null, - "widget": { - "name": "seed_override" - } + "shape": 7 } ], "outputs": [ { - "name": "settings", - "type": "SAMPLE_SETTINGS", + "name": "MODEL", + "type": "MODEL", "links": [ - 23 + 90, + 91 ], - "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffSamplingSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "IPAdapterClipVisionEnhancerBatch" }, "widgets_values": [ + 1, + "linear", 0, - "FreeNoise", - "comfy", - 0, - 0, - false, - "" + 1, + "V only", + 2, + 0.5, + 0 ] }, { - "id": 20, - "type": "ADE_MultivalDynamic", - "pos": { - "0": 4917.17529296875, - "1": 1762.8338623046875 - }, - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, + "id": 16, + "type": "VHS_VideoCombine", + "pos": [ + 7371.005859375, + 1315.6671142578125 + ], + "size": [ + 214.7587890625, + 465.6667785644531 + ], "flags": {}, - "order": 0, + "order": 93, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "images", + "type": "IMAGE", + "link": 16 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 49, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", - "links": [ - 24 - ], - "slot_index": 0, + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, "shape": 3 } ], - "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - 1.1400000000000001, - "" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02335-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02335.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02335-audio.mp4" + } + } + } }, { - "id": 21, - "type": "ADE_AnimateDiffUniformContextOptions", - "pos": { - "0": 5267.17529296875, - "1": 1652.8338623046875 - }, - "size": { - "0": 273.269775390625, - "1": 270 - }, + "id": 101, + "type": "SetNode", + "pos": [ + -733.66259765625, + 1513.5509033203125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 1, + "order": 48, "mode": 0, "inputs": [ { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null + "name": "IMAGE", + "type": "IMAGE", + "link": 162 } ], "outputs": [ { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", - "links": [ - 21 - ], - "slot_index": 0, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], - "title": "Context Options 🎭🅐🅓", + "title": "Set_emptyimg", "properties": { - "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "emptyimg" }, "widgets_values": [ - 16, - 1, - 4, - "uniform", - false, - "pyramid", - false, - 0, - 1, - "" - ] + "emptyimg" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 22, - "type": "ADE_MultivalDynamic", - "pos": { - "0": 4917.17529296875, - "1": 1652.8338623046875 - }, - "size": { - "0": 265.1632385253906, - "1": 58 - }, + "id": 13, + "type": "CLIPTextEncode", + "pos": [ + 3110, + 1720 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 + ], "flags": {}, - "order": 2, + "order": 64, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "clip", + "type": "CLIP", + "link": 13 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 25 + 182 ], - "shape": 3 + "slot_index": 0 } ], - "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1.1, - "" + "text, watermark" ] }, { - "id": 23, - "type": "ADE_CustomCFGSimple", - "pos": { - "0": 4917.17529296875, - "1": 1862.8338623046875 - }, - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, + "id": 12, + "type": "CLIPTextEncode", + "pos": [ + 3100, + 1470 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], "flags": {}, - "order": 3, + "order": 63, "mode": 0, "inputs": [ { - "name": "cfg_extras", - "type": "CFG_EXTRAS", - "link": null + "name": "clip", + "type": "CLIP", + "link": 12 } ], "outputs": [ { - "name": "CUSTOM_CFG", - "type": "CUSTOM_CFG", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 26 + 181 ], - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ADE_CustomCFGSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 2, - "" + "ral-acidzlime, spooky dripping slime" ] }, { - "id": 24, - "type": "ADE_AdjustPESweetspotStretch", - "pos": { - "0": 4917.17529296875, - "1": 1962.8338623046875 - }, - "size": { - "0": 253.07310485839844, - "1": 106 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "prev_pe_adjust", - "type": "PE_ADJUST", - "link": null - } + "id": 111, + "type": "CR LoRA Stack", + "pos": [ + 1880, + 1682 ], - "outputs": [ - { - "name": "PE_ADJUST", - "type": "PE_ADJUST", - "links": [], - "shape": 3 - } + "size": [ + 315, + 342 ], - "properties": { - "Node name for S&R": "ADE_AdjustPESweetspotStretch", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 16, - 18, - false, - "" - ] - }, - { - "id": 25, - "type": "ADE_AdjustWeightAllMult", - "pos": { - "0": 4907.17529296875, - "1": 1492.8338623046875 - }, - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, - "order": 5, + "order": 2, "mode": 0, "inputs": [ { - "name": "prev_weight_adjust", - "type": "WEIGHT_ADJUST", - "link": null + "name": "lora_stack", + "type": "LORA_STACK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "WEIGHT_ADJUST", - "type": "WEIGHT_ADJUST", - "links": [], + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 184 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "ADE_AdjustWeightAllMult", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CR LoRA Stack" }, "widgets_values": [ - 1.01, - false, - "" + "Off", + "halloweenTech-202.safetensors", + 0.58, + 0.46, + "Off", + "add_detail.safetensors", + 1, + 1, + "Off", + "ral-acidzlime-sd15.safetensors", + 1, + 1 ] }, { - "id": 26, - "type": "ADE_AnimateDiffLoRALoader", - "pos": { - "0": 4907.17529296875, - "1": 1352.8338623046875 - }, - "size": { - "0": 261.19134521484375, - "1": 82 - }, + "id": 143, + "type": "SetNode", + "pos": [ + -485.37115478515625, + 1859.334228515625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 6, + "order": 70, "mode": 0, "inputs": [ { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null + "name": "FEATURE", + "type": "FEATURE", + "link": 331 } ], "outputs": [ { - "name": "MOTION_LORA", - "type": "MOTION_LORA", - "links": [ - 22 - ], - "slot_index": 0, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], - "title": "AnimateDiff LoRA", + "title": "Set_vocal_feature", "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "vocal_feature" }, "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8, - "" + "vocal_feature" ] }, { - "id": 36, - "type": "Note", - "pos": { - "0": 2650, - "1": 1790 - }, - "size": { - "0": 380.91632080078125, - "1": 230.8916015625 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": { - "text": "" - }, - "widgets_values": [ - "5. finally we do all this " + "id": 63, + "type": "VHS_VideoCombine", + "pos": [ + 9257.8388671875, + 1364.7005615234375 + ], + "size": [ + 214.7587890625, + 466.072509765625 ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 64, - "type": "IPAdapterClipVisionEnhancerBatch", - "pos": { - "0": 6169.6884765625, - "1": 1321.1038818359375 - }, - "size": { - "0": 316.3516845703125, - "1": 326 - }, "flags": {}, - "order": 96, + "order": 97, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 86 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 87 - }, - { - "name": "image", + "name": "images", "type": "IMAGE", - "link": 290 + "link": 251 }, { - "name": "image_negative", - "type": "IMAGE", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 314, + "shape": 7 }, { - "name": "attn_mask", - "type": "MASK", - "link": 289 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 90, - 91 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "IPAdapterClipVisionEnhancerBatch" - }, - "widgets_values": [ - 1, - "linear", - 0, - 1, - "V only", - 2, - 0.5, - 0 - ] - }, - { - "id": 16, - "type": "VHS_VideoCombine", - "pos": { - "0": 7371.005859375, - "1": 1315.6671142578125 - }, - "size": [ - 214.7587890625, - 310 - ], - "flags": {}, - "order": 114, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 16 - }, - { - "name": "audio", - "type": "*", - "link": 49 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ @@ -656,40 +485,43 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07445-audio.mp4", + "filename": "AnimateDiff_02334-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02334.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02334-audio.mp4" } } } }, { - "id": 101, + "id": 153, "type": "SetNode", - "pos": { - "0": -3236.29248046875, - "1": 1459.73095703125 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + -475.73345947265625, + 2093.8203125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 62, + "order": 71, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 162 + "name": "FEATURE", + "type": "FEATURE", + "link": 333 } ], "outputs": [ @@ -699,1872 +531,1139 @@ "links": null } ], - "title": "Set_emptyimg", + "title": "Set_vocal_feature_rms", "properties": { - "previousName": "emptyimg" + "previousName": "vocal_feature_rms" }, "widgets_values": [ - "emptyimg" + "vocal_feature_rms" ] }, { - "id": 13, - "type": "CLIPTextEncode", - "pos": { - "0": 3110, - "1": 1720 - }, - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, + "id": 155, + "type": "SetNode", + "pos": [ + -435.7334899902344, + 2293.82080078125 + ], + "size": [ + 252, + 58 + ], "flags": {}, - "order": 71, + "order": 72, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 13 + "name": "FEATURE", + "type": "FEATURE", + "link": 335 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 182 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_vocal_feature_rms_centroid", "properties": { - "Node name for S&R": "CLIPTextEncode" + "previousName": "vocal_feature_rms_centroid" }, "widgets_values": [ - "text, watermark" + "vocal_feature_rms_centroid" ] }, { - "id": 12, - "type": "CLIPTextEncode", - "pos": { - "0": 3100, - "1": 1470 - }, - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, + "id": 41, + "type": "DownloadOpenUnmixModel", + "pos": [ + -2044.7327880859375, + 2200.820068359375 + ], + "size": [ + 361.20001220703125, + 58 + ], "flags": {}, - "order": 70, + "order": 3, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 12 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", "links": [ - 181 + 316 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "DownloadOpenUnmixModel" }, "widgets_values": [ - "ral-acidzlime, spooky dripping slime" + "umxl" ] }, { - "id": 111, - "type": "CR LoRA Stack", - "pos": { - "0": 1880, - "1": 1682 - }, - "size": { - "0": 315, - "1": 342 + "id": 49, + "type": "PreviewAudio", + "pos": [ + -1741.7332763671875, + 1669.8201904296875 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 56 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" }, + "widgets_values": [ + null + ] + }, + { + "id": 45, + "type": "SetNode", + "pos": [ + -1713.7332763671875, + 1525.8204345703125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 8, + "order": 36, "mode": 0, "inputs": [ { - "name": "lora_stack", - "type": "LORA_STACK", - "link": null + "name": "AUDIO", + "type": "AUDIO", + "link": 48 } ], "outputs": [ { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 184 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_audio", "properties": { - "Node name for S&R": "CR LoRA Stack" + "previousName": "audio" }, "widgets_values": [ - "Off", - "halloweenTech-202.safetensors", - 0.58, - 0.46, - "Off", - "add_detail.safetensors", - 1, - 1, - "Off", - "ral-acidzlime-sd15.safetensors", - 1, - 1 + "audio" ] }, { - "id": 114, - "type": "CLIPTextEncode", - "pos": { - "0": 2480, - "1": 3750 - }, - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, + "id": 173, + "type": "SetNode", + "pos": [ + 2083, + 1200 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 68, + "order": 34, "mode": 0, "inputs": [ { - "name": "clip", - "type": "CLIP", - "link": 192 + "name": "VAE", + "type": "VAE", + "link": 291 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 217 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_vae", "properties": { - "Node name for S&R": "CLIPTextEncode" + "previousName": "vae" }, "widgets_values": [ - "text, watermark" - ] + "vae" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 119, - "type": "ADE_AnimateDiffSamplingSettings", - "pos": { - "0": 4524.482421875, - "1": 3989.747314453125 - }, - "size": { - "0": 273.3500061035156, - "1": 254 - }, + "id": 174, + "type": "SetNode", + "pos": [ + 2053, + 1068 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 48, + "order": 32, "mode": 0, "inputs": [ { - "name": "noise_layers", - "type": "NOISE_LAYERS", - "link": null, - "slot_index": 0 - }, + "name": "MODEL", + "type": "MODEL", + "link": 292 + } + ], + "outputs": [ { - "name": "iteration_opts", - "type": "ITERATION_OPTS", - "link": null - }, - { - "name": "custom_cfg", - "type": "CUSTOM_CFG", - "link": 205, - "slot_index": 2 - }, - { - "name": "sigma_schedule", - "type": "SIGMA_SCHEDULE", - "link": null, - "slot_index": 3 - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } - }, - { - "name": "seed_override", - "type": "INT", - "link": null, - "widget": { - "name": "seed_override" - } - } - ], - "outputs": [ - { - "name": "settings", - "type": "SAMPLE_SETTINGS", - "links": [ - 202 - ], - "slot_index": 0, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_model", "properties": { - "Node name for S&R": "ADE_AnimateDiffSamplingSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "model" }, "widgets_values": [ - 0, - "FreeNoise", - "comfy", - 0, - 0, - false, - "" - ] + "model" + ], + "color": "#223", + "bgcolor": "#335" }, { - "id": 120, - "type": "ADE_MultivalDynamic", - "pos": { - "0": 4174.482421875, - "1": 3789.747314453125 - }, - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, + "id": 175, + "type": "SetNode", + "pos": [ + 2037, + 967 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 9, + "order": 33, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "CLIP", + "type": "CLIP", + "link": 293 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", - "links": [ - 203 - ], - "slot_index": 0, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], - "title": "Scale 🎭🅐🅓", + "title": "Set_clip", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "clip" }, "widgets_values": [ - 1.1400000000000001, - "" - ] + "clip" + ], + "color": "#432", + "bgcolor": "#653" }, { - "id": 121, - "type": "ADE_AnimateDiffUniformContextOptions", - "pos": { - "0": 4524.482421875, - "1": 3679.747314453125 - }, - "size": { - "0": 273.269775390625, - "1": 270 - }, + "id": 30, + "type": "CR Apply LoRA Stack", + "pos": [ + 2528, + 1486 + ], + "size": [ + 254.40000915527344, + 66 + ], "flags": {}, - "order": 10, + "order": 46, "mode": 0, "inputs": [ { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null + "name": "model", + "type": "MODEL", + "link": 28 }, { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null + "name": "clip", + "type": "CLIP", + "link": 29 + }, + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 30 } ], "outputs": [ { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", + "name": "MODEL", + "type": "MODEL", "links": [ - 200 + 392 ], "slot_index": 0, "shape": 3 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 12, + 13 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 } ], - "title": "Context Options 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CR Apply LoRA Stack" }, - "widgets_values": [ - 16, - 1, - 4, - "uniform", - false, - "pyramid", - false, - 0, - 1, - "" - ] + "widgets_values": [] }, { - "id": 122, - "type": "ADE_MultivalDynamic", - "pos": { - "0": 4174.482421875, - "1": 3679.747314453125 - }, - "size": { - "0": 265.1632385253906, - "1": 58 - }, + "id": 29, + "type": "CR LoRA Stack", + "pos": [ + 2270, + 1670 + ], + "size": [ + 315, + 342 + ], "flags": {}, - "order": 11, + "order": 31, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "lora_stack", + "type": "LORA_STACK", + "link": 184, + "shape": 7 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "LORA_STACK", + "type": "LORA_STACK", "links": [ - 204 + 30, + 297 ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, "shape": 3 } ], - "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CR LoRA Stack" }, "widgets_values": [ - 1.1, - "" + "On", + "AnimateLCM_sd15_t2v_lora.safetensors", + 1, + 1, + "On", + "add_detail.safetensors", + 1, + 1, + "On", + "ral-acidzlime-sd15.safetensors", + 1, + 1 ] }, { - "id": 123, - "type": "ADE_CustomCFGSimple", - "pos": { - "0": 4174.482421875, - "1": 3889.747314453125 - }, - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, + "id": 184, + "type": "SetNode", + "pos": [ + 1373.0858154296875, + 1622.4879150390625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 12, + "order": 83, "mode": 0, "inputs": [ { - "name": "cfg_extras", - "type": "CFG_EXTRAS", - "link": null + "name": "IMAGE", + "type": "IMAGE", + "link": 299 } ], "outputs": [ { - "name": "CUSTOM_CFG", - "type": "CUSTOM_CFG", - "links": [ - 205 - ], - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_freq_ball_img", "properties": { - "Node name for S&R": "ADE_CustomCFGSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "freq_ball_img" }, "widgets_values": [ - 2, - "" - ] + "freq_ball_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 124, - "type": "ADE_AdjustPESweetspotStretch", - "pos": { - "0": 4174.482421875, - "1": 3989.747314453125 - }, - "size": { - "0": 253.07310485839844, - "1": 106 - }, + "id": 27, + "type": "IPAdapterUnifiedLoader", + "pos": [ + 5784.337890625, + 1308.1993408203125 + ], + "size": [ + 315, + 78 + ], "flags": {}, - "order": 13, + "order": 75, "mode": 0, "inputs": [ { - "name": "prev_pe_adjust", - "type": "PE_ADJUST", - "link": null - } - ], - "outputs": [ - { - "name": "PE_ADJUST", - "type": "PE_ADJUST", - "links": [], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AdjustPESweetspotStretch", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - 16, - 18, - false, - "" - ] - }, - { - "id": 125, - "type": "ADE_AdjustWeightAllMult", - "pos": { - "0": 4164.482421875, - "1": 3519.747314453125 - }, - "size": { - "0": 270.3999938964844, - "1": 82 - }, - "flags": {}, - "order": 14, - "mode": 0, - "inputs": [ + "name": "model", + "type": "MODEL", + "link": 393 + }, { - "name": "prev_weight_adjust", - "type": "WEIGHT_ADJUST", - "link": null + "name": "ipadapter", + "type": "IPADAPTER", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "WEIGHT_ADJUST", - "type": "WEIGHT_ADJUST", - "links": [], + "name": "model", + "type": "MODEL", + "links": [ + 86 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "ipadapter", + "type": "IPADAPTER", + "links": [ + 87 + ], + "slot_index": 1, "shape": 3 } ], "properties": { - "Node name for S&R": "ADE_AdjustWeightAllMult", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "IPAdapterUnifiedLoader" }, "widgets_values": [ - 1.01, - false, - "" + "PLUS (high strength)" ] }, { - "id": 126, - "type": "ADE_AnimateDiffLoRALoader", - "pos": { - "0": 4164.482421875, - "1": 3379.747314453125 - }, - "size": { - "0": 261.19134521484375, - "1": 82 - }, + "id": 193, + "type": "GetNode", + "pos": [ + 7873.8388671875, + 1662.7003173828125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 15, + "order": 4, "mode": 0, - "inputs": [ - { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null - } - ], + "inputs": [], "outputs": [ { - "name": "MOTION_LORA", - "type": "MOTION_LORA", + "name": "VAE", + "type": "VAE", "links": [ - 201 + 308 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "title": "AnimateDiff LoRA", - "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, + "title": "Get_vae", + "properties": {}, "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8, - "" + "vae" ] }, { - "id": 128, - "type": "CR Apply LoRA Stack", - "pos": { - "0": 2060, - "1": 3620 - }, - "size": { - "0": 254.40000915527344, - "1": 66 - }, + "id": 14, + "type": "VAEDecode", + "pos": [ + 7055, + 1328 + ], + "size": [ + 210, + 46 + ], "flags": {}, - "order": 58, + "order": 91, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 295 - }, - { - "name": "clip", - "type": "CLIP", - "link": 296 + "name": "samples", + "type": "LATENT", + "link": 14 }, { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 315 + "name": "vae", + "type": "VAE", + "link": 309 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 199 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "CLIP", - "type": "CLIP", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 191, - 192 + 16 ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "CR Apply LoRA Stack" + "Node name for S&R": "VAEDecode" }, "widgets_values": [] }, { - "id": 113, - "type": "CLIPTextEncode", - "pos": { - "0": 2470, - "1": 3500 - }, - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, + "id": 199, + "type": "GetNode", + "pos": [ + 8823.8388671875, + 1339.7005615234375 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 67, + "order": 5, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 191 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 216 + 314 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "ral-acidzlime, spooky dripping slime" + "audio" ] }, { - "id": 142, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3373.123291015625, - "1": 1782.5416259765625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, + "id": 62, + "type": "VAEDecode", + "pos": [ + 8544.8388671875, + 1747.7003173828125 + ], + "size": [ + 210, + 46 + ], "flags": {}, - "order": 74, + "order": 95, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 238 + "name": "samples", + "type": "LATENT", + "link": 80 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 239 + "name": "vae", + "type": "VAE", + "link": 308 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 240 + 250 ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - "amplitude_envelope" - ] + "widgets_values": [] }, { - "id": 143, - "type": "SetNode", - "pos": { - "0": -2988.001220703125, - "1": 1805.5142822265625 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 78, + "type": "GetNode", + "pos": [ + 1046.962646484375, + 2702.70654296875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 86, + "order": 6, "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 240 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 124 + ], + "slot_index": 0 } ], - "title": "Set_vocal_feature", - "properties": { - "previousName": "vocal_feature" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - "vocal_feature" + "audio" ] }, { - "id": 63, - "type": "VHS_VideoCombine", - "pos": { - "0": 11303, - "1": 2172 - }, + "id": 192, + "type": "GetNode", + "pos": [ + 724.9510498046875, + 1365.8663330078125 + ], "size": [ - 214.7587890625, - 310 + 210, + 58 ], "flags": {}, - "order": 121, + "order": 7, "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 251 - }, - { - "name": "audio", - "type": "*", - "link": 314 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], + "inputs": [], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 307 + ], + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07447-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] }, { - "id": 152, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3358.363525390625, - "1": 2010.000244140625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, + "id": 11, + "type": "CheckpointLoaderSimple", + "pos": [ + 1825, + 1488 + ], + "size": [ + 315, + 98 + ], "flags": {}, - "order": 75, + "order": 8, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 257 + "name": "MODEL", + "type": "MODEL", + "links": [ + 28, + 292 + ], + "slot_index": 0 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 258 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", + "name": "CLIP", + "type": "CLIP", "links": [ - 259 + 29, + 293 ], - "slot_index": 0, - "shape": 3 + "slot_index": 1 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "name": "VAE", + "type": "VAE", + "links": [ + 15, + 291 + ], + "slot_index": 2 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "CheckpointLoaderSimple" }, "widgets_values": [ - "rms_energy" + "photon_v1.safetensors" ] }, { - "id": 153, - "type": "SetNode", - "pos": { - "0": -2978.363525390625, - "1": 2040.00048828125 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 87, - "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 259 - } + "id": 172, + "type": "GetNode", + "pos": [ + 5806.3388671875, + 1436.19921875 ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } + "size": [ + 210, + 58 ], - "title": "Set_vocal_feature_rms", - "properties": { - "previousName": "vocal_feature_rms" - }, - "widgets_values": [ - "vocal_feature_rms" - ] - }, - { - "id": 154, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3318.363525390625, - "1": 2210.000244140625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, "flags": {}, - "order": 76, + "order": 9, "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 260 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 261 - } - ], + "inputs": [], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 262 + 290 ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, + "title": "Get_img_ball", + "properties": {}, "widgets_values": [ - "spectral_centroid" + "img_ball" ] }, { - "id": 155, - "type": "SetNode", - "pos": { - "0": -2938.363525390625, - "1": 2240.0009765625 - }, - "size": { - "0": 252, - "1": 58 - }, + "id": 194, + "type": "GetNode", + "pos": [ + 6811, + 1218 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 88, + "order": 10, "mode": 0, - "inputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "link": 262 - } - ], + "inputs": [], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "VAE", + "type": "VAE", + "links": [ + 309 + ], + "slot_index": 0 } ], - "title": "Set_vocal_feature_rms_centroid", - "properties": { - "previousName": "vocal_feature_rms_centroid" - }, + "title": "Get_vae", + "properties": {}, "widgets_values": [ - "vocal_feature_rms_centroid" + "vae" ] }, { - "id": 156, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3278.363525390625, - "1": 2410.000244140625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, + "id": 57, + "type": "VHS_LoadVideo", + "pos": [ + 398.9504699707031, + 1895.8665771484375 + ], + "size": [ + 247.455078125, + 262 + ], "flags": {}, - "order": 77, + "order": 50, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 263 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 264 + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + }, + { + "name": "frame_load_cap", + "type": "INT", + "link": 67, + "widget": { + "name": "frame_load_cap" + } } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 265 + 68 ], "slot_index": 0, "shape": 3 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "frame_count", + "type": "INT", "links": null, "shape": 3 - } - ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, - "widgets_values": [ - "onset_strength" - ] - }, - { - "id": 157, - "type": "SetNode", - "pos": { - "0": -2898.363525390625, - "1": 2440.000732421875 - }, - "size": { - "0": 252, - "1": 58 - }, - "flags": {}, - "order": 89, - "mode": 0, - "inputs": [ + }, { - "name": "FEATURE", - "type": "FEATURE", - "link": 265 - } - ], - "outputs": [ + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, { - "name": "*", - "type": "*", - "links": null + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, + "shape": 3 } ], - "title": "Set_vocal_feature_onsetr", "properties": { - "previousName": "vocal_feature_onsetr" + "Node name for S&R": "VHS_LoadVideo" }, - "widgets_values": [ - "vocal_feature_onsetr" - ] + "widgets_values": { + "video": "floating_in_pool_768_ball_MASK.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "floating_in_pool_768_ball_MASK.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } + } + } }, { - "id": 158, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3308.363525390625, - "1": 2610.000244140625 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, + "id": 58, + "type": "_mfc", + "pos": [ + 686.9510498046875, + 1858.866455078125 + ], + "size": [ + 315, + 150 + ], "flags": {}, - "order": 78, + "order": 65, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 266 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 267 + "name": "image", + "type": "IMAGE", + "link": 68 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MASK", + "type": "MASK", "links": [ - 268 + 69, + 100, + 287 ], "slot_index": 0, "shape": 3 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": null, + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 288 + ], + "slot_index": 1, "shape": 3 } ], "properties": { - "Node name for S&R": "AudioFeatureExtractor" + "Node name for S&R": "_mfc" }, "widgets_values": [ - "chroma_features" + 255, + 255, + 255, + 11 ] }, { - "id": 159, - "type": "SetNode", - "pos": { - "0": -2928.363525390625, - "1": 2640.00048828125 - }, - "size": { - "0": 252, - "1": 58 - }, + "id": 55, + "type": "ImageCompositeMasked", + "pos": [ + 1029.9508056640625, + 1455.8663330078125 + ], + "size": [ + 315, + 146 + ], "flags": {}, - "order": 90, + "order": 76, "mode": 0, "inputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "link": 268 - } - ], - "outputs": [ + "name": "destination", + "type": "IMAGE", + "link": 183 + }, { - "name": "*", - "type": "*", - "links": null + "name": "source", + "type": "IMAGE", + "link": 65 + }, + { + "name": "mask", + "type": "MASK", + "link": 69, + "shape": 7 } ], - "title": "Set_vocal_feature_rms_chroma", - "properties": { - "previousName": "vocal_feature_rms_chroma" - }, - "widgets_values": [ - "vocal_feature_rms_chroma" - ] - }, - { - "id": 41, - "type": "DownloadOpenUnmixModel", - "pos": { - "0": -4547.36328125, - "1": 2147.000244140625 - }, - "size": { - "0": 361.20001220703125, - "1": 58 - }, - "flags": {}, - "order": 16, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "OPEN_UNMIX_MODEL", - "type": "OPEN_UNMIX_MODEL", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 36 + 73, + 186, + 299 ], "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "DownloadOpenUnmixModel" + "Node name for S&R": "ImageCompositeMasked" }, "widgets_values": [ - "umxl" + 15, + 0, + false ] }, { - "id": 49, - "type": "PreviewAudio", - "pos": { - "0": -4244.36328125, - "1": 1616.000244140625 - }, - "size": { - "0": 315, - "1": 76 - }, + "id": 110, + "type": "GetNode", + "pos": [ + 795.9510498046875, + 1475.8663330078125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 55, + "order": 11, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 56 + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 183 + ], + "slot_index": 0 } ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, + "title": "Get_freq", + "properties": {}, "widgets_values": [ - null - ] + "freq" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 45, - "type": "SetNode", - "pos": { - "0": -4216.36328125, - "1": 1472.00048828125 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 54, + "type": "VHS_LoadVideo", + "pos": [ + 416.9507141113281, + 1403.8663330078125 + ], + "size": [ + 247.455078125, + 262 + ], "flags": {}, - "order": 54, + "order": 49, "mode": 0, "inputs": [ { - "name": "AUDIO", - "type": "AUDIO", - "link": 48 + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + }, + { + "name": "frame_load_cap", + "type": "INT", + "link": 66, + "widget": { + "name": "frame_load_cap" + } } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 65 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "audio", + "type": "AUDIO", + "links": null, + "shape": 3 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, + "shape": 3 } ], - "title": "Set_audio", "properties": { - "previousName": "audio" - }, - "widgets_values": [ - "audio" - ] - }, - { - "id": 50, - "type": "PreviewAudio", - "pos": { - "0": -3355.363525390625, - "1": 1601.000244140625 - }, - "size": { - "0": 315, - "1": 76 - }, - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "audio", - "type": "AUDIO", - "link": 57 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewAudio" - }, - "widgets_values": [ - null - ] - }, - { - "id": 167, - "type": "SetNode", - "pos": { - "0": 1137, - "1": 1802 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 92, - "mode": 0, - "inputs": [ - { - "name": "MASK", - "type": "MASK", - "link": 287 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_mask_ball", - "properties": { - "previousName": "mask_ball" - }, - "widgets_values": [ - "mask_ball" - ] - }, - { - "id": 170, - "type": "SetNode", - "pos": { - "0": 1115.43310546875, - "1": 2059.093505859375 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 93, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 288 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_img_ball", - "properties": { - "previousName": "img_ball" - }, - "widgets_values": [ - "img_ball" - ] - }, - { - "id": 173, - "type": "SetNode", - "pos": { - "0": 2083, - "1": 1200 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 52, - "mode": 0, - "inputs": [ - { - "name": "VAE", - "type": "VAE", - "link": 291 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_vae", - "properties": { - "previousName": "vae" - }, - "widgets_values": [ - "vae" - ] - }, - { - "id": 174, - "type": "SetNode", - "pos": { - "0": 2053, - "1": 1068 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 50, - "mode": 0, - "inputs": [ - { - "name": "MODEL", - "type": "MODEL", - "link": 292 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_model", - "properties": { - "previousName": "model" - }, - "widgets_values": [ - "model" - ] - }, - { - "id": 175, - "type": "SetNode", - "pos": { - "0": 2037, - "1": 967 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "CLIP", - "type": "CLIP", - "link": 293 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_clip", - "properties": { - "previousName": "clip" - }, - "widgets_values": [ - "clip" - ] - }, - { - "id": 30, - "type": "CR Apply LoRA Stack", - "pos": { - "0": 2528, - "1": 1486 - }, - "size": { - "0": 254.40000915527344, - "1": 66 - }, - "flags": {}, - "order": 59, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 28 - }, - { - "name": "clip", - "type": "CLIP", - "link": 29 - }, - { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 30 - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 20 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 12, - 13 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CR Apply LoRA Stack" - }, - "widgets_values": [] - }, - { - "id": 177, - "type": "GetNode", - "pos": { - "0": 1790, - "1": 3620 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 17, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 295 - ], - "slot_index": 0 - } - ], - "title": "Get_model", - "properties": {}, - "widgets_values": [ - "model" - ] - }, - { - "id": 29, - "type": "CR LoRA Stack", - "pos": { - "0": 2270, - "1": 1670 - }, - "size": { - "0": 315, - "1": 342 - }, - "flags": {}, - "order": 47, - "mode": 0, - "inputs": [ - { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 184 - } - ], - "outputs": [ - { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 30, - 297 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CR LoRA Stack" - }, - "widgets_values": [ - "On", - "AnimateLCM_sd15_t2v_lora.safetensors", - 1, - 1, - "On", - "add_detail.safetensors", - 1, - 1, - "On", - "ral-acidzlime-sd15.safetensors", - 1, - 1 - ] - }, - { - "id": 178, - "type": "GetNode", - "pos": { - "0": 1750, - "1": 3750 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 18, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 296 - ], - "slot_index": 0 - } - ], - "title": "Get_clip", - "properties": {}, - "widgets_values": [ - "clip" - ] - }, - { - "id": 180, - "type": "GetNode", - "pos": { - "0": 1830, - "1": 3890 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 19, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": null - } - ], - "title": "Get_lora_stack", - "properties": {}, - "widgets_values": [ - "lora_stack" - ] - }, - { - "id": 176, - "type": "GetNode", - "pos": { - "0": 1800, - "1": 3550 - }, - "size": { - "0": 210, - "1": 58 + "Node name for S&R": "VHS_LoadVideo" }, - "flags": {}, - "order": 20, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 294 - ], - "slot_index": 0 + "widgets_values": { + "video": "floating_in_pool_768.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "floating_in_pool_768.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } } - ], - "title": "Get_vae", - "properties": {}, - "widgets_values": [ - "vae" - ] + } }, { - "id": 184, + "id": 179, "type": "SetNode", - "pos": { - "0": 1219.13427734375, - "1": 1531.6217041015625 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 299 - } - ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } + "pos": [ + 2697, + 1636 + ], + "size": [ + 210, + 58 ], - "title": "Set_freq_ball_img", - "properties": { - "previousName": "freq_ball_img" - }, - "widgets_values": [ - "freq_ball_img" - ] - }, - { - "id": 146, - "type": "VAEDecode", - "pos": { - "0": 8563.564453125, - "1": 2168.303955078125 - }, - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 115, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 249 - }, - { - "name": "vae", - "type": "VAE", - "link": 303 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 247 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - }, - "widgets_values": [] - }, - { - "id": 189, - "type": "GetNode", - "pos": { - "0": 8553.5625, - "1": 2048.30419921875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 303 - ], - "slot_index": 0 - } - ], - "title": "Get_vae", - "properties": {}, - "widgets_values": [ - "vae" - ] - }, - { - "id": 191, - "type": "SetNode", - "pos": { - "0": -3664.36328125, - "1": 2473.00048828125 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 79, + "order": 47, "mode": 0, "inputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "link": 305 + "name": "LORA_STACK", + "type": "LORA_STACK", + "link": 297 } ], "outputs": [ @@ -2574,342 +1673,239 @@ "links": null } ], - "title": "Set_feature_pipe", + "title": "Set_lora_stack", "properties": { - "previousName": "feature_pipe" + "previousName": "lora_stack" }, "widgets_values": [ - "feature_pipe" + "lora_stack" ] }, { - "id": 27, - "type": "IPAdapterUnifiedLoader", - "pos": { - "0": 5784.337890625, - "1": 1308.1993408203125 - }, - "size": { - "0": 315, - "1": 78 - }, + "id": 65, + "type": "ACN_AdvancedControlNetApply", + "pos": [ + 4358, + 1400 + ], + "size": [ + 285.6000061035156, + 286 + ], "flags": {}, - "order": 83, + "order": 88, "mode": 0, "inputs": [ { - "name": "model", + "name": "positive", + "type": "CONDITIONING", + "link": 181 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 182 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 98, + "slot_index": 2 + }, + { + "name": "image", + "type": "IMAGE", + "link": 101 + }, + { + "name": "mask_optional", + "type": "MASK", + "link": 100, + "shape": 7 + }, + { + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": null, + "shape": 7 + }, + { + "name": "model_optional", "type": "MODEL", - "link": 27 + "link": null, + "shape": 7 }, { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null + "name": "vae_optional", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "model", - "type": "MODEL", + "name": "positive", + "type": "CONDITIONING", "links": [ - 86 + 97 ], "slot_index": 0, "shape": 3 }, { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "negative", + "type": "CONDITIONING", "links": [ - 87 + 96 ], "slot_index": 1, "shape": 3 + }, + { + "name": "model_opt", + "type": "MODEL", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" - }, - "widgets_values": [ - "PLUS (high strength)" - ] - }, - { - "id": 193, - "type": "GetNode", - "pos": { - "0": 9919, - "1": 2470 - }, - "size": { - "0": 210, - "1": 58 + "Node name for S&R": "ACN_AdvancedControlNetApply" }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 308 - ], - "slot_index": 0 - } - ], - "title": "Get_vae", - "properties": {}, "widgets_values": [ - "vae" + 0.5, + 0, + 0.5 ] }, { - "id": 14, - "type": "VAEDecode", - "pos": { - "0": 7055, - "1": 1328 - }, - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 112, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 14 - }, - { - "name": "vae", - "type": "VAE", - "link": 309 - } + "id": 32, + "type": "Apply ControlNet Stack", + "pos": [ + 4367, + 1753 ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 16 - ], - "slot_index": 0 - } + "size": [ + 304.79998779296875, + 66 ], - "properties": { - "Node name for S&R": "VAEDecode" - }, - "widgets_values": [] - }, - { - "id": 118, - "type": "ADE_AnimateDiffLoaderGen1", - "pos": { - "0": 4524.482421875, - "1": 3379.747314453125 - }, - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 66, + "order": 89, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 199 - }, - { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 200, - "slot_index": 1 + "name": "positive", + "type": "CONDITIONING", + "link": 97 }, { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": 201, - "slot_index": 2 + "name": "negative", + "type": "CONDITIONING", + "link": 96 }, { - "name": "ad_settings", - "type": "AD_SETTINGS", + "name": "cnet_stack", + "type": "CONTROL_NET_STACK", "link": null, - "slot_index": 3 - }, - { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null - }, - { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": 202, - "slot_index": 5 - }, - { - "name": "scale_multival", - "type": "MULTIVAL", - "link": 203, - "slot_index": 6 - }, - { - "name": "effect_multival", - "type": "MULTIVAL", - "link": 204, - "slot_index": 7 - }, - { - "name": "per_block", - "type": "PER_BLOCK", - "link": null + "slot_index": 2, + "shape": 7 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "CONDITIONING+", + "type": "CONDITIONING", "links": [ - 206 + 46, + 77 ], "slot_index": 0, "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ADE_AnimateDiffLoaderGen1", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } - }, - "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt", - "lcm avg(sqrt_linear,linear)" - ] - }, - { - "id": 196, - "type": "GetNode", - "pos": { - "0": 5029.1181640625, - "1": 3590.9638671875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 23, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "MASK", - "type": "MASK", - "links": [ - 310 - ], - "slot_index": 0 - } - ], - "title": "Get_mask_ball", - "properties": {}, - "widgets_values": [ - "mask_ball" - ] - }, - { - "id": 195, - "type": "GetNode", - "pos": { - "0": 5033.1220703125, - "1": 3449.7607421875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 24, - "mode": 0, - "inputs": [], - "outputs": [ + }, { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONDITIONING-", + "type": "CONDITIONING", "links": [ - 311 + 47, + 78 ], - "slot_index": 0 + "slot_index": 1, + "shape": 3 } ], - "title": "Get_img_ball", - "properties": {}, - "widgets_values": [ - "img_ball" - ] + "properties": { + "Node name for S&R": "Apply ControlNet Stack", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [], + "shape": 1 }, { - "id": 185, - "type": "GetNode", - "pos": { - "0": 3071, - "1": 3300 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 66, + "type": "ControlNetLoader", + "pos": [ + 3884, + 1648 + ], + "size": [ + 355.7056884765625, + 58 + ], "flags": {}, - "order": 25, + "order": 12, "mode": 0, "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONTROL_NET", + "type": "CONTROL_NET", "links": [ - 300 + 98 ], - "slot_index": 0 + "shape": 3 } ], - "title": "Get_freq_ball_img", - "properties": {}, + "properties": { + "Node name for S&R": "ControlNetLoader" + }, "widgets_values": [ - "freq_ball_img" + "control_v11f1p_sd15_depth.pth" ] }, { - "id": 134, + "id": 67, "type": "LineArtPreprocessor", - "pos": { - "0": 3301, - "1": 3338 - }, - "size": { - "0": 315, - "1": 82 - }, + "pos": [ + 3908, + 1446 + ], + "size": [ + 315, + 82 + ], "flags": {}, - "order": 49, + "order": 87, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 300 + "link": 383 } ], "outputs": [ @@ -2917,7 +1913,7 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 219 + 101 ], "slot_index": 0, "shape": 3 @@ -2932,18 +1928,18 @@ ] }, { - "id": 187, + "id": 171, "type": "GetNode", - "pos": { - "0": 3387, - "1": 3678 - }, - "size": { - "0": 210, - "1": 58 - }, + "pos": [ + 5804, + 1547 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 26, + "order": 13, "mode": 0, "inputs": [], "outputs": [ @@ -2951,7 +1947,7 @@ "name": "MASK", "type": "MASK", "links": [ - 301 + 289 ], "slot_index": 0 } @@ -2963,961 +1959,1028 @@ ] }, { - "id": 197, + "id": 183, "type": "GetNode", - "pos": { - "0": 6711.1376953125, - "1": 3278.64892578125 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 27, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 312 - ], - "slot_index": 0 - } + "pos": [ + 1870.277099609375, + 2293.146728515625 ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 188, - "type": "GetNode", - "pos": { - "0": 6070.1376953125, - "1": 3306.64892578125 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 302 - ], - "slot_index": 0 - } + "size": [ + 210, + 58 ], - "title": "Get_vae", - "properties": {}, - "widgets_values": [ - "vae" - ] - }, - { - "id": 46, - "type": "GetNode", - "pos": { - "0": 6608, - "1": 2041 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 29, + "order": 14, "mode": 0, "inputs": [], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 49 + 298 ], "slot_index": 0 } ], - "title": "Get_audio", + "title": "Get_freq", "properties": {}, "widgets_values": [ - "audio" - ] - }, - { - "id": 198, - "type": "GetNode", - "pos": { - "0": 8591.5625, - "1": 2391.30419921875 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 30, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 313 - ], - "slot_index": 0 - } + "freq" ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 199, - "type": "GetNode", - "pos": { - "0": 10869, - "1": 2147 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 314 - ], - "slot_index": 0 - } + "id": 77, + "type": "VHS_VideoCombine", + "pos": [ + 1400.9627685546875, + 2619.70654296875 + ], + "size": [ + 214.7587890625, + 467.69549560546875 ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 62, - "type": "VAEDecode", - "pos": { - "0": 10590, - "1": 2555 - }, - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 119, + "order": 68, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 80 + "name": "images", + "type": "IMAGE", + "link": 378 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 124, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": 308 + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 250 - ], - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 } ], "properties": { - "Node name for S&R": "VAEDecode" - }, - "widgets_values": [] - }, - { - "id": 78, - "type": "GetNode", - "pos": { - "0": -1442, - "1": 2188 - }, - "size": { - "0": 210, - "1": 58 + "Node name for S&R": "VHS_VideoCombine" }, - "flags": {}, - "order": 32, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 124 - ], - "slot_index": 0 + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02330-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02330.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02330-audio.mp4" + } } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 192, - "type": "GetNode", - "pos": { - "0": 571, - "1": 1275 - }, - "size": { - "0": 210, - "1": 58 - }, + } + }, + { + "id": 35, + "type": "NNLatentUpscale", + "pos": [ + 7805.8388671875, + 1362.7005615234375 + ], + "size": [ + 315, + 82 + ], "flags": {}, - "order": 33, + "order": 92, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 381 + } + ], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "LATENT", + "type": "LATENT", "links": [ - 307 + 84 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], - "title": "Get_audio", - "properties": {}, + "properties": { + "Node name for S&R": "NNLatentUpscale" + }, "widgets_values": [ - "audio" + "SD 1.x", + 1.67 ] }, { - "id": 11, - "type": "CheckpointLoaderSimple", - "pos": { - "0": 1825, - "1": 1488 - }, - "size": { - "0": 315, - "1": 98 - }, + "id": 61, + "type": "KSampler", + "pos": [ + 8213.8388671875, + 1327.7005615234375 + ], + "size": [ + 315, + 262 + ], "flags": {}, - "order": 34, + "order": 94, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "MODEL", + "name": "model", "type": "MODEL", - "links": [ - 28, - 292 - ], - "slot_index": 0 + "link": 91 }, { - "name": "CLIP", - "type": "CLIP", - "links": [ - 29, - 293 - ], - "slot_index": 1 + "name": "positive", + "type": "CONDITIONING", + "link": 77 }, { - "name": "VAE", - "type": "VAE", + "name": "negative", + "type": "CONDITIONING", + "link": 78 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 84 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", "links": [ - 15, - 291 + 80 ], - "slot_index": 2 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "KSampler" }, "widgets_values": [ - "photon_v1.safetensors" + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.55 ] }, { - "id": 15, - "type": "VAEEncode", - "pos": { - "0": 2552, - "1": 1399 - }, - "size": { - "0": 210, - "1": 46 - }, + "id": 148, + "type": "ImageCASBatch", + "pos": [ + 8604.8388671875, + 1493.700439453125 + ], + "size": [ + 462, + 82 + ], "flags": {}, - "order": 102, + "order": 96, "mode": 0, "inputs": [ { - "name": "pixels", + "name": "image", "type": "IMAGE", - "link": 186 - }, - { - "name": "vae", - "type": "VAE", - "link": 15 + "link": 250 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 63 + 251 ], "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VAEEncode" + "Node name for S&R": "ImageCASBatch" }, - "widgets_values": [] + "widgets_values": [ + 0.8, + 4 + ] }, { - "id": 172, - "type": "GetNode", - "pos": { - "0": 5806.3388671875, - "1": 1436.19921875 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 205, + "type": "Anything Everywhere?", + "pos": [ + -1786.6722412109375, + 2857.204345703125 + ], + "size": [ + 315, + 106 + ], "flags": {}, - "order": 35, + "order": 43, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 290 - ], - "slot_index": 0 + "name": "FLOAT", + "type": "*", + "link": 328, + "shape": 7, + "color_on": "" } ], - "title": "Get_img_ball", - "properties": {}, + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, "widgets_values": [ - "img_ball" + ".*", + "frame_rate", + ".*" ] }, { - "id": 194, - "type": "GetNode", - "pos": { - "0": 6811, - "1": 1218 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 39, + "type": "VHS_LoadAudioUpload", + "pos": [ + -2139.452880859375, + 1568.8199462890625 + ], + "size": [ + 243.818359375, + 130 + ], "flags": {}, - "order": 36, + "order": 15, "mode": 0, "inputs": [], "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "audio", + "type": "AUDIO", "links": [ - 309 + 38, + 48, + 56, + 317 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], - "title": "Get_vae", - "properties": {}, + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Delta Deez - Songfinch - Out the Mud.mp3", + "start_time": 75, + "duration": 2.64, + "choose audio to upload": "image" + } + }, + { + "id": 209, + "type": "Anything Everywhere?", + "pos": [ + -1438.9710693359375, + 2404.482421875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 329, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, "widgets_values": [ - "vae" + ".*", + "frame_count", + ".*" ] }, { - "id": 133, - "type": "ControlNetLoader", - "pos": { - "0": 3074, - "1": 3529 - }, - "size": { - "0": 315, - "1": 58 - }, + "id": 159, + "type": "SetNode", + "pos": [ + -359.7027282714844, + 2643.89501953125 + ], + "size": [ + 252, + 58 + ], "flags": {}, - "order": 37, + "order": 74, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 339 + } + ], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 218 - ], - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_vocal_feature_rms_chroma", "properties": { - "Node name for S&R": "ControlNetLoader" + "previousName": "vocal_feature_rms_chroma" }, "widgets_values": [ - "control_v11f1p_sd15_depth.pth" + "vocal_feature_rms_chroma" ] }, { - "id": 127, - "type": "IPAdapterUnifiedLoader", - "pos": { - "0": 5024, - "1": 3322 - }, - "size": { - "0": 315, - "1": 78 - }, + "id": 207, + "type": "INTConstant", + "pos": [ + -2064.801025390625, + 2396.430419921875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 81, + "order": 16, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 206 - }, + "inputs": [], + "outputs": [ { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null + "name": "value", + "type": "INT", + "links": [ + 326 + ], + "slot_index": 0 } ], + "properties": { + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 206, + "type": "INTConstant", + "pos": [ + -2033.1053466796875, + 2627.87255859375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "model", - "type": "MODEL", - "links": [ - 212 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "value", + "type": "INT", "links": [ - 213 + 327 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" + "Node name for S&R": "INTConstant" }, "widgets_values": [ - "PLUS (high strength)" - ] + 468 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 115, - "type": "VAEDecode", - "pos": { - "0": 6449, - "1": 3520 - }, - "size": { - "0": 210, - "1": 46 - }, + "id": 157, + "type": "SetNode", + "pos": [ + -389.0782165527344, + 2456.552490234375 + ], + "size": [ + 252, + 58 + ], "flags": {}, - "order": 108, + "order": 73, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 193 - }, - { - "name": "vae", - "type": "VAE", - "link": 302 + "name": "FEATURE", + "type": "FEATURE", + "link": 337 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 197 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_vocal_feature_onsetr", "properties": { - "Node name for S&R": "VAEDecode" + "previousName": "vocal_feature_onsetr" }, - "widgets_values": [] + "widgets_values": [ + "vocal_feature_onsetr" + ] }, { - "id": 129, - "type": "Apply ControlNet Stack", - "pos": { - "0": 3741, - "1": 3805 - }, - "size": { - "0": 304.79998779296875, - "1": 66 + "id": 214, + "type": "AudioFeatureExtractor", + "pos": [ + -875.0494995117188, + 2562.256103515625 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true }, - "flags": {}, - "order": 95, - "mode": 4, + "order": 60, + "mode": 0, "inputs": [ { - "name": "positive", - "type": "CONDITIONING", - "link": 210 + "name": "audio", + "type": "AUDIO", + "link": 338 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 211 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", + "name": "frame_count", + "type": "INT", "link": null, - "slot_index": 2 + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "CONDITIONING+", - "type": "CONDITIONING", + "name": "feature", + "type": "FEATURE", "links": [ - 188 - ], - "slot_index": 0, - "shape": 3 + 339 + ] }, { - "name": "CONDITIONING-", - "type": "CONDITIONING", - "links": [ - 189 - ], - "slot_index": 1, - "shape": 3 + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "Apply ControlNet Stack", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "AudioFeatureExtractor" }, - "widgets_values": [], - "shape": 1 + "widgets_values": [ + "chroma_features", + 30, + 0, + 512, + 512 + ] }, { - "id": 132, - "type": "ACN_AdvancedControlNetApply", - "pos": { - "0": 3733, - "1": 3444 - }, - "size": { - "0": 285.6000061035156, - "1": 286 + "id": 211, + "type": "AudioFeatureExtractor", + "pos": [ + -918.2208862304688, + 2033.1798095703125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true }, - "flags": {}, - "order": 82, + "order": 57, "mode": 0, "inputs": [ { - "name": "positive", - "type": "CONDITIONING", - "link": 216 + "name": "audio", + "type": "AUDIO", + "link": 332 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 217 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "control_net", - "type": "CONTROL_NET", - "link": 218, - "slot_index": 2 + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } }, { - "name": "image", - "type": "IMAGE", - "link": 219 + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "mask_optional", - "type": "MASK", - "link": 301 + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 333 + ] }, { - "name": "timestep_kf", - "type": "TIMESTEP_KEYFRAME", - "link": null + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "rms_energy", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 213, + "type": "AudioFeatureExtractor", + "pos": [ + -904.9750366210938, + 2272.69140625 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 336 }, { - "name": "latent_kf_override", - "type": "LATENT_KEYFRAME", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "weights_override", - "type": "CONTROL_NET_WEIGHTS", - "link": null + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } }, { - "name": "model_optional", - "type": "MODEL", - "link": null + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "vae_optional", - "type": "VAE", - "link": null + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", + "name": "feature", + "type": "FEATURE", "links": [ - 210 - ], - "slot_index": 0, - "shape": 3 + 337 + ] }, { - "name": "negative", - "type": "CONDITIONING", + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "onset_strength", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 226, + "type": "GetNode", + "pos": [ + 3010, + 2830 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", "links": [ - 211 + 356 ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "model_opt", - "type": "MODEL", - "links": null, - "shape": 3 + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "ACN_AdvancedControlNetApply" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - 0.5, - 0, - 0.5, - "" + "audio" ] }, { - "id": 116, - "type": "VAEEncode", - "pos": { - "0": 2112, - "1": 3372 - }, - "size": { - "0": 210, - "1": 46 - }, + "id": 228, + "type": "VHS_VideoCombine", + "pos": [ + 3320, + 2580 + ], + "size": [ + 214.7587890625, + 465.6667785644531 + ], "flags": {}, - "order": 56, + "order": 86, "mode": 0, "inputs": [ { - "name": "pixels", + "name": "images", "type": "IMAGE", - "link": 298 + "link": 355 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 356, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": 294 + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", - "links": [ - 190 - ], - "slot_index": 0, + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, "shape": 3 } ], "properties": { - "Node name for S&R": "VAEEncode" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02332-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02332.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02332-audio.mp4" + } + } + } }, { - "id": 39, - "type": "VHS_LoadAudioUpload", - "pos": { - "0": -4568, - "1": 1515 - }, - "size": { - "0": 243.818359375, - "1": 130 - }, + "id": 230, + "type": "GetNode", + "pos": [ + 1860, + 2580 + ], + "size": [ + 252, + 58 + ], "flags": {}, - "order": 38, + "order": 19, "mode": 0, "inputs": [], "outputs": [ { - "name": "audio", - "type": "AUDIO", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 37, - 38, - 48, - 56 + 358 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "VHS_LoadAudioUpload" - }, - "widgets_values": { - "audio": "Delta Deez - Songfinch - Out the Mud.mp3", - "start_time": 75, - "duration": 15, - "choose audio to upload": "image" - } + "title": "Get_vocal_feature_rms_centroid", + "properties": {}, + "widgets_values": [ + "vocal_feature_rms_centroid" + ] }, { - "id": 40, - "type": "AudioSeparator", - "pos": { - "0": -3949, - "1": 2099 - }, - "size": { - "0": 317.4000244140625, - "1": 158 - }, + "id": 231, + "type": "PreviewFeature", + "pos": [ + 2440, + 2940 + ], + "size": [ + 315, + 246 + ], "flags": {}, "order": 61, "mode": 0, "inputs": [ { - "name": "model", - "type": "OPEN_UNMIX_MODEL", - "link": 36, - "slot_index": 0 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 37 - }, - { - "name": "video_frames", - "type": "IMAGE", - "link": 39 + "name": "feature", + "type": "FEATURE", + "link": 357 } ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] + }, + { + "id": 176, + "type": "GetNode", + "pos": [ + 1902.3026123046875, + 2424.309814453125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "audio", - "type": "AUDIO", - "links": [ - 57 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "drums_audio", - "type": "AUDIO", - "links": [ - 41, - 283 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "vocals_audio", - "type": "AUDIO", - "links": [ - 238, - 257, - 260, - 263, - 266 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "bass_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "other_audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", + "name": "VAE", + "type": "VAE", "links": [ - 42, - 239, - 258, - 261, - 264, - 267, - 305 + 294 ], - "slot_index": 5, - "shape": 3 + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "AudioSeparator" - }, + "title": "Get_vae", + "properties": {}, "widgets_values": [ - 30 + "vae" ] }, { - "id": 43, - "type": "AudioFeatureExtractor", - "pos": { - "0": -3306, - "1": 2831 - }, - "size": { - "0": 361.20001220703125, - "1": 78 - }, + "id": 116, + "type": "VAEEncode", + "pos": [ + 2253.27783203125, + 2356.146728515625 + ], + "size": [ + 210, + 46 + ], "flags": {}, - "order": 73, + "order": 42, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 41 + "name": "pixels", + "type": "IMAGE", + "link": 298 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 42 + "name": "vae", + "type": "VAE", + "link": 294 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "LATENT", + "type": "LATENT", "links": [ - 58, - 110 + 362 ], "slot_index": 0, "shape": 3 - }, + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 227, + "type": "GetNode", + "pos": [ + 2260, + 2580 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ { "name": "FEATURE_PIPE", "type": "FEATURE_PIPE", - "links": null, - "shape": 3 + "links": [], + "slot_index": 0 } ], - "properties": { - "Node name for S&R": "AudioFeatureExtractor" - }, + "title": "Get_feature_pipe", + "properties": {}, "widgets_values": [ - "amplitude_envelope" + "feature_pipe" ] }, { - "id": 70, + "id": 232, "type": "FeatureMixer", - "pos": { - "0": -2861, - "1": 2784 - }, - "size": { - "0": 367.79998779296875, - "1": 342 - }, + "pos": [ + 1930, + 2730 + ], + "size": [ + 315, + 322 + ], "flags": {}, - "order": 85, + "order": 41, "mode": 0, "inputs": [ { "name": "feature", "type": "FEATURE", - "link": 110 + "link": 358 } ], "outputs": [ @@ -3925,19 +2988,10 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 284 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 111 + 357, + 361 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { @@ -3953,1101 +3007,1093 @@ 1, 0, 0.3, - 1, - 0.5, + 0, + 5, false ] }, { - "id": 51, - "type": "PreviewFeature", - "pos": { - "0": -2844, - "1": 3248 - }, - "size": { - "0": 315, - "1": 58 - }, + "id": 225, + "type": "GetNode", + "pos": [ + 2990, + 2700 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 84, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 354 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 50, + "type": "PreviewAudio", + "pos": [ + -852.733642578125, + 1654.8201904296875 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 52, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 58 + "name": "audio", + "type": "AUDIO", + "link": 318 } ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 208, + "type": "FloatConstant", + "pos": [ + -2022.41015625, + 2867.3837890625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "FEATURE_PREVIEW", - "type": "IMAGE", + "name": "value", + "type": "FLOAT", "links": [ - 59 + 328 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "PreviewFeature" + "Node name for S&R": "FloatConstant" }, "widgets_values": [ - false - ] + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 52, - "type": "PreviewImage", - "pos": { - "0": -2448, - "1": 2947 - }, - "size": { - "0": 210, - "1": 246 - }, + "id": 203, + "type": "Anything Everywhere?", + "pos": [ + -1833.7139892578125, + 2394.65087890625 + ], + "size": [ + 315, + 106 + ], "flags": {}, - "order": 97, + "order": 39, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 59 + "name": "INT", + "type": "*", + "link": 326, + "shape": 7, + "color_on": "" } ], "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, - "widgets_values": [] + "widgets_values": [ + ".*", + "width", + ".*" + ] }, { - "id": 71, - "type": "PreviewImage", - "pos": { - "0": -2189, - "1": 2834 - }, - "size": { - "0": 210, - "1": 246 - }, + "id": 204, + "type": "Anything Everywhere?", + "pos": [ + -1801.3350830078125, + 2631.564453125 + ], + "size": [ + 315, + 106 + ], "flags": {}, - "order": 99, + "order": 40, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 111 + "name": "INT", + "type": "*", + "link": 327, + "shape": 7, + "color_on": "" } ], "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, - "widgets_values": [] + "widgets_values": [ + ".*", + "height", + ".*" + ] }, { - "id": 42, - "type": "EmptyImageAndMaskFromAudio", - "pos": { - "0": -4410, - "1": 1817 - }, - "size": { - "0": 411.6000061035156, - "1": 146 + "id": 212, + "type": "AudioFeatureExtractor", + "pos": [ + -912.0160522460938, + 2217.921630859375 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true }, - "flags": {}, - "order": 53, + "order": 58, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", - "link": 38 + "link": 334 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "empty_image", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 39, - 162 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "empty_mask", - "type": "MASK", - "links": null, - "shape": 3 + 335 + ] }, { "name": "frame_count", "type": "INT", - "links": [ - 66, - 67 - ], - "slot_index": 2, - "shape": 3 + "links": null } ], "properties": { - "Node name for S&R": "EmptyImageAndMaskFromAudio" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ + "spectral_centroid", 30, - 768, - 464 + 0, + 512, + 512 ] }, { - "id": 57, - "type": "VHS_LoadVideo", - "pos": { - "0": 245, - "1": 1805 - }, + "id": 42, + "type": "EmptyImageAndMaskFromAudio", + "pos": [ + -1794.7305908203125, + 1870.947509765625 + ], "size": [ - 247.455078125, - 389.27465067455944 + 411.6000061035156, + 146 ], "flags": {}, - "order": 64, + "order": 35, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 38 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "frame_load_cap", + "name": "width", "type": "INT", - "link": 67, + "link": null, "widget": { - "name": "frame_load_cap" + "name": "width" } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 68 - ], - "slot_index": 0, - "shape": 3 }, { - "name": "frame_count", + "name": "height", "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "floating_in_pool_768_ball_MASK.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "floating_in_pool_768_ball_MASK.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 + "link": null, + "widget": { + "name": "height" } } - } - }, - { - "id": 58, - "type": "_mfc", - "pos": { - "0": 533, - "1": 1768 - }, - "size": { - "0": 315, - "1": 150 - }, - "flags": {}, - "order": 80, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 68 - } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [ - 69, - 100, - 287 + "name": "empty_image", + "type": "IMAGE", + "links": [ + 162 ], "slot_index": 0, "shape": 3 }, { - "name": "IMAGE", - "type": "IMAGE", + "name": "empty_mask", + "type": "MASK", + "links": null, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", "links": [ - 288 + 66, + 67, + 329 ], - "slot_index": 1, + "slot_index": 2, "shape": 3 } ], "properties": { - "Node name for S&R": "_mfc" + "Node name for S&R": "EmptyImageAndMaskFromAudio" }, "widgets_values": [ - 255, - 255, - 255, - 11 + 30, + 768, + 464 ] }, { - "id": 55, - "type": "ImageCompositeMasked", - "pos": { - "0": 876, - "1": 1365 - }, - "size": { - "0": 315, - "1": 146 + "id": 210, + "type": "AudioFeatureExtractor", + "pos": [ + -905.7296752929688, + 1810.003173828125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": false }, - "flags": {}, - "order": 91, + "order": 56, "mode": 0, "inputs": [ { - "name": "destination", - "type": "IMAGE", - "link": 183 + "name": "audio", + "type": "AUDIO", + "link": 330 }, { - "name": "source", - "type": "IMAGE", - "link": 65 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "mask", - "type": "MASK", - "link": 69 + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 73, - 99, - 186, - 299 - ], - "slot_index": 0, - "shape": 3 + 331 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "ImageCompositeMasked" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - 15, + "amplitude_envelope", + 30, 0, - false + 512, + 512 ] }, { - "id": 44, - "type": "SetNode", - "pos": { - "0": -1559, - "1": 1886 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 202, + "type": "AudioSeparatorSimple", + "pos": [ + -1434.3082275390625, + 2124.085205078125 + ], + "size": [ + 315, + 106 + ], "flags": {}, - "order": 106, + "order": 38, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 286 + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 316 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 317 } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "audio", + "type": "AUDIO", + "links": [ + 318 + ] + }, + { + "name": "drums_audio", + "type": "AUDIO", + "links": [ + 340, + 376, + 380 + ], + "slot_index": 1 + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 330, + 332, + 334, + 336, + 338 + ], + "slot_index": 2 + }, + { + "name": "bass_audio", + "type": "AUDIO", "links": [], - "slot_index": 0 + "slot_index": 3 + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": null } ], - "title": "Set_freq", "properties": { - "previousName": "freq" + "Node name for S&R": "AudioSeparatorSimple" }, - "widgets_values": [ - "freq" - ] + "widgets_values": [] }, { - "id": 110, - "type": "GetNode", - "pos": { - "0": 642, - "1": 1385 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 240, + "type": "PreviewAudio", + "pos": [ + -909.0541381835938, + 2377.963134765625 + ], + "size": [ + 315, + 76 + ], "flags": {}, - "order": 39, + "order": 55, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 183 - ], - "slot_index": 0 + "name": "audio", + "type": "AUDIO", + "link": 380 } ], - "title": "Get_freq", - "properties": {}, + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, "widgets_values": [ - "freq" + null ] }, { - "id": 54, - "type": "VHS_LoadVideo", - "pos": { - "0": 263, - "1": 1313 - }, + "id": 239, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 409.053466796875, + 2576.251953125 + ], "size": [ - 247.455078125, - 389.27465067455944 + 504, + 558 ], "flags": {}, - "order": 63, + "order": 54, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 376 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 }, { - "name": "frame_load_cap", + "name": "screen_width", "type": "INT", - "link": 66, + "link": null, "widget": { - "name": "frame_load_cap" - } - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 65 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "audio", - "type": "AUDIO", - "links": null, - "shape": 3 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_LoadVideo" - }, - "widgets_values": { - "video": "floating_in_pool_768.mp4", - "force_rate": 0, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 0, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 0, - "force_rate": 0, - "filename": "floating_in_pool_768.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 + "name": "screen_width" } - } - } - }, - { - "id": 179, - "type": "SetNode", - "pos": { - "0": 2697, - "1": 1636 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ + }, { - "name": "LORA_STACK", - "type": "LORA_STACK", - "link": 297 + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 378, + 379 + ] + }, + { + "name": "MASK", + "type": "MASK", "links": null } ], - "title": "Set_lora_stack", "properties": { - "previousName": "lora_stack" + "Node name for S&R": "FlexAudioVisualizerCircular" }, "widgets_values": [ - "lora_stack" + 1, + 0, + "None", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 90, + 360, + 2048, + 20, + 8000, + 170, + 2, + 100, + 170 ] }, { - "id": 65, - "type": "ACN_AdvancedControlNetApply", - "pos": { - "0": 4358, - "1": 1400 - }, - "size": { - "0": 285.6000061035156, - "1": 286 - }, + "id": 10, + "type": "KSampler", + "pos": [ + 6925, + 1507 + ], + "size": [ + 315, + 262 + ], "flags": {}, - "order": 107, + "order": 90, "mode": 0, "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 90 + }, { "name": "positive", "type": "CONDITIONING", - "link": 181 + "link": 46 }, { "name": "negative", "type": "CONDITIONING", - "link": 182 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 98, - "slot_index": 2 - }, - { - "name": "image", - "type": "IMAGE", - "link": 101 - }, - { - "name": "mask_optional", - "type": "MASK", - "link": 100 - }, - { - "name": "timestep_kf", - "type": "TIMESTEP_KEYFRAME", - "link": null - }, - { - "name": "latent_kf_override", - "type": "LATENT_KEYFRAME", - "link": null - }, - { - "name": "weights_override", - "type": "CONTROL_NET_WEIGHTS", - "link": null - }, - { - "name": "model_optional", - "type": "MODEL", - "link": null + "link": 47 }, { - "name": "vae_optional", - "type": "VAE", - "link": null + "name": "latent_image", + "type": "LATENT", + "link": 382 } ], "outputs": [ { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 97 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "negative", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", "links": [ - 96 + 14, + 381 ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "model_opt", - "type": "MODEL", - "links": null, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ACN_AdvancedControlNetApply" + "Node name for S&R": "KSampler" }, "widgets_values": [ - 0.5, - 0, - 0.5, - "" + 156680208700286, + "fixed", + 4, + 1, + "lcm", + "sgm_uniform", + 0.6 ] }, { - "id": 32, - "type": "Apply ControlNet Stack", - "pos": { - "0": 4367, - "1": 1753 - }, - "size": { - "0": 304.79998779296875, - "1": 66 - }, + "id": 15, + "type": "VAEEncode", + "pos": [ + 2552, + 1399 + ], + "size": [ + 210, + 46 + ], "flags": {}, - "order": 109, + "order": 82, "mode": 0, "inputs": [ { - "name": "positive", - "type": "CONDITIONING", - "link": 97 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 96 + "name": "pixels", + "type": "IMAGE", + "link": 186 }, { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": null, - "slot_index": 2 + "name": "vae", + "type": "VAE", + "link": 15 } ], "outputs": [ { - "name": "CONDITIONING+", - "type": "CONDITIONING", + "name": "LATENT", + "type": "LATENT", "links": [ - 46, - 77 + 364 ], "slot_index": 0, "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 224, + "type": "VAEDecode", + "pos": [ + 2980, + 2610 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 363 }, { - "name": "CONDITIONING-", - "type": "CONDITIONING", + "name": "vae", + "type": "VAE", + "link": 354 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", "links": [ - 47, - 78 + 355, + 383 ], - "slot_index": 1, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "Apply ControlNet Stack", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "VAEDecode" }, - "widgets_values": [], - "shape": 1 + "widgets_values": [] }, { - "id": 66, - "type": "ControlNetLoader", - "pos": { - "0": 3884, - "1": 1648 - }, - "size": { - "0": 355.7056884765625, - "1": 58 - }, + "id": 44, + "type": "SetNode", + "pos": [ + 1091.2005615234375, + 2823.260498046875 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 40, + "order": 69, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 379 + } + ], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 98 - ], - "shape": 3 + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 } ], + "title": "Set_freq", "properties": { - "Node name for S&R": "ControlNetLoader" + "previousName": "freq" }, "widgets_values": [ - "control_v11f1p_sd15_depth.pth" - ] + "freq" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 67, - "type": "LineArtPreprocessor", - "pos": { - "0": 3908, - "1": 1446 - }, - "size": { - "0": 315, - "1": 82 + "id": 215, + "type": "AudioFeatureExtractor", + "pos": [ + -1122.3336181640625, + 2777.022216796875 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": false }, - "flags": {}, - "order": 101, + "order": 53, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 99 + "name": "audio", + "type": "AUDIO", + "link": 340 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "feature", + "type": "FEATURE", "links": [ - 101 + 343, + 345 ], - "slot_index": 0, - "shape": 3 + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null } ], "properties": { - "Node name for S&R": "LineArtPreprocessor" + "Node name for S&R": "AudioFeatureExtractor" }, "widgets_values": [ - "disable", + "amplitude_envelope", + 30, + 0, + 512, 512 ] }, { - "id": 171, - "type": "GetNode", - "pos": { - "0": 5804, - "1": 1547 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 217, + "type": "FeatureMixer", + "pos": [ + -599.2960205078125, + 2792.25439453125 + ], + "size": [ + 315, + 322 + ], "flags": {}, - "order": 41, + "order": 66, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 343 + } + ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 289 + 346 ], "slot_index": 0 } ], - "title": "Get_mask_ball", - "properties": {}, + "properties": { + "Node name for S&R": "FeatureMixer" + }, "widgets_values": [ - "mask_ball" + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.3, + 1, + 0.5, + false ] }, { - "id": 183, - "type": "GetNode", - "pos": { - "0": 1729, - "1": 3309 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 219, + "type": "PreviewFeature", + "pos": [ + -181.15213012695312, + 2830.769287109375 + ], + "size": [ + 315, + 246 + ], "flags": {}, - "order": 42, + "order": 79, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 298 - ], - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 346 } ], - "title": "Get_freq", - "properties": {}, - "widgets_values": [ - "freq" - ] + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] }, { - "id": 60, - "type": "VHS_VideoCombine", - "pos": { - "0": 1533, - "1": 2104 - }, + "id": 218, + "type": "PreviewFeature", + "pos": [ + -192.9978485107422, + 3147.65869140625 + ], "size": [ - 214.7587890625, - 442.1570031330334 + 315, + 246 ], "flags": {}, - "order": 100, + "order": 67, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 73 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 307 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "feature", + "type": "FEATURE", + "link": 345 } ], + "outputs": [], "properties": { - "Node name for S&R": "VHS_VideoCombine" + "Node name for S&R": "PreviewFeature" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_01231-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "widgets_values": [] }, { - "id": 77, - "type": "VHS_VideoCombine", - "pos": { - "0": -1088, - "1": 2105 - }, + "id": 167, + "type": "SetNode", + "pos": [ + 1127.6591796875, + 1835.9041748046875 + ], "size": [ - 214.7587890625, - 442.1570031330334 + 210, + 58 ], "flags": {}, - "order": 105, + "order": 77, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 285 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 124 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "name": "MASK", + "type": "MASK", + "link": 287 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_mask_ball", "properties": { - "Node name for S&R": "VHS_VideoCombine" + "previousName": "mask_ball" }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_01230-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } - } - } + "widgets_values": [ + "mask_ball" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 131, - "type": "IPAdapterClipVisionEnhancerBatch", - "pos": { - "0": 5453, - "1": 3366 - }, - "size": { - "0": 316.3516845703125, - "1": 326 - }, + "id": 170, + "type": "SetNode", + "pos": [ + 1064.319580078125, + 2047.427001953125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 94, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 212 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 213 - }, - { - "name": "image", - "type": "IMAGE", - "link": 311 - }, + "order": 78, + "mode": 0, + "inputs": [ { - "name": "image_negative", + "name": "IMAGE", "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": 310 - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null + "link": 288 } ], "outputs": [ { - "name": "MODEL", - "type": "MODEL", - "links": [ - 187 - ], - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_img_ball", "properties": { - "Node name for S&R": "IPAdapterClipVisionEnhancerBatch" + "previousName": "img_ball" }, "widgets_values": [ - 1, - "linear", - 0, - 1, - "V only", - 2, - 0.5, - 0 - ] + "img_ball" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 117, + "id": 60, "type": "VHS_VideoCombine", - "pos": { - "0": 6930, - "1": 3369 - }, + "pos": [ + 1400.9998779296875, + 1849.674072265625 + ], "size": [ 214.7587890625, - 310 + 467.69549560546875 ], "flags": {}, - "order": 110, + "order": 81, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 197 + "link": 73 }, { "name": "audio", "type": "AUDIO", - "link": 312 + "link": 307, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ @@ -5069,656 +4115,604 @@ "pix_fmt": "yuv420p", "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_07439-audio.mp4", + "filename": "AnimateDiff_02331-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 30 + "frame_rate": 30, + "workflow": "AnimateDiff_02331.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02331-audio.mp4" } } } }, { - "id": 112, - "type": "KSampler", - "pos": { - "0": 6026, - "1": 3421 - }, - "size": { - "0": 315, - "1": 262 - }, + "id": 46, + "type": "GetNode", + "pos": [ + 6881.419921875, + 1418.210205078125 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 104, + "order": 24, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 187 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 188 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 189 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 190 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 193, - 244 + 49 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "KSampler" - }, + "title": "Get_audio", + "properties": {}, "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.6 + "audio" ] }, { - "id": 10, - "type": "KSampler", - "pos": { - "0": 6925, - "1": 1507 - }, - "size": { - "0": 315, - "1": 262 - }, + "id": 26, + "type": "ADE_AnimateDiffLoRALoader", + "pos": [ + 4907.17529296875, + 1352.8338623046875 + ], + "size": [ + 261.19134521484375, + 82 + ], "flags": {}, - "order": 111, + "order": 25, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 90 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 46 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 47 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 63 + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "MOTION_LORA", + "type": "MOTION_LORA", "links": [ - 14, - 241 + 386 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], + "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.6 + "LiquidAF-0-1.safetensors", + 0.8 ] }, { - "id": 190, - "type": "GetNode", - "pos": { - "0": 7841, - "1": 2135 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 22, + "type": "ADE_MultivalDynamic", + "pos": [ + 4917.17529296875, + 1652.8338623046875 + ], + "size": [ + 265.1632385253906, + 58 + ], "flags": {}, - "order": 43, + "order": 26, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 306 - ], - "slot_index": 0 + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 } ], - "title": "Get_feature_pipe", - "properties": {}, - "widgets_values": [ - "feature_pipe" - ] - }, - { - "id": 144, - "type": "GetNode", - "pos": { - "0": 7351, - "1": 2146 - }, - "size": { - "0": 328.3037109375, - "1": 58 - }, - "flags": {}, - "order": 44, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MULTIVAL", + "type": "MULTIVAL", "links": [ - 252 + 388 ], + "shape": 3, "slot_index": 0 } ], - "title": "Get_vocal_feature_rms_centroid", - "properties": {}, + "title": "Effect 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, "widgets_values": [ - "vocal_feature_rms_centroid" + 1.1 ] }, { - "id": 149, - "type": "FeatureMixer", - "pos": { - "0": 7509, - "1": 2269 - }, - "size": { - "0": 367.79998779296875, - "1": 342 - }, + "id": 20, + "type": "ADE_MultivalDynamic", + "pos": [ + 4917.17529296875, + 1762.8338623046875 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 + ], "flags": {}, - "order": 57, + "order": 27, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 252 + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MULTIVAL", + "type": "MULTIVAL", "links": [ - 280 + 389 ], "slot_index": 0, "shape": 3 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 269 - ], - "slot_index": 1, - "shape": 3 } ], + "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 0.3, - 0, - 5, - false + 1.1400000000000001 ] }, { - "id": 150, - "type": "PreviewImage", - "pos": { - "0": 7920, - "1": 2410 - }, - "size": { - "0": 210, - "1": 246 - }, + "id": 23, + "type": "ADE_CustomCFGSimple", + "pos": [ + 4917.17529296875, + 1862.8338623046875 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 + ], "flags": {}, - "order": 65, + "order": 28, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 269 + "name": "cfg_extras", + "type": "CFG_EXTRAS", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "CUSTOM_CFG", + "type": "CUSTOM_CFG", + "links": [ + 394 + ], + "shape": 3, + "slot_index": 0 } ], - "outputs": [], "properties": { - "Node name for S&R": "PreviewImage" + "Node name for S&R": "ADE_CustomCFGSimple", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, - "widgets_values": [] + "widgets_values": [ + 2 + ] }, { - "id": 147, - "type": "VHS_VideoCombine", - "pos": { - "0": 8907, - "1": 2142 - }, + "id": 243, + "type": "ADE_AnimateDiffSamplingSettings", + "pos": [ + 4933.60888671875, + 1965.2379150390625 + ], "size": [ - 214.7587890625, - 310 + 273.3500061035156, + 274 ], "flags": {}, - "order": 117, + "order": 44, "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 247 + "name": "noise_layers", + "type": "NOISE_LAYERS", + "link": null, + "slot_index": 0, + "shape": 7 }, { - "name": "audio", - "type": "AUDIO", - "link": 313 + "name": "iteration_opts", + "type": "ITERATION_OPTS", + "link": null, + "shape": 7 }, { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null + "name": "custom_cfg", + "type": "CUSTOM_CFG", + "link": 394, + "slot_index": 2, + "shape": 7 }, { - "name": "vae", - "type": "VAE", - "link": null + "name": "sigma_schedule", + "type": "SIGMA_SCHEDULE", + "link": null, + "slot_index": 3, + "shape": 7 + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + }, + "shape": 7 + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, + "name": "settings", + "type": "SAMPLE_SETTINGS", + "links": [ + 391 + ], + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 30, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_07446-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 30 - } + "Node name for S&R": "ADE_AnimateDiffSamplingSettings", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" } - } + }, + "widgets_values": [ + 0, + "FreeNoise", + "comfy", + 0, + 0, + false + ] }, { - "id": 145, - "type": "FlexLatentInterpolate", - "pos": { - "0": 8195, - "1": 2117 - }, - "size": { - "0": 344.3999938964844, - "1": 214 - }, + "id": 244, + "type": "ADE_ApplyAnimateDiffModelSimple", + "pos": [ + 5312.76025390625, + 1431.6883544921875 + ], + "size": [ + 260.3999938964844, + 126 + ], "flags": {}, - "order": 113, + "order": 45, "mode": 0, "inputs": [ { - "name": "latents", - "type": "LATENT", - "link": 241 + "name": "motion_model", + "type": "MOTION_MODEL_ADE", + "link": 387 }, { - "name": "feature", - "type": "FEATURE", - "link": 280 + "name": "motion_lora", + "type": "MOTION_LORA", + "link": 386, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 306 + "name": "scale_multival", + "type": "MULTIVAL", + "link": 389, + "shape": 7 }, { - "name": "latent_2", - "type": "LATENT", - "link": 244 + "name": "effect_multival", + "type": "MULTIVAL", + "link": 388, + "shape": 7 + }, + { + "name": "ad_keyframes", + "type": "AD_KEYFRAMES", + "link": null, + "shape": 7 + }, + { + "name": "per_block", + "type": "PER_BLOCK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "M_MODELS", + "type": "M_MODELS", "links": [ - 249, - 282 - ], - "slot_index": 0, - "shape": 3 + 384 + ] } ], "properties": { - "Node name for S&R": "FlexLatentInterpolate" - }, - "widgets_values": [ - 1, - 0, - "None", - "relative", - "Spherical" - ] + "Node name for S&R": "ADE_ApplyAnimateDiffModelSimple" + } }, { - "id": 35, - "type": "NNLatentUpscale", - "pos": { - "0": 9851, - "1": 2170 - }, - "size": { - "0": 315, - "1": 82 - }, + "id": 245, + "type": "ADE_LoadAnimateDiffModel", + "pos": [ + 5212.91162109375, + 1288.619384765625 + ], + "size": [ + 302, + 58 + ], "flags": {}, - "order": 116, + "order": 29, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 282 + "name": "ad_settings", + "type": "AD_SETTINGS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "MOTION_MODEL", + "type": "MOTION_MODEL_ADE", "links": [ - 84 - ], - "slot_index": 0, - "shape": 3 + 387 + ] } ], "properties": { - "Node name for S&R": "NNLatentUpscale" + "Node name for S&R": "ADE_LoadAnimateDiffModel" }, "widgets_values": [ - "SD 1.x", - 1.67 + "ALCM_sd15_t2v_beta.ckpt" ] }, { - "id": 61, - "type": "KSampler", - "pos": { - "0": 10259, - "1": 2135 - }, - "size": { - "0": 315, - "1": 262 - }, + "id": 241, + "type": "ADE_UseEvolvedSampling", + "pos": [ + 5303.85888671875, + 1615.7391357421875 + ], + "size": [ + 315, + 118 + ], "flags": {}, - "order": 118, + "order": 62, "mode": 0, "inputs": [ { "name": "model", "type": "MODEL", - "link": 91 + "link": 392 }, { - "name": "positive", - "type": "CONDITIONING", - "link": 77 + "name": "m_models", + "type": "M_MODELS", + "link": 384, + "shape": 7 }, { - "name": "negative", - "type": "CONDITIONING", - "link": 78 + "name": "context_options", + "type": "CONTEXT_OPTIONS", + "link": 390, + "shape": 7 }, { - "name": "latent_image", - "type": "LATENT", - "link": 84 + "name": "sample_settings", + "type": "SAMPLE_SETTINGS", + "link": 391, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "MODEL", + "type": "MODEL", "links": [ - 80 + 393 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "ADE_UseEvolvedSampling" }, "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.55 + "autoselect" ] }, { - "id": 148, - "type": "ImageCASBatch", - "pos": { - "0": 10650, - "1": 2301 - }, - "size": { - "0": 462, - "1": 82 - }, + "id": 242, + "type": "ADE_AnimateDiffUniformContextOptions", + "pos": [ + 5269.7255859375, + 1863.7127685546875 + ], + "size": [ + 273.269775390625, + 270 + ], "flags": {}, - "order": 120, + "order": 30, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 250 + "name": "prev_context", + "type": "CONTEXT_OPTIONS", + "link": null, + "shape": 7 + }, + { + "name": "view_opts", + "type": "VIEW_OPTS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONTEXT_OPTS", + "type": "CONTEXT_OPTIONS", "links": [ - 251 + 390 ], "slot_index": 0, "shape": 3 } ], + "title": "Context Options 🎭🅐🅓", "properties": { - "Node name for S&R": "ImageCASBatch" - }, - "widgets_values": [ - 0.8, - 4 - ] - }, - { - "id": 201, - "type": "GetNode", - "pos": { - "0": 2078, - "1": 3833 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 45, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 315 - ], - "slot_index": 0 + "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" } - ], - "title": "Get_lora_stack", - "properties": {}, + }, "widgets_values": [ - "lora_stack" + 16, + 1, + 4, + "uniform", + false, + "pyramid", + false, + 0, + 1, + "" ] }, { - "id": 166, - "type": "FlexAudioVisualizerCircular", - "pos": { - "0": -2046, - "1": 2063 - }, - "size": { - "0": 478.79998779296875, - "1": 558 - }, + "id": 233, + "type": "FlexLatentInterpolate", + "pos": [ + 2540, + 2560 + ], + "size": [ + 415.8000183105469, + 194 + ], "flags": {}, - "order": 98, + "order": 84, "mode": 0, "inputs": [ { - "name": "audio", - "type": "AUDIO", - "link": 283 + "name": "latents", + "type": "LATENT", + "link": 364 + }, + { + "name": "latent_2", + "type": "LATENT", + "link": 362 }, { "name": "opt_feature", "type": "FEATURE", - "link": 284 + "link": 361, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 285, - 286 + 363, + 382 ], - "shape": 3 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "FlexAudioVisualizerCircular" + "Node name for S&R": "FlexLatentInterpolate" }, "widgets_values": [ - 30, - 768, - 464, 1, - "max_frequency", - "relative", + 0, "None", - 0.5, - 0.5, - "bar", - "frequency", - 0.5, - 90, - 360, - 2048, - 20, - 8000, - 150, - 2, - 100, - 150 + "relative", + "Spherical" ] } ], @@ -5763,70 +4757,6 @@ 0, "IMAGE" ], - [ - 20, - 30, - 0, - 18, - 0, - "MODEL" - ], - [ - 21, - 21, - 0, - 18, - 1, - "CONTEXT_OPTIONS" - ], - [ - 22, - 26, - 0, - 18, - 2, - "MOTION_LORA" - ], - [ - 23, - 19, - 0, - 18, - 5, - "SAMPLE_SETTINGS" - ], - [ - 24, - 20, - 0, - 18, - 6, - "MULTIVAL" - ], - [ - 25, - 22, - 0, - 18, - 7, - "MULTIVAL" - ], - [ - 26, - 23, - 0, - 19, - 2, - "CUSTOM_CFG" - ], - [ - 27, - 18, - 0, - 27, - 0, - "MODEL" - ], [ 28, 11, @@ -5851,22 +4781,6 @@ 2, "LORA_STACK" ], - [ - 36, - 41, - 0, - 40, - 0, - "OPEN_UNMIX_MODEL" - ], - [ - 37, - 39, - 0, - 40, - 1, - "AUDIO" - ], [ 38, 39, @@ -5875,30 +4789,6 @@ 0, "AUDIO" ], - [ - 39, - 42, - 0, - 40, - 2, - "IMAGE" - ], - [ - 41, - 40, - 1, - 43, - 0, - "AUDIO" - ], - [ - 42, - 40, - 5, - 43, - 1, - "FEATURE_PIPE" - ], [ 46, 32, @@ -5939,38 +4829,6 @@ 0, "AUDIO" ], - [ - 57, - 40, - 0, - 50, - 0, - "AUDIO" - ], - [ - 58, - 43, - 0, - 51, - 0, - "FEATURE" - ], - [ - 59, - 51, - 0, - 52, - 0, - "IMAGE" - ], - [ - 63, - 15, - 0, - 10, - 3, - "LATENT" - ], [ 65, 54, @@ -6107,14 +4965,6 @@ 2, "CONTROL_NET" ], - [ - 99, - 55, - 0, - 67, - 0, - "IMAGE" - ], [ 100, 58, @@ -6131,22 +4981,6 @@ 3, "IMAGE" ], - [ - 110, - 43, - 0, - 70, - 0, - "FEATURE" - ], - [ - 111, - 70, - 1, - 71, - 0, - "IMAGE" - ], [ 124, 78, @@ -6204,656 +5038,761 @@ "IMAGE" ], [ - 187, - 131, + 250, + 62, + 0, + 148, + 0, + "IMAGE" + ], + [ + 251, + 148, + 0, + 63, + 0, + "IMAGE" + ], + [ + 287, + 58, + 0, + 167, + 0, + "*" + ], + [ + 288, + 58, + 1, + 170, + 0, + "*" + ], + [ + 289, + 171, + 0, + 64, + 4, + "MASK" + ], + [ + 290, + 172, + 0, + 64, + 2, + "IMAGE" + ], + [ + 291, + 11, + 2, + 173, + 0, + "*" + ], + [ + 292, + 11, 0, - 112, + 174, + 0, + "*" + ], + [ + 293, + 11, + 1, + 175, 0, - "MODEL" + "*" ], [ - 188, - 129, + 294, + 176, 0, - 112, + 116, 1, - "CONDITIONING" + "VAE" ], [ - 189, - 129, - 1, - 112, - 2, - "CONDITIONING" + 297, + 29, + 0, + 179, + 0, + "*" ], [ - 190, + 298, + 183, + 0, 116, 0, - 112, - 3, - "LATENT" + "IMAGE" ], [ - 191, - 128, - 1, - 113, + 299, + 55, 0, - "CLIP" + 184, + 0, + "*" ], [ + 307, 192, - 128, - 1, - 114, 0, - "CLIP" + 60, + 1, + "AUDIO" ], [ + 308, 193, - 112, - 0, - 115, 0, - "LATENT" + 62, + 1, + "VAE" ], [ - 197, - 115, - 0, - 117, + 309, + 194, 0, - "IMAGE" + 14, + 1, + "VAE" ], [ + 314, 199, - 128, 0, - 118, - 0, - "MODEL" + 63, + 1, + "AUDIO" ], [ - 200, - 121, + 316, + 41, 0, - 118, - 1, - "CONTEXT_OPTIONS" + 202, + 0, + "OPEN_UNMIX_MODEL" ], [ - 201, - 126, + 317, + 39, 0, - 118, - 2, - "MOTION_LORA" + 202, + 1, + "AUDIO" ], [ + 318, 202, - 119, 0, - 118, - 5, - "SAMPLE_SETTINGS" + 50, + 0, + "AUDIO" ], [ + 326, + 207, + 0, 203, - 120, 0, - 118, - 6, - "MULTIVAL" + "INT" ], [ + 327, + 206, + 0, 204, - 122, 0, - 118, - 7, - "MULTIVAL" + "INT" ], [ + 328, + 208, + 0, 205, - 123, 0, - 119, - 2, - "CUSTOM_CFG" + "FLOAT" ], [ - 206, - 118, + 329, + 42, + 2, + 209, 0, - 127, + "INT" + ], + [ + 330, + 202, + 2, + 210, 0, - "MODEL" + "AUDIO" ], [ + 331, 210, - 132, 0, - 129, + 143, 0, - "CONDITIONING" + "FEATURE" ], [ + 332, + 202, + 2, 211, - 132, - 1, - 129, - 1, - "CONDITIONING" + 0, + "AUDIO" ], [ - 212, - 127, + 333, + 211, 0, - 131, + 153, 0, - "MODEL" + "FEATURE" ], [ - 213, - 127, - 1, - 131, - 1, - "IPADAPTER" + 334, + 202, + 2, + 212, + 0, + "AUDIO" ], [ - 216, - 113, + 335, + 212, 0, - 132, + 155, 0, - "CONDITIONING" + "FEATURE" ], [ - 217, - 114, + 336, + 202, + 2, + 213, 0, - 132, - 1, - "CONDITIONING" + "AUDIO" ], [ - 218, - 133, + 337, + 213, 0, - 132, - 2, - "CONTROL_NET" - ], - [ - 219, - 134, + 157, 0, - 132, - 3, - "IMAGE" + "FEATURE" ], [ - 238, - 40, + 338, + 202, 2, - 142, + 214, 0, "AUDIO" ], [ - 239, - 40, - 5, - 142, - 1, - "FEATURE_PIPE" + 339, + 214, + 0, + 159, + 0, + "FEATURE" ], [ - 240, - 142, - 0, - 143, + 340, + 202, + 1, + 215, 0, - "*" + "AUDIO" ], [ - 241, - 10, + 343, + 215, 0, - 145, + 217, 0, - "LATENT" + "FEATURE" ], [ - 244, - 112, + 345, + 215, 0, - 145, - 3, - "LATENT" + 218, + 0, + "FEATURE" ], [ - 247, - 146, + 346, + 217, 0, - 147, + 219, 0, - "IMAGE" + "FEATURE" ], [ - 249, - 145, - 0, - 146, + 354, + 225, 0, - "LATENT" + 224, + 1, + "VAE" ], [ - 250, - 62, + 355, + 224, 0, - 148, + 228, 0, "IMAGE" ], [ - 251, - 148, + 356, + 226, 0, - 63, + 228, + 1, + "AUDIO" + ], + [ + 357, + 232, 0, - "IMAGE" + 231, + 0, + "FEATURE" ], [ - 252, - 144, + 358, + 230, 0, - 149, + 232, 0, "FEATURE" ], [ - 257, - 40, - 2, - 152, + 361, + 232, 0, - "AUDIO" + 233, + 2, + "FEATURE" ], [ - 258, - 40, - 5, - 152, + 362, + 116, + 0, + 233, 1, - "FEATURE_PIPE" + "LATENT" ], [ - 259, - 152, + 363, + 233, 0, - 153, + 224, 0, - "*" + "LATENT" ], [ - 260, - 40, - 2, - 154, + 364, + 15, 0, - "AUDIO" + 233, + 0, + "LATENT" ], [ - 261, - 40, - 5, - 154, + 376, + 202, 1, - "FEATURE_PIPE" + 239, + 0, + "AUDIO" ], [ - 262, - 154, + 378, + 239, 0, - 155, + 77, 0, - "*" + "IMAGE" ], [ - 263, - 40, - 2, - 156, + 379, + 239, 0, - "AUDIO" + 44, + 0, + "IMAGE" ], [ - 264, - 40, - 5, - 156, + 380, + 202, 1, - "FEATURE_PIPE" + 240, + 0, + "AUDIO" ], [ - 265, - 156, + 381, + 10, 0, - 157, + 35, 0, - "*" + "LATENT" ], [ - 266, - 40, - 2, - 158, + 382, + 233, 0, - "AUDIO" - ], - [ - 267, - 40, - 5, - 158, - 1, - "FEATURE_PIPE" + 10, + 3, + "LATENT" ], [ - 268, - 158, + 383, + 224, 0, - 159, + 67, 0, - "*" + "IMAGE" ], [ - 269, - 149, - 1, - 150, + 384, + 244, 0, - "IMAGE" + 241, + 1, + "M_MODELS" ], [ - 280, - 149, + 386, + 26, 0, - 145, + 244, 1, - "FEATURE" + "MOTION_LORA" ], [ - 282, - 145, + 387, + 245, 0, - 35, + 244, + 0, + "MOTION_MODEL_ADE" + ], + [ + 388, + 22, + 0, + 244, + 3, + "MULTIVAL" + ], + [ + 389, + 20, 0, - "LATENT" + 244, + 2, + "MULTIVAL" ], [ - 283, - 40, - 1, - 166, + 390, + 242, 0, - "AUDIO" + 241, + 2, + "CONTEXT_OPTIONS" ], [ - 284, - 70, + 391, + 243, 0, - 166, - 1, - "FEATURE" + 241, + 3, + "SAMPLE_SETTINGS" ], [ - 285, - 166, + 392, + 30, 0, - 77, + 241, 0, - "IMAGE" + "MODEL" ], [ - 286, - 166, + 393, + 241, 0, - 44, + 27, 0, - "IMAGE" + "MODEL" ], [ - 287, - 58, - 0, - 167, + 394, + 23, 0, - "*" + 243, + 2, + "CUSTOM_CFG" ], [ - 288, - 58, + 404, + 208, + 0, + 214, 1, - 170, + "FLOAT" + ], + [ + 405, + 42, + 2, + 214, + 2, + "INT" + ], + [ + 406, + 207, 0, - "*" + 214, + 3, + "INT" ], [ - 289, - 171, + 407, + 206, 0, - 64, + 214, 4, - "MASK" + "INT" ], [ - 290, - 172, + 408, + 208, 0, - 64, - 2, - "IMAGE" + 211, + 1, + "FLOAT" ], [ - 291, - 11, + 409, + 42, 2, - 173, - 0, - "*" + 211, + 2, + "INT" ], [ - 292, - 11, + 410, + 207, 0, - 174, - 0, - "*" + 211, + 3, + "INT" ], [ - 293, - 11, - 1, - 175, + 411, + 206, 0, - "*" + 211, + 4, + "INT" ], [ - 294, - 176, + 412, + 208, 0, - 116, + 213, 1, - "VAE" + "FLOAT" ], [ - 295, - 177, - 0, - 128, - 0, - "MODEL" + 413, + 42, + 2, + 213, + 2, + "INT" ], [ - 296, - 178, + 414, + 207, 0, - 128, - 1, - "CLIP" + 213, + 3, + "INT" ], [ - 297, - 29, - 0, - 179, + 415, + 206, 0, - "*" + 213, + 4, + "INT" ], [ - 298, - 183, + 416, + 208, 0, - 116, - 0, - "IMAGE" + 212, + 1, + "FLOAT" ], [ - 299, - 55, - 0, - 184, - 0, - "*" + 417, + 42, + 2, + 212, + 2, + "INT" ], [ - 300, - 185, + 418, + 207, 0, - 134, - 0, - "IMAGE" + 212, + 3, + "INT" ], [ - 301, - 187, + 419, + 206, 0, - 132, + 212, 4, - "MASK" + "INT" ], [ - 302, - 188, + 420, + 208, 0, - 115, + 42, 1, - "VAE" + "FLOAT" ], [ - 303, - 189, + 421, + 207, 0, - 146, - 1, - "VAE" + 42, + 2, + "INT" ], [ - 305, - 40, - 5, - 191, + 422, + 206, 0, - "*" + 42, + 3, + "INT" ], [ - 306, - 190, + 423, + 208, 0, - 145, + 210, + 1, + "FLOAT" + ], + [ + 424, + 42, + 2, + 210, 2, - "FEATURE_PIPE" + "INT" ], [ - 307, - 192, + 425, + 207, 0, - 60, - 1, - "AUDIO" + 210, + 3, + "INT" ], [ - 308, - 193, + 426, + 206, 0, - 62, - 1, - "VAE" + 210, + 4, + "INT" ], [ - 309, - 194, + 427, + 207, 0, - 14, - 1, - "VAE" + 239, + 2, + "INT" ], [ - 310, - 196, + 428, + 206, 0, - 131, - 4, - "MASK" + 239, + 3, + "INT" ], [ - 311, - 195, + 429, + 208, 0, - 131, - 2, - "IMAGE" + 239, + 4, + "FLOAT" ], [ - 312, - 197, + 430, + 208, 0, - 117, + 215, 1, - "AUDIO" + "FLOAT" ], [ - 313, - 198, - 0, - 147, - 1, - "AUDIO" + 431, + 42, + 2, + 215, + 2, + "INT" ], [ - 314, - 199, + 432, + 207, 0, - 63, - 1, - "AUDIO" + 215, + 3, + "INT" ], [ - 315, - 201, + 433, + 206, 0, - 128, - 2, - "LORA_STACK" + 215, + 4, + "INT" ] ], "groups": [ { + "id": 1, "title": "ipadap", "bounding": [ 5762, @@ -6866,6 +5805,7 @@ "flags": {} }, { + "id": 2, "title": "samp", "bounding": [ 6868, @@ -6878,10 +5818,11 @@ "flags": {} }, { + "id": 3, "title": "samp22", "bounding": [ - 9860, - 2028, + 7814.8388671875, + 1220.700439453125, 1775, 718 ], @@ -6890,6 +5831,7 @@ "flags": {} }, { + "id": 4, "title": "adiff", "bounding": [ 4850, @@ -6902,6 +5844,7 @@ "flags": {} }, { + "id": 5, "title": "model", "bounding": [ 1783, @@ -6914,6 +5857,7 @@ "flags": {} }, { + "id": 6, "title": "controlnet", "bounding": [ 3830, @@ -6926,10 +5870,11 @@ "flags": {} }, { - "title": "Load Audio\\", + "id": 7, + "title": "Variables", "bounding": [ - -4607, - 1227, + -2104.369384765625, + 1280.8199462890625, 2400, 2155 ], @@ -6938,22 +5883,24 @@ "flags": {} }, { + "id": 8, "title": "Load Images", "bounding": [ - 196, - 1189, - 1570, - 1136 + 349.9508056640625, + 1279.8662109375, + 1307.97265625, + 1120.81005859375 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { + "id": 9, "title": "Visualizer", "bounding": [ - -2107, - 1980, + 381.96240234375, + 2494.70654296875, 1316, 674 ], @@ -6962,72 +5909,13 @@ "flags": {} }, { + "id": 10, "title": "Setup 2", "bounding": [ - 1652, - 3179, - 1323, - 1047 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Controlnet", - "bounding": [ - 3017, - 3188, - 1082, - 784 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Adiff2", - "bounding": [ - 4141, - 3192, - 785, - 1120 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Ipadapter", - "bounding": [ - 4964, - 3209, - 891, - 611 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Sampler", - "bounding": [ - 5884, - 3192, - 1247, - 670 - ], - "color": "#3f789e", - "font_size": 24, - "flags": {} - }, - { - "title": "Combine them", - "bounding": [ - 7317, - 1931, - 1842, - 888 + 1793.277099609375, + 2163.146728515625, + 1807.3800048828125, + 1094.092529296875 ], "color": "#3f789e", "font_size": 24, @@ -7037,12 +5925,268 @@ "config": {}, "extra": { "ds": { - "scale": 0.13310000000000746, + "scale": 0.11167815779424767, "offset": [ - 2529.5159878152917, - 2335.702455576461 + 3374.530744673751, + 1401.0853789567884 ] - } + }, + "node_versions": { + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "ComfyUI_IPAdapter_plus": "b188a6cb39b512a9c6da7235b880af42c78ccd0d", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "comfy-core": "0.3.12", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca", + "ComfyUI_RyanOnTheInside": "e2382fa6e72d3aa18cbb4d558eb468cc14c54afc", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e", + "efficiency-nodes-comfyui": "3ead4afd120833f3bffdefeca0d6545df8051798", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUi_NNLatentUpscale": "08105da31dbd7a54569661e135835e73bd8064b0", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e" + }, + "ue_links": [ + { + "downstream": 214, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 214, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 214, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 214, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 211, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 211, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 211, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 211, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 213, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 213, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 213, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 213, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 212, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 212, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 212, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 212, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 42, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 42, + "downstream_slot": 2, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 42, + "downstream_slot": 3, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 210, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 210, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 210, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 210, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 239, + "downstream_slot": 2, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 239, + "downstream_slot": 3, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + }, + { + "downstream": 239, + "downstream_slot": 4, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 215, + "downstream_slot": 1, + "upstream": "208", + "upstream_slot": 0, + "controller": 205, + "type": "FLOAT" + }, + { + "downstream": 215, + "downstream_slot": 2, + "upstream": "42", + "upstream_slot": 2, + "controller": 209, + "type": "INT" + }, + { + "downstream": 215, + "downstream_slot": 3, + "upstream": "207", + "upstream_slot": 0, + "controller": 203, + "type": "INT" + }, + { + "downstream": 215, + "downstream_slot": 4, + "upstream": "206", + "upstream_slot": 0, + "controller": 204, + "type": "INT" + } + ] }, "version": 0.4 } \ No newline at end of file diff --git a/examples/spinnyvis/part2_animatediffVERSION2.json b/examples/spinnyvis/part2_animatediffVERSION2.json new file mode 100644 index 0000000..310094a --- /dev/null +++ b/examples/spinnyvis/part2_animatediffVERSION2.json @@ -0,0 +1,2141 @@ +{ + "last_node_id": 302, + "last_link_id": 525, + "nodes": [ + { + "id": 165, + "type": "ADE_AnimateDiffSamplingSettings", + "pos": [ + 5707.480888441229, + -528.7132590696225 + ], + "size": { + "0": 273.3500061035156, + "1": 254 + }, + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "noise_layers", + "type": "NOISE_LAYERS", + "link": null, + "slot_index": 0 + }, + { + "name": "iteration_opts", + "type": "ITERATION_OPTS", + "link": null + }, + { + "name": "custom_cfg", + "type": "CUSTOM_CFG", + "link": 285, + "slot_index": 2 + }, + { + "name": "sigma_schedule", + "type": "SIGMA_SCHEDULE", + "link": null, + "slot_index": 3 + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } + }, + { + "name": "seed_override", + "type": "INT", + "link": null, + "widget": { + "name": "seed_override" + } + } + ], + "outputs": [ + { + "name": "settings", + "type": "SAMPLE_SETTINGS", + "links": [ + 282 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffSamplingSettings", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 0, + "FreeNoise", + "comfy", + 0, + 0, + false, + "" + ] + }, + { + "id": 166, + "type": "ADE_MultivalDynamic", + "pos": [ + 5357.480888441229, + -728.7132590696225 + ], + "size": { + "0": 259.9388122558594, + "1": 63.332008361816406 + }, + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "mask_optional", + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "MULTIVAL", + "type": "MULTIVAL", + "links": [ + 283 + ], + "shape": 3, + "slot_index": 0 + } + ], + "title": "Scale 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.1400000000000001, + "" + ] + }, + { + "id": 167, + "type": "ADE_AnimateDiffUniformContextOptions", + "pos": [ + 5707.480888441229, + -838.7132590696225 + ], + "size": { + "0": 273.269775390625, + "1": 270 + }, + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "prev_context", + "type": "CONTEXT_OPTIONS", + "link": null + }, + { + "name": "view_opts", + "type": "VIEW_OPTS", + "link": null + } + ], + "outputs": [ + { + "name": "CONTEXT_OPTS", + "type": "CONTEXT_OPTIONS", + "links": [ + 280 + ], + "shape": 3, + "slot_index": 0 + } + ], + "title": "Context Options 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 16, + 1, + 4, + "uniform", + false, + "pyramid", + false, + 0, + 1, + "" + ] + }, + { + "id": 168, + "type": "ADE_MultivalDynamic", + "pos": [ + 5357.480888441229, + -838.7132590696225 + ], + "size": { + "0": 265.1632385253906, + "1": 58 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "mask_optional", + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "MULTIVAL", + "type": "MULTIVAL", + "links": [ + 284 + ], + "shape": 3 + } + ], + "title": "Effect 🎭🅐🅓", + "properties": { + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.1, + "" + ] + }, + { + "id": 169, + "type": "ADE_CustomCFGSimple", + "pos": [ + 5357.480888441229, + -628.7132590696225 + ], + "size": { + "0": 257.2469787597656, + "1": 60.893348693847656 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "cfg_extras", + "type": "CFG_EXTRAS", + "link": null + } + ], + "outputs": [ + { + "name": "CUSTOM_CFG", + "type": "CUSTOM_CFG", + "links": [ + 285 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_CustomCFGSimple", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 2, + "" + ] + }, + { + "id": 170, + "type": "ADE_AdjustPESweetspotStretch", + "pos": [ + 5357.480888441229, + -528.7132590696225 + ], + "size": { + "0": 253.07310485839844, + "1": 106 + }, + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "prev_pe_adjust", + "type": "PE_ADJUST", + "link": null + } + ], + "outputs": [ + { + "name": "PE_ADJUST", + "type": "PE_ADJUST", + "links": [], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AdjustPESweetspotStretch", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 16, + 18, + false, + "" + ] + }, + { + "id": 171, + "type": "ADE_AdjustWeightAllMult", + "pos": [ + 5347.480888441229, + -998.7132590696226 + ], + "size": { + "0": 270.3999938964844, + "1": 82 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "prev_weight_adjust", + "type": "WEIGHT_ADJUST", + "link": null + } + ], + "outputs": [ + { + "name": "WEIGHT_ADJUST", + "type": "WEIGHT_ADJUST", + "links": [], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ADE_AdjustWeightAllMult", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + 1.01, + false, + "" + ] + }, + { + "id": 172, + "type": "ADE_AnimateDiffLoRALoader", + "pos": [ + 5347.480888441229, + -1138.7132590696226 + ], + "size": { + "0": 261.19134521484375, + "1": 82 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null + } + ], + "outputs": [ + { + "name": "MOTION_LORA", + "type": "MOTION_LORA", + "links": [ + 281 + ], + "shape": 3, + "slot_index": 0 + } + ], + "title": "AnimateDiff LoRA", + "properties": { + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + "LiquidAF-0-1.safetensors", + 0.8, + "" + ] + }, + { + "id": 174, + "type": "CR Apply LoRA Stack", + "pos": [ + 3835.344952087443, + -904.6115589012819 + ], + "size": { + "0": 254.40000915527344, + "1": 66 + }, + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 287 + }, + { + "name": "clip", + "type": "CLIP", + "link": 288 + }, + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 289 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 279 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 271, + 272 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR Apply LoRA Stack" + } + }, + { + "id": 211, + "type": "VAEDecode", + "pos": [ + 7993.507143276098, + -1005.2179548397995 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 347 + }, + { + "name": "vae", + "type": "VAE", + "link": 338 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 417 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 160, + "type": "CLIPTextEncode", + "pos": [ + 4255.344952087442, + -774.6115589012819 + ], + "size": { + "0": 425.27801513671875, + "1": 180.6060791015625 + }, + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 272 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 445 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "text, watermark" + ] + }, + { + "id": 164, + "type": "ADE_AnimateDiffLoaderGen1", + "pos": [ + 5707.480888441229, + -1138.7132590696226 + ], + "size": { + "0": 271.7644958496094, + "1": 242 + }, + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 279 + }, + { + "name": "context_options", + "type": "CONTEXT_OPTIONS", + "link": 280, + "slot_index": 1 + }, + { + "name": "motion_lora", + "type": "MOTION_LORA", + "link": 281, + "slot_index": 2 + }, + { + "name": "ad_settings", + "type": "AD_SETTINGS", + "link": null, + "slot_index": 3 + }, + { + "name": "ad_keyframes", + "type": "AD_KEYFRAMES", + "link": null + }, + { + "name": "sample_settings", + "type": "SAMPLE_SETTINGS", + "link": 282, + "slot_index": 5 + }, + { + "name": "scale_multival", + "type": "MULTIVAL", + "link": 283, + "slot_index": 6 + }, + { + "name": "effect_multival", + "type": "MULTIVAL", + "link": 284, + "slot_index": 7 + }, + { + "name": "per_block", + "type": "PER_BLOCK", + "link": null + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 451 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ADE_AnimateDiffLoaderGen1", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "widgets_values": [ + "ALCM_sd15_t2v_beta.ckpt", + "lcm avg(sqrt_linear,linear)" + ] + }, + { + "id": 263, + "type": "ModelSamplingDiscrete", + "pos": [ + 5669.480888441229, + -1253.7132590696226 + ], + "size": { + "0": 315, + "1": 82 + }, + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 451 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 452, + 453 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingDiscrete" + }, + "widgets_values": [ + "lcm", + false + ] + }, + { + "id": 162, + "type": "VAEEncode", + "pos": [ + 3890.67190821065, + -1085.2910114736687 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 521 + }, + { + "name": "vae", + "type": "VAE", + "link": 276 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 270 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + } + }, + { + "id": 161, + "type": "VAEDecode", + "pos": [ + 6714.121918788901, + -1120.3067361056192 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 273 + }, + { + "name": "vae", + "type": "VAE", + "link": 274 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 483 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 285, + "type": "Reroute", + "pos": [ + 6816.536100405279, + -1256.5018636629773 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 499 + } + ], + "outputs": [ + { + "name": "", + "type": "AUDIO", + "links": [ + 500, + 501, + 518 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 276, + "type": "VHS_VideoCombine", + "pos": [ + 7049.121918788901, + -1241.3067361056192 + ], + "size": [ + 452.57537841796875, + 1039.9868332435344 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 483 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 500 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_08190-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + } + } + } + }, + { + "id": 158, + "type": "KSampler", + "pos": [ + 6304.121918788901, + -1119.3067361056192 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 453 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 522 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 523 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 270 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 273, + 475 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 6, + 1, + "lcm", + "sgm_uniform", + 0.43 + ] + }, + { + "id": 209, + "type": "NNLatentUpscale", + "pos": [ + 7620.748864651938, + -1224.193900138928 + ], + "size": { + "0": 315, + "1": 82 + }, + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 475 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 411 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "NNLatentUpscale" + }, + "widgets_values": [ + "SD 1.x", + 2 + ] + }, + { + "id": 159, + "type": "CLIPTextEncode", + "pos": [ + 4250.671908210652, + -1031.2910114736687 + ], + "size": { + "0": 422.84503173828125, + "1": 164.31304931640625 + }, + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 271 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 444 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "ral-crystals, molten crystal music visualizer made out of mechanical ral-polygon" + ] + }, + { + "id": 213, + "type": "KSampler", + "pos": [ + 7634.748864651938, + -1069.193900138928 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 452 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 524 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 525 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 411 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 347 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 156680208700286, + "fixed", + 8, + 1, + "lcm", + "sgm_uniform", + 0.19 + ] + }, + { + "id": 256, + "type": "ImageCASBatch", + "pos": [ + 8014.748864651934, + -1185.193900138928 + ], + "size": { + "0": 462, + "1": 82 + }, + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 417 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 478, + 517 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCASBatch" + }, + "widgets_values": [ + 0.8, + 4 + ] + }, + { + "id": 212, + "type": "VHS_VideoCombine", + "pos": [ + 8571.121918788902, + -1234.2432533161223 + ], + "size": [ + 452.57537841796875, + 1039.9868332435344 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 478 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 501 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_08191-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + } + } + } + }, + { + "id": 216, + "type": "Reroute", + "pos": [ + 3712.67190821065, + -1084.2910114736687 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 489 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 521 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 280, + "type": "VHS_LoadVideo", + "pos": [ + 2454.8252762634597, + -1063.2910114736687 + ], + "size": [ + 235.1999969482422, + 632.4249949455261 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 488 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "frame_count", + "type": "INT", + "links": null, + "shape": 3, + "slot_index": 1 + }, + { + "name": "audio", + "type": "AUDIO", + "links": [ + 499 + ], + "shape": 3, + "slot_index": 2 + }, + { + "name": "video_info", + "type": "VHS_VIDEOINFO", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadVideo" + }, + "widgets_values": { + "video": "spinny_vis_swirl1.mp4", + "force_rate": 0, + "force_size": "Disabled", + "custom_width": 512, + "custom_height": 512, + "frame_load_cap": 0, + "skip_first_frames": 0, + "select_every_nth": 1, + "choose video to upload": "image", + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "frame_load_cap": 0, + "skip_first_frames": 0, + "force_rate": 0, + "filename": "spinny_vis_swirl1.mp4", + "type": "input", + "format": "video/mp4", + "select_every_nth": 1 + } + } + } + }, + { + "id": 282, + "type": "ImageScaleBy", + "pos": [ + 2783.8252762634597, + -1057.2910114736687 + ], + "size": { + "0": 315, + "1": 82 + }, + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 488 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 489 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageScaleBy" + }, + "widgets_values": [ + "nearest-exact", + 0.5 + ] + }, + { + "id": 11, + "type": "CheckpointLoaderSimple", + "pos": [ + 3309.67190821065, + -1047.2910114736687 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 8, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 287 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 288 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 274, + 276, + 338 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "photonLCM_v10.safetensors" + ] + }, + { + "id": 29, + "type": "CR LoRA Stack", + "pos": [ + 3469.67190821065, + -886.2910114736687 + ], + "size": { + "0": 315, + "1": 342 + }, + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": 515 + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 289 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "On", + "ral-polygon-sd15.safetensors", + 1, + 1, + "On", + "add_detail.safetensors", + 1, + 1, + "On", + "ral-crystals-sd15.safetensors", + 1, + 1 + ] + }, + { + "id": 299, + "type": "CR LoRA Stack", + "pos": [ + 3469.67190821065, + -499.29101147366873 + ], + "size": { + "0": 315, + "1": 342 + }, + "flags": {}, + "order": 9, + "mode": 4, + "inputs": [ + { + "name": "lora_stack", + "type": "LORA_STACK", + "link": null + } + ], + "outputs": [ + { + "name": "LORA_STACK", + "type": "LORA_STACK", + "links": [ + 515 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CR LoRA Stack" + }, + "widgets_values": [ + "On", + "ral-copperwire-sd15.safetensors", + 1, + 1, + "Off", + "add_detail.safetensors", + 1, + 1, + "Off", + "ral-crystals-sd15.safetensors", + 1, + 1 + ] + }, + { + "id": 175, + "type": "Apply ControlNet Stack", + "pos": [ + 4974.671908210652, + -929.2910114736687 + ], + "size": { + "0": 304.79998779296875, + "1": 66 + }, + "flags": {}, + "order": 22, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 444 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 445 + }, + { + "name": "cnet_stack", + "type": "CONTROL_NET_STACK", + "link": null, + "slot_index": 2 + } + ], + "outputs": [ + { + "name": "CONDITIONING+", + "type": "CONDITIONING", + "links": [ + 522, + 524 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "CONDITIONING-", + "type": "CONDITIONING", + "links": [ + 523, + 525 + ], + "shape": 3, + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "Apply ControlNet Stack", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } + }, + "shape": 1 + }, + { + "id": 301, + "type": "UpscaleModelLoader", + "pos": [ + 9195, + -1249 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 10, + "mode": 0, + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 516 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UpscaleModelLoader" + }, + "widgets_values": [ + "RealESRGAN_x2.pth" + ] + }, + { + "id": 300, + "type": "ImageUpscaleWithModel", + "pos": [ + 9234, + -1141 + ], + "size": { + "0": 241.79998779296875, + "1": 46 + }, + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 516, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 517 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 519 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageUpscaleWithModel" + } + }, + { + "id": 302, + "type": "VHS_VideoCombine", + "pos": [ + 9603, + -1234 + ], + "size": [ + 452.57537841796875, + 1040.4529705047607 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 519 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 518 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_08191-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30 + } + } + } + } + ], + "links": [ + [ + 270, + 162, + 0, + 158, + 3, + "LATENT" + ], + [ + 271, + 174, + 1, + 159, + 0, + "CLIP" + ], + [ + 272, + 174, + 1, + 160, + 0, + "CLIP" + ], + [ + 273, + 158, + 0, + 161, + 0, + "LATENT" + ], + [ + 274, + 11, + 2, + 161, + 1, + "VAE" + ], + [ + 276, + 11, + 2, + 162, + 1, + "VAE" + ], + [ + 279, + 174, + 0, + 164, + 0, + "MODEL" + ], + [ + 280, + 167, + 0, + 164, + 1, + "CONTEXT_OPTIONS" + ], + [ + 281, + 172, + 0, + 164, + 2, + "MOTION_LORA" + ], + [ + 282, + 165, + 0, + 164, + 5, + "SAMPLE_SETTINGS" + ], + [ + 283, + 166, + 0, + 164, + 6, + "MULTIVAL" + ], + [ + 284, + 168, + 0, + 164, + 7, + "MULTIVAL" + ], + [ + 285, + 169, + 0, + 165, + 2, + "CUSTOM_CFG" + ], + [ + 287, + 11, + 0, + 174, + 0, + "MODEL" + ], + [ + 288, + 11, + 1, + 174, + 1, + "CLIP" + ], + [ + 289, + 29, + 0, + 174, + 2, + "LORA_STACK" + ], + [ + 338, + 11, + 2, + 211, + 1, + "VAE" + ], + [ + 347, + 213, + 0, + 211, + 0, + "LATENT" + ], + [ + 411, + 209, + 0, + 213, + 3, + "LATENT" + ], + [ + 417, + 211, + 0, + 256, + 0, + "IMAGE" + ], + [ + 444, + 159, + 0, + 175, + 0, + "CONDITIONING" + ], + [ + 445, + 160, + 0, + 175, + 1, + "CONDITIONING" + ], + [ + 451, + 164, + 0, + 263, + 0, + "MODEL" + ], + [ + 452, + 263, + 0, + 213, + 0, + "MODEL" + ], + [ + 453, + 263, + 0, + 158, + 0, + "MODEL" + ], + [ + 475, + 158, + 0, + 209, + 0, + "LATENT" + ], + [ + 478, + 256, + 0, + 212, + 0, + "IMAGE" + ], + [ + 483, + 161, + 0, + 276, + 0, + "IMAGE" + ], + [ + 488, + 280, + 0, + 282, + 0, + "IMAGE" + ], + [ + 489, + 282, + 0, + 216, + 0, + "*" + ], + [ + 499, + 280, + 2, + 285, + 0, + "*" + ], + [ + 500, + 285, + 0, + 276, + 1, + "AUDIO" + ], + [ + 501, + 285, + 0, + 212, + 1, + "AUDIO" + ], + [ + 515, + 299, + 0, + 29, + 0, + "LORA_STACK" + ], + [ + 516, + 301, + 0, + 300, + 0, + "UPSCALE_MODEL" + ], + [ + 517, + 256, + 0, + 300, + 1, + "IMAGE" + ], + [ + 518, + 285, + 0, + 302, + 1, + "AUDIO" + ], + [ + 519, + 300, + 0, + 302, + 0, + "IMAGE" + ], + [ + 521, + 216, + 0, + 162, + 0, + "IMAGE" + ], + [ + 522, + 175, + 0, + 158, + 1, + "CONDITIONING" + ], + [ + 523, + 175, + 1, + 158, + 2, + "CONDITIONING" + ], + [ + 524, + 175, + 0, + 213, + 1, + "CONDITIONING" + ], + [ + 525, + 175, + 1, + 213, + 2, + "CONDITIONING" + ] + ], + "groups": [ + { + "title": "samp", + "bounding": [ + 6158, + -1352, + 1388, + 1170 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "adiff", + "bounding": [ + 5318, + -1369, + 812, + 1134 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "model", + "bounding": [ + 3251, + -1378, + 2041, + 1233 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "Audio vidualizers", + "bounding": [ + 2403, + -1176, + 816, + 815 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "Samp2", + "bounding": [ + 7562, + -1344, + 1505, + 1175 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + }, + { + "title": "Upscale", + "bounding": [ + 9151, + -1343, + 943, + 1162 + ], + "color": "#3f789e", + "font_size": 24, + "locked": false + } + ], + "config": {}, + "extra": {}, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/spinnyvis/part_1_visualizerVERSION2.json b/examples/spinnyvis/part_1_visualizerVERSION2.json new file mode 100644 index 0000000..c820f67 --- /dev/null +++ b/examples/spinnyvis/part_1_visualizerVERSION2.json @@ -0,0 +1,6807 @@ +{ + "last_node_id": 230, + "last_link_id": 394, + "nodes": [ + { + "id": 28, + "type": "GetNode", + "pos": [ + 5843.73828125, + -2293.697509765625 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 34, + 168 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 78, + "type": "DownloadOpenUnmixModel", + "pos": [ + -2080, + -1740 + ], + "size": [ + 361.20001220703125, + 58 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 250 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] + }, + { + "id": 84, + "type": "SetNode", + "pos": [ + -1640, + -1560 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 54, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 103 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_empty_img", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "empty_img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 87, + "type": "AudioFilter", + "pos": [ + -1130, + -1490 + ], + "size": [ + 252, + 46 + ], + "flags": {}, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 253 + }, + { + "name": "filters", + "type": "FREQUENCY_FILTER", + "link": 107 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 266 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AudioFilter" + }, + "widgets_values": [] + }, + { + "id": 92, + "type": "SetNode", + "pos": [ + -780, + -1390 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 93, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 267 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_kick_feature", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "kick_feature" + ] + }, + { + "id": 93, + "type": "SetNode", + "pos": [ + -790, + -1210 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 79, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 269 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_drum_feature", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "drum_feature" + ] + }, + { + "id": 99, + "type": "SetNode", + "pos": [ + -780, + -820 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 86, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 275 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_other_feature", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "other_feature" + ] + }, + { + "id": 100, + "type": "SetNode", + "pos": [ + -1620, + -1450 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 55, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 123 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_empty_mask", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "empty_mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 83, + "type": "PreviewAudio", + "pos": [ + -950, + -2330 + ], + "size": [ + 315, + 76.00000762939453 + ], + "flags": {}, + "order": 78, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 131 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 105, + "type": "PreviewAudio", + "pos": [ + -950, + -2180 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 80, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 132 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 106, + "type": "PreviewAudio", + "pos": [ + -950, + -2020 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 82, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 133 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 88, + "type": "SetNode", + "pos": [ + -1190, + -2330 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 254 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 131 + ], + "slot_index": 0 + } + ], + "title": "Set_audio_drums", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "audio_drums" + ] + }, + { + "id": 89, + "type": "SetNode", + "pos": [ + -1180, + -2170 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 255 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 132 + ], + "slot_index": 0 + } + ], + "title": "Set_audio__vocals", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "audio__vocals" + ] + }, + { + "id": 90, + "type": "SetNode", + "pos": [ + -1180, + -2020 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 64, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 257 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 133 + ], + "slot_index": 0 + } + ], + "title": "Set_audio_bass", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "audio_bass" + ] + }, + { + "id": 102, + "type": "SetNode", + "pos": [ + -1183, + -1729 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "link": null + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_feature_pipe", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "feature_pipe" + ] + }, + { + "id": 97, + "type": "SetNode", + "pos": [ + -770, + -960 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 83, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 273 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_bass_feature", + "properties": { + "previousName": "bass_feature" + }, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 95, + "type": "SetNode", + "pos": [ + -790, + -1070 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 81, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 271 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vocal_feature", + "properties": { + "previousName": "vocal_feature" + }, + "widgets_values": [ + "vocal_feature" + ] + }, + { + "id": 101, + "type": "SetNode", + "pos": [ + -1640, + -1310 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 124 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_frame_count", + "properties": { + "previousName": "frame_count" + }, + "widgets_values": [ + "frame_count" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 81, + "type": "SetNode", + "pos": [ + -1949, + -2062 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 100 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 136 + ], + "slot_index": 0 + } + ], + "title": "Set_audio", + "properties": { + "previousName": "audio" + }, + "widgets_values": [ + "audio" + ] + }, + { + "id": 110, + "type": "PreviewAudio", + "pos": [ + -1693, + -2088 + ], + "size": [ + 315, + 76.00000762939453 + ], + "flags": {}, + "order": 58, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 136 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 107, + "type": "PreviewAudio", + "pos": [ + -930, + -1890 + ], + "size": [ + 315, + 76 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 134 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 91, + "type": "SetNode", + "pos": [ + -1187, + -1875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 66, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 259 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 134, + 142, + 143 + ], + "slot_index": 0 + } + ], + "title": "Set_audio_other", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "audio_other" + ] + }, + { + "id": 113, + "type": "AudioSubtract", + "pos": [ + -527, + -1875 + ], + "size": [ + 403.1999816894531, + 46 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [ + { + "name": "audio1", + "type": "AUDIO", + "link": 142 + }, + { + "name": "audio2", + "type": "AUDIO", + "link": 143 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 144 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "AudioSubtract" + }, + "widgets_values": [] + }, + { + "id": 114, + "type": "SetNode", + "pos": [ + -75, + -1880 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 94, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "link": 144 + } + ], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_audio_empty", + "properties": { + "previousName": "audio_empty" + }, + "widgets_values": [ + "audio_empty" + ] + }, + { + "id": 118, + "type": "GetNode", + "pos": [ + 500, + -30 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 316 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_empty", + "properties": {}, + "widgets_values": [ + "audio_empty" + ] + }, + { + "id": 86, + "type": "FrequencyFilterPreset", + "pos": [ + -1148, + -1605 + ], + "size": [ + 405.5999755859375, + 58 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "previous_filter", + "type": "FREQUENCY_FILTER", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "FREQUENCY_FILTER", + "type": "FREQUENCY_FILTER", + "links": [ + 107 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FrequencyFilterPreset" + }, + "widgets_values": [ + "isolate_kick_drum" + ] + }, + { + "id": 127, + "type": "SetNode", + "pos": [ + -482, + -601 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 87, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 277 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_drum_feat_accum", + "properties": { + "previousName": "drum_feat_accum" + }, + "widgets_values": [ + "drum_feat_accum" + ] + }, + { + "id": 135, + "type": "GetNode", + "pos": [ + 240, + 560 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 319 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_empty", + "properties": {}, + "widgets_values": [ + "audio_empty" + ] + }, + { + "id": 143, + "type": "VHS_DuplicateImages", + "pos": [ + 4689.33349609375, + -1182.4765625 + ], + "size": [ + 214.232421875, + 78 + ], + "flags": {}, + "order": 74, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 183 + }, + { + "name": "multiply_by", + "type": "INT", + "link": 182, + "widget": { + "name": "multiply_by" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 185 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_DuplicateImages" + }, + "widgets_values": { + "multiply_by": 1 + } + }, + { + "id": 150, + "type": "GetNode", + "pos": [ + 1330, + 200 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": [], + "slot_index": 0 + } + ], + "title": "Get_feature_pipe", + "properties": {}, + "widgets_values": [ + "feature_pipe" + ] + }, + { + "id": 149, + "type": "GetNode", + "pos": [ + 1320, + 80 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 326 + ], + "slot_index": 0 + } + ], + "title": "Get_time_feature_pulse", + "properties": {}, + "widgets_values": [ + "time_feature_pulse" + ] + }, + { + "id": 163, + "type": "SetNode", + "pos": [ + -639, + -66 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 88, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 278 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_time_feature_pulse", + "properties": { + "previousName": "time_feature_pulse" + }, + "widgets_values": [ + "time_feature_pulse" + ] + }, + { + "id": 168, + "type": "SetNode", + "pos": [ + -670, + 460 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 281 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_time_feature_pulse", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "time_feature_pulse_0_0" + ] + }, + { + "id": 152, + "type": "GetNode", + "pos": [ + 1360, + 690 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 332 + ], + "slot_index": 0 + } + ], + "title": "Get_time_feature_pulse_0", + "properties": {}, + "widgets_values": [ + "time_feature_pulse_0" + ] + }, + { + "id": 155, + "type": "GetNode", + "pos": [ + 1470, + 1320 + ], + "size": [ + 218.39999389648438, + 58 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 335 + ], + "slot_index": 0 + } + ], + "title": "Get_time_feature_pulse_0_0", + "properties": {}, + "widgets_values": [ + "time_feature_pulse_0_0" + ] + }, + { + "id": 130, + "type": "ImageToMask", + "pos": [ + 5469.33349609375, + -1062.4761962890625 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 91, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 185 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 165, + 190 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask" + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 129, + "type": "ImageToMask", + "pos": [ + 5439.33349609375, + -1192.4765625 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 104, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 343 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 164 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask" + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 132, + "type": "MaskToImage", + "pos": [ + 6389.33349609375, + -1012.4761352539062 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": {}, + "order": 107, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 239 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 169 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 57, + "type": "GetNode", + "pos": [ + 3668.51025390625, + -2293.11669921875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 341 + ], + "slot_index": 0 + } + ], + "title": "Get_vocal_feature", + "properties": {}, + "widgets_values": [ + "vocal_feature" + ] + }, + { + "id": 58, + "type": "GetNode", + "pos": [ + 3662.51025390625, + -2126.116943359375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE_PIPE", + "type": "FEATURE_PIPE", + "links": [], + "slot_index": 0 + } + ], + "title": "Get_feature_pipe", + "properties": {}, + "widgets_values": [ + "feature_pipe" + ] + }, + { + "id": 133, + "type": "VHS_VideoCombine", + "pos": [ + 6729.33349609375, + -1332.476806640625 + ], + "size": [ + 214.7587890625, + 670.359375 + ], + "flags": {}, + "order": 108, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 169 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 168, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02407-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02407.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02407-audio.mp4" + } + } + } + }, + { + "id": 142, + "type": "DepthShapeModifierPrecise", + "pos": [ + 4059.3330078125, + -1202.4765625 + ], + "size": [ + 579.5999755859375, + 174 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "name": "depth_map", + "type": "IMAGE", + "link": 180 + }, + { + "name": "mask", + "type": "MASK", + "link": 181 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 183, + 187 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthShapeModifierPrecise" + }, + "widgets_values": [ + 2, + 0, + 0.5, + 1, + "linear" + ] + }, + { + "id": 27, + "type": "VHS_VideoCombine", + "pos": [ + 6377.5107421875, + -2316.11669921875 + ], + "size": [ + 214.7587890625, + 670.359375 + ], + "flags": {}, + "order": 103, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 342 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 34, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02406-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02406.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02406-audio.mp4" + } + } + } + }, + { + "id": 160, + "type": "GetNode", + "pos": [ + 2810, + 1290 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 206 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 161, + "type": "MaskToImage", + "pos": [ + 2493, + 310 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": {}, + "order": 95, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 296 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 234 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 175, + "type": "MaskToImage", + "pos": [ + 2760, + 1140 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": {}, + "order": 98, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 235 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 236 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 109, + "type": "GetNode", + "pos": [ + 323, + -2271 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 305 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_drums", + "properties": {}, + "widgets_values": [ + "audio_drums" + ] + }, + { + "id": 124, + "type": "GetNode", + "pos": [ + -1384, + -535 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 276 + ], + "slot_index": 0 + } + ], + "title": "Get_drum_feature", + "properties": {}, + "widgets_values": [ + "drum_feature" + ] + }, + { + "id": 128, + "type": "GetNode", + "pos": [ + 247, + -1964 + ], + "size": [ + 314.4181213378906, + 58 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 306, + 312 + ], + "slot_index": 0 + } + ], + "title": "Get_drum_feat_accum", + "properties": {}, + "widgets_values": [ + "drum_feat_accum" + ] + }, + { + "id": 122, + "type": "GetNode", + "pos": [ + 462, + 87 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 317 + ], + "slot_index": 0 + } + ], + "title": "Get_bass_feature", + "properties": {}, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 159, + "type": "VHS_VideoCombine", + "pos": [ + 3180, + 1120 + ], + "size": [ + 214.7587890625, + 670.359375 + ], + "flags": {}, + "order": 100, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 236 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 206, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02401-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02401.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02401-audio.mp4" + } + } + } + }, + { + "id": 138, + "type": "GetNode", + "pos": [ + 425, + 1227 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 322 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_empty", + "properties": {}, + "widgets_values": [ + "audio_empty" + ] + }, + { + "id": 140, + "type": "GetNode", + "pos": [ + 427, + 1357 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 323 + ], + "slot_index": 0 + } + ], + "title": "Get_bass_feature", + "properties": {}, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 137, + "type": "GetNode", + "pos": [ + 319, + 720 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 320 + ], + "slot_index": 0 + } + ], + "title": "Get_bass_feature", + "properties": {}, + "widgets_values": [ + "bass_feature" + ] + }, + { + "id": 174, + "type": "OpticalFlowMaskModulation", + "pos": [ + 2882, + 343 + ], + "size": [ + 579.5999755859375, + 366 + ], + "flags": {}, + "order": 97, + "mode": 0, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": 295 + }, + { + "name": "images", + "type": "IMAGE", + "link": 234 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 235, + 298 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "OpticalFlowMaskModulation" + }, + "widgets_values": [ + 1, + false, + 0, + 0, + "Farneback", + 0.1, + 0.05, + 1, + 5, + 5, + 0.8, + "fade", + 20 + ] + }, + { + "id": 31, + "type": "MaskToImage", + "pos": [ + 3295, + -1041 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 101, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 299 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 339 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 48, + "type": "CreateShapeMask", + "pos": [ + 3663, + -1977 + ], + "size": [ + 315, + 270 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "mask", + "type": "MASK", + "links": [ + 65, + 181 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "mask_inverted", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CreateShapeMask" + }, + "widgets_values": [ + "circle", + 1, + 232, + 384, + 0, + 464, + 768, + 460, + 460 + ] + }, + { + "id": 51, + "type": "ImageInterval", + "pos": [ + 3899, + -2186 + ], + "size": [ + 268.79998779296875, + 106 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 66 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 64, + 180 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageInterval" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 50, + "type": "GetNode", + "pos": [ + 3911, + -2314 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 66 + ], + "slot_index": 0 + } + ], + "title": "Get_empty_img", + "properties": {}, + "widgets_values": [ + "empty_img" + ] + }, + { + "id": 49, + "type": "DepthShapeModifierPrecise", + "pos": [ + 4208, + -2309 + ], + "size": [ + 579.5999755859375, + 174 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "depth_map", + "type": "IMAGE", + "link": 64 + }, + { + "name": "mask", + "type": "MASK", + "link": 65 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 67, + 186 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthShapeModifierPrecise" + }, + "widgets_values": [ + 2, + 0, + 1, + 1, + "linear" + ] + }, + { + "id": 53, + "type": "GetNode", + "pos": [ + 4499, + -1962 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 68, + 182 + ], + "slot_index": 0 + } + ], + "title": "Get_frame_count", + "properties": {}, + "widgets_values": [ + "frame_count" + ] + }, + { + "id": 52, + "type": "VHS_DuplicateImages", + "pos": [ + 4857, + -2082 + ], + "size": [ + 214.232421875, + 78 + ], + "flags": {}, + "order": 72, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 67 + }, + { + "name": "multiply_by", + "type": "INT", + "link": 68, + "widget": { + "name": "multiply_by" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 340 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_DuplicateImages" + }, + "widgets_values": { + "multiply_by": 1 + } + }, + { + "id": 145, + "type": "PreviewImage", + "pos": [ + 5130, + -2342 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 186 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 146, + "type": "PreviewImage", + "pos": [ + 5049, + -1340 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 75, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 187 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 131, + "type": "MaskComposite", + "pos": [ + 5877, + -1273 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 105, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 164 + }, + { + "name": "source", + "type": "MASK", + "link": 165 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 189 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "multiply" + ] + }, + { + "id": 147, + "type": "MaskComposite", + "pos": [ + 6096, + -1024 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 106, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 189 + }, + { + "name": "source", + "type": "MASK", + "link": 190 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 239 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 112, + "type": "GetNode", + "pos": [ + 329, + -985 + ], + "size": [ + 216.19483947753906, + 61.861045837402344 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 314 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_empty", + "properties": {}, + "widgets_values": [ + "audio_empty" + ] + }, + { + "id": 111, + "type": "GetNode", + "pos": [ + 340, + -1599 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 311 + ], + "slot_index": 0 + } + ], + "title": "Get_audio_drums", + "properties": {}, + "widgets_values": [ + "audio_drums" + ] + }, + { + "id": 178, + "type": "MaskToImage", + "pos": [ + 2204, + -1833 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": {}, + "order": 92, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 288 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 240 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 177, + "type": "GetNode", + "pos": [ + 2329, + -2191 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "AUDIO", + "type": "AUDIO", + "links": [ + 241 + ], + "slot_index": 0 + } + ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 176, + "type": "VHS_VideoCombine", + "pos": [ + 2678, + -2046 + ], + "size": [ + 214.7587890625, + 670.359375 + ], + "flags": {}, + "order": 96, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 240 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 241, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02405-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02405.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02405-audio.mp4" + } + } + } + }, + { + "id": 188, + "type": "AudioSeparatorSimple", + "pos": [ + -1623.1573486328125, + -1880.417724609375 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 250 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 251 + } + ], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "drums_audio", + "type": "AUDIO", + "links": [ + 253, + 254, + 268 + ] + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [ + 255, + 270 + ] + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": [ + 257, + 272 + ] + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": [ + 259, + 274 + ] + } + ], + "properties": { + "Node name for S&R": "AudioSeparatorSimple" + }, + "widgets_values": [] + }, + { + "id": 189, + "type": "Anything Everywhere?", + "pos": [ + -3860, + -1440 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "*", + "link": 261, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_rate", + ".*" + ] + }, + { + "id": 192, + "type": "FloatConstant", + "pos": [ + -4090, + -1430 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "FLOAT", + "links": [ + 261 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FloatConstant" + }, + "widgets_values": [ + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 193, + "type": "Anything Everywhere?", + "pos": [ + -3870, + -1670 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 337, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "height", + ".*" + ] + }, + { + "id": 194, + "type": "Anything Everywhere?", + "pos": [ + -3900, + -1910 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 338, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "width", + ".*" + ] + }, + { + "id": 196, + "type": "Anything Everywhere?", + "pos": [ + -2076.036865234375, + -2371.03369140625 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "AUDIO", + "type": "*", + "link": 264, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "audio", + ".*" + ] + }, + { + "id": 195, + "type": "Anything Everywhere?", + "pos": [ + -1866.2430419921875, + -1205.9681396484375 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 57, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 265, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_count", + ".*" + ] + }, + { + "id": 79, + "type": "EmptyImageAndMaskFromAudio", + "pos": [ + -2160, + -1580 + ], + "size": [ + 411.6000061035156, + 146 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 97 + } + ], + "outputs": [ + { + "name": "empty_image", + "type": "IMAGE", + "links": [ + 103 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "empty_mask", + "type": "MASK", + "links": [ + 123 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [ + 124, + 265 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmptyImageAndMaskFromAudio" + }, + "widgets_values": [ + 30, + 464, + 768 + ] + }, + { + "id": 197, + "type": "AudioFeatureExtractor", + "pos": [ + -1126.292236328125, + -1346.831298828125 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 77, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 266 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 267 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 198, + "type": "AudioFeatureExtractor", + "pos": [ + -1124.9776611328125, + -1196.873046875 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 268 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 269 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 199, + "type": "AudioFeatureExtractor", + "pos": [ + -1123.6630859375, + -1048.1431884765625 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 270 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 271 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 200, + "type": "AudioFeatureExtractor", + "pos": [ + -1160.4306640625, + -922.754150390625 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 272 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 273 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 201, + "type": "AudioFeatureExtractor", + "pos": [ + -1128.4046630859375, + -783.8519897460938 + ], + "size": [ + 415.8000183105469, + 174 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 274 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "feature", + "type": "FEATURE", + "links": [ + 275 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] + }, + { + "id": 203, + "type": "FeatureAccumulate", + "pos": [ + -1081.56689453125, + -524.756591796875 + ], + "size": [ + 352.79998779296875, + 202 + ], + "flags": {}, + "order": 68, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 276 + }, + { + "name": "frames_window", + "type": "INT", + "link": 302, + "widget": { + "name": "frames_window" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 277 + ] + } + ], + "properties": { + "Node name for S&R": "FeatureAccumulate" + }, + "widgets_values": [ + 0, + 1, + 0, + false, + false, + 110, + false + ] + }, + { + "id": 205, + "type": "TimeFeatureNode", + "pos": [ + -1075.6502685546875, + -142.8609619140625 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 69, + "mode": 0, + "inputs": [ + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "frames_per_cycle", + "type": "INT", + "link": 303, + "widget": { + "name": "frames_per_cycle" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 278 + ] + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "pulse", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, + { + "id": 208, + "type": "TimeFeatureNode", + "pos": [ + -1086.865966796875, + 131.0489044189453 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 70, + "mode": 0, + "inputs": [ + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "frames_per_cycle", + "type": "INT", + "link": 304, + "widget": { + "name": "frames_per_cycle" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 280 + ] + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "pulse", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, + { + "id": 209, + "type": "TimeFeatureNode", + "pos": [ + -1057.54248046875, + 473.8753356933594 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + } + ], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 281 + ] + } + ], + "properties": { + "Node name for S&R": "TimeFeatureNode" + }, + "widgets_values": [ + "pulse", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, + { + "id": 166, + "type": "SetNode", + "pos": [ + -605.0294189453125, + 159.7321014404297 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 89, + "mode": 0, + "inputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "link": 280 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_time_feature_pulse", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "time_feature_pulse_0" + ] + }, + { + "id": 76, + "type": "VHS_LoadAudioUpload", + "pos": [ + -2276, + -2046 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "audio", + "type": "AUDIO", + "links": [ + 97, + 100, + 251, + 264 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Matthew Magenta - Wait a Minute.mp3", + "start_time": 34, + "duration": 3.0700000000000003, + "choose audio to upload": "image" + } + }, + { + "id": 210, + "type": "MaskComposite", + "pos": [ + 1361.57861328125, + -1809.535888671875 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 307 + }, + { + "name": "source", + "type": "MASK", + "link": 313 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 284, + 285 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 211, + "type": "MaskComposite", + "pos": [ + 1915.6964111328125, + -1639.0645751953125 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 285 + }, + { + "name": "source", + "type": "MASK", + "link": 315 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 288, + 297 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 213, + "type": "MaskComposite", + "pos": [ + 2292.995361328125, + 612.7208251953125 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 71, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 333 + }, + { + "name": "source", + "type": "MASK", + "link": 336 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 294 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 212, + "type": "MaskComposite", + "pos": [ + 2344.65625, + -81.93880462646484 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 90, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 327 + }, + { + "name": "source", + "type": "MASK", + "link": 294 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 295, + 296 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 214, + "type": "MaskComposite", + "pos": [ + 2888.259765625, + -886.96533203125 + ], + "size": [ + 315, + 126 + ], + "flags": {}, + "order": 99, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "MASK", + "link": 297 + }, + { + "name": "source", + "type": "MASK", + "link": 298 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 299 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskComposite" + }, + "widgets_values": [ + 0, + 0, + "add" + ] + }, + { + "id": 206, + "type": "AudioInfo", + "pos": [ + -1975.2012939453125, + -281.7331848144531 + ], + "size": [ + 315, + 338 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": null + } + ], + "outputs": [ + { + "name": "total_frames", + "type": "INT", + "links": null + }, + { + "name": "frames_per_beat", + "type": "INT", + "links": null, + "slot_index": 1 + }, + { + "name": "frames_per_bar", + "type": "INT", + "links": [ + 300 + ], + "slot_index": 2 + }, + { + "name": "frames_per_quarter", + "type": "INT", + "links": null + }, + { + "name": "frames_per_eighth", + "type": "INT", + "links": null + }, + { + "name": "audio_duration", + "type": "FLOAT", + "links": null + }, + { + "name": "beats_per_second", + "type": "FLOAT", + "links": null + }, + { + "name": "detected_bpm", + "type": "FLOAT", + "links": null + }, + { + "name": "sample_rate", + "type": "INT", + "links": null + }, + { + "name": "num_channels", + "type": "INT", + "links": null + }, + { + "name": "num_samples", + "type": "INT", + "links": null + }, + { + "name": "max_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "mean_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "rms_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "bit_depth", + "type": "STRING", + "links": null + } + ], + "properties": { + "Node name for S&R": "AudioInfo" + }, + "widgets_values": [ + 30 + ] + }, + { + "id": 215, + "type": "CR Integer Multiple", + "pos": [ + -1555.1171875, + -251.82920837402344 + ], + "size": [ + 315, + 102 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ + { + "name": "integer", + "type": "INT", + "link": 300, + "widget": { + "name": "integer" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 302, + 303, + 304 + ], + "slot_index": 0 + }, + { + "name": "show_help", + "type": "STRING", + "links": null + } + ], + "properties": { + "Node name for S&R": "CR Integer Multiple" + }, + "widgets_values": [ + -86, + 2 + ] + }, + { + "id": 223, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 758.9439086914062, + 580 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 319 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 320, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 331 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "num_points", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 0, + 20, + 2048, + 20, + 8000, + 120, + 2, + 100, + 80 + ] + }, + { + "id": 224, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 780, + 1250 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 322 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 323, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 334 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "num_points", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 0, + 10, + 2048, + 20, + 8000, + 120, + 2, + 100, + 60 + ] + }, + { + "id": 226, + "type": "FlexMaskTransform", + "pos": [ + 1632, + 25 + ], + "size": [ + 365.4000244140625, + 318 + ], + "flags": {}, + "order": 48, + "mode": 0, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": 325 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 326, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 327 + ] + } + ], + "properties": { + "Node name for S&R": "FlexMaskTransform" + }, + "widgets_values": [ + 1, + 0, + "max_x_value", + "relative", + false, + 0, + 0, + 1, + "rotate", + 360, + 0 + ] + }, + { + "id": 229, + "type": "FlexMaskTransform", + "pos": [ + 1859.6295166015625, + 1103.55908203125 + ], + "size": [ + 365.4000244140625, + 318 + ], + "flags": {}, + "order": 49, + "mode": 0, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": 334 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 335, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 336 + ] + } + ], + "properties": { + "Node name for S&R": "FlexMaskTransform" + }, + "widgets_values": [ + 1, + 0, + "max_x_value", + "relative", + false, + 0, + 0, + 1, + "rotate", + 360, + 0 + ] + }, + { + "id": 228, + "type": "FlexMaskTransform", + "pos": [ + 1754.5198974609375, + 665.4771118164062 + ], + "size": [ + 365.4000244140625, + 318 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "name": "masks", + "type": "MASK", + "link": 331 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 332, + "shape": 7 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 333 + ] + } + ], + "properties": { + "Node name for S&R": "FlexMaskTransform" + }, + "widgets_values": [ + 1, + 0, + "max_x_value", + "relative", + false, + 0, + 0, + 1, + "rotate", + 360, + 0 + ] + }, + { + "id": 190, + "type": "INTConstant", + "pos": [ + -4158.52783203125, + -1554.3095703125 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "INT", + "links": [ + 337 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 191, + "type": "INTConstant", + "pos": [ + -4185.58349609375, + -1871.373046875 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "value", + "type": "INT", + "links": [ + 338 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 464 + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 230, + "type": "FlexImageDepthWarp", + "pos": [ + 5440, + -2083 + ], + "size": [ + 390.5999755859375, + 194 + ], + "flags": {}, + "order": 102, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 339 + }, + { + "name": "depth_map", + "type": "IMAGE", + "link": 340 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 341, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 342, + 343 + ] + } + ], + "properties": { + "Node name for S&R": "FlexImageDepthWarp" + }, + "widgets_values": [ + 1, + 0, + "warp_strength", + "relative", + 0.03 + ] + }, + { + "id": 222, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 796, + -46 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 316 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 317, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 325 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "num_points", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "bar", + "frequency", + 0.5, + 0, + 30, + 2048, + 20, + 8000, + 120, + 2, + 100, + 80 + ] + }, + { + "id": 217, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 618, + -2294 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 305 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 306, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 307 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "rotation", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 360, + 360, + 2048, + 20, + 8000, + 180, + 2, + 100, + 180 + ] + }, + { + "id": 220, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 624.6350708007812, + -1661.1295166015625 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 311 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": 312, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 313 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "rotation", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 360, + 360, + 2048, + 20, + 8000, + 160, + 2, + 100, + 160 + ] + }, + { + "id": 221, + "type": "FlexAudioVisualizerCircular", + "pos": [ + 610.4837036132812, + -1031.316162109375 + ], + "size": [ + 504, + 558 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "audio", + "type": "AUDIO", + "link": 314 + }, + { + "name": "opt_feature", + "type": "FEATURE", + "link": null, + "shape": 7 + }, + { + "name": "screen_width", + "type": "INT", + "link": null, + "widget": { + "name": "screen_width" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "screen_height", + "type": "INT", + "link": null, + "widget": { + "name": "screen_height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 315 + ] + } + ], + "properties": { + "Node name for S&R": "FlexAudioVisualizerCircular" + }, + "widgets_values": [ + 1, + 0, + "rotation", + "relative", + 30, + 768, + 464, + 0.5, + 0.5, + "line", + "frequency", + 0.5, + 360, + 360, + 2048, + 20, + 8000, + 140, + 2, + 100, + 140 + ] + } + ], + "links": [ + [ + 34, + 28, + 0, + 27, + 1, + "AUDIO" + ], + [ + 64, + 51, + 0, + 49, + 0, + "IMAGE" + ], + [ + 65, + 48, + 0, + 49, + 1, + "MASK" + ], + [ + 66, + 50, + 0, + 51, + 0, + "IMAGE" + ], + [ + 67, + 49, + 0, + 52, + 0, + "IMAGE" + ], + [ + 68, + 53, + 0, + 52, + 1, + "*" + ], + [ + 97, + 76, + 0, + 79, + 0, + "AUDIO" + ], + [ + 100, + 76, + 0, + 81, + 0, + "*" + ], + [ + 103, + 79, + 0, + 84, + 0, + "*" + ], + [ + 107, + 86, + 0, + 87, + 1, + "FREQUENCY_FILTER" + ], + [ + 123, + 79, + 1, + 100, + 0, + "*" + ], + [ + 124, + 79, + 2, + 101, + 0, + "*" + ], + [ + 131, + 88, + 0, + 83, + 0, + "AUDIO" + ], + [ + 132, + 89, + 0, + 105, + 0, + "AUDIO" + ], + [ + 133, + 90, + 0, + 106, + 0, + "AUDIO" + ], + [ + 134, + 91, + 0, + 107, + 0, + "AUDIO" + ], + [ + 136, + 81, + 0, + 110, + 0, + "AUDIO" + ], + [ + 142, + 91, + 0, + 113, + 0, + "AUDIO" + ], + [ + 143, + 91, + 0, + 113, + 1, + "AUDIO" + ], + [ + 144, + 113, + 0, + 114, + 0, + "*" + ], + [ + 164, + 129, + 0, + 131, + 0, + "MASK" + ], + [ + 165, + 130, + 0, + 131, + 1, + "MASK" + ], + [ + 168, + 28, + 0, + 133, + 1, + "*" + ], + [ + 169, + 132, + 0, + 133, + 0, + "IMAGE" + ], + [ + 180, + 51, + 0, + 142, + 0, + "IMAGE" + ], + [ + 181, + 48, + 0, + 142, + 1, + "MASK" + ], + [ + 182, + 53, + 0, + 143, + 1, + "INT" + ], + [ + 183, + 142, + 0, + 143, + 0, + "IMAGE" + ], + [ + 185, + 143, + 0, + 130, + 0, + "IMAGE" + ], + [ + 186, + 49, + 0, + 145, + 0, + "IMAGE" + ], + [ + 187, + 142, + 0, + 146, + 0, + "IMAGE" + ], + [ + 189, + 131, + 0, + 147, + 0, + "MASK" + ], + [ + 190, + 130, + 0, + 147, + 1, + "MASK" + ], + [ + 206, + 160, + 0, + 159, + 1, + "*" + ], + [ + 234, + 161, + 0, + 174, + 1, + "IMAGE" + ], + [ + 235, + 174, + 0, + 175, + 0, + "MASK" + ], + [ + 236, + 175, + 0, + 159, + 0, + "IMAGE" + ], + [ + 239, + 147, + 0, + 132, + 0, + "MASK" + ], + [ + 240, + 178, + 0, + 176, + 0, + "IMAGE" + ], + [ + 241, + 177, + 0, + 176, + 1, + "*" + ], + [ + 250, + 78, + 0, + 188, + 0, + "OPEN_UNMIX_MODEL" + ], + [ + 251, + 76, + 0, + 188, + 1, + "AUDIO" + ], + [ + 253, + 188, + 1, + 87, + 0, + "AUDIO" + ], + [ + 254, + 188, + 1, + 88, + 0, + "AUDIO" + ], + [ + 255, + 188, + 2, + 89, + 0, + "AUDIO" + ], + [ + 257, + 188, + 3, + 90, + 0, + "AUDIO" + ], + [ + 259, + 188, + 4, + 91, + 0, + "AUDIO" + ], + [ + 261, + 192, + 0, + 189, + 0, + "FLOAT" + ], + [ + 264, + 76, + 0, + 196, + 0, + "AUDIO" + ], + [ + 265, + 79, + 2, + 195, + 0, + "INT" + ], + [ + 266, + 87, + 0, + 197, + 0, + "AUDIO" + ], + [ + 267, + 197, + 0, + 92, + 0, + "FEATURE" + ], + [ + 268, + 188, + 1, + 198, + 0, + "AUDIO" + ], + [ + 269, + 198, + 0, + 93, + 0, + "FEATURE" + ], + [ + 270, + 188, + 2, + 199, + 0, + "AUDIO" + ], + [ + 271, + 199, + 0, + 95, + 0, + "FEATURE" + ], + [ + 272, + 188, + 3, + 200, + 0, + "AUDIO" + ], + [ + 273, + 200, + 0, + 97, + 0, + "FEATURE" + ], + [ + 274, + 188, + 4, + 201, + 0, + "AUDIO" + ], + [ + 275, + 201, + 0, + 99, + 0, + "FEATURE" + ], + [ + 276, + 124, + 0, + 203, + 0, + "FEATURE" + ], + [ + 277, + 203, + 0, + 127, + 0, + "FEATURE" + ], + [ + 278, + 205, + 0, + 163, + 0, + "FEATURE" + ], + [ + 280, + 208, + 0, + 166, + 0, + "FEATURE" + ], + [ + 281, + 209, + 0, + 168, + 0, + "FEATURE" + ], + [ + 284, + 210, + 0, + 116, + 0, + "MASK" + ], + [ + 285, + 210, + 0, + 211, + 0, + "MASK" + ], + [ + 288, + 211, + 0, + 178, + 0, + "MASK" + ], + [ + 294, + 213, + 0, + 212, + 1, + "MASK" + ], + [ + 295, + 212, + 0, + 174, + 0, + "MASK" + ], + [ + 296, + 212, + 0, + 161, + 0, + "MASK" + ], + [ + 297, + 211, + 0, + 214, + 0, + "MASK" + ], + [ + 298, + 174, + 0, + 214, + 1, + "MASK" + ], + [ + 299, + 214, + 0, + 31, + 0, + "MASK" + ], + [ + 300, + 206, + 2, + 215, + 0, + "INT" + ], + [ + 302, + 215, + 0, + 203, + 1, + "INT" + ], + [ + 303, + 215, + 0, + 205, + 4, + "INT" + ], + [ + 304, + 215, + 0, + 208, + 4, + "INT" + ], + [ + 305, + 109, + 0, + 217, + 0, + "AUDIO" + ], + [ + 306, + 128, + 0, + 217, + 1, + "FEATURE" + ], + [ + 307, + 217, + 1, + 210, + 0, + "MASK" + ], + [ + 311, + 111, + 0, + 220, + 0, + "AUDIO" + ], + [ + 312, + 128, + 0, + 220, + 1, + "FEATURE" + ], + [ + 313, + 220, + 1, + 210, + 1, + "MASK" + ], + [ + 314, + 112, + 0, + 221, + 0, + "AUDIO" + ], + [ + 315, + 221, + 1, + 211, + 1, + "MASK" + ], + [ + 316, + 118, + 0, + 222, + 0, + "AUDIO" + ], + [ + 317, + 122, + 0, + 222, + 1, + "FEATURE" + ], + [ + 319, + 135, + 0, + 223, + 0, + "AUDIO" + ], + [ + 320, + 137, + 0, + 223, + 1, + "FEATURE" + ], + [ + 322, + 138, + 0, + 224, + 0, + "AUDIO" + ], + [ + 323, + 140, + 0, + 224, + 1, + "FEATURE" + ], + [ + 325, + 222, + 1, + 226, + 0, + "MASK" + ], + [ + 326, + 149, + 0, + 226, + 1, + "FEATURE" + ], + [ + 327, + 226, + 0, + 212, + 0, + "MASK" + ], + [ + 331, + 223, + 1, + 228, + 0, + "MASK" + ], + [ + 332, + 152, + 0, + 228, + 1, + "FEATURE" + ], + [ + 333, + 228, + 0, + 213, + 0, + "MASK" + ], + [ + 334, + 224, + 1, + 229, + 0, + "MASK" + ], + [ + 335, + 155, + 0, + 229, + 1, + "FEATURE" + ], + [ + 336, + 229, + 0, + 213, + 1, + "MASK" + ], + [ + 337, + 190, + 0, + 193, + 0, + "INT" + ], + [ + 338, + 191, + 0, + 194, + 0, + "INT" + ], + [ + 339, + 31, + 0, + 230, + 0, + "IMAGE" + ], + [ + 340, + 52, + 0, + 230, + 1, + "IMAGE" + ], + [ + 341, + 57, + 0, + 230, + 2, + "FEATURE" + ], + [ + 342, + 230, + 0, + 27, + 0, + "IMAGE" + ], + [ + 343, + 230, + 0, + 129, + 0, + "IMAGE" + ], + [ + 344, + 192, + 0, + 197, + 1, + "FLOAT" + ], + [ + 345, + 79, + 2, + 197, + 2, + "INT" + ], + [ + 346, + 191, + 0, + 197, + 3, + "INT" + ], + [ + 347, + 190, + 0, + 197, + 4, + "INT" + ], + [ + 348, + 192, + 0, + 198, + 1, + "FLOAT" + ], + [ + 349, + 79, + 2, + 198, + 2, + "INT" + ], + [ + 350, + 191, + 0, + 198, + 3, + "INT" + ], + [ + 351, + 190, + 0, + 198, + 4, + "INT" + ], + [ + 352, + 192, + 0, + 199, + 1, + "FLOAT" + ], + [ + 353, + 79, + 2, + 199, + 2, + "INT" + ], + [ + 354, + 191, + 0, + 199, + 3, + "INT" + ], + [ + 355, + 190, + 0, + 199, + 4, + "INT" + ], + [ + 356, + 192, + 0, + 200, + 1, + "FLOAT" + ], + [ + 357, + 79, + 2, + 200, + 2, + "INT" + ], + [ + 358, + 191, + 0, + 200, + 3, + "INT" + ], + [ + 359, + 190, + 0, + 200, + 4, + "INT" + ], + [ + 360, + 192, + 0, + 201, + 1, + "FLOAT" + ], + [ + 361, + 79, + 2, + 201, + 2, + "INT" + ], + [ + 362, + 191, + 0, + 201, + 3, + "INT" + ], + [ + 363, + 190, + 0, + 201, + 4, + "INT" + ], + [ + 364, + 192, + 0, + 205, + 0, + "FLOAT" + ], + [ + 365, + 79, + 2, + 205, + 1, + "INT" + ], + [ + 366, + 190, + 0, + 205, + 2, + "INT" + ], + [ + 367, + 191, + 0, + 205, + 3, + "INT" + ], + [ + 368, + 192, + 0, + 208, + 0, + "FLOAT" + ], + [ + 369, + 79, + 2, + 208, + 1, + "INT" + ], + [ + 370, + 190, + 0, + 208, + 2, + "INT" + ], + [ + 371, + 191, + 0, + 208, + 3, + "INT" + ], + [ + 372, + 192, + 0, + 209, + 0, + "FLOAT" + ], + [ + 373, + 79, + 2, + 209, + 1, + "INT" + ], + [ + 374, + 190, + 0, + 209, + 2, + "INT" + ], + [ + 375, + 191, + 0, + 209, + 3, + "INT" + ], + [ + 376, + 76, + 0, + 206, + 0, + "AUDIO" + ], + [ + 377, + 191, + 0, + 223, + 2, + "INT" + ], + [ + 378, + 190, + 0, + 223, + 3, + "INT" + ], + [ + 379, + 192, + 0, + 223, + 4, + "FLOAT" + ], + [ + 380, + 191, + 0, + 224, + 2, + "INT" + ], + [ + 381, + 190, + 0, + 224, + 3, + "INT" + ], + [ + 382, + 192, + 0, + 224, + 4, + "FLOAT" + ], + [ + 383, + 191, + 0, + 222, + 2, + "INT" + ], + [ + 384, + 190, + 0, + 222, + 3, + "INT" + ], + [ + 385, + 192, + 0, + 222, + 4, + "FLOAT" + ], + [ + 386, + 191, + 0, + 217, + 2, + "INT" + ], + [ + 387, + 192, + 0, + 217, + 3, + "FLOAT" + ], + [ + 388, + 190, + 0, + 217, + 4, + "INT" + ], + [ + 389, + 191, + 0, + 220, + 2, + "INT" + ], + [ + 390, + 192, + 0, + 220, + 3, + "FLOAT" + ], + [ + 391, + 190, + 0, + 220, + 4, + "INT" + ], + [ + 392, + 191, + 0, + 221, + 2, + "INT" + ], + [ + 393, + 192, + 0, + 221, + 3, + "FLOAT" + ], + [ + 394, + 190, + 0, + 221, + 4, + "INT" + ] + ], + "groups": [ + { + "id": 1, + "title": "Dots", + "bounding": [ + 286, + -363, + 3278, + 3315 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Depth Map", + "bounding": [ + 3627, + -1590, + 3633, + 901 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "Audio", + "bounding": [ + -2280, + -2423, + 2458, + 3092 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "Depth Warp", + "bounding": [ + 3633, + -2407, + 3046, + 763 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "VisualiZERS", + "bounding": [ + 282, + -2420, + 3282, + 2008 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.1, + "offset": [ + 1740.8268087545523, + 4617.423405842925 + ] + }, + "node_versions": { + "ComfyUI_RyanOnTheInside": "0507092b2c3f5c51b45989c6c4fd51c1add26513", + "comfy-core": "0.3.12", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "ComfyUI_Comfyroll_CustomNodes": "d78b780ae43fcf8c6b7c6505e6ffb4584281ceca" + }, + "ue_links": [ + { + "downstream": 197, + "downstream_slot": 1, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 197, + "downstream_slot": 2, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 197, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 197, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 198, + "downstream_slot": 1, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 198, + "downstream_slot": 2, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 198, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 198, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 199, + "downstream_slot": 1, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 199, + "downstream_slot": 2, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 199, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 199, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 200, + "downstream_slot": 1, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 200, + "downstream_slot": 2, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 200, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 200, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 201, + "downstream_slot": 1, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 201, + "downstream_slot": 2, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 201, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 201, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 205, + "downstream_slot": 0, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 205, + "downstream_slot": 1, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 205, + "downstream_slot": 2, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 205, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 208, + "downstream_slot": 0, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 208, + "downstream_slot": 1, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 208, + "downstream_slot": 2, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 208, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 209, + "downstream_slot": 0, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 209, + "downstream_slot": 1, + "upstream": "79", + "upstream_slot": 2, + "controller": 195, + "type": "INT" + }, + { + "downstream": 209, + "downstream_slot": 2, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 209, + "downstream_slot": 3, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 206, + "downstream_slot": 0, + "upstream": "76", + "upstream_slot": 0, + "controller": 196, + "type": "AUDIO" + }, + { + "downstream": 223, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 223, + "downstream_slot": 3, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 223, + "downstream_slot": 4, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 224, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 224, + "downstream_slot": 3, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 224, + "downstream_slot": 4, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 222, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 222, + "downstream_slot": 3, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 222, + "downstream_slot": 4, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 217, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 217, + "downstream_slot": 3, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 217, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 220, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 220, + "downstream_slot": 3, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 220, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + }, + { + "downstream": 221, + "downstream_slot": 2, + "upstream": "191", + "upstream_slot": 0, + "controller": 194, + "type": "INT" + }, + { + "downstream": 221, + "downstream_slot": 3, + "upstream": "192", + "upstream_slot": 0, + "controller": 189, + "type": "FLOAT" + }, + { + "downstream": 221, + "downstream_slot": 4, + "upstream": "190", + "upstream_slot": 0, + "controller": 193, + "type": "INT" + } + ] + }, + "version": 0.4 +} \ No newline at end of file diff --git a/examples/motion_activated.json b/examples/version2_example.json similarity index 50% rename from examples/motion_activated.json rename to examples/version2_example.json index e57e9dd..f31c662 100644 --- a/examples/motion_activated.json +++ b/examples/version2_example.json @@ -1,265 +1,305 @@ { - "last_node_id": 194, - "last_link_id": 336, + "last_node_id": 476, + "last_link_id": 770, "nodes": [ { - "id": 30, - "type": "ADE_SigmaSchedule", + "id": 21, + "type": "SetClipHooks", "pos": [ - 3141.5897819464126, - 1118.8759046187079 + 1135.2972412109375, + -156.53550720214844 + ], + "size": [ + 217.4999542236328, + 102 ], - "size": { - "0": 244.73928833007812, - "1": 58 - }, "flags": {}, - "order": 0, + "order": 57, "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 21 + }, + { + "name": "hooks", + "type": "HOOKS", + "link": 52, + "shape": 7 + } + ], "outputs": [ { - "name": "SIGMA_SCHEDULE", - "type": "SIGMA_SCHEDULE", + "name": "CLIP", + "type": "CLIP", "links": [ - 51 + 1, + 3 ], - "shape": 3, "slot_index": 0 } ], - "title": "Sigma Schedule 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_SigmaSchedule", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "SetClipHooks" }, "widgets_values": [ - "lcm avg(sqrt_linear,linear)" + true, + false ] }, { - "id": 32, - "type": "ADE_MultivalDynamic", + "id": 2, + "type": "CLIPTextEncode", "pos": [ - 3131.5897819464126, - 768.8759046187079 + 1425.2979736328125, + -96.53550720214844 + ], + "size": [ + 327, + 108 ], - "size": { - "0": 259.9388122558594, - "1": 63.332008361816406 - }, "flags": {}, - "order": 1, + "order": 69, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "clip", + "type": "CLIP", + "link": 1 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 48 + 14 ], - "shape": 3, "slot_index": 0 } ], - "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1.1400000000000001, - "" - ] + "worst quality, low quality" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 34, - "type": "ADE_MultivalDynamic", + "id": 3, + "type": "CLIPTextEncode", "pos": [ - 3131.5897819464126, - 658.8759046187079 + 1405.2979736328125, + 273.4644775390625 + ], + "size": [ + 327, + 108 ], - "size": { - "0": 265.1632385253906, - "1": 58 - }, "flags": {}, - "order": 2, + "order": 68, "mode": 0, "inputs": [ { - "name": "mask_optional", - "type": "MASK", - "link": null + "name": "clip", + "type": "CLIP", + "link": 166 } ], "outputs": [ { - "name": "MULTIVAL", - "type": "MULTIVAL", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 49 + 100 ], - "shape": 3 + "slot_index": 0 } ], - "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_MultivalDynamic", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1.1, - "" - ] + "worst quality, low quality" + ], + "color": "#322", + "bgcolor": "#533" }, { - "id": 35, - "type": "ADE_CustomCFGSimple", + "id": 136, + "type": "GetNode", "pos": [ - 3131.5897819464126, - 868.8759046187079 + 3585.857421875, + -286.5335998535156 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 257.2469787597656, - "1": 60.893348693847656 - }, "flags": {}, - "order": 3, + "order": 0, "mode": 0, - "inputs": [ + "inputs": [], + "outputs": [ { - "name": "cfg_extras", - "type": "CFG_EXTRAS", - "link": null + "name": "AUDIO", + "type": "AUDIO", + "links": [], + "slot_index": 0 } ], + "title": "Get_audio", + "properties": {}, + "widgets_values": [ + "audio" + ] + }, + { + "id": 152, + "type": "ControlNetLoader", + "pos": [ + 2448.947021484375, + 731.6345825195312 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "CUSTOM_CFG", - "type": "CUSTOM_CFG", + "name": "CONTROL_NET", + "type": "CONTROL_NET", "links": [ - 50 - ], - "shape": 3 + 218 + ] } ], "properties": { - "Node name for S&R": "ADE_CustomCFGSimple", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "ControlNetLoader" }, "widgets_values": [ - 2, - "" + "control_v11f1p_sd15_depth.pth" ] }, { - "id": 36, - "type": "ADE_AnimateDiffSettings", + "id": 16, + "type": "PairConditioningSetProperties", "pos": [ - 3161.5897819464126, - 1218.8759046187079 + 1861.81298828125, + -297.5429992675781 ], - "size": { - "0": 226.8000030517578, - "1": 54 - }, - "flags": { - "collapsed": true - }, - "order": 40, + "size": [ + 315, + 162 + ], + "flags": {}, + "order": 85, "mode": 0, "inputs": [ { - "name": "pe_adjust", - "type": "PE_ADJUST", - "link": 53, - "slot_index": 0 + "name": "positive_NEW", + "type": "CONDITIONING", + "link": 13 }, { - "name": "weight_adjust", - "type": "WEIGHT_ADJUST", - "link": 54, - "slot_index": 1 + "name": "negative_NEW", + "type": "CONDITIONING", + "link": 14 + }, + { + "name": "mask", + "type": "MASK", + "link": 618, + "shape": 7 + }, + { + "name": "hooks", + "type": "HOOKS", + "link": null, + "shape": 7 + }, + { + "name": "timesteps", + "type": "TIMESTEPS_RANGE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "AD_SETTINGS", - "type": "AD_SETTINGS", + "name": "positive", + "type": "CONDITIONING", "links": [ - 46 + 97 ], - "shape": 3 + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 98 + ], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffSettings", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "PairConditioningSetProperties" }, "widgets_values": [ - "" + 1, + "default" ] }, { - "id": 37, - "type": "ADE_AdjustPESweetspotStretch", + "id": 359, + "type": "ADE_AnimateDiffUniformContextOptions", "pos": [ - 3131.5897819464126, - 968.8759046187079 + 3120, + 120 + ], + "size": [ + 273.269775390625, + 270 ], - "size": { - "0": 253.07310485839844, - "1": 106 - }, "flags": {}, - "order": 4, + "order": 2, "mode": 0, "inputs": [ { - "name": "prev_pe_adjust", - "type": "PE_ADJUST", - "link": null + "name": "prev_context", + "type": "CONTEXT_OPTIONS", + "link": null, + "shape": 7 + }, + { + "name": "view_opts", + "type": "VIEW_OPTS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "PE_ADJUST", - "type": "PE_ADJUST", + "name": "CONTEXT_OPTS", + "type": "CONTEXT_OPTIONS", "links": [ - 53 + 542 ], + "slot_index": 0, "shape": 3 } ], + "title": "Context Options 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_AdjustPESweetspotStretch", + "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", "ttNbgOverride": { "color": "#2a363b", "bgcolor": "#3f5159", @@ -268,256 +308,305 @@ }, "widgets_values": [ 16, - 18, + 1, + 4, + "uniform", + false, + "pyramid", false, + 0, + 1, "" ] }, { - "id": 57, - "type": "GetNode", - "pos": { - "0": 981.441162109375, - "1": 1401.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 358, + "type": "ADE_UseEvolvedSampling", + "pos": [ + 3150, + -120 + ], + "size": [ + 315, + 118 + ], "flags": {}, - "order": 5, + "order": 81, "mode": 0, - "inputs": [], - "outputs": [ + "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 81 - ], - "slot_index": 0 + "name": "model", + "type": "MODEL", + "link": 692 + }, + { + "name": "m_models", + "type": "M_MODELS", + "link": 541, + "shape": 7 + }, + { + "name": "context_options", + "type": "CONTEXT_OPTIONS", + "link": 542, + "shape": 7 + }, + { + "name": "sample_settings", + "type": "SAMPLE_SETTINGS", + "link": 543, + "shape": 7 } ], - "title": "Get_depth_maps", - "properties": {}, - "widgets_values": [ - "depth_maps" - ] - }, - { - "id": 58, - "type": "GetNode", - "pos": { - "0": 961.441162109375, - "1": 1551.961181640625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MODEL", + "type": "MODEL", "links": [ - 82 + 545, + 546 ], "slot_index": 0 } ], - "title": "Get_lineart", - "properties": {}, + "properties": { + "Node name for S&R": "ADE_UseEvolvedSampling" + }, "widgets_values": [ - "lineart" + "autoselect" ] }, { - "id": 63, - "type": "PreviewImage", + "id": 356, + "type": "ADE_ApplyAnimateDiffModelSimple", "pos": [ - 1430, - -4640 + 3160, + -310 + ], + "size": [ + 260.3999938964844, + 126 ], - "size": { - "0": 210, - "1": 246 - }, "flags": {}, - "order": 58, - "mode": 4, + "order": 76, + "mode": 0, "inputs": [ { - "name": "images", - "type": "IMAGE", - "link": 95 - } + "name": "motion_model", + "type": "MOTION_MODEL_ADE", + "link": 537 + }, + { + "name": "motion_lora", + "type": "MOTION_LORA", + "link": 538, + "shape": 7 + }, + { + "name": "scale_multival", + "type": "MULTIVAL", + "link": 539, + "shape": 7 + }, + { + "name": "effect_multival", + "type": "MULTIVAL", + "link": 540, + "shape": 7 + }, + { + "name": "ad_keyframes", + "type": "AD_KEYFRAMES", + "link": null, + "shape": 7 + }, + { + "name": "per_block", + "type": "PER_BLOCK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "M_MODELS", + "type": "M_MODELS", + "links": [ + 541 + ] + } ], "properties": { - "Node name for S&R": "PreviewImage" - } + "Node name for S&R": "ADE_ApplyAnimateDiffModelSimple" + }, + "widgets_values": [] }, { - "id": 19, - "type": "EmptyImage", + "id": 357, + "type": "ADE_LoadAnimateDiffModel", "pos": [ - -309.8733202685141, - -894.0264396732274 + 3060, + -450 + ], + "size": [ + 302, + 58 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 59, + "order": 3, "mode": 0, "inputs": [ { - "name": "width", - "type": "INT", - "link": 26, - "widget": { - "name": "width" - } - }, + "name": "ad_settings", + "type": "AD_SETTINGS", + "link": null, + "shape": 7 + } + ], + "outputs": [ { - "name": "height", - "type": "INT", - "link": 27, - "widget": { - "name": "height" - } - }, + "name": "MOTION_MODEL", + "type": "MOTION_MODEL_ADE", + "links": [ + 537 + ] + } + ], + "properties": { + "Node name for S&R": "ADE_LoadAnimateDiffModel" + }, + "widgets_values": [ + "ALCM_sd15_t2v_beta.ckpt" + ] + }, + { + "id": 352, + "type": "ADE_MultivalDynamic", + "pos": [ + 2793.64599609375, + -172.73568725585938 + ], + "size": [ + 265.1632385253906, + 58 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ { - "name": "batch_size", - "type": "INT", - "link": 103, - "widget": { - "name": "batch_size" - } + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MULTIVAL", + "type": "MULTIVAL", "links": [ - 30 + 540 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], + "title": "Effect 🎭🅐🅓", "properties": { - "Node name for S&R": "EmptyImage" + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 512, - 512, - 60, - 0 + 1.1 ] }, { - "id": 50, - "type": "LineartStandardPreprocessor", + "id": 351, + "type": "ADE_AnimateDiffLoRALoader", "pos": [ - -2702.5557197546927, - -976.6574720262626 + 2786.056396484375, + -295.0462951660156 + ], + "size": [ + 261.19134521484375, + 82 ], - "size": { - "0": 315, - "1": 106 - }, "flags": {}, - "order": 70, + "order": 5, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 129 + "name": "prev_motion_lora", + "type": "MOTION_LORA", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MOTION_LORA", + "type": "MOTION_LORA", "links": [ - 303 + 538 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], + "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "LineartStandardPreprocessor" + "Node name for S&R": "ADE_AnimateDiffLoRALoader", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 6, - 8, - 512 + "LiquidAF-0-1.safetensors", + 0.8 ] }, { - "id": 33, - "type": "ADE_AnimateDiffUniformContextOptions", + "id": 354, + "type": "ADE_CustomCFGSimple", "pos": [ - 3481.5897819464126, - 658.8759046187079 + 2790.7177734375, + -43.261199951171875 + ], + "size": [ + 257.2469787597656, + 60.893348693847656 ], - "size": { - "0": 273.269775390625, - "1": 270 - }, "flags": {}, - "order": 7, + "order": 6, "mode": 0, "inputs": [ { - "name": "prev_context", - "type": "CONTEXT_OPTIONS", - "link": null - }, - { - "name": "view_opts", - "type": "VIEW_OPTS", - "link": null + "name": "cfg_extras", + "type": "CFG_EXTRAS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "CONTEXT_OPTS", - "type": "CONTEXT_OPTIONS", + "name": "CUSTOM_CFG", + "type": "CUSTOM_CFG", "links": [ - 44 + 536 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], - "title": "Context Options 🎭🅐🅓", "properties": { - "Node name for S&R": "ADE_AnimateDiffUniformContextOptions", + "Node name for S&R": "ADE_CustomCFGSimple", "ttNbgOverride": { "color": "#2a363b", "bgcolor": "#3f5159", @@ -525,55 +614,50 @@ } }, "widgets_values": [ - 16, - 1, - 4, - "uniform", - false, - "pyramid", - false, - 0, - 1, - "" + 2 ] }, { - "id": 29, + "id": 355, "type": "ADE_AnimateDiffSamplingSettings", "pos": [ - 3481.5897819464126, - 968.8759046187079 + 2798.038330078125, + 103.58998107910156 + ], + "size": [ + 273.3500061035156, + 274 ], - "size": { - "0": 273.3500061035156, - "1": 254 - }, "flags": {}, - "order": 39, + "order": 33, "mode": 0, "inputs": [ { "name": "noise_layers", "type": "NOISE_LAYERS", "link": null, - "slot_index": 0 + "slot_index": 0, + "shape": 7 }, { "name": "iteration_opts", "type": "ITERATION_OPTS", - "link": null + "link": null, + "shape": 7 }, { "name": "custom_cfg", "type": "CUSTOM_CFG", - "link": 50, - "slot_index": 2 + "link": 536, + "slot_index": 2, + "shape": 7 }, { "name": "sigma_schedule", "type": "SIGMA_SCHEDULE", - "link": 51, - "slot_index": 3 + "link": null, + "slot_index": 3, + "shape": 7 }, { "name": "seed_override", @@ -589,7 +673,14 @@ "link": null, "widget": { "name": "seed_override" - } + }, + "shape": 7 + }, + { + "name": "image_inject", + "type": "IMAGE_INJECT", + "link": null, + "shape": 7 } ], "outputs": [ @@ -597,10 +688,10 @@ "name": "settings", "type": "SAMPLE_SETTINGS", "links": [ - 47 + 543 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { @@ -617,581 +708,564 @@ "comfy", 0, 0, - false, - "" + false ] }, { - "id": 14, - "type": "DepthAnything_V2", + "id": 324, + "type": "Anything Everywhere?", "pos": [ - -2688.433746544838, - -613.3686263142703 + -2349.999755859375, + 338.658203125 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 71, + "order": 36, "mode": 0, "inputs": [ { - "name": "da_model", - "type": "DAMODEL", - "link": 15, - "slot_index": 0 - }, - { - "name": "images", - "type": "IMAGE", - "link": 130 + "name": "INT", + "type": "*", + "link": 588, + "shape": 7, + "color_on": "" } ], + "outputs": [], + "properties": { + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "width", + ".*" + ] + }, + { + "id": 327, + "type": "FloatConstant", + "pos": [ + -2729.999755859375, + 168.65823364257812 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "image", - "type": "IMAGE", + "name": "value", + "type": "FLOAT", "links": [ - 304 + 501 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "DepthAnything_V2" - } + "Node name for S&R": "FloatConstant" + }, + "widgets_values": [ + 30.000000000000004 + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 86, - "type": "Note", + "id": 323, + "type": "Anything Everywhere?", "pos": [ - 3160.2307942589186, - 250.7002531609014 + -2369.999755859375, + 518.6581420898438 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 8, + "order": 35, "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "*", + "link": 587, + "shape": 7, + "color_on": "" + } + ], + "outputs": [], "properties": { - "text": "" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "Shoutout Akatz" - ], - "color": "#432", - "bgcolor": "#653" + ".*", + "height", + ".*" + ] }, { - "id": 12, - "type": "VAEEncode", + "id": 366, + "type": "INTConstant", "pos": [ - 1562, - 458 + -2659.999755859375, + 338.658203125 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 47, + "order": 8, "mode": 0, - "inputs": [ - { - "name": "pixels", - "type": "IMAGE", - "link": 310 - }, - { - "name": "vae", - "type": "VAE", - "link": 12 - } - ], + "inputs": [], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "value", + "type": "INT", "links": [ - 67 + 587 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "VAEEncode" - } + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 512 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 43, - "type": "CR Apply LoRA Stack", + "id": 367, + "type": "INTConstant", "pos": [ - 1524, - 612 + -2689.999755859375, + 528.6581420898438 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 254.40000915527344, - "1": 66 - }, "flags": {}, - "order": 52, + "order": 9, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 60 - }, - { - "name": "clip", - "type": "CLIP", - "link": 61 - }, - { - "name": "lora_stack", - "type": "LORA_STACK", - "link": 62 - } - ], + "inputs": [], "outputs": [ { - "name": "MODEL", - "type": "MODEL", + "name": "value", + "type": "INT", "links": [ - 65 + 588 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 63, - 64 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "CR Apply LoRA Stack" - } + "Node name for S&R": "INTConstant" + }, + "widgets_values": [ + 768 + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 44, - "type": "SetLatentNoiseMask", + "id": 373, + "type": "VHS_VideoCombine", "pos": [ - 5196.2924473208695, - 361.47099519392407 + 47.184326171875, + 971.093505859375 + ], + "size": [ + 399.9459228515625, + 601.2973022460938 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 98, + "order": 87, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 67 + "name": "images", + "type": "IMAGE", + "link": 586 }, { - "name": "mask", - "type": "MASK", - "link": 151 - } - ], - "outputs": [ + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, { - "name": "LATENT", - "type": "LATENT", - "links": [ - 68 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } - }, - { - "id": 64, - "type": "ImageScale", - "pos": [ - 4420.911603734175, - 290.661003053677 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 53, - "mode": 0, - "inputs": [ + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, { - "name": "image", - "type": "IMAGE", - "link": 97 + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 98 - ], - "shape": 3, - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "ImageScale" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "nearest-exact", - 1000, - 1000, - "disabled" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02497-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02497.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02497-audio.mp4" + }, + "muted": false + } + } }, { - "id": 40, - "type": "IPAdapterUnifiedLoader", + "id": 13, + "type": "CheckpointLoaderSimple", "pos": [ - 4427.911603734175, - 481.6610030536765 + 313.2342224121094, + -135.5034942626953 + ], + "size": [ + 315, + 98 ], - "size": { - "0": 315, - "1": 78 - }, "flags": {}, - "order": 72, + "order": 10, "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 56 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": null - } - ], + "inputs": [], "outputs": [ { - "name": "model", + "name": "MODEL", "type": "MODEL", "links": [ - 57 + 692 ], - "shape": 3, "slot_index": 0 }, { - "name": "ipadapter", - "type": "IPADAPTER", + "name": "CLIP", + "type": "CLIP", "links": [ - 58 + 10 ], - "shape": 3, "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 603 + ], + "slot_index": 2 } ], "properties": { - "Node name for S&R": "IPAdapterUnifiedLoader" + "Node name for S&R": "CheckpointLoaderSimple" }, "widgets_values": [ - "PLUS (high strength)" + "photonLCM_v10.safetensors" ] }, { - "id": 7, - "type": "CLIPTextEncode", + "id": 12, + "type": "CLIPSetLastLayer", "pos": [ - 1937, - 702 + 802.5792846679688, + -101.50981140136719 + ], + "size": [ + 210, + 58.683013916015625 ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, "flags": {}, - "order": 65, + "order": 37, "mode": 0, "inputs": [ { "name": "clip", "type": "CLIP", - "link": 64 + "link": 10 } ], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "CLIP", + "type": "CLIP", "links": [ - 86 + 9, + 21 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "CLIPTextEncode" + "Node name for S&R": "CLIPSetLastLayer" }, "widgets_values": [ - "text, watermark" + -2 ] }, { - "id": 39, - "type": "ADE_AnimateDiffLoRALoader", + "id": 18, + "type": "CreateHookModelAsLora", "pos": [ - 3114, - 356 + 724.425537109375, + 41.72096252441406 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 261.19134521484375, - "1": 82 - }, "flags": {}, - "order": 9, + "order": 11, "mode": 0, "inputs": [ { - "name": "prev_motion_lora", - "type": "MOTION_LORA", - "link": null + "name": "prev_hooks", + "type": "HOOKS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "MOTION_LORA", - "type": "MOTION_LORA", - "links": [ - 45 - ], - "shape": 3, + "name": "HOOKS", + "type": "HOOKS", + "links": [], "slot_index": 0 } ], - "title": "AnimateDiff LoRA", "properties": { - "Node name for S&R": "ADE_AnimateDiffLoRALoader", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "CreateHookModelAsLora" }, "widgets_values": [ - "LiquidAF-0-1.safetensors", - 0.8, - "" + "photonLCM_v10.safetensors", + 1, + 1 ] }, { - "id": 38, - "type": "ADE_AdjustWeightAllMult", + "id": 386, + "type": "Anything Everywhere?", "pos": [ - 3115, - 498 + 704.195556640625, + 231.42691040039062 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 270.3999938964844, - "1": 82 - }, "flags": {}, - "order": 10, + "order": 38, "mode": 0, "inputs": [ { - "name": "prev_weight_adjust", - "type": "WEIGHT_ADJUST", - "link": null - } - ], - "outputs": [ - { - "name": "WEIGHT_ADJUST", - "type": "WEIGHT_ADJUST", - "links": [ - 54 - ], - "shape": 3 + "name": "VAE", + "type": "*", + "link": 603, + "shape": 7, + "color_on": "#FF6E6E" } ], + "outputs": [], "properties": { - "Node name for S&R": "ADE_AdjustWeightAllMult", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - 1.01, - false, - "" + ".*", + "vae", + ".*" ] }, { - "id": 4, - "type": "CheckpointLoaderSimple", + "id": 396, + "type": "AIO_Preprocessor", "pos": [ - 1094, - 453 + 2461.162841796875, + 865.462646484375 + ], + "size": [ + 315, + 82 ], - "size": { - "0": 315, - "1": 98 - }, "flags": {}, - "order": 11, + "order": 91, "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 60 - ], - "slot_index": 0 - }, + "inputs": [ { - "name": "CLIP", - "type": "CLIP", - "links": [ - 61 - ], - "slot_index": 1 - }, + "name": "image", + "type": "IMAGE", + "link": 656 + } + ], + "outputs": [ { - "name": "VAE", - "type": "VAE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 12, - 133 - ], - "slot_index": 2 + 615 + ] } ], "properties": { - "Node name for S&R": "CheckpointLoaderSimple" + "Node name for S&R": "AIO_Preprocessor" }, "widgets_values": [ - "photon_v1.safetensors" + "DepthAnythingV2Preprocessor", + 512 ] }, { - "id": 59, - "type": "Apply ControlNet Stack", + "id": 17, + "type": "PairConditioningSetPropertiesAndCombine", "pos": [ - 2524, - 581 + 2256.716552734375, + -149.84344482421875 + ], + "size": [ + 340.20001220703125, + 202 ], - "size": { - "0": 304.79998779296875, - "1": 66 - }, "flags": {}, - "order": 73, + "order": 89, "mode": 0, "inputs": [ { "name": "positive", "type": "CONDITIONING", - "link": 85 + "link": 97 }, { "name": "negative", "type": "CONDITIONING", - "link": 86 + "link": 98 }, { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": 84, - "slot_index": 2 - } - ], - "outputs": [ - { - "name": "CONDITIONING+", + "name": "positive_NEW", "type": "CONDITIONING", - "links": [ - 134 - ], - "shape": 3, - "slot_index": 0 + "link": 99 }, { - "name": "CONDITIONING-", + "name": "negative_NEW", "type": "CONDITIONING", - "links": [ - 135 - ], - "shape": 3, - "slot_index": 1 - } + "link": 100 + }, + { + "name": "mask", + "type": "MASK", + "link": 619, + "shape": 7 + }, + { + "name": "hooks", + "type": "HOOKS", + "link": null, + "shape": 7 + }, + { + "name": "timesteps", + "type": "TIMESTEPS_RANGE", + "link": null, + "shape": 7 + } ], - "properties": { - "Node name for S&R": "Apply ControlNet Stack", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 442 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 443 + ], + "slot_index": 1 } + ], + "properties": { + "Node name for S&R": "PairConditioningSetPropertiesAndCombine" }, - "shape": 1 + "widgets_values": [ + 1, + "default" + ] }, { - "id": 88, + "id": 15, "type": "Reroute", "pos": [ - 2860.8354071366402, - 64 + 1532.39306640625, + -444.7710266113281 ], "size": [ 75, 26 ], "flags": {}, - "order": 41, + "order": 74, "mode": 0, "inputs": [ { "name": "", "type": "*", - "link": 133 + "link": 608 } ], "outputs": [ { "name": "", - "type": "VAE", + "type": "MASK", "links": [ - 136 + 46, + 619 ], "slot_index": 0 } @@ -1202,1551 +1276,1691 @@ } }, { - "id": 89, - "type": "Reroute", + "id": 71, + "type": "CreateHookLora", "pos": [ - 2860.8354071366402, - 105 + 399.3513488769531, + -311.66949462890625 ], "size": [ - 75, - 26 + 315, + 106 ], "flags": {}, - "order": 78, - "mode": 0, + "order": 12, + "mode": 4, "inputs": [ { - "name": "", - "type": "*", - "link": 134 + "name": "prev_hooks", + "type": "HOOKS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "", - "type": "CONDITIONING", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 139 - ], - "slot_index": 0 + 121 + ] } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "CreateHookLora" + }, + "widgets_values": [ + "ral-acidzlime-sd15.safetensors", + 1, + 1 + ] }, { - "id": 90, - "type": "Reroute", + "id": 4, + "type": "CLIPTextEncode", "pos": [ - 2860.8354071366402, - 143.3452987595907 + 1422.325927734375, + -268.9685363769531 ], "size": [ - 75, - 26 + 327, + 108 ], "flags": {}, - "order": 79, + "order": 70, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 135 + "name": "clip", + "type": "CLIP", + "link": 3 } ], "outputs": [ { - "name": "", + "name": "CONDITIONING", "type": "CONDITIONING", "links": [ - 141 + 13 ], "slot_index": 0 } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "digital particles (ral-chrome, dripping gold)" + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 98, - "type": "Reroute", + "id": 157, + "type": "VAELoader", "pos": [ - 5172, - 31 + 5684.53955078125, + -43.22019577026367 ], "size": [ - 75, - 26 + 315, + 58 ], "flags": {}, - "order": 96, + "order": 13, "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 149 - } - ], + "inputs": [], "outputs": [ { - "name": "", - "type": "MASK", + "name": "VAE", + "type": "VAE", "links": [ - 150, - 151 + 236 ], "slot_index": 0 } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "vaeFtMse840000EmaPruned_vae.safetensors" + ] }, { - "id": 100, - "type": "SetLatentNoiseMask", + "id": 11, + "type": "SetClipHooks", "pos": [ - 6505.217366877503, - 369.41342322069596 + 1138.2432861328125, + 54.12196350097656 + ], + "size": [ + 210, + 102 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 104, + "order": 56, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 152 + "name": "clip", + "type": "CLIP", + "link": 9 }, { - "name": "mask", - "type": "MASK", - "link": 154 + "name": "hooks", + "type": "HOOKS", + "link": 629, + "shape": 7 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "CLIP", + "type": "CLIP", "links": [ - 153 + 165, + 166 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "SetLatentNoiseMask" - } + "Node name for S&R": "SetClipHooks" + }, + "widgets_values": [ + true, + false + ] }, { - "id": 17, - "type": "GetImageSizeAndCount", + "id": 407, + "type": "CreateHookLora", "pos": [ - -3900, - -866 + 345.5948486328125, + 113.78278350830078 + ], + "size": [ + 291.2920837402344, + 106 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 50, + "order": 14, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 301 + "name": "prev_hooks", + "type": "HOOKS", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 122, - 128 + 629 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "1920 width", - "type": "INT", - "links": null, - "shape": 3, - "slot_index": 1 - }, - { - "name": "1080 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "66 count", - "type": "INT", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } + "Node name for S&R": "CreateHookLora" + }, + "widgets_values": [ + "ral-3dwvz-sd15.safetensors", + 1.1, + 1 + ] }, { - "id": 85, - "type": "ImageResizeKJ", + "id": 6, + "type": "CLIPTextEncode", "pos": [ - -3652, - -898 + 1425.2979736328125, + 103.46449279785156 + ], + "size": [ + 327, + 108 ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, "flags": {}, - "order": 62, + "order": 67, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 128 - }, - { - "name": "get_image_size", - "type": "IMAGE", - "link": null - }, - { - "name": "width_input", - "type": "INT", - "link": null, - "widget": { - "name": "width_input" - } - }, - { - "name": "height_input", - "type": "INT", - "link": null, - "widget": { - "name": "height_input" - } + "name": "clip", + "type": "CLIP", + "link": 165 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "CONDITIONING", + "type": "CONDITIONING", "links": [ - 129, - 130 + 99 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "ImageResizeKJ" + "Node name for S&R": "CLIPTextEncode" }, "widgets_values": [ - 1280, - 1280, - "lanczos", - true, - 2, - 0, - 0, - "disabled" - ] + "particles made of ral-3dwvz, particles connected by waves" + ], + "color": "#232", + "bgcolor": "#353" }, { - "id": 104, - "type": "SetNode", - "pos": { - "0": -3212, - "1": -997, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 395, + "type": "ImageScaleBy", + "pos": [ + 1026.8580322265625, + 916.050048828125 + ], + "size": [ + 315, + 82 + ], "flags": {}, - "order": 49, + "order": 88, "mode": 0, "inputs": [ { - "name": "IMAGE", + "name": "image", "type": "IMAGE", - "link": 300 + "link": 657 } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 613 + ], + "slot_index": 0 } ], - "title": "Set_init_img", "properties": { - "previousName": "init_img" + "Node name for S&R": "ImageScaleBy" }, "widgets_values": [ - "init_img" + "lanczos", + 0.5 ] }, { - "id": 52, - "type": "SetNode", - "pos": { - "0": -1992, - "1": -966, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 387, + "type": "VAEEncode", + "pos": [ + 1365.041748046875, + 925.2013549804688 + ], + "size": [ + 210, + 46 + ], "flags": {}, - "order": 75, + "order": 92, "mode": 0, "inputs": [ { - "name": "IMAGE", + "name": "pixels", "type": "IMAGE", - "link": 303 + "link": 613 + }, + { + "name": "vae", + "type": "VAE", + "link": null } ], "outputs": [ { - "name": "*", - "type": "*", - "links": null - } - ], - "title": "Set_lineart", - "properties": { - "previousName": "lineart" - }, - "widgets_values": [ - "lineart" - ] - }, - { - "id": 115, - "type": "Note", - "pos": [ - -2340, - -859 + "name": "LATENT", + "type": "LATENT", + "links": [ + 605 + ], + "slot_index": 0 + } ], - "size": { - "0": 363.1609191894531, - "1": 148.97213745117188 - }, - "flags": {}, - "order": 12, - "mode": 0, "properties": { - "text": "" + "Node name for S&R": "VAEEncode" }, - "widgets_values": [ - "2. Preprocess to get the image before replicating it. We use this later for the Depth Chamber as well as control nets." - ], - "color": "#432", - "bgcolor": "#653" + "widgets_values": [] }, { - "id": 72, - "type": "Note", + "id": 390, + "type": "SetNode", "pos": [ - -326.87332026851414, - -1087.026439673227 + 1410.741943359375, + 1087.563232421875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 357.3516845703125, - "1": 135.6949462890625 - }, "flags": {}, - "order": 13, + "order": 94, "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "4. I want the whole image to be included in the depth chamber, so I create a mask the size of the image. You could pass in masks of anything here." + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 605 + } ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 116, - "type": "Note", - "pos": [ - 1490, - 809 + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } ], - "size": { - "0": 380.91632080078125, - "1": 230.8916015625 - }, - "flags": {}, - "order": 14, - "mode": 0, + "title": "Set_init_latent", "properties": { - "text": "" + "previousName": "init_latent" }, "widgets_values": [ - "5. finally we do all this " + "init_latent" ], - "color": "#432", - "bgcolor": "#653" + "color": "#323", + "bgcolor": "#535" }, { - "id": 93, - "type": "Reroute", + "id": 14, + "type": "InvertMask", "pos": [ - 5183, - 99 + 1835.5404052734375, + -401.791259765625 ], "size": [ - 75, + 210, 26 ], "flags": {}, - "order": 82, + "order": 79, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 139 + "name": "mask", + "type": "MASK", + "link": 46 } ], "outputs": [ { - "name": "", - "type": "CONDITIONING", + "name": "MASK", + "type": "MASK", "links": [ - 140, - 143 + 618 ], "slot_index": 0 } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "InvertMask" + }, + "widgets_values": [] }, { - "id": 94, - "type": "Reroute", + "id": 397, + "type": "MaskToImage", "pos": [ - 5180, - 136 + 1576.7933349609375, + -889.1575927734375 ], "size": [ - 75, + 264.5999755859375, 26 ], "flags": {}, - "order": 83, + "order": 75, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 141 + "name": "mask", + "type": "MASK", + "link": 616 } ], "outputs": [ { - "name": "", - "type": "CONDITIONING", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 142, - 144 + 617 ], "slot_index": 0 } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] }, { - "id": 125, - "type": "Note", + "id": 398, + "type": "VHS_VideoCombine", "pos": [ - 4337.8690841450125, - 699.6818760329338 + 1955.9129638671875, + -1143.572021484375 + ], + "size": [ + 399.9459228515625, + 601.2973022460938 ], - "size": { - "0": 336.1888122558594, - "1": 206.84153747558594 - }, "flags": {}, - "order": 15, + "order": 80, "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 617 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], "properties": { - "text": "" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "enable this if you want" - ], - "color": "#432", - "bgcolor": "#653" + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02495-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02495.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02495-audio.mp4" + }, + "muted": false + } + } }, { - "id": 122, - "type": "FeatureMixer", + "id": 379, + "type": "DepthShapeModifierPrecise", "pos": [ - -72.21454028302455, - -5668.483763498456 + -122.3917236328125, + 1722.6380615234375 + ], + "size": [ + 478.8000183105469, + 174 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 44, - "mode": 4, + "order": 86, + "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 195 + "name": "depth_map", + "type": "IMAGE", + "link": 598 + }, + { + "name": "mask", + "type": "MASK", + "link": 599 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 199 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", + "name": "IMAGE", "type": "IMAGE", "links": [ - 196 + 600, + 656 ], - "shape": 3, - "slot_index": 1 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "DepthShapeModifierPrecise" }, "widgets_values": [ - 1.5, - 0, - 1, - 1, - 1, - 1, + 2, + 0.5, 1, - 0, - 0, 1, - 0.5, - false + "linear" ] }, { - "id": 137, - "type": "PrimitiveNode", + "id": 155, + "type": "VAEDecode", "pos": [ - -4241, - -198 + 5726.71435546875, + -313.1842956542969 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 210, - "1": 82 - }, "flags": {}, - "order": 16, + "order": 101, "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 235 + }, + { + "name": "vae", + "type": "VAE", + "link": 236 + } + ], "outputs": [ { - "name": "connect to widget input", - "type": "*", - "links": [], + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 237, + 661, + 700 + ], "slot_index": 0 } ], - "title": "Extend last frame", - "properties": { - "Run widget replace on values": false - } - }, - { - "id": 68, - "type": "Note", - "pos": [ - -4267.1294444297155, - -555.9201161093287 - ], - "size": { - "0": 372.2613220214844, - "1": 154.43922424316406 - }, - "flags": {}, - "order": 17, - "mode": 0, "properties": { - "text": "" + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - "1. Downscale the input image so the KSampler doesnt explode, but downscale another copy of the image LESS. This is specifically for the depth maps, to avoid losing detail in the maps.\n\nThen since we are dealing with a single image, we replicate it. Set that in num frames below.\n\nTo repeat the last frame and mask set extend last frame" - ], - "color": "#432", - "bgcolor": "#653" + "widgets_values": [] }, { - "id": 48, - "type": "ControlNetLoaderAdvanced", + "id": 9, + "type": "VAEDecode", "pos": [ - 984, - 1273.8269519976366 + 4110.71875, + 467.830078125 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, - "order": 18, + "order": 96, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", - "type": "TIMESTEP_KEYFRAME", - "link": null + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 } ], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 76 + 164, + 623 ], - "shape": 3 + "slot_index": 0 } ], "properties": { - "Node name for S&R": "ControlNetLoaderAdvanced", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "VAEDecode" }, - "widgets_values": [ - "control_v11f1p_sd15_depth_fp16.safetensors" - ] + "widgets_values": [] }, { - "id": 56, - "type": "ControlNetLoaderAdvanced", + "id": 102, + "type": "SetNode", "pos": [ - 1339, - 1281.8269519976366 + -1820.0001220703125, + -741.3416748046875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 327.6000061035156, - "1": 58 - }, "flags": {}, - "order": 19, + "order": 40, "mode": 0, "inputs": [ { - "name": "timestep_keyframe", - "type": "TIMESTEP_KEYFRAME", - "link": null + "name": "INT", + "type": "INT", + "link": 500 } ], "outputs": [ { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 80 - ], - "shape": 3 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_framecount", "properties": { - "Node name for S&R": "ControlNetLoaderAdvanced", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "previousName": "framecount" }, "widgets_values": [ - "control_v11p_sd15_lineart_fp16.safetensors" - ] + "framecount" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 97, - "type": "Reroute", + "id": 349, + "type": "Anything Everywhere?", "pos": [ - 2861, - 9 + -1820.0001220703125, + -631.3417358398438 ], "size": [ - 75, - 26 + 315, + 106 ], "flags": {}, - "order": 94, + "order": 41, "mode": 0, "inputs": [ { - "name": "", + "name": "INT", "type": "*", - "link": 307 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 149 - ], - "slot_index": 0 + "link": 535, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "frame_count", + ".*" + ] }, { - "id": 15, - "type": "DownloadAndLoadDepthAnythingV2Model", + "id": 365, + "type": "SetNode", "pos": [ - -2760, - -789 + -1820.0001220703125, + -431.34185791015625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 20, + "order": 43, "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 579 + } + ], "outputs": [ { - "name": "da_v2_model", - "type": "DAMODEL", - "links": [ - 15, - 234 - ], - "shape": 3, - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_frames_per_bar", "properties": { - "Node name for S&R": "DownloadAndLoadDepthAnythingV2Model" + "previousName": "frames_per_bar" }, "widgets_values": [ - "depth_anything_v2_vitl_fp32.safetensors" - ] + "frames_per_bar" + ], + "color": "#1b4669", + "bgcolor": "#29699c" }, { - "id": 8, - "type": "VAEDecode", + "id": 384, + "type": "SetNode", "pos": [ - 5898, - 437 + -1860.0001220703125, + -211.34190368652344 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 101, + "order": 61, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 100 - }, - { - "name": "vae", - "type": "VAE", - "link": 138 + "name": "FEATURE", + "type": "FEATURE", + "link": 602 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_time_feat", "properties": { - "Node name for S&R": "VAEDecode" - } + "previousName": "time_feat" + }, + "widgets_values": [ + "time_feat" + ] }, { - "id": 79, - "type": "NNLatentUpscale", + "id": 83, + "type": "SetNode", "pos": [ - 5920, - 273 + -1810.0001220703125, + -1171.3414306640625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 315, - "1": 82 - }, "flags": {}, - "order": 102, + "order": 58, "mode": 0, "inputs": [ { - "name": "latent", - "type": "LATENT", - "link": 246 + "name": "IMAGE", + "type": "IMAGE", + "link": 133 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", - "links": [ - 152 - ], - "shape": 3, - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_emptyimg", "properties": { - "Node name for S&R": "NNLatentUpscale" + "previousName": "" }, "widgets_values": [ - "SD 1.x", - 1.6500000000000001 - ] + "emptyimg" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 27, - "type": "PrimitiveNode", + "id": 94, + "type": "SetNode", "pos": [ - -4242, - -327 + -1800.0001220703125, + -871.3414916992188 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 82 - }, "flags": {}, - "order": 21, + "order": 59, "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 145 + } + ], "outputs": [ { - "name": "connect to widget input", + "name": "*", "type": "*", - "links": [], - "slot_index": 0 + "links": null } ], - "title": "Num frames", + "title": "Set_emptymask", "properties": { - "Run widget replace on values": false - } + "previousName": "emptymask" + }, + "widgets_values": [ + "emptymask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" }, { - "id": 91, - "type": "Reroute", + "id": 364, + "type": "Anything Everywhere?", "pos": [ - 5633, - 80 + -1810.0001220703125, + -1031.3414306640625 ], "size": [ - 75, - 26 + 315, + 106 ], "flags": {}, - "order": 54, + "order": 47, "mode": 0, "inputs": [ { - "name": "", + "name": "AUDIO", "type": "*", - "link": 136 - } - ], - "outputs": [ - { - "name": "", - "type": "VAE", - "links": [ - 137, - 138 - ], - "slot_index": 0 + "link": 553, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 + }, + "widgets_values": [ + ".*", + "audio", + ".*" + ] }, { - "id": 148, - "type": "DepthAnything_V2", + "id": 82, + "type": "EmptyImageAndMaskFromAudio", "pos": [ - 9728.386098469018, - 266.75074584506234 + -2399.999755859375, + -901.3414916992188 + ], + "size": [ + 411.6000061035156, + 146 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 113, - "mode": 4, + "order": 45, + "mode": 0, "inputs": [ { - "name": "da_model", - "type": "DAMODEL", - "link": 235 + "name": "audio", + "type": "AUDIO", + "link": 132 }, { - "name": "images", - "type": "IMAGE", - "link": 248 + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } } ], "outputs": [ { - "name": "image", + "name": "empty_image", "type": "IMAGE", "links": [ - 237, - 239 + 133 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 + }, + { + "name": "empty_mask", + "type": "MASK", + "links": [ + 145 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "frame_count", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 } ], "properties": { - "Node name for S&R": "DepthAnything_V2" - } + "Node name for S&R": "EmptyImageAndMaskFromAudio" + }, + "widgets_values": [ + 30, + 768, + 464 + ] }, { - "id": 154, - "type": "PreviewImage", + "id": 322, + "type": "DownloadOpenUnmixModel", "pos": [ - 9946.386098469018, - 637.7507458450624 + -2209.999755859375, + -1371.3414306640625 + ], + "size": [ + 294, + 58 ], - "size": { - "0": 481.87567138671875, - "1": 246 - }, "flags": {}, - "order": 117, - "mode": 4, - "inputs": [ + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ { - "name": "images", - "type": "IMAGE", - "link": 250 + "name": "OPEN_UNMIX_MODEL", + "type": "OPEN_UNMIX_MODEL", + "links": [ + 496 + ] } ], "properties": { - "Node name for S&R": "PreviewImage" - } + "Node name for S&R": "DownloadOpenUnmixModel" + }, + "widgets_values": [ + "umxl" + ] }, { - "id": 113, - "type": "UpscaleModelLoader", + "id": 326, + "type": "Anything Everywhere?", "pos": [ - 8493.811170891195, - 363.5270008378391 + -2349.999755859375, + 158.65823364257812 + ], + "size": [ + 315, + 106 ], - "size": { - "0": 315, - "1": 58 - }, "flags": {}, - "order": 22, - "mode": 4, - "outputs": [ + "order": 34, + "mode": 0, + "inputs": [ { - "name": "UPSCALE_MODEL", - "type": "UPSCALE_MODEL", - "links": [ - 175 - ], - "shape": 3 + "name": "FLOAT", + "type": "*", + "link": 501, + "shape": 7, + "color_on": "" } ], + "outputs": [], "properties": { - "Node name for S&R": "UpscaleModelLoader" + "Node name for S&R": "Anything Everywhere?", + "group_restricted": 0, + "color_restricted": 0 }, "widgets_values": [ - "RealESRGAN_x2.pth" + ".*", + "frame_rate", + ".*" ] }, { - "id": 47, - "type": "Control Net Stacker", + "id": 110, + "type": "VHS_VideoCombine", "pos": [ - 1346, - 1457.8269519976366 + 4050.7548828125, + -311.3144226074219 + ], + "size": [ + 399.9459228515625, + 601.2973022460938 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 42, + "order": 97, "mode": 0, "inputs": [ { - "name": "control_net", - "type": "CONTROL_NET", - "link": 76, - "slot_index": 0 + "name": "images", + "type": "IMAGE", + "link": 164 }, { - "name": "image", - "type": "IMAGE", - "link": 81 + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 }, { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": null + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "CNET_STACK", - "type": "CONTROL_NET_STACK", - "links": [ - 83 - ], - "shape": 3, - "slot_index": 0 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "Control Net Stacker" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - 0.47000000000000003, - 0, - 0.5 - ], - "color": "#223322", - "bgcolor": "#335533", - "shape": 1 + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02504-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02504.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02504-audio.mp4" + }, + "muted": false + } + } }, { - "id": 55, - "type": "Control Net Stacker", + "id": 429, + "type": "ImageCompositeMasked", "pos": [ - 1776, - 1381.8269519976366 + 8436.7041015625, + -283.386962890625 + ], + "size": [ + 315, + 146 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 55, + "order": 106, "mode": 0, "inputs": [ { - "name": "control_net", - "type": "CONTROL_NET", - "link": 80, - "slot_index": 0 + "name": "destination", + "type": "IMAGE", + "link": 662 }, { - "name": "image", + "name": "source", "type": "IMAGE", - "link": 82 + "link": 702 }, { - "name": "cnet_stack", - "type": "CONTROL_NET_STACK", - "link": 83 + "name": "mask", + "type": "MASK", + "link": 664, + "shape": 7 } ], "outputs": [ { - "name": "CNET_STACK", - "type": "CONTROL_NET_STACK", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 84 + 716 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "Control Net Stacker" + "Node name for S&R": "ImageCompositeMasked" }, "widgets_values": [ - 0.43, 0, - 0.5 + 0, + false + ] + }, + { + "id": 461, + "type": "PreviewFeature", + "pos": [ + -1910.984619140625, + -97.65576171875 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 719 + } ], - "color": "#223322", - "bgcolor": "#335533", - "shape": 1 + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + } }, { - "id": 28, - "type": "ADE_AnimateDiffLoaderGen1", + "id": 325, + "type": "AudioInfo", "pos": [ - 3481.5897819464126, - 358.87590461870786 + -2753.5390625, + -686.1165771484375 + ], + "size": [ + 315, + 338 ], - "size": { - "0": 271.7644958496094, - "1": 242 - }, "flags": {}, - "order": 63, + "order": 16, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 65 + "name": "audio", + "type": "AUDIO", + "link": null }, { - "name": "context_options", - "type": "CONTEXT_OPTIONS", - "link": 44, - "slot_index": 1 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + } + ], + "outputs": [ + { + "name": "total_frames", + "type": "INT", + "links": [ + 500, + 535, + 709 + ], + "slot_index": 0 }, { - "name": "motion_lora", - "type": "MOTION_LORA", - "link": 45, + "name": "frames_per_beat", + "type": "INT", + "links": null + }, + { + "name": "frames_per_bar", + "type": "INT", + "links": [ + 579 + ], "slot_index": 2 }, { - "name": "ad_settings", - "type": "AD_SETTINGS", - "link": 46, - "slot_index": 3 + "name": "frames_per_quarter", + "type": "INT", + "links": null }, { - "name": "ad_keyframes", - "type": "AD_KEYFRAMES", - "link": null + "name": "frames_per_eighth", + "type": "INT", + "links": null }, { - "name": "sample_settings", - "type": "SAMPLE_SETTINGS", - "link": 47, - "slot_index": 5 + "name": "audio_duration", + "type": "FLOAT", + "links": null }, { - "name": "scale_multival", - "type": "MULTIVAL", - "link": 48, - "slot_index": 6 + "name": "beats_per_second", + "type": "FLOAT", + "links": null }, { - "name": "effect_multival", - "type": "MULTIVAL", - "link": 49, - "slot_index": 7 + "name": "detected_bpm", + "type": "FLOAT", + "links": null }, { - "name": "per_block", - "type": "PER_BLOCK", - "link": null - } - ], - "outputs": [ + "name": "sample_rate", + "type": "INT", + "links": null + }, { - "name": "MODEL", - "type": "MODEL", - "links": [ - 56 - ], - "shape": 3, - "slot_index": 0 + "name": "num_channels", + "type": "INT", + "links": null + }, + { + "name": "num_samples", + "type": "INT", + "links": null + }, + { + "name": "max_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "mean_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "rms_amplitude", + "type": "FLOAT", + "links": null + }, + { + "name": "bit_depth", + "type": "STRING", + "links": null } ], "properties": { - "Node name for S&R": "ADE_AnimateDiffLoaderGen1", - "ttNbgOverride": { - "color": "#2a363b", - "bgcolor": "#3f5159", - "groupcolor": "#3f789e" - } + "Node name for S&R": "AudioInfo" }, "widgets_values": [ - "ALCM_sd15_t2v_beta.ckpt", - "lcm avg(sqrt_linear,linear)" + 30 ] }, { - "id": 92, - "type": "Reroute", + "id": 453, + "type": "Display Any (rgthree)", "pos": [ - 6750, - 100 + -2225.43408203125, + -655.3612060546875 ], "size": [ - 75, - 26 + 264.5999755859375, + 76 ], "flags": {}, - "order": 66, + "order": 42, "mode": 0, "inputs": [ { - "name": "", + "name": "source", "type": "*", - "link": 137 + "link": 709, + "dir": 3 } ], + "outputs": [], + "properties": { + "Node name for S&R": "Display Any (rgthree)" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 92, + "type": "VHS_LoadAudioUpload", + "pos": [ + -2782.556884765625, + -990.0470581054688 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [], "outputs": [ { - "name": "", - "type": "VAE", + "name": "audio", + "type": "AUDIO", "links": [ - 147 + 122, + 132, + 491, + 553 ], - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], "properties": { - "showOutputText": false, - "horizontal": false + "Node name for S&R": "VHS_LoadAudioUpload" + }, + "widgets_values": { + "audio": "Vesuvius.mp3", + "start_time": 26.5, + "duration": 14.700000000000001, + "choose audio to upload": "image" } }, { - "id": 95, - "type": "Reroute", + "id": 321, + "type": "AudioSeparatorSimple", "pos": [ - 6320, - 110 + -1807.3931884765625, + -1356.9444580078125 ], "size": [ - 75, - 26 + 315, + 106 ], "flags": {}, - "order": 86, - "mode": 4, + "order": 46, + "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 143 + "name": "model", + "type": "OPEN_UNMIX_MODEL", + "link": 496 + }, + { + "name": "audio", + "type": "AUDIO", + "link": 491 } ], "outputs": [ { - "name": "", - "type": "CONDITIONING", + "name": "audio", + "type": "AUDIO", + "links": null + }, + { + "name": "drums_audio", + "type": "AUDIO", "links": [ - 145 + 592 ], - "slot_index": 0 + "slot_index": 1 + }, + { + "name": "vocals_audio", + "type": "AUDIO", + "links": [] + }, + { + "name": "bass_audio", + "type": "AUDIO", + "links": [] + }, + { + "name": "other_audio", + "type": "AUDIO", + "links": null } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "AudioSeparatorSimple" + }, + "widgets_values": [] }, { - "id": 96, - "type": "Reroute", + "id": 377, + "type": "FrequencyFilterPreset", "pos": [ - 6320, - 140 + -1373.4661865234375, + -1225.78173828125 ], "size": [ - 75, - 26 + 363.19219970703125, + 60.4569206237793 ], "flags": {}, - "order": 87, - "mode": 4, + "order": 18, + "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 144 + "name": "previous_filter", + "type": "FREQUENCY_FILTER", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "", - "type": "CONDITIONING", + "name": "FREQUENCY_FILTER", + "type": "FREQUENCY_FILTER", "links": [ - 146 - ], - "slot_index": 0 + 593 + ] } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "FrequencyFilterPreset" + }, + "widgets_values": [ + "isolate_kick_drum" + ] }, { - "id": 78, - "type": "KSampler", + "id": 376, + "type": "AudioFilter", "pos": [ - 6735.217366877503, - 289.41342322069596 + -987.3137817382812, + -1336.6776123046875 + ], + "size": [ + 277.20001220703125, + 46 ], - "size": { - "0": 315, - "1": 262 - }, "flags": {}, - "order": 105, + "order": 60, "mode": 0, "inputs": [ { - "name": "model", - "type": "MODEL", - "link": 112 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 145 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 146 + "name": "audio", + "type": "AUDIO", + "link": 592 }, { - "name": "latent_image", - "type": "LATENT", - "link": 153 + "name": "filters", + "type": "FREQUENCY_FILTER", + "link": 593 } ], "outputs": [ { - "name": "LATENT", - "type": "LATENT", + "name": "AUDIO", + "type": "AUDIO", "links": [ - 121 + 594 ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "KSampler" + "Node name for S&R": "AudioFilter" }, - "widgets_values": [ - 156680208700286, - "fixed", - 4, - 1, - "lcm", - "sgm_uniform", - 0.36 - ] + "widgets_values": [] }, { - "id": 99, - "type": "Reroute", + "id": 328, + "type": "AudioFeatureExtractor", "pos": [ - 6300, - 40 + -621.1401977539062, + -1343.52978515625 ], "size": [ - 75, - 26 + 415.8000183105469, + 174 ], "flags": {}, - "order": 97, + "order": 71, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 150 + "name": "audio", + "type": "AUDIO", + "link": 594 + }, + { + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "", - "type": "MASK", + "name": "feature", + "type": "FEATURE", "links": [ - 154, - 273 - ], - "slot_index": 0 + 511 + ] + }, + { + "name": "frame_count", + "type": "INT", + "links": [] } ], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "AudioFeatureExtractor" + }, + "widgets_values": [ + "amplitude_envelope", + 30, + 0, + 512, + 512 + ] }, { - "id": 80, - "type": "VAEDecode", + "id": 78, + "type": "SetNode", "pos": [ - 7092.217366877503, - 294.41342322069596 + -257.6931457519531, + -922.9367065429688 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 46 - }, "flags": {}, - "order": 106, + "order": 82, "mode": 0, "inputs": [ { - "name": "samples", - "type": "LATENT", - "link": 121 - }, - { - "name": "vae", - "type": "VAE", - "link": 147 + "name": "FEATURE", + "type": "FEATURE", + "link": 512 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 278 - ], - "slot_index": 0 + "name": "*", + "type": "*", + "links": null } ], + "title": "Set_kifck_feature", "properties": { - "Node name for S&R": "VAEDecode" - } + "previousName": "" + }, + "widgets_values": [ + "kifck_feature" + ] }, { - "id": 172, - "type": "Reroute", + "id": 336, + "type": "PreviewFeature", "pos": [ - 7635, - 38 + -310.51690673828125, + -785.7384643554688 ], "size": [ - 75, - 26 + 315, + 246 ], "flags": {}, - "order": 99, + "order": 83, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 273 - } - ], - "outputs": [ - { - "name": "", - "type": "MASK", - "links": [ - 274 - ], - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 513 } ], + "outputs": [], "properties": { - "showOutputText": false, - "horizontal": false - } + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] }, { - "id": 121, - "type": "TimeFeatureNode", + "id": 335, + "type": "FeatureMixer", "pos": [ - -449.21454028302617, - -5524.483763498457 + -691.8911743164062, + -850.9701538085938 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 23, - "mode": 4, + "order": 77, + "mode": 0, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", - "link": null + "name": "feature", + "type": "FEATURE", + "link": 511 } ], "outputs": [ @@ -2754,447 +2968,651 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 195 + 512, + 513 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 193 - ], - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "TimeFeatureNode" + "Node name for S&R": "FeatureMixer" }, "widgets_values": [ - 30, - "smooth", - 0.4, - 0 + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0.25, + 1, + 0.5, + false ] }, { - "id": 123, - "type": "PreviewImage", + "id": 382, + "type": "TimeFeatureNode", "pos": [ - 446.7854597169757, - -5708.483763498455 - ], - "size": { - "0": 443.01776123046875, - "1": 260.46453857421875 - }, - "flags": {}, - "order": 57, - "mode": 4, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 196 - } + -2338.899169921875, + -264.3017272949219 ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 69, - "type": "FlexMaskDepthChamber", - "pos": [ - 487.78545971697525, - -5416.483763498458 + "size": [ + 315, + 202 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, "flags": {}, - "order": 56, - "mode": 4, + "order": 48, + "mode": 0, "inputs": [ { - "name": "masks", - "type": "MASK", - "link": null + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } }, { - "name": "feature", - "type": "FEATURE", - "link": 199 + "name": "frame_count", + "type": "INT", + "link": null, + "widget": { + "name": "frame_count" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 193 + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } }, { - "name": "depth_map", - "type": "IMAGE", - "link": null + "name": "frames_per_cycle", + "type": "INT", + "link": 601, + "widget": { + "name": "frames_per_cycle" + } } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 602, + 719 + ], "slot_index": 0 } ], "properties": { - "Node name for S&R": "FlexMaskDepthChamber" + "Node name for S&R": "TimeFeatureNode" }, "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 1, - 0.66, - "both", - "move_back" - ] - }, + "pulse", + 30, + 30, + 512, + 512, + 30, + 0 + ] + }, { - "id": 22, - "type": "FlexMaskDepthChamber", + "id": 383, + "type": "GetNode", "pos": [ - 127, - -4746 + -2741.792236328125, + -183.75990295410156 + ], + "size": [ + 321.67816162109375, + 64.4607162475586 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, "flags": {}, - "order": 24, - "mode": 4, - "inputs": [ + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ { - "name": "masks", + "name": "INT", + "type": "INT", + "links": [ + 601 + ], + "slot_index": 0 + } + ], + "title": "Get_frames_per_bar", + "properties": {}, + "widgets_values": [ + "frames_per_bar" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 371, + "type": "GetNode", + "pos": [ + -2805.9677734375, + 1185.546630859375 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 589, + 597 + ], + "slot_index": 0 + } + ], + "title": "Get_kifck_feature", + "properties": {}, + "widgets_values": [ + "kifck_feature" + ] + }, + { + "id": 369, + "type": "GetNode", + "pos": [ + -1036.0628662109375, + 869.2046508789062 + ], + "size": [ + 210, + 58 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", "type": "MASK", - "link": null + "links": [ + 582 + ], + "slot_index": 0 + } + ], + "title": "Get_emptymask", + "properties": {}, + "widgets_values": [ + "emptymask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 370, + "type": "ParticleEmitter", + "pos": [ + -1268.4927978515625, + 1066.769775390625 + ], + "size": [ + 468.5999755859375, + 402 + ], + "flags": {}, + "order": 78, + "mode": 0, + "inputs": [ + { + "name": "previous_emitter", + "type": "PARTICLE_EMITTER", + "link": null, + "shape": 7 }, { - "name": "feature", - "type": "FEATURE", - "link": null + "name": "emitter_movement", + "type": "EMITTER_MOVEMENT", + "link": null, + "shape": 7 }, { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": null + "name": "spring_joint_setting", + "type": "SPRING_JOINT_SETTING", + "link": null, + "shape": 7 }, { - "name": "depth_map", - "type": "IMAGE", - "link": null + "name": "particle_modulation", + "type": "PARTICLE_MODULATION", + "link": 595, + "shape": 7 + }, + { + "name": "emitter_modulation", + "type": "EMITTER_MODULATION", + "link": 584, + "shape": 7 } ], "outputs": [ { - "name": "MASK", - "type": "MASK", - "links": [], - "shape": 3, - "slot_index": 0 + "name": "PARTICLE_EMITTER", + "type": "PARTICLE_EMITTER", + "links": [ + 583 + ] } ], "properties": { - "Node name for S&R": "FlexMaskDepthChamber" + "Node name for S&R": "ParticleEmitter" }, "widgets_values": [ - 1, - false, + 0, + 0.5, + 0, + 30, + 90, + 320, + 0.1, + "(255,255,255)", 0, 0, 0, - 0.12, - 0.21, - "both", - "expand" + 0 ] }, { - "id": 23, - "type": "TimeFeatureNode", + "id": 378, + "type": "ParticleSpeedModulation", "pos": [ - 610, - -4500 + -1933.43359375, + 958.3246459960938 + ], + "size": [ + 493.8000183105469, + 222 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 25, - "mode": 4, + "order": 50, + "mode": 0, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", - "link": null + "name": "previous_modulation", + "type": "PARTICLE_MODULATION", + "link": null, + "shape": 7 + }, + { + "name": "feature", + "type": "FEATURE", + "link": 597, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "PARTICLE_MODULATION", + "type": "PARTICLE_MODULATION", "links": [ - 94 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [], - "shape": 3, - "slot_index": 1 + 595 + ] } ], "properties": { - "Node name for S&R": "TimeFeatureNode" + "Node name for S&R": "ParticleSpeedModulation" }, "widgets_values": [ - 20, - "bounce", - 0.5, - 0 + 0, + 0, + 0, + "ease_in_out", + false, + false, + 1 ] }, { - "id": 62, - "type": "FeatureMixer", + "id": 372, + "type": "EmitterEmissionRateModulation", "pos": [ - 1010, - -4620 + -1946.3551025390625, + 1285.0902099609375 + ], + "size": [ + 529.199951171875, + 222 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 45, - "mode": 4, + "order": 73, + "mode": 0, "inputs": [ + { + "name": "previous_modulation", + "type": "EMITTER_MODULATION", + "link": null, + "shape": 7 + }, { "name": "feature", "type": "FEATURE", - "link": 94 + "link": 713, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", + "name": "EMITTER_MODULATION", + "type": "EMITTER_MODULATION", "links": [ - 95 - ], - "shape": 3, - "slot_index": 1 + 584 + ] } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "EmitterEmissionRateModulation" }, "widgets_values": [ - 2.32, 0, - 2.17, - 1, - 1, - 1, - 1, 0, 0, - 0.3, - 0.5, - false + "ease_in_out", + false, + false, + 2.3000000000000003 ] }, { - "id": 49, - "type": "SetNode", - "pos": { - "0": -1970, - "1": -676, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 454, + "type": "DrawableFeatureNode", + "pos": [ + -2731.87890625, + 1743.6923828125 + ], + "size": [ + 700, + 800 + ], "flags": {}, - "order": 76, + "order": 22, "mode": 0, "inputs": [ { - "name": "IMAGE", - "type": "IMAGE", - "link": 304 + "name": "frame_rate", + "type": "FLOAT", + "link": null, + "widget": { + "name": "frame_rate" + } + }, + { + "name": "width", + "type": "INT", + "link": null, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": null, + "widget": { + "name": "height" + } } ], "outputs": [ { - "name": "*", - "type": "*", - "links": [], + "name": "FEATURE", + "type": "FEATURE", + "links": [ + 711 + ], "slot_index": 0 } ], - "title": "Set_depth_maps", "properties": { - "previousName": "depth_maps" + "Node name for S&R": "DrawableFeatureNode" }, "widgets_values": [ - "depth_maps" + "drawn", + 30, + 441, + 512, + 512, + 0, + 1, + "ease_in", + 0, + "[[0,0.0033214633980542807],[355,0.006873633317257433],[439,0.9908254603810008]]", + "selected_template", + 1, + "load", + "clear" + ], + "points": [ + [ + 0, + 0.0033214633980542807 + ], + [ + 355, + 0.006873633317257433 + ], + [ + 439, + 0.9908254603810008 + ] ] }, { - "id": 74, - "type": "GetNode", - "pos": { - "0": -576, - "1": -833, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 455, + "type": "FeatureCombine", + "pos": [ + -1920.792724609375, + 1651.141357421875 + ], + "size": [ + 315, + 150 + ], "flags": {}, - "order": 26, + "order": 64, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "feature1", + "type": "FEATURE", + "link": 710 + }, + { + "name": "feature2", + "type": "FEATURE", + "link": 711 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 108, - 203 + 712, + 713 ], "slot_index": 0 } ], - "title": "Get_depth_maps", - "properties": {}, + "properties": { + "Node name for S&R": "FeatureCombine" + }, "widgets_values": [ - "depth_maps" + "max", + 1, + 1, + false ] }, { - "id": 20, - "type": "GetImageSizeAndCount", + "id": 374, + "type": "FeaturePeakDetector", "pos": [ - -564, - -1048 + -2527.853515625, + 1373.7442626953125 + ], + "size": [ + 390.5999755859375, + 178 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 46, + "order": 49, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 108 - } + "name": "feature", + "type": "FEATURE", + "link": 589 + } ], "outputs": [ { - "name": "image", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "1280 width", - "type": "INT", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 26 + 591, + 710 ], - "shape": 3, - "slot_index": 1 - }, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FeaturePeakDetector" + }, + "widgets_values": [ + 0.46, + 10, + 1, + 1, + false, + false + ] + }, + { + "id": 375, + "type": "PreviewFeature", + "pos": [ + -1251.498046875, + 1635.8740234375 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ { - "name": "720 height", - "type": "INT", - "links": [ - 27 - ], - "shape": 3, - "slot_index": 2 - }, + "name": "feature", + "type": "FEATURE", + "link": 591 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewFeature" + }, + "widgets_values": [] + }, + { + "id": 456, + "type": "PreviewFeature", + "pos": [ + -1265.3839111328125, + 2011.277587890625 + ], + "size": [ + 315, + 246 + ], + "flags": {}, + "order": 72, + "mode": 0, + "inputs": [ { - "name": "66 count", - "type": "INT", - "links": [ - 103 - ], - "shape": 3, - "slot_index": 3 + "name": "feature", + "type": "FEATURE", + "link": 712 } ], + "outputs": [], "properties": { - "Node name for S&R": "GetImageSizeAndCount" + "Node name for S&R": "PreviewFeature" } }, { - "id": 21, - "type": "_mfc", + "id": 368, + "type": "ParticleEmissionMask", "pos": [ - -317, - -703 + -693.0204467773438, + 992.501953125 + ], + "size": [ + 403.1999816894531, + 474 ], - "size": { - "0": 315, - "1": 150 - }, "flags": {}, - "order": 67, + "order": 84, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 30 + "name": "masks", + "type": "MASK", + "link": 582 + }, + { + "name": "emitters", + "type": "PARTICLE_EMITTER", + "link": 583 + }, + { + "name": "vortices", + "type": "VORTEX", + "link": null, + "shape": 7 + }, + { + "name": "wells", + "type": "GRAVITY_WELL", + "link": null, + "shape": 7 + }, + { + "name": "static_bodies", + "type": "STATIC_BODY", + "link": null, + "shape": 7 } ], "outputs": [ @@ -3202,295 +3620,364 @@ "name": "MASK", "type": "MASK", "links": [ - 200 + 599 ], - "shape": 3, "slot_index": 0 }, { "name": "IMAGE", "type": "IMAGE", - "links": null, - "shape": 3 + "links": [ + 586, + 657 + ], + "slot_index": 1 } ], "properties": { - "Node name for S&R": "_mfc" + "Node name for S&R": "ParticleEmissionMask" }, "widgets_values": [ + 1, + false, 0, 0, + 4134, + 4, 0, - 0 + 0, + 0, + 0, + 25, + 0, + false, + 1, + 1 ] }, { - "id": 114, - "type": "Note", + "id": 380, + "type": "GetNode", "pos": [ - 71, - -1074 + -469.8435974121094, + 1628.504150390625 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 484.20526123046875, - "1": 158.15316772460938 - }, "flags": {}, - "order": 27, + "order": 23, "mode": 0, - "properties": { - "text": "" - }, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 598 + ], + "slot_index": 0 + } + ], + "title": "Get_emptyimg", + "properties": {}, "widgets_values": [ - "see above for additional example configuration of this node that i left behind. You can do a lot" + "emptyimg" ], - "color": "#432", - "bgcolor": "#653" + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 25, - "type": "MaskToImage", + "id": 389, + "type": "GetNode", "pos": [ - 595, - -1044 + 2255.14404296875, + 1059.994873046875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 210, - "1": 26 - }, "flags": {}, - "order": 93, + "order": 24, "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 207 - } - ], + "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 37 + 611, + 714 ], - "shape": 3, "slot_index": 0 } ], - "properties": { - "Node name for S&R": "MaskToImage" - } + "title": "Get_time_feat", + "properties": {}, + "widgets_values": [ + "time_feat" + ] }, { - "id": 117, - "type": "Note", + "id": 393, + "type": "FeatureToLatentKeyframe", "pos": [ - 180, - 232 + 2547.439453125, + 1037.183349609375 + ], + "size": [ + 302.3999938964844, + 56.64799880981445 ], - "size": { - "0": 565.3340454101562, - "1": 455.6415710449219 - }, "flags": {}, - "order": 28, + "order": 51, "mode": 0, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 611 + }, + { + "name": "prev_latent_kf", + "type": "LATENT_KEYFRAME", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LATENT_KEYFRAME", + "type": "LATENT_KEYFRAME", + "links": [ + 622 + ], + "slot_index": 0 + } + ], "properties": { - "text": "" + "Node name for S&R": "FeatureToLatentKeyframe" }, - "widgets_values": [ - "0. In this workflow we demonstrate a way to use FlexMaskDepthChamber, and FlexImageParallax, both introduced by my node pack. We also have a look at one of the ways to use a TimeFeature\n\nBe sure to click the \"?\" icons for information about the nodes\n\nGive her a star https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside\n\nFor other tutorials https://civitai.com/user/ryanontheinside" - ], - "color": "#432", - "bgcolor": "#653" + "widgets_values": [] }, { - "id": 173, - "type": "GetImageSizeAndCount", + "id": 151, + "type": "ACN_AdvancedControlNetApply_v2", "pos": [ - 7108, - 435 + 2922.843994140625, + 755.8820190429688 + ], + "size": [ + 285.6000061035156, + 266 ], - "size": { - "0": 210, - "1": 86 - }, "flags": {}, - "order": 107, + "order": 93, "mode": 0, "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 442 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 443 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 218 + }, { "name": "image", "type": "IMAGE", - "link": 278 + "link": 615 + }, + { + "name": "mask_optional", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "timestep_kf", + "type": "TIMESTEP_KEYFRAME", + "link": null, + "shape": 7 + }, + { + "name": "latent_kf_override", + "type": "LATENT_KEYFRAME", + "link": 622, + "shape": 7 + }, + { + "name": "weights_override", + "type": "CONTROL_NET_WEIGHTS", + "link": null, + "shape": 7 + }, + { + "name": "vae_optional", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "image", - "type": "IMAGE", + "name": "positive", + "type": "CONDITIONING", "links": [ - 287 + 221, + 240 ], - "shape": 3, "slot_index": 0 }, { - "name": "1584 width", - "type": "INT", + "name": "negative", + "type": "CONDITIONING", "links": [ - 283 + 222, + 241 ], - "shape": 3, "slot_index": 1 - }, - { - "name": "888 height", - "type": "INT", - "links": [ - 284 - ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "66 count", - "type": "INT", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } + "Node name for S&R": "ACN_AdvancedControlNetApply_v2" + }, + "widgets_values": [ + 1, + 0, + 0.5 + ] }, { - "id": 175, - "type": "Reroute", + "id": 457, + "type": "PreviewFeature", "pos": [ - 2859.5948525759013, - -35.33431721779152 + 2619.355224609375, + 1220.130126953125 ], "size": [ - 75, - 26 + 315, + 246 ], "flags": {}, - "order": 48, + "order": 52, "mode": 0, "inputs": [ { - "name": "", - "type": "*", - "link": 311 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 289 - ], - "slot_index": 0 + "name": "feature", + "type": "FEATURE", + "link": 714 } ], + "outputs": [], "properties": { - "showOutputText": false, - "horizontal": false + "Node name for S&R": "PreviewFeature" } }, { - "id": 150, + "id": 381, "type": "VHS_VideoCombine", "pos": [ - 10530.386098469018, - 294.75074584506234 + 1104.239013671875, + 1549.1685791015625 ], "size": [ - 210, - 686.1875 + 399.9459228515625, + 601.2973022460938 ], "flags": {}, - "order": 118, - "mode": 4, + "order": 90, + "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 242 + "link": 600 }, { "name": "audio", "type": "AUDIO", - "link": null + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ { "name": "Filenames", "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "links": null } ], "properties": { "Node name for S&R": "VHS_VideoCombine" }, "widgets_values": { - "frame_rate": 20, - "loop_count": 16, + "frame_rate": 30, + "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", "crf": 19, - "save_metadata": false, + "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03289.mp4", + "filename": "AnimateDiff_02498-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 20 - } + "frame_rate": 30, + "workflow": "AnimateDiff_02498.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02498-audio.mp4" + }, + "muted": false } } }, { - "id": 153, + "id": 392, "type": "FeatureMixer", "pos": [ - 9464, - 573 + 738.8497314453125, + -901.0776977539062 + ], + "size": [ + 315, + 322 ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, "flags": {}, - "order": 115, - "mode": 4, + "order": 54, + "mode": 0, "inputs": [ { "name": "feature", "type": "FEATURE", - "link": 249 + "link": 606 } ], "outputs": [ @@ -3498,19 +3985,9 @@ "name": "FEATURE", "type": "FEATURE", "links": [ - 251 + 607 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 250 - ], - "shape": 3, - "slot_index": 1 } ], "properties": { @@ -3528,315 +4005,266 @@ 0, 1, 0.5, - false + true ] }, { - "id": 145, - "type": "FlexImageParallax", + "id": 385, + "type": "FeatureToMask", "pos": [ - 10091, - 273 + 1145.3167724609375, + -895.9004516601562 + ], + "size": [ + 315, + 26 ], - "size": { - "0": 315, - "1": 238 - }, "flags": {}, - "order": 116, - "mode": 4, + "order": 65, + "mode": 0, "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 247 - }, { "name": "feature", "type": "FEATURE", - "link": 251 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 241 - }, - { - "name": "depth_map", - "type": "IMAGE", - "link": 237 + "link": 607 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "MASK", + "type": "MASK", "links": [ - 242 + 608, + 616 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "FlexImageParallax" + "Node name for S&R": "FeatureToMask" }, - "widgets_values": [ - 1, - 0, - "shift_x", - "relative", - 0.01, - 0 - ] + "widgets_values": [] }, { - "id": 149, - "type": "TimeFeatureNode", + "id": 20, + "type": "CreateHookLora", "pos": [ - 9472, - 377 + 819.4852294921875, + -320.58843994140625 + ], + "size": [ + 291.2920837402344, + 106 ], - "size": { - "0": 317.4000244140625, - "1": 150 - }, "flags": {}, - "order": 114, - "mode": 4, + "order": 39, + "mode": 0, "inputs": [ { - "name": "video_frames", - "type": "IMAGE", - "link": 239 + "name": "prev_hooks", + "type": "HOOKS", + "link": 121, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "HOOKS", + "type": "HOOKS", "links": [ - 249 + 52 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", - "links": [ - 241 - ], - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "TimeFeatureNode" + "Node name for S&R": "CreateHookLora" }, "widgets_values": [ - 20, - "accelerate", - 0.1, - 0.3 + "ral-chrome-sd15.safetensors", + 1.1, + 1 ] }, { - "id": 155, - "type": "Note", + "id": 141, + "type": "GetNode", "pos": [ - 9936, - 87 + 3479.455810546875, + 255.44334411621094 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 434.9312438964844, - "1": 112.82051086425781 - }, "flags": {}, - "order": 29, - "mode": 4, - "properties": { - "text": "" - }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 292 + ], + "slot_index": 0 + } + ], + "title": "Get_init_latent", + "properties": {}, "widgets_values": [ - "optionally, add parallax for additional rub. To accomplish this, we get new depth maps that include everything the AI generated" + "init_latent" ], - "color": "#432", - "bgcolor": "#653" + "color": "#323", + "bgcolor": "#535" }, { - "id": 147, - "type": "GetNode", - "pos": { - "0": 9467, - "1": 245, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 10, + "type": "VAELoader", + "pos": [ + 3606.709228515625, + 477.11724853515625 + ], + "size": [ + 315, + 58 + ], "flags": {}, - "order": 30, - "mode": 4, + "order": 26, + "mode": 0, "inputs": [], "outputs": [ { - "name": "DAMODEL", - "type": "DAMODEL", + "name": "VAE", + "type": "VAE", "links": [ - 235 + 8 ], "slot_index": 0 } ], - "title": "Get_DA_MODEL", - "properties": {}, + "properties": { + "Node name for S&R": "VAELoader" + }, "widgets_values": [ - "DA_MODEL" + "vaeFtMse840000EmaPruned_vae.safetensors" ] }, { - "id": 174, - "type": "ImageScale", + "id": 23, + "type": "KSampler", "pos": [ - 7596, + 3642.17431640625, + -123.67857360839844 + ], + "size": [ + 315, 262 ], - "size": { - "0": 315, - "1": 130 - }, "flags": {}, - "order": 108, + "order": 95, "mode": 0, "inputs": [ { - "name": "image", - "type": "IMAGE", - "link": 292 + "name": "model", + "type": "MODEL", + "link": 545 }, { - "name": "width", - "type": "INT", - "link": 283, - "widget": { - "name": "width" - } + "name": "positive", + "type": "CONDITIONING", + "link": 221 }, { - "name": "height", - "type": "INT", - "link": 284, - "widget": { - "name": "height" - } + "name": "negative", + "type": "CONDITIONING", + "link": 222 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 292 } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 285 + 7 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "ImageScale" + "Node name for S&R": "KSampler" }, "widgets_values": [ - "nearest-exact", - 512, - 512, - "disabled" + 12345678, + "fixed", + 8, + 1.2, + "lcm", + "sgm_uniform", + 1 ] }, { - "id": 170, - "type": "ImageCompositeMasked", + "id": 404, + "type": "UpscaleModelLoader", "pos": [ - 7981, - 278 + 4606.60595703125, + -22.947595596313477 + ], + "size": [ + 315, + 58 ], - "size": { - "0": 315, - "1": 146 - }, "flags": {}, - "order": 109, + "order": 27, "mode": 0, - "inputs": [ - { - "name": "destination", - "type": "IMAGE", - "link": 285 - }, - { - "name": "source", - "type": "IMAGE", - "link": 287 - }, - { - "name": "mask", - "type": "MASK", - "link": 274 - } - ], + "inputs": [], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", "links": [ - 295 - ], - "shape": 3, - "slot_index": 0 + 624 + ] } ], "properties": { - "Node name for S&R": "ImageCompositeMasked" + "Node name for S&R": "UpscaleModelLoader" }, "widgets_values": [ - 0, - 0, - false + "RealESRGAN_x2.pth" ] }, { - "id": 112, + "id": 403, "type": "ImageUpscaleWithModel", "pos": [ - 8851, - 407 + 4600.28125, + 112.83490753173828 + ], + "size": [ + 340.20001220703125, + 46 ], - "size": { - "0": 241.79998779296875, - "1": 46 - }, "flags": {}, - "order": 111, - "mode": 4, + "order": 98, + "mode": 0, "inputs": [ { "name": "upscale_model", "type": "UPSCALE_MODEL", - "link": 175, - "slot_index": 0 + "link": 624 }, { "name": "image", "type": "IMAGE", - "link": 298 + "link": 623 } ], "outputs": [ @@ -3844,200 +4272,216 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 177, - 247, - 248 + 627 ], - "shape": 3, "slot_index": 0 } ], "properties": { "Node name for S&R": "ImageUpscaleWithModel" - } + }, + "widgets_values": [] }, { - "id": 82, - "type": "ImageResizeKJ", + "id": 406, + "type": "VAEEncode", "pos": [ - -3662, - -585 + 4984.15869140625, + -24.93491554260254 + ], + "size": [ + 210, + 46 ], - "size": { - "0": 310.7047424316406, - "1": 238 - }, "flags": {}, - "order": 61, + "order": 99, "mode": 0, "inputs": [ { - "name": "image", + "name": "pixels", "type": "IMAGE", - "link": 122 + "link": 627 }, { - "name": "get_image_size", - "type": "IMAGE", + "name": "vae", + "type": "VAE", "link": null - }, - { - "name": "width_input", - "type": "INT", - "link": null, - "widget": { - "name": "width_input" - } - }, - { - "name": "height_input", - "type": "INT", - "link": null, - "widget": { - "name": "height_input" - } } ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 302 + 628 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "ImageResizeKJ" + "Node name for S&R": "VAEEncode" }, - "widgets_values": [ - 960, - 960, - "lanczos", - true, - 2, - 0, - 0, - "disabled" - ] + "widgets_values": [] }, { - "id": 77, - "type": "GetNode", - "pos": { - "0": 1038, - "1": 291, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 160, + "type": "KSampler", + "pos": [ + 5306.71923828125, + -300.3212890625 + ], + "size": [ + 315, + 262 + ], "flags": {}, - "order": 31, + "order": 100, "mode": 0, - "inputs": [], + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 546 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 240 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 241 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 628 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "LATENT", + "type": "LATENT", "links": [ - 310, - 311 + 235 ], "slot_index": 0 } ], - "title": "Get_init_images_resize", - "properties": {}, + "properties": { + "Node name for S&R": "KSampler" + }, "widgets_values": [ - "init_images_resize" + 12345678, + "fixed", + 6, + 1.2, + "lcm", + "sgm_uniform", + 0.25 ] }, { - "id": 146, - "type": "SetNode", - "pos": { - "0": -2248, - "1": -579, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 156, + "type": "VHS_VideoCombine", + "pos": [ + 6032.91015625, + -381.8001403808594 + ], + "size": [ + 399.9459228515625, + 601.2973022460938 + ], "flags": {}, - "order": 43, + "order": 102, "mode": 0, "inputs": [ { - "name": "DAMODEL", - "type": "DAMODEL", - "link": 234 + "name": "images", + "type": "IMAGE", + "link": 237 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "*", - "type": "*", + "name": "Filenames", + "type": "VHS_FILENAMES", "links": null } ], - "title": "Set_DA_MODEL", "properties": { - "previousName": "DA_MODEL" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - "DA_MODEL" - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02505-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02505.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02505-audio.mp4" + }, + "muted": false + } + } }, { - "id": 111, - "type": "ImageCASharpening+", + "id": 428, + "type": "ImageScaleToTarget", "pos": [ - 8503, - 537 + 7180.02685546875, + -600.3045654296875 + ], + "size": [ + 415.8000183105469, + 102 ], - "size": { - "0": 310.79998779296875, - "1": 58 - }, "flags": {}, - "order": 110, + "order": 103, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", - "link": 295 + "link": 660 + }, + { + "name": "target_image", + "type": "IMAGE", + "link": 661 } ], "outputs": [ @@ -4045,2585 +4489,2350 @@ "name": "IMAGE", "type": "IMAGE", "links": [ - 298 + 662 ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "ImageCASharpening+" + "Node name for S&R": "ImageScaleToTarget" }, "widgets_values": [ - 0.8 + "nearest-exact", + "disabled" ] }, { - "id": 76, - "type": "SetNode", - "pos": { - "0": -3176, - "1": -583, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, + "id": 427, + "type": "GetNode", + "pos": [ + 6819.43798828125, + -628.445556640625 + ], + "size": [ + 210, + 58 + ], "flags": {}, - "order": 69, + "order": 28, "mode": 0, - "inputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "link": 302 - } - ], + "inputs": [], "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [ - 317 + 660 ], "slot_index": 0 } ], - "title": "Set_init_images_resize", - "properties": { - "previousName": "init_images_resize" - }, - "widgets_values": [ - "init_images_resize" - ] - }, - { - "id": 71, - "type": "Note", - "pos": [ - -1248, - -1189 - ], - "size": { - "0": 344.94537353515625, - "1": 142.8384552001953 - }, - "flags": {}, - "order": 32, - "mode": 0, - "properties": { - "text": "" - }, + "title": "Get_emptyimg", + "properties": {}, "widgets_values": [ - "3. motion feature fine tuned for my input video" + "emptyimg" ], - "color": "#432", - "bgcolor": "#653" + "color": "#2a363b", + "bgcolor": "#3f5159" }, { - "id": 185, - "type": "SetNode", - "pos": { - "0": -4268, - "1": -803, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 51, - "mode": 0, - "inputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "link": 322 - } + "id": 458, + "type": "UpscaleModelLoader", + "pos": [ + 8682.73828125, + -493.5846862792969 ], - "outputs": [ - { - "name": "*", - "type": "*", - "links": null - } + "size": [ + 315, + 58 ], - "title": "Set_audio", - "properties": { - "previousName": "audio" - }, - "widgets_values": [ - "audio" - ] - }, - { - "id": 186, - "type": "GetNode", - "pos": { - "0": 525.7615966796875, - "1": -1262.3212890625, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, "flags": {}, - "order": 33, + "order": 29, "mode": 0, "inputs": [], "outputs": [ { - "name": "AUDIO", - "type": "AUDIO", + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", "links": [ - 323 + 715 ], "slot_index": 0 } ], - "title": "Get_audio", - "properties": {}, + "properties": { + "Node name for S&R": "UpscaleModelLoader" + }, "widgets_values": [ - "audio" + "RealESRGAN_x2.pth" ] }, { - "id": 184, - "type": "FeatureSmoothing", + "id": 459, + "type": "ImageUpscaleWithModel", "pos": [ - -1444, - -757 + 8942.4462890625, + -385.1019287109375 + ], + "size": [ + 340.20001220703125, + 46 ], - "size": { - "0": 367.79998779296875, - "1": 174 - }, "flags": {}, - "order": 84, + "order": 108, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 318 + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 715 + }, + { + "name": "image", + "type": "IMAGE", + "link": 716 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 319 + 717 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": null, - "shape": 3 } ], "properties": { - "Node name for S&R": "FeatureSmoothing" - }, - "widgets_values": [ - "moving_average", - 21, - 0.3, - 0.1, - false - ] + "Node name for S&R": "ImageUpscaleWithModel" + } }, { - "id": 24, + "id": 435, "type": "VHS_VideoCombine", "pos": [ - 594, - -1072 + 9112.9189453125, + -201.974609375 ], "size": [ - 210, - 431 + 399.9459228515625, + 601.2973022460938 ], "flags": {}, - "order": 95, + "order": 109, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 37 + "link": 717 }, { "name": "audio", "type": "AUDIO", - "link": 323 + "link": null, + "shape": 7 }, { "name": "meta_batch", "type": "VHS_BatchManager", - "link": null + "link": null, + "shape": 7 }, { "name": "vae", "type": "VAE", - "link": null + "link": null, + "shape": 7 } ], "outputs": [ { "name": "Filenames", "type": "VHS_FILENAMES", - "links": null, - "shape": 3 + "links": null } ], "properties": { "Node name for S&R": "VHS_VideoCombine" }, "widgets_values": { - "frame_rate": 15, + "frame_rate": 30, "loop_count": 0, "filename_prefix": "AnimateDiff", "format": "video/h264-mp4", "pix_fmt": "yuv420p", - "crf": 14, + "crf": 19, "save_metadata": true, + "trim_to_audio": false, "pingpong": false, "save_output": true, "videopreview": { "hidden": false, "paused": false, "params": { - "filename": "AnimateDiff_03410-audio.mp4", + "filename": "AnimateDiff_02507-audio.mp4", "subfolder": "", "type": "output", "format": "video/h264-mp4", - "frame_rate": 15 - } + "frame_rate": 30, + "workflow": "AnimateDiff_02507.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02507-audio.mp4" + }, + "muted": false } } }, { - "id": 179, - "type": "VHS_LoadVideo", + "id": 72, + "type": "PreviewAudio", "pos": [ - -4599, - -919 + -2489.999755859375, + -1201.3414306640625 ], "size": [ - 235.1999969482422, - 397.112556422034 + 315, + 76.00001525878906 ], "flags": {}, - "order": 34, + "order": 44, "mode": 0, "inputs": [ { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null + "name": "audio", + "type": "AUDIO", + "link": 122 } ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewAudio" + }, + "widgets_values": [ + null + ] + }, + { + "id": 472, + "type": "VHS_LoadAudioUpload", + "pos": [ + -3011.373291015625, + -1948.1092529296875 + ], + "size": [ + 243.818359375, + 130 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [], "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 300, - 301 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "frame_count", - "type": "INT", - "links": null, - "shape": 3 - }, { "name": "audio", "type": "AUDIO", "links": [ - 322 + 734 ], - "shape": 3, - "slot_index": 2 - }, - { - "name": "video_info", - "type": "VHS_VIDEOINFO", - "links": null, + "slot_index": 0, "shape": 3 } ], "properties": { - "Node name for S&R": "VHS_LoadVideo" + "Node name for S&R": "VHS_LoadAudioUpload" }, "widgets_values": { - "video": "motion3.mp4", - "force_rate": 15, - "force_size": "Disabled", - "custom_width": 512, - "custom_height": 512, - "frame_load_cap": 0, - "skip_first_frames": 6, - "select_every_nth": 1, - "choose video to upload": "image", - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "frame_load_cap": 0, - "skip_first_frames": 6, - "force_rate": 15, - "filename": "motion3.mp4", - "type": "input", - "format": "video/mp4", - "select_every_nth": 1 - } - } + "audio": "Vesuvius.mp3", + "start_time": 26.5, + "duration": 53.480000000000004, + "choose audio to upload": "image" } }, { - "id": 42, - "type": "CR LoRA Stack", + "id": 474, + "type": "PreviewAudio", "pos": [ - 1110, - 683 + -2386.065673828125, + -1927.843017578125 + ], + "size": [ + 315, + 76 ], - "size": { - "0": 315, - "1": 342 - }, "flags": {}, - "order": 35, + "order": 53, "mode": 0, "inputs": [ { - "name": "lora_stack", - "type": "LORA_STACK", - "link": null - } - ], - "outputs": [ - { - "name": "LORA_STACK", - "type": "LORA_STACK", - "links": [ - 62 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "show_help", - "type": "STRING", - "links": null, - "shape": 3 + "name": "audio", + "type": "AUDIO", + "link": 734 } ], + "outputs": [], "properties": { - "Node name for S&R": "CR LoRA Stack" + "Node name for S&R": "PreviewAudio" }, "widgets_values": [ - "On", - "AnimateLCM_sd15_t2v_lora.safetensors", - 1, - 1, - "On", - "add_detail.safetensors", - 1, - 1, - "On", - "ral-acidzlime-sd15.safetensors", - 1, - 1 + null ] }, { - "id": 6, - "type": "CLIPTextEncode", + "id": 391, + "type": "GetNode", "pos": [ - 1942, - 483 + 386.7666320800781, + -900.653076171875 + ], + "size": [ + 210, + 58 ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, "flags": {}, - "order": 64, + "order": 31, "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 63 - } - ], + "inputs": [], "outputs": [ { - "name": "CONDITIONING", - "type": "CONDITIONING", + "name": "FEATURE", + "type": "FEATURE", "links": [ - 85 + 606, + 735 ], "slot_index": 0 } ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, + "title": "Get_time_feat", + "properties": {}, "widgets_values": [ - "a masterpiece, slime, ral-acidzlime, infectious flow, disease, puss, blister, green liquid" + "time_feat" ] }, { - "id": 183, - "type": "FeatureMath", + "id": 430, + "type": "VHS_VideoCombine", "pos": [ - -1143, - -480 + 8167.59130859375, + 113.70626831054688 + ], + "size": [ + 399.9459228515625, + 601.2973022460938 ], - "size": { - "0": 367.79998779296875, - "1": 126 - }, "flags": {}, - "order": 88, + "order": 107, "mode": 0, "inputs": [ { - "name": "feature", - "type": "FEATURE", - "link": 319 + "name": "images", + "type": "IMAGE", + "link": 666 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", - "links": [], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 320 - ], - "shape": 3, - "slot_index": 1 + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null } ], "properties": { - "Node name for S&R": "FeatureMath" + "Node name for S&R": "VHS_VideoCombine" }, - "widgets_values": [ - 0.3, - "subtract", - false - ] + "widgets_values": { + "frame_rate": 30, + "loop_count": 0, + "filename_prefix": "AnimateDiff", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": true, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "AnimateDiff_02506-audio.mp4", + "subfolder": "", + "type": "output", + "format": "video/h264-mp4", + "frame_rate": 30, + "workflow": "AnimateDiff_02506.png", + "fullpath": "/runpod-volume/ComfyUI_rv/output/AnimateDiff_02506-audio.mp4" + }, + "muted": false + } + } }, { - "id": 180, - "type": "MotionFeatureNode", + "id": 425, + "type": "AdvancedLuminanceMask", "pos": [ - -1448, - -993 + 7429.662109375, + 38.53061294555664 ], "size": [ - 316.99615354233515, + 415.8000183105469, 174 ], "flags": {}, - "order": 74, + "order": 105, "mode": 0, "inputs": [ { - "name": "video_frames", + "name": "image", "type": "IMAGE", - "link": 317 + "link": 737 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "MASK", + "type": "MASK", "links": [ - 315, - 330 + 664 ], - "shape": 3, "slot_index": 0 }, { - "name": "FEATURE_PIPE", - "type": "FEATURE_PIPE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 314 + 666 ], - "shape": 3 + "slot_index": 1 } ], "properties": { - "Node name for S&R": "MotionFeatureNode" + "Node name for S&R": "AdvancedLuminanceMask" }, "widgets_values": [ - 15, - "mean_motion", - "Farneback", - 0, - 0 + 0.14, + 5, + 0.5, + 10, + 0.3 ] }, { - "id": 182, - "type": "PreviewImage", + "id": 449, + "type": "FlexImageBloom", "pos": [ - -130, - -279 + 7006.68505859375, + -96.16691589355469 ], "size": [ - 1047.4993309554536, - 512.3371554142797 + 327.5999755859375, + 334 ], "flags": {}, - "order": 90, + "order": 104, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 320 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 181, - "type": "FeatureMixer", - "pos": [ - -1077, - -983 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 80, - "mode": 4, - "inputs": [ + "link": 700 + }, { - "name": "feature", + "name": "opt_feature", "type": "FEATURE", - "link": 315 + "link": 701, + "shape": 7 + }, + { + "name": "opt_normal_map", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "opt_mask", + "type": "MASK", + "link": null, + "shape": 7 } ], "outputs": [ { - "name": "FEATURE", - "type": "FEATURE", + "name": "IMAGE", + "type": "IMAGE", "links": [ - 318 + 702, + 737 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 } ], "properties": { - "Node name for S&R": "FeatureMixer" + "Node name for S&R": "FlexImageBloom" }, "widgets_values": [ - 1.7, - 0.3, - 1.7, - 1, - 1, - 1, 1, 0, - 0.3, - 1, + "intensity", + "relative", + 0.7, + 10, 0.5, - false + 4, + 0.2, + 1.2 ] }, { - "id": 190, - "type": "FeatureSmoothing", + "id": 434, + "type": "GetNode", "pos": [ - -1694, - -508 + 6697.58203125, + 46.34690475463867 ], "size": [ - 368.7515202084385, - 174 + 210, + 58 ], "flags": {}, - "order": 85, + "order": 32, "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 331 - } - ], + "inputs": [], "outputs": [ { "name": "FEATURE", "type": "FEATURE", "links": [ - 332 + 701 ], - "shape": 3, "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "shape": 3 } ], - "properties": { - "Node name for S&R": "FeatureSmoothing" - }, + "title": "Get_kifck_feature", + "properties": {}, "widgets_values": [ - "moving_average", - 3, - 0.3, - 0.1, - false + "kifck_feature" ] }, { - "id": 127, - "type": "FlexMaskDepthChamber", + "id": 353, + "type": "ADE_MultivalDynamic", "pos": [ - 105, - -839 + 2767.11328125, + -424.7257995605469 + ], + "size": [ + 259.9388122558594, + 63.332008361816406 ], - "size": { - "0": 344.3999938964844, - "1": 310 - }, "flags": {}, - "order": 91, + "order": 66, "mode": 0, "inputs": [ { - "name": "masks", + "name": "mask_optional", "type": "MASK", - "link": 200 - }, - { - "name": "feature", - "type": "FEATURE", - "link": 334 - }, - { - "name": "feature_pipe", - "type": "FEATURE_PIPE", - "link": 314 + "link": null, + "shape": 7 }, { - "name": "depth_map", - "type": "IMAGE", - "link": 203 + "name": "float_val", + "type": "FLOAT", + "link": 736, + "widget": { + "name": "float_val" + } } ], "outputs": [ { - "name": "MASK", - "type": "MASK", + "name": "MULTIVAL", + "type": "MULTIVAL", "links": [ - 207, - 307 + 539 ], - "shape": 3, - "slot_index": 0 + "slot_index": 0, + "shape": 3 } ], + "title": "Scale 🎭🅐🅓", "properties": { - "Node name for S&R": "FlexMaskDepthChamber" + "Node name for S&R": "ADE_MultivalDynamic", + "ttNbgOverride": { + "color": "#2a363b", + "bgcolor": "#3f5159", + "groupcolor": "#3f789e" + } }, "widgets_values": [ - 1, - false, - 0, - 0, - 0, - 0.03, - 0, - "z_front", - "move_forward" + 1.1400000000000001 ] }, { - "id": 41, - "type": "LoadImage", + "id": 475, + "type": "FeatureToFlexFloatParam", "pos": [ - 4072.911603734174, - 274.6610030536769 + 2711.660400390625, + -715.4929809570312 + ], + "size": [ + 466.1999816894531, + 106 ], - "size": { - "0": 315, - "1": 314.0000305175781 - }, "flags": {}, - "order": 36, - "mode": 0, + "order": 55, + "mode": 4, + "inputs": [ + { + "name": "feature", + "type": "FEATURE", + "link": 735 + } + ], "outputs": [ { - "name": "IMAGE", - "type": "IMAGE", + "name": "PARAMETER", + "type": "FLOAT", "links": [ - 97 + 736 ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "paintFractal.jpg", - "image" - ] - }, - { - "id": 26, - "type": "IPAdapterAdvanced", - "pos": [ - 4798, - 303 - ], - "size": { - "0": 315, - "1": 278 - }, - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 57 - }, - { - "name": "ipadapter", - "type": "IPADAPTER", - "link": 58 - }, - { - "name": "image", - "type": "IMAGE", - "link": 98, - "slot_index": 2 - }, - { - "name": "image_negative", - "type": "IMAGE", - "link": null - }, - { - "name": "attn_mask", - "type": "MASK", - "link": null - }, - { - "name": "clip_vision", - "type": "CLIP_VISION", - "link": null - } - ], - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 66, - 112 - ], - "shape": 3, "slot_index": 0 } ], "properties": { - "Node name for S&R": "IPAdapterAdvanced" + "Node name for S&R": "FeatureToFlexFloatParam" }, "widgets_values": [ - 1, - "style transfer", - "concat", - 0, - 1, - "V only" - ] - }, - { - "id": 193, - "type": "GetNode", - "pos": { - "0": 5859.99267578125, - "1": 609.7716064453125, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 37, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 335 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" - ] - }, - { - "id": 13, - "type": "VHS_VideoCombine", - "pos": [ - 6206, - 403 - ], - "size": [ - 210, - 430 - ], - "flags": {}, - "order": 103, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 335 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 15, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": true, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03411-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 15 - } - } - } - }, - { - "id": 3, - "type": "KSampler", - "pos": [ - 5463, - 294 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 100, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 66 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 140 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 142 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 68 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 100, - 246 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 156680208700286, - "fixed", - 8, - 1, - "lcm", - "sgm_uniform", - 0.65 - ] - }, - { - "id": 191, - "type": "FeatureMixer", - "pos": [ - -2134, - -485 - ], - "size": { - "0": 367.79998779296875, - "1": 342 - }, - "flags": {}, - "order": 81, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 330 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 331 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMixer" - }, - "widgets_values": [ - 1.5, - 0.3, - 1.7, - 1, - 1, - 1, - 1, - 0, - 0.3, - 1, - 0.5, - false - ] - }, - { - "id": 188, - "type": "PreviewImage", - "pos": [ - -1079, - -184 - ], - "size": { - "0": 1047.4993896484375, - "1": 512.337158203125 - }, - "flags": {}, - "order": 92, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 333 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 192, - "type": "FeatureMath", - "pos": [ - -1542, - -256 - ], - "size": { - "0": 367.79998779296875, - "1": 126 - }, - "flags": {}, - "order": 89, - "mode": 0, - "inputs": [ - { - "name": "feature", - "type": "FEATURE", - "link": 332 - } - ], - "outputs": [ - { - "name": "FEATURE", - "type": "FEATURE", - "links": [ - 334 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "FEATURE_VISUALIZATION", - "type": "IMAGE", - "links": [ - 333 - ], - "shape": 3, - "slot_index": 1 - } - ], - "properties": { - "Node name for S&R": "FeatureMath" - }, - "widgets_values": [ - 0.3, - "subtract", - false - ] - }, - { - "id": 177, - "type": "GetImageSizeAndCount", - "pos": [ - 7343, - -155 - ], - "size": { - "0": 210, - "1": 86 - }, - "flags": {}, - "order": 68, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 291 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 292 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "960 width", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "540 height", - "type": "INT", - "links": null, - "shape": 3 - }, - { - "name": "66 count", - "type": "INT", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "GetImageSizeAndCount" - } - }, - { - "id": 176, - "type": "Reroute", - "pos": [ - 7200, - -26 - ], - "size": [ - 75, - 26 - ], - "flags": {}, - "order": 60, - "mode": 0, - "inputs": [ - { - "name": "", - "type": "*", - "link": 289 - } - ], - "outputs": [ - { - "name": "", - "type": "IMAGE", - "links": [ - 291 - ], - "slot_index": 0 - } - ], - "properties": { - "showOutputText": false, - "horizontal": false - } - }, - { - "id": 81, - "type": "VHS_VideoCombine", - "pos": [ - 9117, - 285 - ], - "size": [ - 210, - 431 - ], - "flags": {}, - "order": 112, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 177 - }, - { - "name": "audio", - "type": "AUDIO", - "link": 336 - }, - { - "name": "meta_batch", - "type": "VHS_BatchManager", - "link": null - }, - { - "name": "vae", - "type": "VAE", - "link": null - } - ], - "outputs": [ - { - "name": "Filenames", - "type": "VHS_FILENAMES", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VHS_VideoCombine" - }, - "widgets_values": { - "frame_rate": 20, - "loop_count": 0, - "filename_prefix": "AnimateDiff", - "format": "video/h264-mp4", - "pix_fmt": "yuv420p", - "crf": 19, - "save_metadata": false, - "pingpong": false, - "save_output": true, - "videopreview": { - "hidden": false, - "paused": false, - "params": { - "filename": "AnimateDiff_03414-audio.mp4", - "subfolder": "", - "type": "output", - "format": "video/h264-mp4", - "frame_rate": 20 - } - } - } - }, - { - "id": 194, - "type": "GetNode", - "pos": { - "0": 8749, - "1": 664, - "2": 0, - "3": 0, - "4": 0, - "5": 0, - "6": 0, - "7": 0, - "8": 0, - "9": 0 - }, - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 38, - "mode": 0, - "inputs": [], - "outputs": [ - { - "name": "AUDIO", - "type": "AUDIO", - "links": [ - 336 - ], - "slot_index": 0 - } - ], - "title": "Get_audio", - "properties": {}, - "widgets_values": [ - "audio" + false, + 1.1300000000000001, + 1.35 ] } ], "links": [ [ + 1, + 21, + 0, + 2, + 0, + "CLIP" + ], + [ + 3, + 21, + 0, + 4, + 0, + "CLIP" + ], + [ + 7, + 23, + 0, + 9, + 0, + "LATENT" + ], + [ + 8, + 10, + 0, + 9, + 1, + "VAE" + ], + [ + 9, + 12, + 0, + 11, + 0, + "CLIP" + ], + [ + 10, + 13, + 1, 12, + 0, + "CLIP" + ], + [ + 13, 4, + 0, + 16, + 0, + "CONDITIONING" + ], + [ + 14, 2, - 12, + 0, + 16, 1, - "VAE" + "CONDITIONING" ], [ - 13, - 8, + 21, + 12, 0, - 13, + 21, 0, - "IMAGE" + "CLIP" ], [ - 15, + 46, 15, 0, 14, 0, - "DAMODEL" + "MASK" ], [ - 26, + 52, 20, + 0, + 21, 1, - 19, + "HOOKS" + ], + [ + 97, + 16, 0, - "INT" + 17, + 0, + "CONDITIONING" ], [ - 27, - 20, + 98, + 16, + 1, + 17, + 1, + "CONDITIONING" + ], + [ + 99, + 6, + 0, + 17, 2, - 19, + "CONDITIONING" + ], + [ + 100, + 3, + 0, + 17, + 3, + "CONDITIONING" + ], + [ + 121, + 71, + 0, + 20, + 0, + "HOOKS" + ], + [ + 122, + 92, + 0, + 72, + 0, + "AUDIO" + ], + [ + 132, + 92, + 0, + 82, + 0, + "AUDIO" + ], + [ + 133, + 82, + 0, + 83, + 0, + "*" + ], + [ + 145, + 82, 1, - "INT" + 94, + 0, + "*" ], [ - 30, - 19, + 164, + 9, 0, - 21, + 110, 0, "IMAGE" ], [ - 37, - 25, + 165, + 11, 0, - 24, + 6, 0, - "IMAGE" + "CLIP" + ], + [ + 166, + 11, + 0, + 3, + 0, + "CLIP" + ], + [ + 218, + 152, + 0, + 151, + 2, + "CONTROL_NET" ], [ - 44, - 33, + 221, + 151, 0, - 28, + 23, 1, - "CONTEXT_OPTIONS" + "CONDITIONING" + ], + [ + 222, + 151, + 1, + 23, + 2, + "CONDITIONING" + ], + [ + 235, + 160, + 0, + 155, + 0, + "LATENT" + ], + [ + 236, + 157, + 0, + 155, + 1, + "VAE" ], [ - 45, - 39, + 237, + 155, + 0, + 156, + 0, + "IMAGE" + ], + [ + 240, + 151, 0, - 28, + 160, + 1, + "CONDITIONING" + ], + [ + 241, + 151, + 1, + 160, 2, - "MOTION_LORA" + "CONDITIONING" ], [ - 46, - 36, + 292, + 141, 0, - 28, + 23, 3, - "AD_SETTINGS" + "LATENT" ], [ - 47, - 29, + 442, + 17, 0, - 28, - 5, - "SAMPLE_SETTINGS" + 151, + 0, + "CONDITIONING" + ], + [ + 443, + 17, + 1, + 151, + 1, + "CONDITIONING" ], [ - 48, - 32, + 491, + 92, 0, - 28, - 6, + 321, + 1, + "AUDIO" + ], + [ + 496, + 322, + 0, + 321, + 0, + "OPEN_UNMIX_MODEL" + ], + [ + 500, + 325, + 0, + 102, + 0, + "INT" + ], + [ + 501, + 327, + 0, + 326, + 0, + "FLOAT" + ], + [ + 511, + 328, + 0, + 335, + 0, + "FEATURE" + ], + [ + 512, + 335, + 0, + 78, + 0, + "FEATURE" + ], + [ + 513, + 335, + 0, + 336, + 0, + "FEATURE" + ], + [ + 535, + 325, + 0, + 349, + 0, + "INT" + ], + [ + 536, + 354, + 0, + 355, + 2, + "CUSTOM_CFG" + ], + [ + 537, + 357, + 0, + 356, + 0, + "MOTION_MODEL_ADE" + ], + [ + 538, + 351, + 0, + 356, + 1, + "MOTION_LORA" + ], + [ + 539, + 353, + 0, + 356, + 2, "MULTIVAL" ], [ - 49, - 34, + 540, + 352, 0, - 28, - 7, + 356, + 3, "MULTIVAL" ], [ - 50, - 35, + 541, + 356, 0, - 29, + 358, + 1, + "M_MODELS" + ], + [ + 542, + 359, + 0, + 358, 2, - "CUSTOM_CFG" + "CONTEXT_OPTIONS" ], [ - 51, - 30, + 543, + 355, 0, - 29, + 358, 3, - "SIGMA_SCHEDULE" + "SAMPLE_SETTINGS" + ], + [ + 545, + 358, + 0, + 23, + 0, + "MODEL" + ], + [ + 546, + 358, + 0, + 160, + 0, + "MODEL" + ], + [ + 553, + 92, + 0, + 364, + 0, + "AUDIO" ], [ - 53, - 37, + 555, + 327, 0, - 36, - 0, - "PE_ADJUST" + 82, + 3, + "FLOAT" ], [ - 54, - 38, + 556, + 92, 0, - 36, + 184, 1, - "WEIGHT_ADJUST" + "AUDIO" ], [ - 56, - 28, + 557, + 327, 0, - 40, - 0, - "MODEL" + 328, + 1, + "FLOAT" ], [ - 57, - 40, - 0, - 26, + 558, + 325, 0, - "MODEL" + 328, + 2, + "INT" ], [ - 58, - 40, - 1, - 26, + 559, + 142, 1, - "IPADAPTER" + 328, + 3, + "INT" ], [ - 60, + 560, + 142, + 2, + 328, 4, - 0, - 43, - 0, - "MODEL" + "INT" ], [ - 61, - 4, - 1, - 43, + 561, + 327, + 0, + 329, 1, - "CLIP" + "FLOAT" ], [ - 62, - 42, + 562, + 325, 0, - 43, + 329, 2, - "LORA_STACK" - ], - [ - 63, - 43, - 1, - 6, - 0, - "CLIP" + "INT" ], [ - 64, - 43, + 563, + 142, 1, - 7, - 0, - "CLIP" + 329, + 3, + "INT" ], [ - 65, - 43, - 0, - 28, - 0, - "MODEL" + 564, + 142, + 2, + 329, + 4, + "INT" ], [ - 66, - 26, - 0, - 3, + 565, + 327, 0, - "MODEL" + 341, + 1, + "FLOAT" ], [ - 67, - 12, + 566, + 325, 0, - 44, - 0, - "LATENT" + 341, + 2, + "INT" ], [ - 68, - 44, - 0, - 3, + 567, + 142, + 1, + 341, 3, - "LATENT" - ], - [ - 76, - 48, - 0, - 47, - 0, - "CONTROL_NET" + "INT" ], [ - 80, - 56, - 0, - 55, - 0, - "CONTROL_NET" + 568, + 142, + 2, + 341, + 4, + "INT" ], [ - 81, - 57, + 569, + 327, 0, - 47, + 325, 1, - "IMAGE" + "FLOAT" ], [ - 82, - 58, + 570, + 92, 0, - 55, + 363, 1, - "IMAGE" + "AUDIO" ], [ - 83, - 47, - 0, - 55, + 579, + 325, 2, - "CONTROL_NET_STACK" - ], - [ - 84, - 55, + 365, 0, - 59, - 2, - "CONTROL_NET_STACK" + "*" ], [ - 85, - 6, + 582, + 369, 0, - 59, + 368, 0, - "CONDITIONING" + "MASK" ], [ - 86, - 7, + 583, + 370, 0, - 59, + 368, 1, - "CONDITIONING" + "PARTICLE_EMITTER" ], [ - 94, - 23, + 584, + 372, 0, - 62, - 0, - "FEATURE" + 370, + 4, + "EMITTER_MODULATION" ], [ - 95, - 62, + 586, + 368, 1, - 63, + 373, 0, "IMAGE" ], [ - 97, - 41, + 587, + 366, 0, - 64, - 0, - "IMAGE" - ], - [ - 98, - 64, + 323, 0, - 26, - 2, - "IMAGE" + "INT" ], [ - 100, - 3, + 588, + 367, 0, - 8, + 324, 0, - "LATENT" - ], - [ - 103, - 20, - 3, - 19, - 2, "INT" ], [ - 108, - 74, + 589, + 371, 0, - 20, + 374, 0, - "IMAGE" + "FEATURE" ], [ - 112, - 26, + 591, + 374, 0, - 78, + 375, 0, - "MODEL" + "FEATURE" ], [ - 121, - 78, + 592, + 321, + 1, + 376, 0, - 80, + "AUDIO" + ], + [ + 593, + 377, 0, - "LATENT" + 376, + 1, + "FREQUENCY_FILTER" ], [ - 122, - 17, + 594, + 376, 0, - 82, + 328, 0, - "IMAGE" + "AUDIO" ], [ - 128, - 17, + 595, + 378, 0, - 85, + 370, + 3, + "PARTICLE_MODULATION" + ], + [ + 597, + 371, 0, - "IMAGE" + 378, + 1, + "FEATURE" ], [ - 129, - 85, + 598, + 380, 0, - 50, + 379, 0, "IMAGE" ], [ - 130, - 85, + 599, + 368, 0, - 14, + 379, 1, + "MASK" + ], + [ + 600, + 379, + 0, + 381, + 0, "IMAGE" ], [ - 133, - 4, - 2, - 88, + 601, + 383, 0, - "*" + 382, + 4, + "INT" ], [ - 134, - 59, + 602, + 382, 0, - 89, + 384, 0, "*" ], [ - 135, - 59, - 1, - 90, + 603, + 13, + 2, + 386, 0, - "*" + "VAE" ], [ - 136, - 88, + 605, + 387, 0, - 91, + 390, 0, "*" ], [ - 137, - 91, + 606, + 391, 0, - 92, + 392, 0, - "*" + "FEATURE" ], [ - 138, - 91, + 607, + 392, 0, - 8, - 1, - "VAE" + 385, + 0, + "FEATURE" ], [ - 139, - 89, + 608, + 385, 0, - 93, + 15, 0, "*" ], [ - 140, - 93, + 611, + 389, 0, - 3, - 1, - "CONDITIONING" + 393, + 0, + "FEATURE" ], [ - 141, - 90, + 613, + 395, 0, - 94, + 387, 0, - "*" + "IMAGE" ], [ - 142, - 94, + 615, + 396, 0, + 151, 3, - 2, - "CONDITIONING" + "IMAGE" ], [ - 143, - 93, + 616, + 385, 0, - 95, + 397, 0, - "*" + "MASK" ], [ - 144, - 94, + 617, + 397, 0, - 96, + 398, 0, - "*" - ], - [ - 145, - 95, - 0, - 78, - 1, - "CONDITIONING" + "IMAGE" ], [ - 146, - 96, + 618, + 14, 0, - 78, + 16, 2, - "CONDITIONING" + "MASK" ], [ - 147, - 92, + 619, + 15, 0, - 80, - 1, - "VAE" + 17, + 4, + "MASK" ], [ - 149, - 97, - 0, - 98, + 622, + 393, 0, - "*" + 151, + 6, + "LATENT_KEYFRAME" ], [ - 150, - 98, - 0, - 99, + 623, + 9, 0, - "*" + 403, + 1, + "IMAGE" ], [ - 151, - 98, + 624, + 404, 0, - 44, - 1, - "MASK" + 403, + 0, + "UPSCALE_MODEL" ], [ - 152, - 79, + 627, + 403, 0, - 100, + 406, 0, - "LATENT" + "IMAGE" ], [ - 153, - 100, + 628, + 406, 0, - 78, + 160, 3, "LATENT" ], [ - 154, - 99, + 629, + 407, 0, - 100, + 11, 1, - "MASK" + "HOOKS" ], [ - 175, - 113, + 656, + 379, 0, - 112, + 396, 0, - "UPSCALE_MODEL" + "IMAGE" + ], + [ + 657, + 368, + 1, + 395, + 0, + "IMAGE" ], [ - 177, - 112, + 660, + 427, 0, - 81, + 428, 0, "IMAGE" ], [ - 193, - 121, + 661, + 155, + 0, + 428, 1, - 69, - 2, - "FEATURE_PIPE" + "IMAGE" ], [ - 195, - 121, + 662, + 428, 0, - 122, + 429, 0, - "FEATURE" + "IMAGE" ], [ - 196, - 122, - 1, - 123, + 664, + 425, 0, - "IMAGE" + 429, + 2, + "MASK" ], [ - 199, - 122, - 0, - 69, + 666, + 425, 1, - "FEATURE" + 430, + 0, + "IMAGE" ], [ - 200, - 21, + 692, + 13, 0, - 127, + 358, 0, - "MASK" + "MODEL" ], [ - 203, - 74, + 700, + 155, + 0, + 449, 0, - 127, - 3, "IMAGE" ], [ - 207, - 127, + 701, + 434, 0, - 25, + 449, + 1, + "FEATURE" + ], + [ + 702, + 449, 0, - "MASK" + 429, + 1, + "IMAGE" ], [ - 234, - 15, + 709, + 325, 0, - 146, + 453, 0, "*" ], [ - 235, - 147, + 710, + 374, 0, - 148, + 455, 0, - "DAMODEL" + "FEATURE" ], [ - 237, - 148, + 711, + 454, 0, - 145, - 3, - "IMAGE" + 455, + 1, + "FEATURE" ], [ - 239, - 148, + 712, + 455, 0, - 149, + 456, 0, - "IMAGE" + "FEATURE" ], [ - 241, - 149, + 713, + 455, + 0, + 372, 1, - 145, - 2, - "FEATURE_PIPE" + "FEATURE" ], [ - 242, - 145, + 714, + 389, 0, - 150, + 457, 0, - "IMAGE" + "FEATURE" ], [ - 246, - 3, + 715, + 458, 0, - 79, + 459, 0, - "LATENT" + "UPSCALE_MODEL" ], [ - 247, - 112, - 0, - 145, + 716, + 429, 0, + 459, + 1, "IMAGE" ], [ - 248, - 112, + 717, + 459, + 0, + 435, 0, - 148, - 1, "IMAGE" ], [ - 249, - 149, + 719, + 382, 0, - 153, + 461, 0, "FEATURE" ], [ - 250, - 153, - 1, - 154, + 734, + 472, 0, - "IMAGE" - ], - [ - 251, - 153, + 474, 0, - 145, - 1, - "FEATURE" + "AUDIO" ], [ - 273, - 99, + 735, + 391, 0, - 172, + 475, 0, - "*" + "FEATURE" ], [ - 274, - 172, + 736, + 475, 0, - 170, - 2, - "MASK" + 353, + 1, + "FLOAT" ], [ - 278, - 80, + 737, + 449, 0, - 173, + 425, 0, "IMAGE" ], [ - 283, - 173, - 1, - 174, + 738, + 92, + 0, + 373, 1, - "INT" + "AUDIO" ], [ - 284, - 173, - 2, - 174, + 739, + 13, 2, - "INT" + 373, + 3, + "VAE" ], [ - 285, - 174, - 0, - 170, - 0, - "IMAGE" + 740, + 13, + 2, + 387, + 1, + "VAE" ], [ - 287, - 173, + 741, + 92, 0, - 170, + 398, 1, - "IMAGE" + "AUDIO" ], [ - 289, - 175, - 0, - 176, - 0, - "*" + 742, + 13, + 2, + 398, + 3, + "VAE" ], [ - 291, - 176, - 0, - 177, + 743, + 367, 0, - "IMAGE" + 82, + 1, + "INT" ], [ - 292, - 177, - 0, - 174, + 744, + 366, 0, - "IMAGE" + 82, + 2, + "INT" ], [ - 295, - 170, + 745, + 327, 0, - 111, - 0, - "IMAGE" + 82, + 3, + "FLOAT" ], [ - 298, - 111, + 746, + 92, 0, - 112, + 110, 1, - "IMAGE" + "AUDIO" ], [ - 300, - 179, - 0, - 104, - 0, - "IMAGE" + 747, + 13, + 2, + 110, + 3, + "VAE" ], [ - 301, - 179, + 748, + 92, 0, - 17, + 325, 0, - "IMAGE" + "AUDIO" ], [ - 302, - 82, - 0, - 76, + 749, + 327, 0, - "IMAGE" + 325, + 1, + "FLOAT" ], [ - 303, - 50, - 0, - 52, + 750, + 327, 0, - "IMAGE" + 328, + 1, + "FLOAT" ], [ - 304, - 14, - 0, - 49, + 751, + 325, 0, - "IMAGE" + 328, + 2, + "INT" ], [ - 307, - 127, - 0, - 97, + 752, + 367, 0, - "*" + 328, + 3, + "INT" ], [ - 310, - 77, + 753, + 366, 0, - 12, - 0, - "IMAGE" + 328, + 4, + "INT" ], [ - 311, - 77, + 754, + 327, 0, - 175, + 382, 0, - "*" + "FLOAT" ], [ - 314, - 180, + 755, + 325, + 0, + 382, 1, - 127, - 2, - "FEATURE_PIPE" + "INT" ], [ - 315, - 180, - 0, - 181, + 756, + 367, 0, - "FEATURE" + 382, + 2, + "INT" ], [ - 317, - 76, - 0, - 180, + 757, + 366, 0, - "IMAGE" + 382, + 3, + "INT" ], [ - 318, - 181, + 758, + 327, 0, - 184, + 454, 0, - "FEATURE" + "FLOAT" ], [ - 319, - 184, + 759, + 367, 0, - 183, - 0, - "FEATURE" + 454, + 1, + "INT" ], [ - 320, - 183, - 1, - 182, + 760, + 366, 0, - "IMAGE" + 454, + 2, + "INT" ], [ - 322, - 179, + 761, + 13, 2, - 185, - 0, - "*" + 151, + 8, + "VAE" ], [ - 323, - 186, + 762, + 92, 0, - 24, + 381, 1, "AUDIO" ], [ - 330, - 180, - 0, - 191, - 0, - "FEATURE" + 763, + 13, + 2, + 381, + 3, + "VAE" ], [ - 331, - 191, - 0, - 190, - 0, - "FEATURE" + 764, + 13, + 2, + 406, + 1, + "VAE" ], [ - 332, - 190, - 0, - 192, + 765, + 92, 0, - "FEATURE" + 156, + 1, + "AUDIO" ], [ - 333, - 192, - 1, - 188, - 0, - "IMAGE" + 766, + 13, + 2, + 156, + 3, + "VAE" ], [ - 334, - 192, + 767, + 92, 0, - 127, + 435, 1, - "FEATURE" + "AUDIO" ], [ - 335, - 193, - 0, + 768, 13, - 1, - "AUDIO" + 2, + 435, + 3, + "VAE" ], [ - 336, - 194, + 769, + 92, 0, - 81, + 430, 1, "AUDIO" + ], + [ + 770, + 13, + 2, + 430, + 3, + "VAE" ] ], "groups": [ { - "title": "Load Image", - "bounding": [ - -4300, - -1104, - 1484, - 1038 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Preprocessing", - "bounding": [ - -2768, - -1096, - 1274, - 599 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Feature", - "bounding": [ - -1457, - -1093, - 796, - 787 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Depth Chamber", - "bounding": [ - -621, - -1154, - 1454, - 724 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Control net", - "bounding": [ - 952, - 1174, - 1155, - 451 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Animate Diff", - "bounding": [ - 3043, - 177, - 978, - 1075 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Sampler1", - "bounding": [ - 5166, - 173, - 1290, - 808 - ], - "color": "#3f789e", - "font_size": 24, - "locked": false - }, - { - "title": "Load Model", + "id": 1, + "title": "adiff", "bounding": [ - 949, - 177, - 2062, - 990 + 2728.06591796875, + -522.5336303710938, + 737.5508422851562, + 1053.1143798828125 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "IPAdapter", + "id": 2, + "title": "Lora Hooks", "bounding": [ - 4036, - 172, - 1094, - 815 + 354.53265380859375, + -504.6529235839844, + 2262.7509765625, + 911.8343505859375 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Sampler2", + "id": 3, + "title": "Samp1", "bounding": [ - 6480, - 176, - 881, - 421 + 3542.413330078125, + -513.3473510742188, + 935.3355712890625, + 1178.0379638671875 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Upscale", + "id": 5, + "title": "Feature Setup", "bounding": [ - 8431, - 174, - 953, - 771 + -2815.493896484375, + -1504.30322265625, + 2880.348388671875, + 2193.1171875 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Alternate configuration", + "id": 9, + "title": "samp2", "bounding": [ - -517, - -5817, - 2411, - 1839 + 4526.03466796875, + -506.889404296875, + 1970.1795654296875, + 1152.098876953125 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Alternate configuration1", + "id": 10, + "title": "ControlNet", "bounding": [ - 991, - -5410, - 1518, - 463 + 2226.50927734375, + 618.5585327148438, + 1151.9754638671875, + 539.1974487304688 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Parallax", + "id": 11, + "title": "Particles", "bounding": [ - 9412, - 173, - 1442, - 781 + -2818.41162109375, + 736.8206787109375, + 4673.5849609375, + 2001.3756103515625 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} }, { - "title": "Paste Orig", + "id": 12, + "title": "Post Processing", "bounding": [ - 7394, - 175, - 1000, - 279 + 6622.28125, + -728.579345703125, + 2882.475341796875, + 1489.9952392578125 ], "color": "#3f789e", "font_size": 24, - "locked": false + "flags": {} } ], "config": {}, "extra": { "ds": { - "scale": 0.10000000000000717, + "scale": 0.14641000000000354, "offset": [ - 6287.029647861349, - 2393.3674563680415 + 1209.8473141890438, + 2834.620425389473 ] + }, + "ue_links": [ + { + "downstream": 373, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 373, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 387, + "downstream_slot": 1, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 398, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 398, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 82, + "downstream_slot": 1, + "upstream": "367", + "upstream_slot": 0, + "controller": 324, + "type": "INT" + }, + { + "downstream": 82, + "downstream_slot": 2, + "upstream": "366", + "upstream_slot": 0, + "controller": 323, + "type": "INT" + }, + { + "downstream": 82, + "downstream_slot": 3, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 110, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 110, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 325, + "downstream_slot": 0, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 325, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 328, + "downstream_slot": 1, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 328, + "downstream_slot": 2, + "upstream": "325", + "upstream_slot": 0, + "controller": 349, + "type": "INT" + }, + { + "downstream": 328, + "downstream_slot": 3, + "upstream": "367", + "upstream_slot": 0, + "controller": 324, + "type": "INT" + }, + { + "downstream": 328, + "downstream_slot": 4, + "upstream": "366", + "upstream_slot": 0, + "controller": 323, + "type": "INT" + }, + { + "downstream": 382, + "downstream_slot": 0, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 382, + "downstream_slot": 1, + "upstream": "325", + "upstream_slot": 0, + "controller": 349, + "type": "INT" + }, + { + "downstream": 382, + "downstream_slot": 2, + "upstream": "367", + "upstream_slot": 0, + "controller": 324, + "type": "INT" + }, + { + "downstream": 382, + "downstream_slot": 3, + "upstream": "366", + "upstream_slot": 0, + "controller": 323, + "type": "INT" + }, + { + "downstream": 454, + "downstream_slot": 0, + "upstream": "327", + "upstream_slot": 0, + "controller": 326, + "type": "FLOAT" + }, + { + "downstream": 454, + "downstream_slot": 1, + "upstream": "367", + "upstream_slot": 0, + "controller": 324, + "type": "INT" + }, + { + "downstream": 454, + "downstream_slot": 2, + "upstream": "366", + "upstream_slot": 0, + "controller": 323, + "type": "INT" + }, + { + "downstream": 151, + "downstream_slot": 8, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 381, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 381, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 406, + "downstream_slot": 1, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 156, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 156, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 435, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 435, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + }, + { + "downstream": 430, + "downstream_slot": 1, + "upstream": "92", + "upstream_slot": 0, + "controller": 364, + "type": "AUDIO" + }, + { + "downstream": 430, + "downstream_slot": 3, + "upstream": "13", + "upstream_slot": 2, + "controller": 386, + "type": "VAE" + } + ], + "groupNodes": {}, + "node_versions": { + "comfy-core": "0.3.12", + "ComfyUI-AnimateDiff-Evolved": "7ec46937095048a77342aeada964e9823a2102f0", + "cg-use-everywhere": "cd06259166a6af4c054c62f540871ca09a359b50", + "ComfyUI-KJNodes": "973ceb6ca8b7525d54873805888ad690090d6b1e", + "ComfyUI-VideoHelperSuite": "6953fa21443cf55f7c3b61ed3f4c87c5d3677fe1", + "comfyui_controlnet_aux": "5a049bde9cc117dafc327cded156459289097ea1", + "ComfyUI_RyanOnTheInside": "1e09e9a149fefe2fa8794d0c351551d86de4f229", + "rgthree-comfy": "5f2d8a1d19fcb2cac6dbc933085b20c1c0a8bb9f", + "ComfyUI-Advanced-ControlNet": "9632af9dc8f9abe28431c0027411d7a6d4f6cd3e" } }, "version": 0.4 diff --git a/external_integration.py b/external_integration.py new file mode 100644 index 0000000..361d625 --- /dev/null +++ b/external_integration.py @@ -0,0 +1,88 @@ +import os + +# Variables to track the availability of external modules +alp_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "ComfyUI-AdvancedLivePortrait") +HAS_ADVANCED_LIVE_PORTRAIT = os.path.exists(alp_path) +print(f"Checking for AdvancedLivePortrait at: {alp_path}") + +acn_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "ComfyUI-Advanced-ControlNet") +HAS_ADVANCED_CONTROLNET = os.path.exists(acn_path) +print(f"Checking for Advanced-ControlNet at: {acn_path}") + +#WIP +ad_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "ComfyUI-AnimateDiff-Evolved") +HAS_ANIMATEDIFF = os.path.exists(ad_path) +print(f"Checking for AnimateDiff-Evolved at: {ad_path}") + +# HAS_ANIMATEDIFF=False + +# Conditional imports for AdvancedLivePortrait +if HAS_ADVANCED_LIVE_PORTRAIT: + try: + from .nodes.flex.flex_externals_advanced_live_portrait import FlexExpressionEditor + except Exception as e: + print(f"Error loading AdvancedLivePortrait nodes: {str(e)}") + HAS_ADVANCED_LIVE_PORTRAIT = False +else: + print( + "ComfyUI-AdvancedLivePortrait not found. " + "FlexExpressionEditor will not be available. " + "Install ComfyUI-AdvancedLivePortrait and restart ComfyUI." + ) + +# Conditional imports for Advanced-ControlNet +if HAS_ADVANCED_CONTROLNET: + try: + from .nodes.flex.flex_externals_advanced_controlnet import ( + FeatureToLatentKeyframe, + #WIP + # FeatureToTimestepKeyframe, + ) + except Exception as e: + print(f"Error loading Advanced-ControlNet feature nodes: {str(e)}") + HAS_ADVANCED_CONTROLNET = False +else: + print( + "ComfyUI-Advanced-ControlNet not found. " + "Advanced-ControlNet feature nodes will not be available. " + "Install ComfyUI-Advanced-ControlNet and restart ComfyUI." + ) + +# Conditional imports for AnimateDiff +if HAS_ANIMATEDIFF: + try: + from .nodes.flex.flex_externals_animatediff import ( + FeatureToADKeyframe, + #WIP + # FeatureToCameraKeyframe, + # FeatureToPIAKeyframe, + ) + except Exception as e: + print(f"Error loading AnimateDiff feature nodes: {str(e)}") + HAS_ANIMATEDIFF = False +else: + print( + "ComfyUI-AnimateDiff-Evolved not found. " + "AnimateDiff feature nodes will not be available. " + "Install ComfyUI-AnimateDiff-Evolved and restart ComfyUI." + ) + +# Prepare a dictionary to hold the NODE_CLASS_MAPPINGS additions +EXTERNAL_NODE_CLASS_MAPPINGS = {} + +# Update the mapping based on available integrations +if HAS_ADVANCED_LIVE_PORTRAIT: + EXTERNAL_NODE_CLASS_MAPPINGS["FlexExpressionEditor"] = FlexExpressionEditor + +if HAS_ADVANCED_CONTROLNET: + EXTERNAL_NODE_CLASS_MAPPINGS.update({ + # "FeatureToTimestepKeyframe": FeatureToTimestepKeyframe, + "FeatureToLatentKeyframe": FeatureToLatentKeyframe, + }) + +if HAS_ANIMATEDIFF: + EXTERNAL_NODE_CLASS_MAPPINGS.update({ + "FeatureToADKeyframe": FeatureToADKeyframe, + # "FeatureToCameraKeyframe": FeatureToCameraKeyframe, + # "FeatureToPIAKeyframe": FeatureToPIAKeyframe, + }) \ No newline at end of file diff --git a/node_configs/node_configs.py b/node_configs/node_configs.py index e7e19ac..cddca83 100644 --- a/node_configs/node_configs.py +++ b/node_configs/node_configs.py @@ -3,7 +3,8 @@ NODE_CONFIGS = {} -#NOTE: this abstraction allows for the documentation to be both centrally managed and inherited +#NOTE: THIS IS LEGACY FOR BACKWARD COMPATIBILITY. REPLACED BY TOOLTIPS. +# this abstraction allows for the documentation to be both centrally managed and inherited from abc import ABCMeta class NodeConfigMeta(type): def __new__(cls, name, bases, attrs): @@ -17,1777 +18,4 @@ class CombinedMeta(NodeConfigMeta, ABCMeta): pass def add_node_config(node_name, config): - NODE_CONFIGS[node_name] = config - - - -add_node_config("MaskBase", { - "BASE_DESCRIPTION": """ -##Parameters -- `Masks`: Input mask or sequence of masks to be processed. (you can pass in a blank mask if you want) -- `Strength`: Controls the intensity of the effect (0.0 to 1.0). Higher values make the mask operation more pronounced. -- `Invert`: When enabled, reverses the mask, turning black areas white and vice versa. -- `Subtract Original`: Removes a portion of the original mask from the result (0.0 to 1.0). Higher values create more pronounced edge effects. -- `Grow with Blur`: Expands the mask edges (0.0 to 10.0). Higher values create softer, more expanded edges. -""" -}) - -add_node_config("TemporalMaskBase", { - "ADDITIONAL_INFO": """ -- `Start Frame`: The frame number where the effect begins (0 to 1000). -- `End Frame`: The frame number where the effect ends (0 to 1000). If set to 0, continues until the last frame. -- `Effect Duration`: Number of frames over which the effect is applied (0 to 1000). If 0, uses (End Frame - Start Frame). -- `Temporal Easing`: Controls how the effect strength changes over time, affecting the smoothness of transitions. - - Options: "ease_in_out", "linear", "bounce", "elastic", "none" -- `Palindrome`: When enabled, the effect plays forward then reverses within the specified duration, creating a back-and-forth motion. -""" -}) - -add_node_config("ParticleSystemMaskBase", { - "ADDITIONAL_INFO": """ -- `particle_count`: Total number of particles in the system (1 to 10000). More particles create denser effects. -- `particle_lifetime`: How long each particle exists in seconds (0.1 to 10.0). Longer lifetimes create more persistent effects. -- `wind_strength`: Power of the wind effect (-100.0 to 100.0). Positive values blow right, negative left. -- `wind_direction`: Angle of the wind in degrees (0.0 to 360.0). 0 is right, 90 is up, etc. -- `gravity`: Strength of downward pull (-1000.0 to 1000.0). Negative values make particles float up. -- `start_frame`: Frame to begin the particle effect (0 to 1000). -- `end_frame`: Frame to stop the particle effect (0 to 1000). -- `respect_mask_boundary`: When enabled, particles stay within the mask's shape. - -Optional inputs: -- `emitters`: Particle emitter configurations (PARTICLE_EMITTER type). Define where particles originate. -- `vortices`: Optional vortex configurations (VORTEX type). Create swirling effects. -- `wells`: Optional gravity well configurations (GRAVITY_WELL type). Create areas that attract or repel particles. -- `well_strength_multiplier`: Amplifies the power of gravity wells (0.0 to 10.0). Higher values create stronger attraction/repulsion. -""" -}) - -add_node_config("ParticleEmissionMask", { - "TOP_DESCRIPTION": "This is the main node for particle simulations. It creates dynamic, fluid-like effects through particle simulation. Supports multiple particle emitters, force fields (Gravity Well, Vortex), and allows for complex particle behaviors including boundary-respecting particles and static body interactions.", - "ADDITIONAL_INFO": """ -- `emission_strength`: Strength of particle emission effect (0.0 to 1.0), basically opacity -- `draw_modifiers`: Visibility of vortices and gravity wells (0.0 to 1.0) -""" -}) - -add_node_config("OpticalFlowMaskBase", { - "ADDITIONAL_INFO": """ -- `Images`: Input image sequence for optical flow calculation -- `Masks`: Input mask sequence to be processed -- `Strength`: Overall intensity of the effect (0.0 to 1.0). Higher values create more pronounced motion-based effects. -- `Flow Method`: Technique used for optical flow calculation. Each method has different speed/accuracy tradeoffs. - - Options: "Farneback", "LucasKanade", "PyramidalLK" -- `Flow Threshold`: Minimum motion required to trigger the effect (0.0 to 1.0). Higher values ignore subtle movements. -- `Magnitude Threshold`: Relative threshold for flow magnitude (0.0 to 1.0). Higher values focus on areas of stronger motion. -""" -}) - -add_node_config("OpticalFlowMaskModulation", { - "TOP_DESCRIPTION": "This is currently the main Optical Flow node. Use it to make motion based effects.", - "ADDITIONAL_INFO": """ -- `Modulation Strength`: Intensity of the modulation effect (0.0 to 5.0). Higher values create more pronounced motion trails. -- `Blur Radius`: Smoothing applied to the flow magnitude (0 to 20 pixels). Larger values create smoother trails. -- `Trail Length`: Number of frames for the trail effect (1 to 20). Longer trails last longer. -- `Decay Factor`: Rate of trail decay over time (0.1 to 1.0). Lower values make trails fade faster. -- `Decay Style`: Method of trail decay. - - Options: "fade" (opacity reduction), "thickness" (width reduction) -- `Max Thickness`: Maximum trail thickness for thickness-based decay (1 to 50 pixels). Larger values create thicker trails. -""" -}) - -add_node_config("OpticalFlowDirectionMask", { - "TOP_DESCRIPTION": "***WORK IN PROGRESS***" -}) - -add_node_config("OpticalFlowParticleSystem", { - "TOP_DESCRIPTION": "***WORK IN PROGRESS***" -}) - -add_node_config("MaskTransform", { - "TOP_DESCRIPTION": "Applies geometric transformations to the mask over time.", - "ADDITIONAL_INFO": """ -- `Transform Type`: The type of transformation to apply. - - Options: "translate", "rotate", "scale" -- `X Value`: Horizontal component of the transformation (-1000 to 1000). Positive values move right, negative left. -- `Y Value`: Vertical component of the transformation (-1000 to 1000). Positive values move up, negative down. -""" -}) - -add_node_config("MaskMorph", { - "TOP_DESCRIPTION": "Applies morphological operations to the mask, changing its shape over time.", - "ADDITIONAL_INFO": """ -- `Morph Type`: The type of morphological operation to apply. - - Options: "erode", "dilate", "open", "close" -- `Max Kernel Size`: Maximum size of the morphological kernel (3 to 21, odd numbers only). Larger values create more pronounced effects. -- `Max Iterations`: Maximum number of times to apply the operation (1 to 50). More iterations create more extreme effects. -""" -}) - -add_node_config("MaskMath", { - "TOP_DESCRIPTION": "Combines two masks using various mathematical operations.", - "ADDITIONAL_INFO": """ -- `Mask B`: Second mask to combine with the input mask. -- `Combination Method`: Mathematical operation to apply. - - Options: "add", "subtract", "multiply", "minimum", "maximum" -""" -}) - -add_node_config("MaskRings", { - "TOP_DESCRIPTION": "Creates concentric ring patterns based on the distance from the mask edges.", - "ADDITIONAL_INFO": """ -- `Num Rings`: Number of rings to generate (1 to 50). More rings create more detailed patterns. -- `Max Ring Width`: Maximum width of each ring as a fraction of the total distance (0.01 to 0.5). Larger values create wider rings. -""" -}) - -add_node_config("MaskWarp", { - "TOP_DESCRIPTION": "Applies various warping effects to the mask, creating distortions and movement.", - "ADDITIONAL_INFO": """ -- `Warp Type`: The type of warping effect to apply. Each creates a different distortion pattern. - - Options: "perlin" (noise-based), "radial" (circular), "swirl" (spiral) -- `Frequency`: Controls the scale of the warping effect (0.01 to 1.0). Higher values create more rapid changes in the warp pattern. -- `Amplitude`: Controls the strength of the warping effect (0.1 to 500.0). Higher values create more extreme distortions. -- `Octaves`: For noise-based warps, adds detail at different scales (1 to 8). More octaves create more complex, detailed patterns. -""" -}) - -add_node_config("MIDILoadAndExtract", { - "TOP_DESCRIPTION": """ - Loads a MIDI file and extracts specified features for mask modulation. To use this, select the notes on the piano that you want to use to control modulations. - Many of the different types of information in the notes can be chosen as the driving feature.""", - "ADDITIONAL_INFO": """ -- `midi_file`: Path to the MIDI file to load and analyze -- `track_selection`: Which track(s) to analyze ("all" or specific track number) -- `attribute`: MIDI attribute to extract (e.g., "Note On/Off", "Pitchbend", "Pitch", "Aftertouch") -- `frame_rate`: Frame rate of the video to sync MIDI data with -- `video_frames`: Corresponding video frames (IMAGE type) -- `chord_only`: When true, only considers full chords (BOOLEAN) -- `notes`: IGNORE THIS. Certain limitations prevent me from hiding it completely. Love, Ryan -""" -}) - -add_node_config("AudioFilter", { - "TOP_DESCRIPTION": "Applies frequency filters to audio for targeted sound processing.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be filtered (AUDIO type) -- `filters`: Frequency filters to be applied (FREQUENCY_FILTER type). These determine which frequencies are emphasized or reduced. -""" -}) - -add_node_config("FrequencyFilterPreset", { - "TOP_DESCRIPTION": "Creates preset filter chains for common audio processing tasks, simplifying complex audio manipulations.", - "ADDITIONAL_INFO": """ -- `preset`: Preset to use (e.g., "isolate_kick_drum" emphasizes low frequencies, "isolate_vocals" focuses on mid-range, "remove_rumble" cuts low frequencies) - -Optional inputs: -- `previous_filter`: Previous filter chain to append to, allowing for cumulative effects -""" -}) - -add_node_config("FrequencyFilterCustom", { - "TOP_DESCRIPTION": "Creates custom frequency filters.", - "ADDITIONAL_INFO": """ -- `filter_type`: Type of filter ("lowpass", "highpass", "bandpass") -- `order`: Filter order (1 to 10) -- `cutoff`: Cutoff frequency (20 to 20000 Hz) - -Optional inputs: -- `previous_filter`: Previous filter chain to append to -""" -}) - -add_node_config("AudioFeatureVisualizer", { - "TOP_DESCRIPTION": "***WORK IN PROGESS*** Visualizes various audio features, creating visual representations of sound characteristics.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to visualize (AUDIO type) -- `video_frames`: Corresponding video frames to overlay visualizations on (IMAGE type) -- `visualization_type`: Type of visualization to generate: - - "waveform": Shows amplitude over time - - "spectrogram": Displays frequency content over time - - "mfcc": Mel-frequency cepstral coefficients, useful for speech recognition - - "chroma": Represents pitch classes, useful for harmonic analysis - - "tonnetz": Tonal space representation - - "spectral_centroid": Shows the "center of mass" of the spectrum over time -- `frame_rate`: Frame rate of the video for synchronization -""" -}) - -add_node_config("AudioSeparator", { - "TOP_DESCRIPTION": "Separates an input audio track into its component parts using the Open-Unmix model.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be separated (AUDIO type) -- `video_frames`: Corresponding video frames (IMAGE type) -- `frame_rate`: Frame rate of the video for synchronization - -Outputs: -- Original audio -- Isolated drums track -- Isolated vocals track -- Isolated bass track -- Isolated other instruments track -- FeaturePipe containing frame information - -This node uses the Open-Unmix model to separate the input audio into four stems: drums, vocals, bass, and other instruments. Each separated track is returned as an individual AUDIO type output, along with the original audio and a FeaturePipe for further processing. -""" -}) - -add_node_config("SpringJointSetting", { - "TOP_DESCRIPTION": "Defines the behavior of spring joints attached to particles.", - "ADDITIONAL_INFO": """ -- `stiffness`: Stiffness of the spring (0.0 to 1000.0). Higher values create stronger connections. -- `damping`: Damping factor of the spring (0.0 to 100.0). Higher values create more resistance to motion. -- `rest_length`: Rest length of the spring (0.0 to 100.0). Longer springs allow for more stretching. -- `max_distance`: Maximum distance the spring can stretch (0.0 to 500.0). Larger values allow for more elasticity. -""" -}) - -add_node_config("StaticBody", { - "TOP_DESCRIPTION": "Defines static bodies in the simulation that particles can interact with (think walls, barrier, ramps, etc.).", - "ADDITIONAL_INFO": """ -- `shape_type`: Type of shape ("segment" or "polygon") -- `x1`, `y1`, `x2`, `y2`: Coordinates defining the shape -- `elasticity`: Bounciness of the static body (0.0 to 1.0). Higher values create more bouncy collisions. -- `friction`: Friction of the static body (0.0 to 1.0). Higher values create more resistance to motion. -- `draw`: Whether to visualize the static body and how thick -- `color`: Color of the static body (RGB tuple) -""" -}) - -add_node_config("GravityWell", { - "TOP_DESCRIPTION": "An optional input for a simulation space. These can be chained together to add many to a simulation.", - "ADDITIONAL_INFO": """ -- `x`: X-coordinate of the gravity well (0.0 to 1.0) -- `y`: Y-coordinate of the gravity well (0.0 to 1.0) -- `strength`: Strength of the gravity well. Higher values create stronger attraction or repulsion. -- `radius`: Radius of effect for the gravity well. Larger values affect a wider area. -- `type`: Type of gravity well ('attract' or 'repel'). Attract pulls particles in, repel pushes them away. -- `color`: Color of the gravity well visualization (RGB tuple) -- `draw`: Thickness of the gravity well visualization (0.0 to 1.0) -""" -}) - -add_node_config("Vortex", { - "TOP_DESCRIPTION": "An optional input for a simulation space. These can be chained together to add many to a simulation", - "ADDITIONAL_INFO": """ -- `x`: X-coordinate of the vortex center (0.0 to 1.0) -- `y`: Y-coordinate of the vortex center (0.0 to 1.0) -- `strength`: Strength of the vortex effect (0.0 to 1000.0). Higher values create stronger swirling motion. -- `radius`: Radius of effect for the vortex (10.0 to 500.0). Larger values create wider swirling areas. -- `inward_factor`: Factor controlling how quickly particles are pulled towards the center (0.0 to 1.0). Higher values create tighter spirals. -- `movement_speed`: Speed of movement of the vortex object (0.0 to 10.0). Higher values make the vortex move faster in the simulation space. -- `color`: Color of the vortex visualization (RGB tuple) -- `draw`: Thickness of the vortex visualization (0.0 to 1.0) -""" -}) - -add_node_config("ParticleModulationBase", { - "TOP_DESCRIPTION": "Base class for particle modulation settings.", - "ADDITIONAL_INFO": """ -- `start_frame`: Frame to start the modulation effect (0 to 1000) -- `end_frame`: Frame to end the modulation effect (0 to 1000) -- `effect_duration`: Duration of the modulation effect in frames (0 to 1000) -- `temporal_easing`: Easing function for the modulation effect ("ease_in_out", "linear", "bounce", "elastic", "none") -- `palindrome`: Whether to reverse the modulation effect after completion (True/False) -- `random`: Selects a random value between 0 and the chosen target value and applies it per particle -- `feature`: Optionally, pass in a feature (like audio or motion) to drive the modulation of the particles -""" -}) - -add_node_config("ParticleSizeModulation", { - "TOP_DESCRIPTION": "Modulates particle size over time.", - "ADDITIONAL_INFO": """ -- `target_size`: Target size for particles at the end of the modulation (0.0 to 400.0) -""" -}) - -add_node_config("ParticleSpeedModulation", { - "TOP_DESCRIPTION": "Modulates particle speed over time.", - "ADDITIONAL_INFO": """ -- `target_speed`: Target speed for particles at the end of the modulation (0.0 to 1000.0) -""" -}) - -add_node_config("ParticleColorModulation", { - "TOP_DESCRIPTION": "Modulates particle color over time.", - "ADDITIONAL_INFO": """ -- `target_color`: Target color for particles at the end of the modulation (RGB tuple) -""" -}) - -add_node_config("FlexMaskBase", { - "BASE_DESCRIPTION": """ -- `feature`: The feature used to modulate the mask operation (FEATURE type) -- `feature_pipe`: The feature pipe containing frame information (FEATURE_PIPE type) -- `feature_threshold`: Threshold for feature activation (0.0 to 1.0) - -""" -}) - -add_node_config("FlexMaskDepthChamber", { - "TOP_DESCRIPTION": "Applies a depth-based mask modulation using a depth map and specified front and back depth values.", - "ADDITIONAL_INFO": """ -- `depth_map`: Input depth map (IMAGE type) -- `z_front`: Front depth value for the mask (0.0 to 1.0). Default is 1.0. -- `z_back`: Back depth value for the mask (0.0 to 1.0). Default is 0.0. -- `feature_param`: Parameter to modulate based on the feature. Options are "none", "z_front", "z_back", "both". -- `feature_mode`: Mode of feature modulation. - -This node creates a mask based on the depth values in the input depth map. The mask is modulated by the specified front and back depth values, and can be further adjusted using a feature input to dynamically change the depth range. -""" -}) - - -add_node_config("FlexMaskMorph", { - "TOP_DESCRIPTION": "Applies morphological operations to the mask, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `morph_type`: The type of morphological operation to apply. - - Options: "erode", "dilate", "open", "close" -- `max_kernel_size`: Maximum size of the morphological kernel (3 to 21, odd numbers only). Larger values create more pronounced effects. -- `max_iterations`: Maximum number of times to apply the operation (1 to 50). More iterations create more extreme effects. - -The strength of the morphological operation is determined by the selected feature's value at each frame. -""" -}) - -add_node_config("FlexMaskWarp", { - "TOP_DESCRIPTION": "Applies warping effects to the mask, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `warp_type`: The type of warping effect to apply. Each creates a different distortion pattern. - - Options: "perlin" (noise-based), "radial" (circular), "swirl" (spiral) -- `frequency`: Controls the scale of the warping effect (0.01 to 1.0). Higher values create more rapid changes in the warp pattern. -- `max_amplitude`: Maximum amplitude of the warping effect (0.1 to 500.0). Higher values create more extreme distortions. -- `octaves`: For noise-based warps, adds detail at different scales (1 to 8). More octaves create more complex, detailed patterns. - -The intensity of the warping effect is determined by the selected feature's value at each frame. -""" -}) - -add_node_config("FlexMaskTransform", { - "TOP_DESCRIPTION": "Applies geometric transformations to the mask, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `transform_type`: The type of transformation to apply. - - Options: "translate", "rotate", "scale" -- `max_x_value`: Maximum horizontal component of the transformation (-1000.0 to 1000.0). Positive values move right, negative left. -- `max_y_value`: Maximum vertical component of the transformation (-1000.0 to 1000.0). Positive values move up, negative down. - -The extent of the transformation is determined by the selected feature's value at each frame. -""" -}) - -add_node_config("FlexMaskMath", { - "TOP_DESCRIPTION": "Performs mathematical operations between two masks, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `mask_b`: Second mask to combine with the input mask. -- `combination_method`: Mathematical operation to apply. - - Options: "add", "subtract", "multiply", "minimum", "maximum" - -The strength of the combination is determined by the selected feature's value at each frame. -""" -}) - -add_node_config("FlexMaskOpacity", { - "TOP_DESCRIPTION": "Applies opacity modulation to the mask based on a selected feature.", - "ADDITIONAL_INFO": """ -- `max_opacity`: Maximum opacity to apply to the mask (0.0 to 1.0). Higher values allow for more opaque masks. - -The actual opacity applied is determined by the product of max_opacity, feature value, and strength. - -This node is useful for creating masks that fade in and out based on the selected feature, allowing for smooth transitions and effects that respond to various inputs like audio, time, or other extracted features. -""" -}) - -add_node_config("FlexMaskVoronoiScheduled", { - "TOP_DESCRIPTION": "Generates a Voronoi noise mask with parameters modulated by a selected feature according to a specified formula.", - "ADDITIONAL_INFO": """ -- `distance_metric`: Method used to calculate distances in the Voronoi diagram. Options include various mathematical norms and custom patterns. -- `scale`: Base scale of the Voronoi cells (0.1 to 10.0). Larger values create bigger cells. -- `detail`: Number of Voronoi cells (10 to 1000). More cells create more intricate patterns. -- `randomness`: Degree of randomness in cell placement (0.0 to 5.0). Higher values create more chaotic patterns. -- `seed`: Random seed for reproducible results (0 to 2^64 - 1). -- `x_offset`: Horizontal offset of the Voronoi pattern (-1000.0 to 1000.0). -- `y_offset`: Vertical offset of the Voronoi pattern (-1000.0 to 1000.0). -- `feature_param`: Which parameter to modulate based on the feature ("scale", "detail", "randomness", "seed", "x_offset", "y_offset"). -- `formula`: Mathematical formula used to map the feature value to the feature parameter. Options include "Linear", "Quadratic", "Cubic", "Sinusoidal", and "Exponential". -- `a` and `b`: Parameters for fine-tuning the chosen formula (0.1 to 10.0). - -Credit for the heavy lifting for this node goes to https://github.com/alanhuang67/ -""" -}) - -add_node_config("FlexMaskBinary", { - "TOP_DESCRIPTION": "Applies binary thresholding to the mask, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `threshold`: Base threshold value for binarization (0.0 to 1.0). Pixels above this value become white, below become black. -- `method`: Thresholding method to use. - - Options: "simple" (basic threshold), "adaptive" (local adaptive threshold), "hysteresis" (double threshold with connectivity), "edge" (Canny edge detection) -- `max_smoothing`: Maximum amount of Gaussian smoothing to apply (0 to 51, odd values only). Higher values create smoother masks. -- `max_edge_enhancement`: Maximum strength of edge enhancement (0.0 to 10.0). Higher values create more pronounced edges. -- `feature_param`: Which parameter to modulate based on the feature value. - - Options: "threshold" (adjusts threshold), "smoothing" (adjusts smoothing), "edge_enhancement" (adjusts edge enhancement), "none" (no modulation) - -The binary mask operation is applied with strength determined by the selected feature's value at each frame. This node is useful for creating sharp, high-contrast masks that can be dynamically adjusted based on various inputs like audio, time, or other extracted features. -""" -}) - -add_node_config("FlexMaskEmanatingRings", { - "TOP_DESCRIPTION": "Creates dynamic, expanding ring patterns that emanate from the edges of the input mask.", - "ADDITIONAL_INFO": """ -- `num_rings`: Number of concentric rings to generate (1 to 50). More rings create a denser, more complex pattern. -- `max_ring_width`: Maximum width of each ring as a fraction of the total distance (0.01 to 0.9). Larger values create wider, more prominent rings that overlap more. -- `wave_speed`: Speed at which the rings expand outward (0.01 to 0.5). Higher values create faster-moving, more dynamic patterns. -- `feature_param`: Determines which aspect of the effect is modulated by the input feature. - - Options: "num_rings" (varies ring count), "ring_width" (adjusts ring thickness), "wave_speed" (changes expansion rate), "all" (modulates all parameters) - -This node creates a mesmerizing effect of rings expanding from the edges of the input mask. The rings start thick at the mask boundary and thin out as they move outward, creating a pulsating, wave-like appearance. The effect can be subtle and smooth or bold and dynamic depending on the parameter settings. - -The feature input can be used to dynamically adjust the effect over time, allowing for rhythmic pulsing (e.g., synced to audio) or gradual evolution of the pattern. When the feature value is below the threshold, the animation continues but no new rings are generated, creating a smooth transition effect. -""" -}) - -add_node_config("FlexMaskRandomShapes", { - "TOP_DESCRIPTION": "Generates dynamic masks with randomly placed shapes, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `max_num_shapes`: Maximum number of shapes to generate (1 to 100). The actual number is modulated by the feature if 'num_shapes' is selected as the feature parameter. -- `max_shape_size`: Maximum size of shapes as a fraction of the frame size (0.01 to 1.0). The actual size is modulated by the feature if 'shape_size' is selected as the feature parameter. -- `appearance_duration`: Number of frames over which shapes appear (1 to 100). Modulated by the feature if selected as the feature parameter. -- `disappearance_duration`: Number of frames over which shapes disappear (1 to 100). Modulated by the feature if selected as the feature parameter. -- `appearance_method`: How shapes appear and disappear. - - Options: "grow" (shapes grow/shrink), "pop" (shapes appear/disappear suddenly), "fade" (shapes fade in/out) -- `easing_function`: Determines the rate of change for appearance/disappearance. - - Options: "linear", "ease_in_out", "bounce", "elastic" -- `shape_type`: Type of shape to generate. Includes various geometric shapes and a "random" option. -- `feature_param`: Aspect of the effect modulated by the input feature. - - Options: "num_shapes", "shape_size", "appearance_duration", "disappearance_duration" - -This node creates a dynamic mask with randomly placed shapes that appear and disappear over time. The number, size, and timing of the shapes can be modulated by the input feature, creating effects that respond to various inputs like audio, time, or other extracted features. The shapes can grow, pop, or fade in and out, with different easing functions for smooth or bouncy transitions. -""" -}) - -add_node_config("FlexMaskWavePropagation", { - "TOP_DESCRIPTION": "Good luck with this one...Simulates wave-like abstract distortions propagating from the edges of the input mask.", - "ADDITIONAL_INFO": """ -- `wave_speed`: Controls the rate of wave propagation (0.1 to 100.0). Higher values create faster-moving, more rapidly evolving patterns. -- `wave_amplitude`: Determines the intensity of the wave effect (0.1 to 2.0). Larger values create more pronounced, exaggerated distortions. -- `wave_decay`: Rate at which waves fade out over time (0.9 to 10.0). Lower values cause waves to dissipate quickly, while higher values allow waves to persist and interact more. -- `wave_frequency`: Frequency of the wave oscillations (0.01 to 10.0). Higher values create more rapid, ripple-like effects, while lower values produce smoother, more gradual undulations. -- `max_wave_field`: Maximum allowed intensity for the wave field (10.0 to 10000.0). This parameter prevents the effect from becoming too extreme over time. - -This node creates a dynamic, fluid-like effect where waves seem to emanate from the edges of the input mask. The waves propagate outward, interacting with each other and creating complex, evolving patterns. The effect can range from subtle, water-like ripples to intense, psychedelic distortions depending on the parameter settings. - -The wave propagation is particularly sensitive to the interplay between `wave_speed`, `wave_amplitude`, and `wave_decay`. High speed with low decay can create a turbulent, chaotic effect, while lower speed with higher decay produces a more serene, flowing appearance. - -The feature input modulates the intensity of new waves being generated, allowing for dynamic control over the effect's strength. This can be used to create pulsating effects synchronized with audio or other time-varying inputs. -""" -}) - -add_node_config("FeatureExtractorBase", { - "BASE_DESCRIPTION": """ - Features are used to modulate other RyanOnTheInside nodes. - - You can replace this feature with any of the others, and it will work. - - Available features include Audio, Motion, MIDI, Pitch, Proximity, Depth, Time, Color, Brightness, and more. - -### Parameters: -- `frame_rate`: Frame rate of the video -- `frame_count`: Total number of frames -""" -}) - -add_node_config("ManualFeatureFromPipe", { - "TOP_DESCRIPTION": "Creates a manual feature based on specified frame numbers and values from an existing feature pipe.", - "ADDITIONAL_INFO": """ -- `feature_pipe`: Input feature pipe (FEATURE_PIPE type) -- `frame_numbers`: Comma-separated list of frame numbers (e.g., "0,10,20") -- `values`: Comma-separated list of corresponding values for each frame number (e.g., "0.0,0.5,1.0") -- `last_value`: Value for the last frame of the sequence -- `interpolation_method`: Method for interpolating between specified values: - - "none": No interpolation, uses exact values at specified frames - - "linear": Linear interpolation between specified points - - "ease_in": Ease-in interpolation for smoother starts - - "ease_out": Ease-out interpolation for smoother endings - -This node allows you to create a custom feature by specifying values at certain frame numbers and interpolating between them. It's useful for creating precise, manually-defined features that can be used to modulate other effects. - -The interpolation methods provide different ways to transition between the specified values: -- "none" keeps the value constant until the next specified frame -- "linear" creates a straight line between points -- "ease_in" starts slow and accelerates -- "ease_out" starts fast and decelerates - -Note: The number of frame numbers must match the number of values provided. -""" -}) - -add_node_config("ManualFeatureNode", { - "TOP_DESCRIPTION": "Creates a manual feature with specified start and end values over a range of frames.", - "ADDITIONAL_INFO": """ -- `frame_rate`: Frame rate of the video (1.0 to 120.0 fps) -- `start_frame`: First frame of the feature (0 or greater) -- `end_frame`: Last frame of the feature (greater than start_frame) -- `start_value`: Initial value of the feature (0.0 to 1.0) -- `end_value`: Final value of the feature (0.0 to 1.0) -- `width`: Width of the video frames (1 or greater) -- `height`: Height of the video frames (1 or greater) -- `interpolation_method`: Method for interpolating between start and end values: - - "linear": Linear interpolation - - "nearest": Nearest neighbor interpolation - - "ease_in": Ease-in interpolation for smoother starts - - "ease_out": Ease-out interpolation for smoother endings - -This node creates a manual feature that transitions from a start value to an end value over a specified range of frames. It's useful for creating simple, controlled features that can be used to modulate other effects. - -The interpolation methods provide different ways to transition between the start and end values: -- "linear" creates a straight line between points -- "nearest" uses the closest value (start or end) -- "ease_in" starts slow and accelerates -- "ease_out" starts fast and decelerates - -The node also creates a feature pipe with empty video frames, which can be used in conjunction with other nodes that require a feature pipe input. -""" -}) - -add_node_config("ManualFeaturePipe", { - "TOP_DESCRIPTION": "Creates an empty feature pipe with specified parameters.", - "ADDITIONAL_INFO": """ -- `frame_rate`: Frame rate of the video (1.0 fps or greater) -- `frame_count`: Total number of frames in the sequence (1 or greater) -- `width`: Width of the video frames (1 or greater) -- `height`: Height of the video frames (1 or greater) - -This node creates an empty feature pipe with the specified parameters. It's particularly useful when you need a feature pipe for other nodes but don't have actual video frames or when you want to create a custom feature pipe for manual feature creation. - -The feature pipe contains empty (zero-filled) tensors for each frame, which can be used as placeholders in workflows that require a feature pipe input. This is especially helpful when working with manual features or when you need to simulate a video sequence without actual video data. - -Typical use cases include: -1. Creating a base for manual feature creation -2. Providing a placeholder feature pipe for nodes that require it -3. Setting up a workflow structure before actual video data is available - -Note: While this node creates empty video frames, it doesn't affect the functionality of feature-based operations, as most feature extractors and manipulators work independently of the actual video content. -""" -}) - -add_node_config("TimeFeatureNode", { - "TOP_DESCRIPTION": "Produces a feature that changes over time based on the selected effect type. This can be used to create dynamic, time-varying mask modulations.", - "ADDITIONAL_INFO": """ -- `effect_type`: Type of time-based pattern to apply. - - Options: "smooth" (gradual), "accelerate" (speeds up), "pulse" (rhythmic), "sawtooth" (repeating ramp), "bounce" (up and down) -- `speed`: How quickly the effect progresses (0.1 to 10.0, default: 1.0). Higher values create faster changes. -- `offset`: Shifts the starting point of the effect (0.0 to 1.0, default: 0.0). Useful for staggering multiple effects. - - -""" -}) - -add_node_config("AudioFeatureNode", { - "TOP_DESCRIPTION": "Analyzes the input audio to extract the specified feature. This feature can then be used to modulate masks based on audio characteristics.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to analyze (AUDIO type) -- `feature_type`: Type of audio feature to extract. - - Options: "amplitude_envelope", "rms_energy", "spectral_centroid", "onset_detection", "chroma_features" - -""" -}) - -add_node_config("DepthFeatureNode", { - "TOP_DESCRIPTION": "Analyzes the input depth maps to extract the specified depth-related feature. This feature can be used to modulate masks based on depth information in the scene.", - "ADDITIONAL_INFO": """ -- `depth_maps`: Input depth maps to analyze (IMAGE type) -- `feature_type`: Type of depth feature to extract. - - Options: "mean_depth", "depth_variance", "depth_range", "gradient_magnitude", "foreground_ratio", "midground_ratio", "background_ratio" - -""" -}) - -add_node_config("ColorFeatureNode", { - "TOP_DESCRIPTION": "Extracts color-related features from video frames for mask modulation.", - "ADDITIONAL_INFO": """ -- `feature_type`: Type of color feature to extract - - Options: "dominant_color" (most prevalent color), "color_variance" (variation in colors), "saturation" (color intensity), "red_ratio" (proportion of red), "green_ratio" (proportion of green), "blue_ratio" (proportion of blue) - -Analyzes the input video frames to extract the specified color-related feature. This feature can be used to modulate masks based on color information in the scene, creating effects that respond to color changes over time. -""" -}) - -add_node_config("BrightnessFeatureNode", { - "TOP_DESCRIPTION": "Extracts brightness-related features from video frames for mask modulation.", - "ADDITIONAL_INFO": """ -- `feature_type`: Type of brightness feature to extract - - Options: "mean_brightness" (average brightness), "brightness_variance" (variation in brightness), "dark_ratio" (proportion of dark areas), "mid_ratio" (proportion of mid-tone areas), "bright_ratio" (proportion of bright areas) - -Analyzes the input video frames to extract the specified brightness-related feature. This feature can be used to modulate masks based on lighting changes in the scene, allowing for effects that respond to overall brightness or specific tonal ranges. -""" -}) - -add_node_config("MotionFeatureNode", { - "TOP_DESCRIPTION": "Extracts motion-related features from video frames for mask modulation.", - "ADDITIONAL_INFO": """ -- `feature_type`: Type of motion feature to extract - - Options: "mean_motion" (average motion), "max_motion" (peak motion), "motion_direction" (overall direction), "horizontal_motion" (left-right movement), "vertical_motion" (up-down movement), "motion_complexity" (intricacy of motion) -- `flow_method`: Technique used for optical flow calculation - - Options: "Farneback" (dense flow), "LucasKanade" (sparse flow), "PyramidalLK" (multi-scale sparse flow) -- `flow_threshold`: Minimum motion magnitude to consider (0.0 to 10.0). Higher values ignore subtle movements. -- `magnitude_threshold`: Relative threshold for motion magnitude (0.0 to 1.0). Higher values focus on areas of stronger motion. - -Analyzes the input video frames to extract the specified motion-related feature using optical flow techniques. This feature can be used to modulate masks based on movement in the scene, creating effects that respond to motion intensity, direction, or complexity. -""" -}) - -add_node_config("AudioFeatureExtractor", { - "TOP_DESCRIPTION": "Analyzes the input audio to extract the specified feature. The resulting feature can be used to modulate masks based on audio characteristics.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to analyze (AUDIO type) -- `feature_pipe`: Feature pipe for frame information (FEATURE_PIPE type) -- `feature_type`: Type of audio feature to extract - - Options: "amplitude_envelope", "rms_energy", "spectral_centroid", "onset_detection", "chroma_features" - -""" -}) - -add_node_config("PitchFeatureExtractor", { - "TOP_DESCRIPTION": "Extracts pitch-related features from audio input.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to analyze (AUDIO type) -- `feature_pipe`: Feature pipe containing frame information (FEATURE_PIPE type) -- `feature_type`: Type of pitch feature to extract: - - "pitch_filtered": Filtered pitch values - - "pitch_direction": Direction of pitch changes - - "vibrato_signal": Vibrato signal - - "vibrato_intensity": Intensity of vibrato -- `window_size`: Size of the analysis window (0 for default) -- `pitch_tolerance`: Tolerance for pitch detection (0.0 to 1.0) -- `pitch_range_collections`: (Optional) Collections of pitch ranges to consider (PITCH_RANGE_COLLECTION type) - -This node extracts various pitch-related features from the input audio, which can be used for further analysis or mask modulation. -""" -}) - -add_node_config("PitchRangeByNoteNode", { - "TOP_DESCRIPTION": "Creates pitch ranges based on specified MIDI notes.", - "ADDITIONAL_INFO": """ -- `chord_only`: If true, only detects when all specified notes are present simultaneously (BOOLEAN) -- `pitch_tolerance_percent`: Tolerance percentage for pitch detection (0.0 to 100.0) -- `notes`: IGNORE THIS. Certain limitations prevent me from hiding it completely. Love, Ryan -- `previous_range_collection`: (Optional) Previous pitch range collection to append to (PITCH_RANGE_COLLECTION type) - -This node creates pitch ranges based on specified MIDI notes, which can be used for targeted pitch detection in audio analysis. -""" -}) - -add_node_config("PitchRangePresetNode", { - "TOP_DESCRIPTION": "Creates preset pitch ranges for common vocal ranges.", - "ADDITIONAL_INFO": """ -- `preset`: Preset vocal range to use: - - Options: "Bass", "Baritone", "Tenor", "Alto", "Mezzo-soprano", "Soprano", "Contralto" -- `previous_range_collection`: (Optional) Previous pitch range collection to append to (PITCH_RANGE_COLLECTION type) - -This node provides preset pitch ranges corresponding to common vocal ranges, which can be used for voice-specific audio analysis. -""" -}) - -add_node_config("PitchRangeNode", { - "TOP_DESCRIPTION": "Creates a custom pitch range for audio analysis.", - "ADDITIONAL_INFO": """ -- `min_pitch`: Minimum frequency of the pitch range in Hz (20.0 to 2000.0) -- `max_pitch`: Maximum frequency of the pitch range in Hz (20.0 to 2000.0) -- `previous_range_collection`: (Optional) Previous pitch range collection to append to (PITCH_RANGE_COLLECTION type) - -This node allows you to create a custom pitch range by specifying the minimum and maximum frequencies. This can be useful for targeting specific frequency ranges in audio analysis, such as isolating particular instruments or vocal ranges. - -The created pitch range can be combined with other pitch ranges or used independently in pitch-related feature extraction nodes. -""" -}) - -add_node_config("EmptyImageFromAudio", { - "TOP_DESCRIPTION": "Creates an empty image sequence based on audio input.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio (AUDIO type) -- `frame_rate`: Frame rate of the output image sequence (0.1 to 120 fps) -- `height`: Height of the output images (16 to 4096 pixels) -- `width`: Width of the output images (16 to 4096 pixels) - -This node generates an empty image sequence dimensions and frame rate, based on the duration of the input audio. -It's useful for creating a blank canvas for further image processing or visualization that matches the length of an audio track. -""" -}) - -add_node_config("EmptyMaskFromAudio", { - "TOP_DESCRIPTION": "Creates an empty mask sequence based on audio input.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio (AUDIO type) -- `frame_rate`: Frame rate of the output mask sequence (0.1 to 120 fps) -- `height`: Height of the output masks (16 to 4096 pixels) -- `width`: Width of the output masks (16 to 4096 pixels) - -This node generates an empty mask sequence with the specified dimensions and frame rate, based on the duration of the input audio. -It's useful for creating a blank mask for further processing or effects that match the length of an audio track. -""" -}) - -add_node_config("TimeFeatureNode", { - "TOP_DESCRIPTION": "Generates time-based features for mask modulation.", - "ADDITIONAL_INFO": """ -- `video_frames`: Input video frames (IMAGE type) -- `frame_rate`: Frame rate of the video -- `effect_type`: Type of time-based pattern to apply - - Options: "smooth" (gradual), "accelerate" (speeds up), "pulse" (rhythmic), "sawtooth" (repeating ramp), "bounce" (up and down) -- `speed`: How quickly the effect progresses (0.1 to 10.0, default: 1.0). Higher values create faster changes. -- `offset`: Shifts the starting point of the effect (0.0 to 1.0, default: 0.0). Useful for staggering multiple effects. - -Generates a feature that changes over time based on the selected effect type. This can be used to create dynamic, time-varying mask modulations. -""" -}) - -add_node_config("DepthFeatureNode", { - "TOP_DESCRIPTION": "Extracts depth-related features from depth maps for mask modulation.", - "ADDITIONAL_INFO": """ -- `video_frames`: Input video frames (IMAGE type) -- `frame_rate`: Frame rate of the video -- `depth_maps`: Input depth maps to analyze (IMAGE type) -- `feature_type`: Type of depth feature to extract - - Options: "mean_depth", "depth_variance", "depth_range", "gradient_magnitude", "foreground_ratio", "midground_ratio", "background_ratio" - -Analyzes the input depth maps to extract the specified depth-related feature. This feature can be used to modulate masks based on depth information in the scene. -""" -}) - -add_node_config("AreaFeatureNode", { - "TOP_DESCRIPTION": "Extracts area-related features from mask sequences for mask modulation.", - "ADDITIONAL_INFO": """ -- `masks`: Input mask sequence to analyze (MASK type) -- `feature_type`: Type of area feature to extract - - Options: - - "total_area" (sum of pixels above threshold) - - "largest_contour" (area of the largest contiguous region) - - "bounding_box" (area of the bounding box containing the largest region) -- `threshold`: Threshold value for considering pixels as part of the area (0.0 to 1.0) - -This node analyzes the input mask sequence to extract the specified area-related feature. The resulting feature can be used to modulate masks based on changes in area over time, allowing for effects that respond to the size or extent of masked regions in the scene. -""" -}) - -add_node_config("ProximityFeatureNode", { - "TOP_DESCRIPTION": "Calculates a proximity feature based on the distance between anchor and query locations in video frames.", - "ADDITIONAL_INFO": """ -- `video_frames`: Input video frames (IMAGE type) -- `frame_rate`: Frame rate of the video (FLOAT type, default: 30.0, min: 1.0, max: 120.0, step: 0.1) -- `anchor_locations`: Locations of anchor points (LOCATION type) -- `query_locations`: Locations of query points (LOCATION type) -- `distance_metric`: Distance metric to use for calculation (Options: "euclidean", "manhattan", "chebyshev") - -This node calculates a proximity feature based on the specified distance metric between anchor and query locations in the input video frames. The resulting feature can be used to modulate other effects based on spatial relationships. -""" -}) - -add_node_config("LocationFromMask", { - "TOP_DESCRIPTION": "This is for use with proximity features. This generates locations from mask inputs using various methods.", - "ADDITIONAL_INFO": """ -- `masks`: Input masks (MASK type) -- `method`: Method to use for location extraction (Options: "mask_center", "mask_boundary", "mask_top_left", "mask_bottom_right") -- `depth_maps`: (Optional) Input depth maps. The depth map provides a value for the z coordinate of every location. If no depth map is provided, the value defaults to .5. The z coordinate is far less granular than x and y, as all we have are relative normalized depth per frame (0 to 1). - -This node generates locations from the input masks using the specified method. The locations can be used as anchor or query points for proximity calculations or other spatially dependent effects. -""" -}) - -add_node_config("LocationFromPoint", { - "TOP_DESCRIPTION": "Generates locations from specified x, y, and z coordinates.", - "ADDITIONAL_INFO": """ -- `x`: X-coordinate of the location (FLOAT, default: 0.0, min: 0.0, step: 0.01) -- `y`: Y-coordinate of the location (FLOAT, default: 0.0, min: 0.0, step: 0.01) -- `batch_count`: Number of locations to generate (INT, default: 1, min: 1) -- `z`: Z-coordinate of the location (FLOAT, default: 0.0, min: 0.0, max: 1.0, step: 0.01) - -This node generates a batch of locations based on the specified x, y, and z coordinates. -""" -}) - -add_node_config("LocationTransform", { - "TOP_DESCRIPTION": "Transforms locations based on a feature and specified transformation type.", - "ADDITIONAL_INFO": """ -- `locations`: Input locations to be transformed (LOCATION type) -- `feature`: Feature used to modulate the transformation (FEATURE type) -- `transformation_type`: Type of transformation to apply ("translate" or "scale") -- `transformation_value`: Value of the transformation (FLOAT, default: 1.0) - -This node transforms the input locations based on the specified transformation type and value, modulated by the input feature. -""" -}) - -add_node_config("EmitterMovement", { - "TOP_DESCRIPTION": """These parameters work together to create complex, periodic movements for particle emitters. -By adjusting frequencies and amplitudes, you can achieve various patterns like circles, -figure-eights, or more chaotic motions. The direction parameters add extra dynamism by -altering the angle of particle emission over time.""", - "ADDITIONAL_INFO": """ -Position Control: -- `emitter_x_frequency`: How quickly the emitter moves horizontally (0.0 to 10.0). Higher values create faster side-to-side motion. -- `emitter_x_amplitude`: Maximum horizontal distance the emitter moves (0.0 to 0.5). Larger values create wider movements. -- `emitter_y_frequency`: How quickly the emitter moves vertically (0.0 to 10.0). Higher values create faster up-and-down motion. -- `emitter_y_amplitude`: Maximum vertical distance the emitter moves (0.0 to 0.5). Larger values create taller movements. -Direction Control: -- `direction_frequency`: How quickly the emission angle changes (0.0 to 10.0). Higher values create more rapid direction changes. -- `direction_amplitude`: Maximum angle change in degrees (0.0 to 180.0). Larger values allow for more extreme direction shifts. - -Feature Modulation: -- `feature`: Optional feature to modulate the movement (FEATURE type) -- `feature_param`: Parameter to be modulated by the feature ("emitter_x_frequency", "emitter_y_frequency", or "direction_frequency") - - -""" -}) - -add_node_config("ParticleEmitter", { - "TOP_DESCRIPTION": "This node creates a particle emitter with the specified properties. It can be used in conjunction with particle system mask nodes to create complex particle effects. They can be chained together to add many to a given simulation.", - "ADDITIONAL_INFO": """ -- `emitter_x`: X-coordinate of the emitter (0.0 to 1.0, left to right) -- `emitter_y`: Y-coordinate of the emitter (0.0 to 1.0, up to down) -- `particle_direction`: Direction of particle emission in degrees (0.0 to 360.0, clockwise) -- `particle_spread`: Spread angle of particle emission in degrees (0.0 to 360.0, clockwise) -- `particle_size`: Size of emitted particles (1.0 to 400.0) -- `particle_speed`: Speed of emitted particles (1.0 to 1000.0) -- `emission_rate`: Rate of particle emission (0.1 to 100.0) -- `color`: Color of emitted particles (RGB string) -- `initial_plume`: Initial burst of particles (0.0 to 1.0) -- `start_frame`: Frame to start the emission (0 to 10000) -- `end_frame`: Frame to end the emission (0 to 10000) -- `emission_radius`: Defaulting to 0 (a point), this value changes the radius of the area from which the particles are emitted. The open 'mouth' of the emitter. - -Optional inputs: -- `emitter_movement`: Movement settings for the emitter (EMITTER_MOVEMENT type) -- `spring_joint_setting`: Spring joint configuration for particles (SPRING_JOINT_SETTING type) -- `particle_modulation`: Modulation settings for particle properties over time (PARTICLE_MODULATION type) -""" -}) - -add_node_config("MovingShape", { - "TOP_DESCRIPTION": "Generate animated mask sequences featuring a moving shape with customizable parameters.", - "ADDITIONAL_INFO": """ -- `frame_width`: Width of each frame (1-3840 pixels) -- `frame_height`: Height of each frame (1-2160 pixels) -- `num_frames`: Number of frames in the sequence (1-120) -- `rgb`: Color of the shape in RGB format, e.g., "(255,255,255)" -- `shape`: Shape type ("square", "circle", or "triangle") -- `shape_width_percent`: Width of the shape as a percentage of frame width (0-100%) -- `shape_height_percent`: Height of the shape as a percentage of frame height (0-100%) -- `shape_start_position_x`: Starting X position of the shape (-100 to 100) -- `shape_start_position_y`: Starting Y position of the shape (-100 to 100) -- `shape_end_position_x`: Ending X position of the shape (-100 to 100) -- `shape_end_position_y`: Ending Y position of the shape (-100 to 100) -- `movement_type`: Type of movement ("linear", "ease_in_out", "bounce", or "elastic") -- `grow`: Growth factor of the shape during animation (0-100) -- `palindrome`: Whether to reverse the animation sequence (True/False) -- `delay`: Number of static frames at the start (0-60) - -This node creates a mask sequence with a moving shape, allowing for various animations and transformations. -""" -}) - -add_node_config("TextMaskNode", { - "TOP_DESCRIPTION": "Generate mask and image sequences featuring customizable text.", - "ADDITIONAL_INFO": """ -- `width`: Width of the output image (1-8192 pixels) -- `height`: Height of the output image (1-8192 pixels) -- `text`: The text to be rendered -- `font`: Font to be used (selectable from system fonts) -- `font_size`: Size of the font (1-1000) -- `font_color`: Color of the text in RGB format, e.g., "(255,255,255)" -- `background_color`: Color of the background in RGB format, e.g., "(0,0,0)" -- `x_position`: Horizontal position of the text (0.0-1.0, where 0.5 is center) -- `y_position`: Vertical position of the text (0.0-1.0, where 0.5 is center) -- `rotation`: Rotation angle of the text (0-360 degrees) -- `max_width_ratio`: Maximum width of text as a ratio of image width (0.1-1.0) -- `batch_size`: Number of images to generate in the batch (1-10000) -""" -}) - -add_node_config("_mfc", { - "TOP_DESCRIPTION": "Basic mask from color.", - "ADDITIONAL_INFO": """ -This is an abstract base class that provides common functionality for mask function components. -It is not meant to be used directly but serves as a foundation for other mask-related nodes. - -Key features: -- Implements common methods for mask operations -- Provides a structure for derived classes to follow -- Ensures consistency across different mask function components -""" -}) - -add_node_config("DownloadOpenUnmixModel", { - "TOP_DESCRIPTION": "Downloads and loads Open Unmix models for audio classification", - "ADDITIONAL_INFO": """ --umxl (default) trained on private stems dataset of compressed stems. Note, that the weights are only licensed for non-commercial use (CC BY-NC-SA 4.0). - --umxhq trained on MUSDB18-HQ which comprises the same tracks as in MUSDB18 but un-compressed which yield in a full bandwidth of 22050 Hz. - - -""" -}) - -add_node_config("FeatureMixer", { - "TOP_DESCRIPTION": "Advanced feature modulation node for fine-tuning and shaping feature values.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be processed (FEATURE type) -- `base_gain`: Overall amplification of the feature values (0.0 to 10.0). Higher values increase the overall intensity. -- `floor`: Minimum value for the processed feature (0.0 to 1.0). Prevents values from going below this threshold. -- `ceiling`: Maximum value for the processed feature (0.0 to 10.0). Caps values at this upper limit. -- `peak_sharpness`: Sharpness of peaks in the feature curve (0.1 to 10.0). Higher values create more pronounced peaks. -- `valley_sharpness`: Sharpness of valleys in the feature curve (0.1 to 10.0). Higher values create deeper valleys. -- `attack`: Speed at which the envelope follower responds to increasing values (0.01 to 1.0). Lower values create slower attack. -- `release`: Speed at which the envelope follower responds to decreasing values (0.01 to 1.0). Lower values create slower release. -- `smoothing`: Amount of smoothing applied to the final curve (0.0 to 1.0). Higher values create smoother transitions. - -This node provides extensive control over feature modulation, allowing for complex shaping of feature values over time. It combines multiple processing stages including gain, waveshaping, envelope following, and smoothing to create highly customized feature curves for mask modulation. - -Outputs: -- Processed FEATURE -- Visualization of the processed feature (IMAGE type) -""" -}) - -add_node_config("FeatureAccumulate", { - "TOP_DESCRIPTION": "Accumulates feature values over time, creating a cumulative effect.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be accumulated (FEATURE type) -- `start`: Starting value for the normalized output range (0.0 to 1.0) -- `end`: Ending value for the normalized output range (0.0 to 1.0) -- `threshold`: Minimum feature value to consider for accumulation (0.0 to 1.0) -- `skip_thresholded`: If True, keeps original values below threshold; if False, maintains last accumulated value (BOOLEAN) -- `invert_output`: Whether to invert the output feature values (BOOLEAN) - -This node accumulates feature values over time, creating a cumulative effect. It's useful for generating gradually increasing or decreasing effects based on feature intensity. - -The accumulation process works as follows: -1. For each frame, if the feature value is above the threshold, it's added to the cumulative sum. -2. If the value is below the threshold, the behavior depends on the `skip_thresholded` setting: - - If True, the original value is kept (useful for creating "gaps" in the effect). - - If False, the last accumulated value is maintained (for continuous effects). -3. The accumulated values are then normalized to fit between the specified `start` and `end` values. - -Use cases include: -1. Creating gradually intensifying effects based on audio features -2. Generating cumulative motion effects in response to video analysis -3. Producing threshold-based triggers that build up over time - -Outputs: -- Processed FEATURE with accumulated values -- Visualization of the accumulated feature (IMAGE type) -""" -}) - -add_node_config("FeatureContiguousInterpolate", { - "TOP_DESCRIPTION": "Applies interpolation to contiguous segments of a feature that meet a threshold criteria.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be processed (FEATURE type) -- `threshold`: Minimum value for a feature point to be considered part of a segment (0.0 to 1.0) -- `start`: Starting value for the interpolation (0.0 to 1.0) -- `end`: Ending value for the interpolation (0.0 to 1.0) -- `easing`: Easing function to apply to the interpolation. Options include various easing types like linear, quadratic, cubic, and quartic easings (in, out, and in-out variants) -- `fade_out`: Number of frames over which to fade out after each segment (0 to 100) -- `invert_output`: Whether to invert the output feature values (True/False) - -This node identifies contiguous segments in the input feature where values are above the specified threshold. It then applies interpolation to these segments, transforming the values from the start value to the end value using the chosen easing function. After each segment, it can optionally apply a fade-out effect. - -Key features: -1. Segment identification based on threshold -2. Flexible interpolation with various easing functions -3. Optional fade-out after each segment -4. Visualization of the processed feature - -Use cases include: -1. Smoothing out feature transitions in audio-reactive animations -2. Creating more dynamic and interesting feature curves for visual effects -3. Emphasizing specific segments of a feature while de-emphasizing others - -Outputs: -- Processed FEATURE with interpolated segments -- Visualization of the interpolated feature (IMAGE type) -""" -}) - -add_node_config("FeatureRebase", { - "TOP_DESCRIPTION": "Rebases feature values within specified thresholds.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be rebased (FEATURE type) -- `lower_threshold`: Lower threshold for feature values (FLOAT, default: 0.0, min: 0.0, max: 1.0, step: 0.01) -- `upper_threshold`: Upper threshold for feature values (FLOAT, default: 1.0, min: 0.0, max: 1.0, step: 0.01) -- `invert_output`: Whether to invert the output feature values (BOOLEAN, default: False) - -This node rebases the input feature values within the specified thresholds and normalizes them. -""" -}) - -add_node_config("FeatureMath", { - "TOP_DESCRIPTION": "Performs mathematical operations between a feature's values and a float value.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature (FEATURE type) -- `y`: Input value (FLOAT type) -- `operation`: Mathematical operation to perform ("add", "subtract", "multiply", "divide", "max", "min"). Determines how the feature's values are combined with y. - -This node takes a feature and performs the specified operation between its values and the float value y, returning the processed feature and its visualization. -""" -}) - - -add_node_config("FeatureScaler", { - "TOP_DESCRIPTION": "Scales and transforms feature values using various mathematical functions.", - "ADDITIONAL_INFO": """ - - `feature`: Input feature to be scaled (FEATURE type) - - `scale_type`: Type of scaling to apply ("linear", "logarithmic", "exponential", "inverse") - - `min_output`: Minimum output value after scaling (0.0 to 1.0) - - `max_output`: Maximum output value after scaling (0.0 to 1.0) - - `exponent`: Exponent for exponential scaling (0.1 to 10.0) - """ -}) - -add_node_config("FeatureCombine", { - "TOP_DESCRIPTION": "Performs mathematical operations between two features.", - "ADDITIONAL_INFO": """ - - `feature1`: First input feature (FEATURE type) - - `feature2`: Second input feature (FEATURE type) - - `operation`: Mathematical operation to perform ("add", "subtract", "multiply", "divide", "max", "min"). Determines how the two features are combined. - - `weight1`: Weight applied to feature1 (0.0 to 1.0). Higher values give more importance to feature1 in the operation. - - `weight2`: Weight applied to feature2 (0.0 to 1.0). Higher values give more importance to feature2 in the operation. - """ -}) - -add_node_config("FeatureSmoothing", { - "TOP_DESCRIPTION": "Applies various smoothing techniques to a feature.", - "ADDITIONAL_INFO": """ - - `feature`: Input feature to be smoothed (FEATURE type) - - `smoothing_type`: Type of smoothing to apply ("moving_average", "exponential", "gaussian") - - `window_size`: Size of the smoothing window for moving average and gaussian (3 to 21, odd numbers only). Larger values create smoother transitions but may reduce responsiveness. - - `alpha`: Smoothing factor for exponential smoothing (0.0 to 1.0). Higher values make the feature respond more quickly to changes, while lower values create a more gradual, smoothed effect. - - `sigma`: Standard deviation for gaussian smoothing (0.1 to 5.0). Higher values create a more pronounced smoothing effect. - """ -}) - -add_node_config("FeatureOscillator", { - "TOP_DESCRIPTION": "Generates oscillating patterns based on the input feature.", - "ADDITIONAL_INFO": """ - - `feature`: Input feature to base oscillation on (FEATURE type) - - `oscillator_type`: Type of oscillation ("sine", "square", "sawtooth", "triangle") - - `frequency`: Frequency of oscillation (0.1 to 10.0) - - `amplitude`: Amplitude of oscillation (0.0 to 1.0) - - `phase_shift`: Phase shift of oscillation (0.0 to 2π) - - `blend`: Blend factor between original feature and oscillation (0.0 to 1.0) - """ -}) - -add_node_config("FeatureFade", { - "TOP_DESCRIPTION": "Fades between two features based on a fader value or a control feature.", - "ADDITIONAL_INFO": """ -- `feature1`: First input feature to fade from (FEATURE type) -- `feature2`: Second input feature to fade to (FEATURE type) -- `fader`: Static fader value to control the blend between feature1 and feature2 (0.0 to 1.0). 0.0 is 100 percent feature1, 1.0 is 100 percent feature2. -- `control_feature`: Optional feature to dynamically control the fader value (FEATURE type). If provided, the fader value will be modulated by this feature. - -Shoutout @cyncratic -""" -}) - -add_node_config("FeatureTruncateOrExtend", { - "TOP_DESCRIPTION": "Adjusts the length of a feature to match a target feature pipe, either by truncating or extending it.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be adjusted (FEATURE type) -- `target_feature_pipe`: Target feature pipe to match the length (FEATURE type) -- `fill_method`: Method to use when extending the feature: - - "zeros": Fills with 0's - - "ones": Fills with 1's - - "average": Fills with the average value of the source feature - - "random": Fills with random values between 0 and 1 - - "repeat": Repeats the source values from the beginning -- `invert_output`: Whether to invert the output feature values (True/False) - -This node adjusts the length of the input feature to match the length of the target feature pipe. If the input feature is longer, it will be truncated. If it's shorter, it will be extended using the specified fill method. - -The "repeat" fill method is particularly useful for maintaining patterns or rhythms when extending the feature. - -Use cases: -1. Adapting audio-extracted features for shorter or longer video animations -2. Synchronizing features of different lengths for complex animations -3. Creating looping patterns by repeating shorter features - -Outputs: -- Adjusted FEATURE -- Visualization of the adjusted feature (IMAGE type) -""" -}) - - -add_node_config("FeatureToWeightsStrategy", { - "TOP_DESCRIPTION": "Converts a FEATURE input into a WEIGHTS_STRATEGY for use with IPAdapter nodes.", - "ADDITIONAL_INFO": """ -- `feature`: Input feature to be converted (FEATURE type) - -This node takes a FEATURE input and converts it into a WEIGHTS_STRATEGY that can be used with IPAdapter nodes. It creates a custom weights strategy based on the feature values for each frame. -This node is particularly useful for creating dynamic, feature-driven animations with IPAdapter, where the strength of the adaptation can vary over time based on extracted features from audio, video, or other sources. - -""" -}) - -NODE_CONFIGS["FlexImageBase"] = { - "BASE_DESCRIPTION": """ -- `images`: Input image sequence (IMAGE type) -- `feature`: Feature used to modulate the effect (FEATURE type) -- `feature_pipe`: Feature pipe containing frame information (FEATURE_PIPE type) -- `strength`: Overall strength of the effect (0.0 to 1.0) -- `feature_threshold`: Minimum feature value to apply the effect (0.0 to 1.0) -- `feature_mode`: How the feature modulates the parameter ("relative" or "absolute"). Relative mode adjusts the parameter based on its current value, while absolute mode directly sets the parameter to the feature value. -""" -} - -add_node_config("FlexImageHueShift", { - "TOP_DESCRIPTION": "Applies a hue shift effect to the image, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `hue_shift`: Amount of hue shift to apply (0.0 to 360.0 degrees). A value of 180 degrees will invert the hues. -- `feature_param`: Parameter to modulate based on the feature. Options are "hue_shift" or "None". - -Optional inputs: -- `opt_mask`: Optional mask to apply the effect selectively (MASK type) - -This node shifts the hues of the input image by the specified amount. The hue shift can be dynamically modulated by the input feature, allowing for time-varying color effects. The optional mask input allows for selective application of the effect to specific areas of the image. - -The hue shift is applied in the HSV color space, which means it affects the color of the image without changing its brightness or saturation. This can create interesting color transformation effects, such as: - -1. Subtle color grading by applying small hue shifts -2. Creating psychedelic or surreal effects with large hue shifts -3. Simulating color filters or gels used in photography and film -4. Generating day-to-night transitions by shifting blues towards oranges - -When used with feature modulation, this node can create dynamic color effects that respond to audio, motion, or other extracted features, making it useful for creating reactive visuals or music videos. - -Note: Extreme hue shifts may produce unexpected colors, especially for hues that are close to the wrap-around point (red). For more natural-looking results, consider using smaller hue shift values or combining with other color adjustment effects. -""" -}) - -add_node_config("FlexImageHorizontalToVertical", { - "TOP_DESCRIPTION": "Converts horizontal images to vertical format with customizable background effects.", - "ADDITIONAL_INFO": """ -- Inherits base parameters from FlexImageBase: - - `images`: Input image sequence (IMAGE type) - - `feature`: Feature used to modulate the effect (FEATURE type) - - `strength`: Overall strength of the effect (0.0 to 1.0) - - `feature_threshold`: Minimum feature value to apply the effect (0.0 to 1.0) - -Additional Parameters: -- `blur_amount`: Amount of blur for background when using blur effect (0.1 to 100.0) -- `background_type`: Type of background effect to apply: - - "blur": Blurred version of original image - - "border": Solid color border - - "mirror": Mirrored version of the image - - "gradient": Gradient based on image colors - - "pixelate": Pixelated version of the image - - "waves": Wavy distortion effect -- `border_color`: Color of the border when using border background type ("black" or "white") -- `scale_factor`: Scale factor for the main image (0.1 to 2.0). Controls how large the original image appears in the vertical format. -- `effect_strength`: Intensity of the background effect (0.0 to 2.0) - -This node converts horizontal images to a vertical 16:9 format while maintaining aspect ratio. It's particularly useful for adapting landscape content for vertical video platforms like TikTok, Instagram Reels, or YouTube Shorts. - -The node only processes images that are wider than they are tall (horizontal). Vertical images pass through unchanged. -""" -}) - -add_node_config("FlexImageContrast", { - "TOP_DESCRIPTION": "Adjusts the contrast and brightness of the image, with an option to preserve luminosity.", - "ADDITIONAL_INFO": """ -- `contrast`: Controls the amount of contrast adjustment (0.0 to 3.0). Values greater than 1.0 increase contrast, while values less than 1.0 decrease it. -- `brightness`: Adjusts the overall brightness of the image (-1.0 to 1.0). Positive values brighten the image, negative values darken it. -- `preserve_luminosity`: When enabled, maintains the overall luminosity of the image after applying contrast and brightness adjustments (True/False). -- `feature_param`: Parameter to modulate based on the feature. Options are "contrast", "brightness", "preserve_luminosity", "None". - -This node allows for dynamic adjustment of image contrast and brightness, with the ability to preserve the overall luminosity of the image. It's useful for enhancing image details, adjusting exposure, or creating dramatic lighting effects. - -The contrast adjustment is applied around the mean value of the image, which helps maintain the overall balance of the image. The brightness adjustment is applied uniformly across the image. - -When 'preserve_luminosity' is enabled, the node calculates and adjusts the final luminosity to match the original image, which can help prevent over-brightening or over-darkening when applying strong contrast adjustments. - -Use cases include: -1. Enhancing low-contrast images -2. Creating high-contrast, dramatic effects -3. Correcting under or overexposed images -4. Dynamically adjusting image tone based on audio or other features -""" -}) - -add_node_config("FlexImageEdgeDetect", { - "TOP_DESCRIPTION": "Applies edge detection to the image using the Canny algorithm.", - "ADDITIONAL_INFO": """ -- `low_threshold`: Lower bound for the hysteresis thresholding (0 to 255). -- `high_threshold`: Upper bound for the hysteresis thresholding (0 to 255). -- `feature_param`: Parameter to modulate based on the feature. Options are "low_threshold", "high_threshold", "None". - -This node detects edges in the image using the Canny edge detection algorithm. The thresholds control the sensitivity of the edge detection. -""" -}) - -add_node_config("FlexImagePosterize", { - "TOP_DESCRIPTION": "Applies a posterization effect to the image, reducing the number of colors.", - "ADDITIONAL_INFO": """ -- `max_levels`: Maximum number of color levels per channel (2 to 256). -- `dither_strength`: Intensity of dithering effect (0.0 to 1.0). -- `channel_separation`: Degree of separation between color channels (0.0 to 1.0). -- `gamma`: Gamma correction applied before posterization (0.1 to 2.2). -- `feature_param`: Parameter to modulate based on the feature. Options are "max_levels", "dither_strength", "channel_separation", "gamma", "None". - -This node reduces the number of colors in the image, creating a posterized effect. Dithering can be applied to reduce banding. -""" -}) - -add_node_config("FlexImageKaleidoscope", { - "TOP_DESCRIPTION": "Creates a kaleidoscope effect by mirroring and rotating segments of the image.", - "ADDITIONAL_INFO": """ -- `segments`: Number of mirror segments (2 to 32). -- `center_x`: X-coordinate of the effect center (0.0 to 1.0). -- `center_y`: Y-coordinate of the effect center (0.0 to 1.0). -- `zoom`: Zoom factor for the effect (0.1 to 2.0). -- `rotation`: Rotation angle of the effect (0.0 to 360.0 degrees). -- `precession`: Rate of rotation change over time (-1.0 to 1.0). -- `speed`: Speed of the effect animation (0.1 to 5.0). -- `feature_param`: Parameter to modulate based on the feature. Options are "segments", "zoom", "rotation", "precession", "speed", "None". - -This node creates a kaleidoscope effect by mirroring and rotating segments of the image. -""" -}) - -add_node_config("FlexImageColorGrade", { - "TOP_DESCRIPTION": "Applies color grading to the image using a Look-Up Table (LUT).", - "ADDITIONAL_INFO": """ -- `intensity`: Strength of the color grading effect (0.0 to 1.0). -- `mix`: Blend factor between original and graded image (0.0 to 1.0). -- `lut_file`: Path to the LUT file (optional). -- `feature_param`: Parameter to modulate based on the feature. Options are "intensity", "mix", "None". - -This node applies color grading to the image using a LUT. The intensity and mix parameters control the strength and blend of the effect. -""" -}) - -add_node_config("FlexImageGlitch", { - "TOP_DESCRIPTION": "Creates a glitch effect by applying horizontal shifts and color channel separation.", - "ADDITIONAL_INFO": """ -- `shift_amount`: Magnitude of horizontal shift (0.0 to 1.0). -- `scan_lines`: Number of scan lines to add (0 to 100). -- `color_shift`: Amount of color channel separation (0.0 to 1.0). -- `feature_param`: Parameter to modulate based on the feature. Options are "shift_amount", "scan_lines", "color_shift", "None". - -This node creates a glitch effect by shifting pixels horizontally and separating color channels. -""" -}) - -add_node_config("FlexImageChromaticAberration", { - "TOP_DESCRIPTION": "Simulates chromatic aberration by shifting color channels.", - "ADDITIONAL_INFO": """ -- `shift_amount`: Magnitude of color channel shift (0.0 to 0.1). -- `angle`: Angle of the shift effect (0.0 to 360.0 degrees). -- `feature_param`: Parameter to modulate based on the feature. Options are "shift_amount", "angle", "None". - -This node simulates chromatic aberration by shifting the red and blue color channels in opposite directions. -""" -}) - -add_node_config("FlexImagePixelate", { - "TOP_DESCRIPTION": "Applies a pixelation effect to the image.", - "ADDITIONAL_INFO": """ -- `pixel_size`: Size of each pixelated block (1 to 100 pixels). -- `feature_param`: Parameter to modulate based on the feature. Options are "pixel_size", "None". - -This node reduces the resolution of the image by applying a pixelation effect. -""" -}) - -add_node_config("FlexImageBloom", { - "TOP_DESCRIPTION": "Adds a bloom effect to bright areas of the image.", - "ADDITIONAL_INFO": """ -- `threshold`: Brightness threshold for the bloom effect (0.0 to 1.0). -- `blur_amount`: Amount of blur applied to the bloom (0.0 to 50.0). -- `intensity`: Strength of the bloom effect (0.0 to 1.0). -- `feature_param`: Parameter to modulate based on the feature. Options are "threshold", "blur_amount", "intensity", "None". - -This node adds a bloom effect to bright areas of the image, creating a glowing effect. -""" -}) - -add_node_config("FlexImageTiltShift", { - "TOP_DESCRIPTION": "Creates a tilt-shift effect, simulating a shallow depth of field.", - "ADDITIONAL_INFO": """ -- `blur_amount`: Strength of the blur effect (0.0 to 50.0). -- `focus_position_x`: X-coordinate of the focus center (0.0 to 1.0). -- `focus_position_y`: Y-coordinate of the focus center (0.0 to 1.0). -- `focus_width`: Width of the focus area (0.0 to 1.0). -- `focus_height`: Height of the focus area (0.0 to 1.0). -- `focus_shape`: Shape of the focus area ("rectangle" or "ellipse"). -- `feature_param`: Parameter to modulate based on the feature. Options are "blur_amount", "focus_position_x", "focus_position_y", "focus_width", "focus_height", "None". - -This node creates a tilt-shift effect, simulating a shallow depth of field by blurring areas outside the focus region. -""" -}) - -add_node_config("FlexImageParallax", { - "TOP_DESCRIPTION": "Applies a parallax effect to the image using a depth map.", - "ADDITIONAL_INFO": """ -- `shift_x`: Horizontal shift factor for the parallax effect (-1.0 to 1.0). Positive values shift right, negative values shift left. -- `shift_y`: Vertical shift factor for the parallax effect (-1.0 to 1.0). Positive values shift up, negative values shift down. -- `depth_map`: Input depth map (IMAGE type). The depth map is used to determine the amount of shift for each pixel. -- `feature_param`: Parameter to modulate based on the feature. Options are "shift_x", "shift_y", "None". - -This node creates a parallax effect by shifting pixels in the image based on the corresponding values in the depth map. The shift factors `shift_x` and `shift_y` control the direction and magnitude of the parallax effect. The depth map should be provided as an image, where the intensity of each pixel represents the depth value. -""" -}) - -add_node_config("FlexImageHueShift", { - "TOP_DESCRIPTION": "Applies a hue shift effect to the image, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `hue_shift`: Amount of hue shift to apply (0.0 to 360.0 degrees). A value of 180 degrees will invert the hues. -- `feature_param`: Parameter to modulate based on the feature. Options are "hue_shift" or "None". - -Optional inputs: -- `opt_mask`: Optional mask to apply the effect selectively (MASK type) - -This node shifts the hues of the input image by the specified amount. The hue shift can be dynamically modulated by the input feature, allowing for time-varying color effects. The optional mask input allows for selective application of the effect to specific areas of the image. - -The hue shift is applied in the HSV color space, which means it affects the color of the image without changing its brightness or saturation. This can create interesting color transformation effects, such as: - -1. Subtle color grading by applying small hue shifts -2. Creating psychedelic or surreal effects with large hue shifts -3. Simulating color filters or gels used in photography and film -4. Generating day-to-night transitions by shifting blues towards oranges - -When used with feature modulation, this node can create dynamic color effects that respond to audio, motion, or other extracted features, making it useful for creating reactive visuals or music videos. - -Note: Extreme hue shifts may produce unexpected colors, especially for hues that are close to the wrap-around point (red). For more natural-looking results, consider using smaller hue shift values or combining with other color adjustment effects. -""" -}) - -add_node_config("FlexImageDepthWarp", { - "TOP_DESCRIPTION": "Applies a depth-based warping effect to the image, modulated by a selected feature.", - "ADDITIONAL_INFO": """ -- `warp_strength`: Strength of the warping effect (-10.0 to 10.0). Negative values invert the warp direction. -- `feature_param`: Parameter to modulate based on the feature. Options are "warp_strength" or "None". - -Optional inputs: -- `depth_map`: Depth map for the input image (IMAGE type) - -This node applies a warping effect to the input image based on the provided depth map. The warping strength can be dynamically modulated by the input feature, allowing for time-varying distortion effects. The depth map is used to determine the amount of displacement for each pixel. - -The warping process works as follows: -1. The depth map is normalized to the range [0, 1]. -2. Displacements are computed based on the depth values and the warp strength. -3. The image is remapped using these displacements, creating a warped version of the original image. - -Use cases include: -1. Creating pseudo-3D effects by warping 2D images based on depth information -2. Simulating camera movements or parallax effects -3. Generating dynamic distortions that respond to audio or other features - -When no depth map is provided, the node will return the original image without any warping applied. - -Note: The strength and nature of the warping effect can vary significantly depending on the depth map and warp strength. Experiment with different values to achieve the desired effect. Also, be aware that extreme warping can introduce artifacts or distortions in the image. -""" -}) - -add_node_config("UtilityNode",{ - "BASE_DESCRIPTION":"Various Utils" -}) - -add_node_config("ImageIntervalSelect", { - "TOP_DESCRIPTION": "Selects images from a sequence at specified intervals.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -- `interval`: Interval at which to select images (1 to 100000) -- `start_at`: Starting index for selection (0 to 100000) -- `end_at`: Ending index for selection (0 to 100000) -""" -}) - -add_node_config("ImageIntervalSelectPercentage", { - "TOP_DESCRIPTION": "Selects images from a sequence at specified percentage intervals.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -- `interval_percentage`: Interval at which to select images as a percentage of the total sequence length (1 to 100) -- `start_percentage`: Starting percentage for selection (0 to 100) -- `end_percentage`: Ending percentage for selection (0 to 100) -""" -}) - -add_node_config("DepthInjection", { - "TOP_DESCRIPTION": "Modifies depth maps based on mask contours, creating spherical gradients.", - "ADDITIONAL_INFO": """ -- `depth_map`: Input depth map (IMAGE type) -- `mask`: Input mask to define areas for depth modification (MASK type) -- `gradient_steepness`: Controls the steepness of the spherical gradient (0.1 to 10.0). Higher values create sharper transitions. -- `depth_min`: Minimum depth value for the modified areas (0.0 to 1.0) -- `depth_max`: Maximum depth value for the modified areas (0.0 to 1.0) -- `strength`: Overall strength of the depth modification effect (0.0 to 1.0) - -This node modifies depth maps by creating spherical gradients based on the contours of the input mask. It's useful for adding depth variations to specific areas of an image, such as creating a sense of volume for masked objects. - -The process involves: -1. Finding contours in the mask -2. Generating spherical gradients for each contour -3. Scaling the gradients to the specified depth range -4. Blending the modified depth with the original depth map - -This node can be particularly effective for: -- Adding depth to flat objects in a scene -- Creating a sense of volume for masked areas -- Fine-tuning depth maps for more realistic 3D effects - -Note: The node currently doesn't use the feature modulation capabilities, but these could be added in future versions for dynamic depth modifications. -""" -}) - -add_node_config("ImageChunks", { - "TOP_DESCRIPTION": "Concatenates images into a grid.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -- `padding`: Padding between images in the grid (default: 0) -- `normalize`: Whether to normalize the images (default: False) -- `scale_each`: Whether to scale each image individually (default: False) -- `pad_value`: Value for padding (default: 0) -""" -}) - -add_node_config("VideoChunks", { - "TOP_DESCRIPTION": "Chunks images into grids.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -- `chunk_size`: Number of images per grid (default: 4, min: 1) -- `padding`: Padding between images in the grid (default: 2) -- `normalize`: Whether to normalize the images (default: False) -- `scale_each`: Whether to scale each image individually (default: False) -- `pad_value`: Value for padding (default: 0) -""" -}) - -add_node_config("SwapDevice", { - "TOP_DESCRIPTION": "Transfers the image and mask tensors to the specified device (CPU or CUDA).", - "ADDITIONAL_INFO": """ -- `device`: The target device to transfer the tensors to. Options are "cpu" or "cuda". -- `image`: (Optional) The image tensor to transfer. If not provided, a zero tensor is created. -- `mask`: (Optional) The mask tensor to transfer. If not provided, a zero tensor is created. - -This node checks if the specified device is available and transfers the image and mask tensors to that device. If the device is not available, it raises a ValueError. -""" -}) - -add_node_config("ImageShuffle", { - "TOP_DESCRIPTION": "Shuffles images in groups of specified size.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -- `shuffle_size`: Number of images per shuffle group (default: 4, min: 1) -""" -}) - -add_node_config("ImageDifference", { - "TOP_DESCRIPTION": "Computes the difference between consecutive images.", - "ADDITIONAL_INFO": """ -- `image`: Input image sequence (IMAGE type) -""" -}) - -add_node_config("EffectVisualizer", { - "TOP_DESCRIPTION": "Visualizes feature values on video frames.", - "ADDITIONAL_INFO": """ -- `video_frames`: Input video frames (IMAGE type) -- `feature`: Feature to visualize (FEATURE type) -- `text_color`: Color for text overlay (RGB string, e.g., "(255,255,255)") -- `font_scale`: Scale factor for the font size (0.1 to 2.0) -""" -}) - -add_node_config("ProximityVisualizer", { - "TOP_DESCRIPTION": "Visualizes proximity relationships between anchor and query locations on video frames.", - "ADDITIONAL_INFO": """ -- `anchor_locations`: Locations of anchor points (LOCATION type) -- `query_locations`: Locations of query points (LOCATION type) -- `feature`: Proximity feature to visualize (FEATURE type) -- `anchor_color`: Color for anchor points (RGB string, e.g., "(255,0,0)") -- `query_color`: Color for query points (RGB string, e.g., "(0,255,0)") -- `line_color`: Color for the line connecting closest points (RGB string, e.g., "(0,0,255)") - - -The visualization helps in understanding spatial relationships and proximity-based effects in the video sequence. -""" -}) - -add_node_config("PitchVisualizer", { - "TOP_DESCRIPTION": "Visualizes pitch-related information on video frames.", - "ADDITIONAL_INFO": """ -- `video_frames`: Input video frames (IMAGE type) -- `feature`: Pitch feature to visualize (FEATURE type) -- `text_color`: Color of the text overlay (RGB string, e.g., "(255,255,255)") -- `font_scale`: Scale factor for the font size (0.1 to 2.0) - -This node overlays pitch-related information on video frames, including: -- Feature value -- Pitch value in Hz -- Confidence value of the pitch detection -- Approximate musical note - -The information is displayed as text on each frame, allowing for easy visualization of pitch characteristics alongside the video content. -""" -}) - -add_node_config("FlexVideoBase", { - "TOP_DESCRIPTION": "Base class for flexible video effect nodes.", - "ADDITIONAL_INFO": """ -- `images`: Input video frames (IMAGE type) -- `feature`: Feature used to modulate the effect (FEATURE type) -- `strength`: Overall strength of the effect (0.0 to 2.0) -- `feature_mode`: How the feature modulates the parameter ("relative" or "absolute") -- `feature_param`: Parameter to be modulated by the feature -- `feature_threshold`: Minimum feature value to apply the effect (0.0 to 1.0) -- `feature_pipe`: (Sometimes Optional) Feature pipe containing frame information (FEATURE_PIPE type) -""" -}) - -add_node_config("FlexVideoDirection", { - "TOP_DESCRIPTION": "Applies a direction-based effect to video frames based on feature values.", - "ADDITIONAL_INFO": """ -- Inherits parameters from FlexVideoBase -- `feature_pipe`: (Optional) Feature pipe containing frame information (FEATURE_PIPE type) - -This node creates a video effect by selecting frames based on the input feature values. It can create effects like reversing, speeding up, or creating loops in the video sequence. -""" -}) - -add_node_config("FlexVideoSpeed", { - "TOP_DESCRIPTION": "Adjusts the playback speed of video frames based on feature values.", - "ADDITIONAL_INFO": """ -- Inherits parameters from FlexVideoBase -- `feature_pipe`: Feature pipe containing frame information (FEATURE_PIPE type) -- `max_speed_percent`: Maximum speed as a percentage of the original speed (1.0 to 1000.0) -- `duration_adjustment_method`: Method to adjust video duration ("Interpolate" or "Truncate/Repeat") - -This node modifies the playback speed of the video based on the input feature values. It can create effects like slow motion, fast forward, or variable speed playback. -""" -}) - -add_node_config("FlexVideoFrameBlend", { - "TOP_DESCRIPTION": "Applies frame blending effect to video frames based on feature values.", - "ADDITIONAL_INFO": """ -- Inherits parameters from FlexVideoBase -- `blend_strength`: Strength of the frame blending effect (0.0 to 1.0) - -This node creates a frame blending effect, where each frame is blended with the next frame. The strength of the blend is modulated by the input feature values, allowing for dynamic motion blur effects. -""" -}) - -add_node_config("FlexVideoSeek", { - "TOP_DESCRIPTION": "Applies a seeking effect to video frames based on feature values.", - "ADDITIONAL_INFO": """ -- `images`: Input video frames (IMAGE type) -- `feature`: Feature used to modulate the seeking effect (FEATURE type) -- `strength`: Overall strength of the seeking effect (0.0 to 2.0) -- `feature_mode`: How the feature modulates the parameter ("relative" or "absolute") -- `feature_param`: Parameter to be modulated by the feature -- `feature_threshold`: Minimum feature value to apply the effect (0.0 to 1.0) -- `seek_speed`: Speed of the seeking effect (0.0 to 5.0) - -This node creates a dynamic seeking effect in the video based on the input feature values. The seek_speed parameter controls how quickly the video seeks through frames, while the feature values modulate this speed over time. This can create interesting time manipulation effects, such as speeding up or slowing down different parts of the video based on audio features or other inputs. - -The strength parameter allows for overall control of the effect intensity, while feature_mode determines whether the feature values are applied relatively or absolutely to the base seek_speed. - -Use cases include: -1. Creating music-reactive video effects where the video seeks based on audio features -2. Generating time-lapse-like effects with variable speeds -3. Producing glitch-like visuals by rapidly seeking through frames - -Note: This effect can significantly alter the temporal coherence of the video, so use it judiciously for artistic effects. -""" -}) - -add_node_config("AudioPad", { - "TOP_DESCRIPTION": "Pads the audio waveform with specified values on the left and right sides.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be padded (AUDIO type) -- `pad_left`: Number of samples to pad on the left side (0 to 44100) -- `pad_right`: Number of samples to pad on the right side (0 to 44100) -- `pad_mode`: Method of padding ("constant", "reflect", "replicate", or "circular") - -This node allows you to add padding to the beginning and/or end of an audio waveform. It's useful for adjusting the length of audio clips or creating space for effects. -""" -}) - -add_node_config("AudioVolumeNormalization", { - "TOP_DESCRIPTION": "Normalizes the volume of the audio to a target level.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be normalized (AUDIO type) -- `target_level`: Desired RMS level in decibels (-60.0 to 0.0 dB) - -This node adjusts the volume of the input audio to reach a specified target level. It's useful for ensuring consistent volume across different audio clips or adjusting the overall loudness of an audio sample. -""" -}) - -add_node_config("AudioResample", { - "TOP_DESCRIPTION": "Resamples the audio to a new sample rate.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be resampled (AUDIO type) -- `new_sample_rate`: Desired new sample rate (8000 to 192000 Hz) - -This node changes the sample rate of the input audio. It's useful for matching sample rates between different audio sources or preparing audio for specific processing requirements. -""" -}) - -add_node_config("AudioChannelMerge", { - "TOP_DESCRIPTION": "Merges two mono audio inputs into a stereo output.", - "ADDITIONAL_INFO": """ -- `audio1`: First input audio channel (AUDIO type) -- `audio2`: Second input audio channel (AUDIO type) - -This node combines two mono audio inputs into a single stereo audio output. It's useful for creating stereo effects or combining separate audio tracks. -""" -}) - -add_node_config("AudioChannelSplit", { - "TOP_DESCRIPTION": "Splits a stereo audio input into two mono outputs.", - "ADDITIONAL_INFO": """ -- `audio`: Input stereo audio to be split (AUDIO type) - -This node separates a stereo audio input into two mono audio outputs. It's useful for processing individual channels separately or extracting a single channel from a stereo recording. -""" -}) - -add_node_config("AudioTimeStretch", { - "TOP_DESCRIPTION": "Stretches or compresses the audio in time without changing its pitch.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to be time-stretched (AUDIO type) -- `rate`: Time stretching factor (0.5 to 2.0) - -This node changes the duration of the audio without altering its pitch. A rate greater than 1.0 speeds up the audio, while a rate less than 1.0 slows it down. It's useful for adjusting the length of audio to fit a specific duration or creating time-based effects. -""" -}) - -add_node_config("AudioConcatenate", { - "TOP_DESCRIPTION": "Concatenates two audio inputs end-to-end.", - "ADDITIONAL_INFO": """ -- `audio1`: First input audio (AUDIO type) -- `audio2`: Second input audio (AUDIO type) - -This node joins two audio inputs sequentially, with the second audio following the first. It's useful for combining multiple audio clips into a single, longer audio stream. -""" -}) - -add_node_config("AudioCombine", { - "TOP_DESCRIPTION": "Combines two audio inputs by mixing them together with specified weights.", - "ADDITIONAL_INFO": """ -- `audio1`: First input audio (AUDIO type) -- `audio2`: Second input audio (AUDIO type) -- `weight1`: Weight for the first audio input (0.0 to 1.0) -- `weight2`: Weight for the second audio input (0.0 to 1.0) - -This node mixes two audio inputs together, allowing you to control the contribution of each input to the final output. It's useful for creating layered audio effects or blending different audio sources. -""" -}) - - -add_node_config("ImageScaleToTarget", { - "TOP_DESCRIPTION": "Scales an input image to match the dimensions of a target image.", - "ADDITIONAL_INFO": """ -- `image`: Input image to be scaled (IMAGE type) -- `target_image`: Image whose dimensions will be used as the target size (IMAGE type) -- `upscale_method`: Method used for upscaling. Options include: - - "nearest-exact": Nearest neighbor interpolation - - "bilinear": Bilinear interpolation - - "area": Area interpolation - - "bicubic": Bicubic interpolation - - "lanczos": Lanczos interpolation -- `crop`: Cropping method to use if aspect ratios don't match. Options are: - - "disabled": No cropping - - "center": Center crop - -This node scales the input image to match the dimensions of the target image. If the target image has a width or height of 0, the node will calculate the missing dimension to maintain the aspect ratio of the input image. - -The upscale_method parameter allows you to choose the interpolation method for scaling, which can affect the quality and characteristics of the output image. - -If the aspect ratios of the input and target images don't match, you can use the crop parameter to determine how to handle the mismatch. The "center" option will crop the scaled image from the center to match the target dimensions. - -Outputs: -- Scaled IMAGE matching the dimensions of the target image -""" -}) - -add_node_config("FlexAudioVisualizerCircular", { - "TOP_DESCRIPTION": "Creates a circular audio visualization based on frequency or waveform data.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to visualize -- `frame_rate`: Frame rate of the output visualization (1.0 to 240.0 fps) -- `screen_width`: Width of the output visualization (100 to 1920 pixels) -- `screen_height`: Height of the output visualization (100 to 1080 pixels) -- `strength`: Strength of parameter modulation (0.0 to 1.0) -- `feature_param`: Parameter to modulate based on the optional feature input -- `feature_mode`: Mode of parameter modulation ("relative" or "absolute") -- `audio_feature_param`: Parameter to modulate based on audio features -- `position_x`: Horizontal position of the visualization center (0.0 to 1.0) -- `position_y`: Vertical position of the visualization center (0.0 to 1.0) -- `visualization_method`: Choose between "bar" or "line" visualization styles -- `visualization_feature`: Select "frequency" or "waveform" as the data source -- `smoothing`: Amount of smoothing applied to the visualization (0.0 to 1.0) -- `rotation`: Rotation angle of the visualization in degrees (0.0 to 360.0) -- `num_points`: Number of points in the circular visualization (3 to 1000) -- `fft_size`: Size of the FFT window for frequency analysis (256 to 8192) -- `min_frequency`: Minimum frequency to visualize (20.0 to 20000.0 Hz) -- `max_frequency`: Maximum frequency to visualize (20.0 to 20000.0 Hz) -- `radius`: Radius of the circular visualization (10.0 to 1000.0 pixels) -- `line_width`: Width of the lines in the visualization (1 to 10 pixels) -- `amplitude_scale`: Scaling factor for the amplitude (1.0 to 1000.0) -- `base_radius`: Base radius for the visualization (10.0 to 1000.0 pixels) - -This node creates a circular audio visualization that can represent either frequency spectrum or waveform data. The visualization can be displayed as bars radiating from the center or as a continuous line forming a deformed circle. - -Key features: -1. Two visualization methods: bar and line -2. Option to visualize frequency spectrum or waveform data -3. Customizable parameters for fine-tuning the visualization appearance -4. Parameter modulation based on audio features or external inputs -5. Adjustable position and rotation -6. Outputs both visualization and mask - -The node outputs both an IMAGE tensor (visualization) and a MASK tensor that can be used for compositing. -""" -}) - -add_node_config("FlexAudioVisualizerLine", { - "TOP_DESCRIPTION": "Creates a linear audio visualization based on frequency or waveform data.", - "ADDITIONAL_INFO": """ -- `audio`: Input audio to visualize -- `frame_rate`: Frame rate of the output visualization (1.0 to 240.0 fps) -- `screen_width`: Width of the output visualization (100 to 1920 pixels) -- `screen_height`: Height of the output visualization (100 to 1080 pixels) -- `strength`: Strength of parameter modulation (0.0 to 1.0) -- `feature_param`: Parameter to modulate based on the optional feature input -- `feature_mode`: Mode of parameter modulation ("relative" or "absolute") -- `audio_feature_param`: Parameter to modulate based on audio features -- `position_x`: Horizontal position of the visualization (0.0 to 1.0) -- `position_y`: Vertical position of the visualization (0.0 to 1.0) -- `visualization_method`: Choose between "bar" or "line" visualization styles -- `visualization_feature`: Select "frequency" or "waveform" as the data source -- `smoothing`: Amount of smoothing applied to the visualization (0.0 to 1.0) -- `rotation`: Rotation angle of the visualization in degrees (0.0 to 360.0) -- `num_bars`: Number of bars or points in the visualization (1 to 1024) -- `max_height`: Maximum height of the visualization (10.0 to 2000.0 pixels) -- `min_height`: Minimum height of the visualization (0.0 to 500.0 pixels) -- `separation`: Separation between bars (0.0 to 100.0 pixels) -- `curvature`: Curvature of the bar corners (0.0 to 50.0) -- `reflect`: Whether to reflect the visualization vertically -- `curve_smoothing`: Amount of smoothing applied to the line visualization (0.0 to 1.0) -- `fft_size`: Size of the FFT window for frequency analysis (256 to 8192) -- `min_frequency`: Minimum frequency to visualize (20.0 to 20000.0 Hz) -- `max_frequency`: Maximum frequency to visualize (20.0 to 20000.0 Hz) - -This node creates a linear audio visualization that can represent either frequency spectrum or waveform data. The visualization can be displayed as vertical bars or as a continuous line. - -Key features: -1. Two visualization methods: bar and line -2. Option to visualize frequency spectrum or waveform data -3. Customizable parameters for fine-tuning the visualization appearance -4. Parameter modulation based on audio features or external inputs -5. Reflection and rotation options -6. Outputs both visualization and mask - -The node outputs both an IMAGE tensor (visualization) and a MASK tensor that can be used for compositing. -""" -}) \ No newline at end of file + NODE_CONFIGS[node_name] = config \ No newline at end of file diff --git a/nodes/audio/audio_nodes.py b/nodes/audio/audio_nodes.py index 23a5859..ae74efe 100644 --- a/nodes/audio/audio_nodes.py +++ b/nodes/audio/audio_nodes.py @@ -10,6 +10,7 @@ from ..flex.feature_pipe import FeaturePipe import hashlib import torchaudio +from ...tooltips import apply_tooltips class AudioNodeBase(RyanOnTheInside): @@ -23,6 +24,7 @@ def create_empty_tensor(audio, frame_rate, height, width, channels=None): else: return torch.zeros((num_frames, height, width, channels), dtype=torch.float32) +@apply_tooltips class DownloadOpenUnmixModel(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -59,68 +61,9 @@ def download_and_load_model(self, model_name): return (separator,) -class AudioSeparator(AudioNodeBase): - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "model": ("OPEN_UNMIX_MODEL",), - "audio": ("AUDIO",), - "video_frames": ("IMAGE",), - "frame_rate": ("FLOAT", {"default": 30, "min": 0.1, "max": 120, "step": 0.1}), - } - } - - RETURN_TYPES = ("AUDIO", "AUDIO", "AUDIO", "AUDIO", "AUDIO", "FEATURE_PIPE") - RETURN_NAMES = ("audio", "drums_audio", "vocals_audio", "bass_audio", "other_audio", "feature_pipe") - FUNCTION = "process_audio" - CATEGORY = "RyanOnTheInside/Audio/AudioSeparation" - def process_audio(self, model, audio, video_frames, frame_rate): - waveform = audio['waveform'] - sample_rate = audio['sample_rate'] - - num_frames, height, width, _ = video_frames.shape - - if waveform.dim() == 3: - waveform = waveform.squeeze(0) - if waveform.dim() == 1: - waveform = waveform.unsqueeze(0) # Add channel dimension if mono - if waveform.shape[0] != 2: - waveform = waveform.repeat(2, 1) # Duplicate mono to stereo if necessary - - waveform = waveform.unsqueeze(0) - - # Determine the device - device = next(model.parameters()).device - waveform = waveform.to(device) - estimates = model(waveform) - # Create isolated audio objects for each target - isolated_audio = {} - target_indices = {'drums': 1, 'vocals': 0, 'bass': 2, 'other': 3} # Corrected indices - for target, index in target_indices.items(): - target_waveform = estimates[:, index, :, :] # Shape: (1, 2, num_samples) - - isolated_audio[target] = { - 'waveform': target_waveform.cpu(), # Move back to CPU - 'sample_rate': sample_rate, - 'frame_rate': frame_rate - } - - # Create FeaturePipe - feature_pipe = FeaturePipe(frame_rate, video_frames) - - return ( - audio, - isolated_audio['drums'], - isolated_audio['vocals'], - isolated_audio['bass'], - isolated_audio['other'], - feature_pipe, - ) - -#to be primary in version2 +@apply_tooltips class AudioSeparatorSimple(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -174,6 +117,7 @@ def process_audio(self, model, audio): isolated_audio['other'] ) +@apply_tooltips class AudioFilter(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -267,6 +211,7 @@ def apply_single_filter(self, audio, filter_params, sample_rate): # return (model,) +@apply_tooltips class FrequencyFilterPreset(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -342,6 +287,7 @@ def get_preset_filters(self, preset): else: raise ValueError(f"Unknown preset: {preset}") +@apply_tooltips class FrequencyFilterCustom(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -376,6 +322,7 @@ def create_filter(self, filter_type, order, cutoff, previous_filter=None): else: return ([filter_params],) +@apply_tooltips class FrequencyRange(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -411,6 +358,7 @@ def create_frequency_range(self, low_cutoff, high_cutoff, order, previous_range= else: return ([range_params],) +@apply_tooltips class AudioFeatureVisualizer(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -495,6 +443,7 @@ def visualize_audio_feature(self, audio, video_frames, visualization_type, frame return (mask,) +@apply_tooltips class EmptyImageFromAudio(AudioNodeBase): @classmethod def INPUT_TYPES(cls): @@ -517,6 +466,7 @@ def create_empty_image(self, audio, frame_rate, height, width): frame_count = empty_image.shape[0] return (empty_image, frame_count) +@apply_tooltips class EmptyMaskFromAudio(AudioNodeBase): @classmethod @@ -585,8 +535,8 @@ def create_empty_mask(self, audio, frame_rate, height, width): # if not folder_paths.exists_annotated_filepath(audio): # return "Invalid audio file: {}".format(audio) # return True - -#TODO + +@apply_tooltips class EmptyImageAndMaskFromAudio(AudioNodeBase): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/audio/audio_nodes_effects.py b/nodes/audio/audio_nodes_effects.py index 92b936b..3de88e0 100644 --- a/nodes/audio/audio_nodes_effects.py +++ b/nodes/audio/audio_nodes_effects.py @@ -5,7 +5,8 @@ apply_gain, time_stretch, ) -import torch +from ...tooltips import apply_tooltips + class AudioEffect(AudioNodeBase): def __init__(self): @@ -13,6 +14,7 @@ def __init__(self): CATEGORY = "RyanOnTheInside/Audio/Effects" +@apply_tooltips class AudioPitchShift(AudioEffect): @classmethod def INPUT_TYPES(cls): @@ -31,6 +33,7 @@ def pitch_shift_audio(self, audio, n_steps): shifted_waveform = pitch_shift(waveform, sample_rate, n_steps) return ({"waveform": shifted_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioFade(AudioEffect): @classmethod def INPUT_TYPES(cls): @@ -51,6 +54,7 @@ def fade_audio_node(self, audio, fade_in_duration, fade_out_duration, shape): faded_waveform = fade_audio(waveform, sample_rate, fade_in_duration, fade_out_duration, shape) return ({"waveform": faded_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioGain(AudioEffect): @classmethod def INPUT_TYPES(cls): @@ -69,8 +73,7 @@ def apply_gain_node(self, audio, gain_db): amplified_waveform = apply_gain(waveform, gain_db) return ({"waveform": amplified_waveform, "sample_rate": sample_rate},) - - +@apply_tooltips class AudioTimeStretch(AudioEffect): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/audio/audio_nodes_utility.py b/nodes/audio/audio_nodes_utility.py index 00fe057..0fdda17 100644 --- a/nodes/audio/audio_nodes_utility.py +++ b/nodes/audio/audio_nodes_utility.py @@ -10,6 +10,8 @@ dither_audio, ) import torch +from ...tooltips import apply_tooltips +import librosa class AudioUtility(AudioNodeBase): def __init__(self): @@ -17,6 +19,7 @@ def __init__(self): CATEGORY = "RyanOnTheInside/Audio/Utility" +@apply_tooltips class AudioPad(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -37,6 +40,7 @@ def pad_audio_node(self, audio, pad_left, pad_right, pad_mode): padded_waveform = pad_audio(waveform, pad_left, pad_right, pad_mode) return ({"waveform": padded_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioVolumeNormalization(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -55,6 +59,7 @@ def normalize_volume_node(self, audio, target_level): normalized_waveform = normalize_volume(waveform, target_level) return ({"waveform": normalized_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioResample(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -73,6 +78,7 @@ def resample_audio_node(self, audio, new_sample_rate): resampled_waveform = resample_audio(waveform, sample_rate, new_sample_rate) return ({"waveform": resampled_waveform, "sample_rate": new_sample_rate},) +@apply_tooltips class AudioChannelMerge(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -97,6 +103,7 @@ def merge_channels_node(self, audio_list): merged_waveform = merge_channels(waveform_list) return ({"waveform": merged_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioChannelSplit(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -115,6 +122,7 @@ def split_channels_node(self, audio): audio_list = [{"waveform": w, "sample_rate": sample_rate} for w in channel_waveforms] return (audio_list,) +@apply_tooltips class AudioConcatenate(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -136,6 +144,7 @@ def concatenate_audio_node(self, audio1, audio2): concatenated_waveform = concatenate_audio(audio1['waveform'], audio2['waveform']) return ({"waveform": concatenated_waveform, "sample_rate": sample_rate},) +@apply_tooltips class Audio_Combine(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -159,6 +168,7 @@ def combine_audio_node(self, audio1, audio2, weight1=0.5, weight2=0.5): combined_waveform = combine_audio(audio1['waveform'], audio2['waveform'], weight1, weight2) return ({"waveform": combined_waveform, "sample_rate": sample_rate},) +@apply_tooltips class AudioSubtract(AudioUtility): @classmethod def INPUT_TYPES(cls): @@ -189,27 +199,50 @@ def subtract_audio_node(self, audio1, audio2): subtracted_waveform = waveform1 - waveform2 return ({"waveform": subtracted_waveform, "sample_rate": sample_rate},) +#TODO: TOO SLOW +@apply_tooltips class AudioInfo(AudioUtility): @classmethod def INPUT_TYPES(cls): return { "required": { "audio": ("AUDIO",), + "frame_rate": ("FLOAT", {"default": 30, "min": 0.1, "max": 120, "step": 0.1}), } } - RETURN_TYPES = ("FLOAT", "INT", "INT", "INT", "FLOAT", "FLOAT", "FLOAT", "STRING") - RETURN_NAMES = ("duration_seconds", "sample_rate", "num_channels", "num_samples", - "max_amplitude", "mean_amplitude", "rms_amplitude", "bit_depth") + RETURN_TYPES = ("INT", "INT", "INT", "INT", "INT", "FLOAT", "FLOAT", "FLOAT", "INT", "INT", "INT", "FLOAT", "FLOAT", "FLOAT", "STRING") + RETURN_NAMES = ( + "total_frames", "frames_per_beat", "frames_per_bar", "frames_per_quarter", "frames_per_eighth", + "audio_duration", "beats_per_second", "detected_bpm", + "sample_rate", "num_channels", "num_samples", + "max_amplitude", "mean_amplitude", "rms_amplitude", "bit_depth" + ) FUNCTION = "get_audio_info" - def get_audio_info(self, audio): - waveform, sample_rate = audio['waveform'], audio['sample_rate'] + def get_audio_info(self, audio, frame_rate): + # Get basic audio info + waveform = audio['waveform'] + sample_rate = audio['sample_rate'] + + # Calculate original audio info first + num_channels = waveform.shape[1] if waveform.dim() > 2 else 1 + num_samples = waveform.shape[-1] + audio_duration = num_samples / sample_rate + + # Calculate total frames + total_frames = int(audio_duration * frame_rate) + + # Detect BPM using librosa + audio_mono = waveform.squeeze(0).mean(axis=0).cpu().numpy() + tempo, _ = librosa.beat.beat_track(y=audio_mono, sr=sample_rate) + beats_per_second = tempo / 60.0 - # Calculate basic properties - num_channels = waveform.shape[1] - num_samples = waveform.shape[2] - duration_seconds = num_samples / sample_rate + # Calculate frames per beat and musical divisions + frames_per_beat = int(frame_rate / beats_per_second) + frames_per_bar = frames_per_beat * 4 # Assuming 4/4 time signature + frames_per_quarter = frames_per_beat + frames_per_eighth = frames_per_beat // 2 # Calculate amplitude statistics max_amplitude = float(torch.max(torch.abs(waveform))) @@ -220,7 +253,14 @@ def get_audio_info(self, audio): bit_depth = str(waveform.dtype) return ( - duration_seconds, + total_frames, + frames_per_beat, + frames_per_bar, + frames_per_quarter, + frames_per_eighth, + audio_duration, + beats_per_second, + tempo, # detected_bpm sample_rate, num_channels, num_samples, @@ -230,6 +270,7 @@ def get_audio_info(self, audio): bit_depth ) +@apply_tooltips class AudioDither(AudioUtility): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/audio/audio_processor_legacy.py b/nodes/audio/audio_processor_legacy.py index 1dab3e8..cb2b3df 100644 --- a/nodes/audio/audio_processor_legacy.py +++ b/nodes/audio/audio_processor_legacy.py @@ -9,11 +9,12 @@ import torch import cv2 import matplotlib.pyplot as plt +from ... import ProgressMixin -class BaseAudioProcessor: +class BaseAudioProcessor(ProgressMixin): def __init__(self, audio, num_frames, height, width, frame_rate): self.audio = audio['waveform'].squeeze(0).mean(axis=0).cpu().numpy() # Convert to mono and numpy array self.sample_rate = audio['sample_rate'] @@ -24,18 +25,7 @@ def __init__(self, audio, num_frames, height, width, frame_rate): self.audio_duration = len(self.audio) / self.sample_rate self.frame_duration = 1 / self.frame_rate if self.frame_rate > 0 else self.audio_duration / self.num_frames - self.progress_bar = None - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) - - def end_progress(self): - self.progress_bar = None - def _normalize(self, data): return (data - data.min()) / (data.max() - data.min()) diff --git a/nodes/audio/flex_audio.py b/nodes/audio/flex_audio.py index f2f7bbe..0940e52 100644 --- a/nodes/audio/flex_audio.py +++ b/nodes/audio/flex_audio.py @@ -1,46 +1,39 @@ import torch import numpy as np -from abc import ABC, abstractmethod +from abc import abstractmethod from tqdm import tqdm from comfy.utils import ProgressBar from ... import RyanOnTheInside +from ..flex.flex_base import FlexBase from .audio_utils import pitch_shift, time_stretch -import torch -import numpy as np -from abc import ABC, abstractmethod +from ...tooltips import apply_tooltips -class FlexAudioBase(RyanOnTheInside, ABC): +@apply_tooltips +class FlexAudioBase(FlexBase, RyanOnTheInside): @classmethod def INPUT_TYPES(cls): + base_input_types = super().INPUT_TYPES() + base_required = base_input_types.get("required", {}) + base_optional = base_input_types.get("optional", {}) + + # Update required inputs + base_required.update({ + "audio": ("AUDIO",), + "target_fps": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 60.0, "step": 1.0}), + }) + return { - "required": { - "audio": ("AUDIO",), - "feature": ("FEATURE",), - "feature_pipe": ("FEATURE_PIPE",), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (cls.get_modifiable_params(), {"default": cls.get_modifiable_params()[0]}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - "target_fps": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 60.0, "step": 1.0}), - } + "required": base_required, + "optional": base_optional, } - CATEGORY = "RyanOnTheInside/FlexAudio" + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Audio" RETURN_TYPES = ("AUDIO",) FUNCTION = "apply_effect" def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) + super().__init__() - def end_progress(self): - self.progress_bar = None @classmethod @abstractmethod @@ -48,24 +41,21 @@ def get_modifiable_params(cls): """Return a list of parameter names that can be modulated.""" return [] - def modulate_param(self, param_value, feature_value, strength, mode): - if mode == "relative": - # Adjust to vary between -param_value and +param_value - return param_value * (2 * feature_value - 1) * strength - else: # absolute - # Directly use feature_value to determine the shift - return param_value * (2 * feature_value - 1) - - def apply_effect(self, audio, feature, feature_pipe, strength, feature_threshold, feature_param, feature_mode, target_fps, **kwargs): + def apply_effect(self, audio, opt_feature=None, strength=1.0, feature_threshold=0.0, feature_param=None, feature_mode="relative", target_fps=3.0, **kwargs): waveform = audio['waveform'] # Shape: [Batch, Channels, Samples] sample_rate = audio['sample_rate'] - original_num_frames = feature_pipe.frame_count device = torch.device("cuda" if torch.cuda.is_available() else "cpu") waveform = waveform.to(device) audio_duration = waveform.shape[-1] / sample_rate - target_num_frames = int(audio_duration * target_fps) - num_frames = min(target_num_frames, original_num_frames) + num_frames = int(audio_duration * target_fps) + + if opt_feature is not None: + original_num_frames = opt_feature.frame_count + num_frames = min(num_frames, original_num_frames) + + # Initialize parameter scheduler + self.initialize_scheduler(num_frames, **kwargs) self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") @@ -78,11 +68,18 @@ def apply_effect(self, audio, feature, feature_pipe, strength, feature_threshold # Initialize list to store processed frames processed_frames = [] - # Pre-compute averaged feature values - feature_values = np.array([feature.get_value_at_frame(i) for i in range(original_num_frames)]) - frames_per_segment = max(1, original_num_frames // num_frames) - averaged_features = [np.mean(feature_values[i:i+frames_per_segment]) - for i in range(0, original_num_frames, frames_per_segment)] + # Pre-compute averaged feature values if feature is provided + if opt_feature is not None: + feature_values = np.array([ + 0.5 if self.get_feature_value(i, opt_feature) is None + else self.get_feature_value(i, opt_feature) + for i in range(opt_feature.frame_count) + ]) + frames_per_segment = max(1, opt_feature.frame_count // num_frames) + averaged_features = [np.mean(feature_values[i:i+frames_per_segment]) + for i in range(0, opt_feature.frame_count, frames_per_segment)] + else: + averaged_features = [None] * num_frames # No feature modulation # Define cross-fade length (e.g., 10% of frame length) crossfade_length = int(samples_per_frame * 0.1) @@ -94,16 +91,24 @@ def apply_effect(self, audio, feature, feature_pipe, strength, feature_threshold feature_value = averaged_features[i] - kwargs['frame_index'] = i - kwargs['sample_rate'] = sample_rate + # Process parameters using base class functionality + processed_kwargs = self.process_parameters( + frame_index=i, + feature_value=feature_value, + feature_threshold=feature_threshold, + strength=strength, + feature_param=feature_param, + feature_mode=feature_mode, + sample_rate=sample_rate, + **kwargs + ) - if feature_value >= feature_threshold: + if feature_value is not None and feature_value >= feature_threshold: try: processed_frame = self.process_audio_frame( - audio_frame, feature_value, strength, - feature_param=feature_param, + audio_frame,feature_param=feature_param, feature_mode=feature_mode, - **kwargs + **processed_kwargs ) except Exception as e: import traceback @@ -111,7 +116,8 @@ def apply_effect(self, audio, feature, feature_pipe, strength, feature_threshold traceback.print_exc() processed_frame = audio_frame else: - processed_frame = audio_frame + # Process without feature modulation + processed_frame = self.apply_effect_internal(audio_frame, **processed_kwargs) if i > 0: # Apply cross-fade with previous frame @@ -134,13 +140,14 @@ def apply_effect(self, audio, feature, feature_pipe, strength, feature_threshold def process_audio_frame(self, audio_frame: torch.Tensor, feature_value: float, strength: float, feature_param: str, feature_mode: str, **kwargs) -> torch.Tensor: - # Modulate the selected parameter - if feature_param in self.get_modifiable_params() and feature_param in kwargs: + # Modulate the selected parameter if feature_value is provided + if feature_value is not None and feature_param in self.get_modifiable_params() and feature_param in kwargs: + param_value = kwargs[feature_param] modulated_value = self.modulate_param( - kwargs[feature_param], feature_value, strength, feature_mode + feature_param, param_value, feature_value, strength, feature_mode ) - # Ensure n_steps is within the desired range - kwargs[feature_param] = max(-kwargs[feature_param], min(kwargs[feature_param], modulated_value)) + # Ensure the modulated value is within the desired range + kwargs[feature_param] = modulated_value # Call the child class's implementation return self.apply_effect_internal(audio_frame, **kwargs) @@ -150,18 +157,22 @@ def apply_effect_internal(self, audio_frame: torch.Tensor, **kwargs) -> torch.Te """Apply the effect to the audio frame. To be implemented by child classes.""" pass - - - - +@apply_tooltips class FlexAudioPitchShift(FlexAudioBase): @classmethod def INPUT_TYPES(cls): + base_input_types = super().INPUT_TYPES() + base_required = base_input_types.get("required", {}) + base_optional = base_input_types.get("optional", {}) + + # Update required inputs + base_required.update({ + "n_steps": ("FLOAT", {"default": 6.0, "min": 0.0, "max": 12.0, "step": 0.1}), + }) + return { - "required": { - **super().INPUT_TYPES()["required"], - "n_steps": ("FLOAT", {"default": 6.0, "min": 0.0, "max": 12.0, "step": 0.1}), - } + "required": base_required, + "optional": base_optional, } @classmethod @@ -170,18 +181,26 @@ def get_modifiable_params(cls): def apply_effect_internal(self, audio_frame: torch.Tensor, n_steps: float, **kwargs) -> torch.Tensor: sample_rate = kwargs.get('sample_rate', 44100) # Default to 44100 if not provided - - # Use the absolute value of n_steps for pitch shifting + + # Use the value of n_steps for pitch shifting return pitch_shift(audio_frame, sample_rate, n_steps) - + +@apply_tooltips class FlexAudioTimeStretch(FlexAudioBase): @classmethod def INPUT_TYPES(cls): + base_input_types = super().INPUT_TYPES() + base_required = base_input_types.get("required", {}) + base_optional = base_input_types.get("optional", {}) + + # Update required inputs + base_required.update({ + "rate": ("FLOAT", {"default": 1.0, "min": 0.5, "max": 2.0, "step": 0.01}), + }) + return { - "required": { - **super().INPUT_TYPES()["required"], - "rate": ("FLOAT", {"default": 1.0, "min": 0.5, "max": 2.0, "step": 0.01}), - } + "required": base_required, + "optional": base_optional, } @classmethod @@ -189,4 +208,4 @@ def get_modifiable_params(cls): return ["rate"] def apply_effect_internal(self, audio_frame: torch.Tensor, rate: float, **kwargs) -> torch.Tensor: - return time_stretch(audio_frame, rate) \ No newline at end of file + return time_stretch(audio_frame, rate) diff --git a/nodes/audio/flex_audio_visualizer.py b/nodes/audio/flex_audio_visualizer.py index 7477ba5..7ae5e65 100644 --- a/nodes/audio/flex_audio_visualizer.py +++ b/nodes/audio/flex_audio_visualizer.py @@ -1,9 +1,12 @@ import torch import numpy as np import cv2 -from abc import ABC, abstractmethod +from abc import abstractmethod from comfy.utils import ProgressBar +from ..flex.flex_base import FlexBase from ... import RyanOnTheInside +from ...tooltips import apply_tooltips + import matplotlib.pyplot as plt class BaseAudioProcessor: @@ -88,43 +91,39 @@ def update_spectrum(self, new_spectrum, smoothing): # Apply smoothing self.spectrum = smoothing * self.spectrum + (1 - smoothing) * new_spectrum -class FlexAudioVisualizerBase(RyanOnTheInside, ABC): +@apply_tooltips +class FlexAudioVisualizerBase(FlexBase, RyanOnTheInside): @classmethod def INPUT_TYPES(cls): - return { + base_inputs = super().INPUT_TYPES() + base_required = base_inputs.get("required", {}) + base_optional = base_inputs.get("optional", {}) + + new_inputs = { "required": { "audio": ("AUDIO",), "frame_rate": ("FLOAT", {"default": 30.0, "min": 1.0, "max": 240.0, "step": 1.0}), - "screen_width": ("INT", {"default": 800, "min": 100, "max": 1920, "step": 1}), - "screen_height": ("INT", {"default": 600, "min": 100, "max": 1080, "step": 1}), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (cls.get_modifiable_params(), {"default": cls.get_modifiable_params()[0]}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - "audio_feature_param": (cls.get_modifiable_params(), {"default": "None"}), + "screen_width": ("INT", {"default": 768, "min": 100, "max": 1920, "step": 1}), + "screen_height": ("INT", {"default": 464, "min": 100, "max": 1080, "step": 1}), "position_x": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), "position_y": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), }, "optional": { - "opt_feature": ("FEATURE",) + "opt_feature": ("FEATURE",), } } - CATEGORY = "RyanOnTheInside/FlexAudioVisualizer" - RETURN_TYPES = ("IMAGE","MASK") - FUNCTION = "apply_effect" + required = {**base_required, **new_inputs["required"]} + optional = {**base_optional, **new_inputs["optional"]} - def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) + return { + "required": required, + "optional": optional + } - def end_progress(self): - self.progress_bar = None + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Audio/Visualizers" + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "apply_effect" @classmethod @abstractmethod @@ -132,72 +131,6 @@ def get_modifiable_params(cls): """Return a list of parameter names that can be modulated.""" pass - def modulate_param(self, param_name, param_value, feature_value, strength, mode): - if mode == "relative": - modulated_value = param_value * (1 + (feature_value - 0.5) * strength * 2) - else: # absolute - modulated_value = param_value * feature_value * strength - # Ensure type consistency - return type(param_value)(modulated_value) - - def apply_effect(self, audio, frame_rate, screen_width, screen_height, strength, feature_param, feature_mode, - audio_feature_param, opt_feature=None, **kwargs): - # Calculate num_frames based on audio duration and frame_rate - audio_duration = len(audio['waveform'].squeeze(0).mean(axis=0)) / audio['sample_rate'] - num_frames = int(audio_duration * frame_rate) - - # Initialize the audio processor - processor = BaseAudioProcessor(audio, num_frames, screen_height, screen_width, frame_rate) - - # Initialize results list - result = [] - - self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - - for i in range(num_frames): - # Make a copy of kwargs for this frame to avoid altering original parameters - frame_kwargs = kwargs.copy() - - # Get audio data for visualization (returns audio_feature_value) - audio_feature_value = self.get_audio_data(processor, i, **frame_kwargs) - - # Modulate parameters based on opt_feature if provided - if opt_feature is not None and feature_param != "None": - # Get feature value from opt_feature - feature_value = opt_feature.get_value_at_frame(i) - - if feature_value is not None: - # Modulate the specified parameter using feature_value - original_value = frame_kwargs[feature_param] - modulated_value = self.modulate_param(feature_param, original_value, feature_value, strength, feature_mode) - # Ensure the modulated value is within valid ranges - modulated_value = self.validate_param(feature_param, modulated_value) - frame_kwargs[feature_param] = modulated_value - - # Modulate parameters based on audio feature value if audio_feature_param is set - if audio_feature_param != "None" and audio_feature_value is not None: - original_value = frame_kwargs[audio_feature_param] - modulated_value = self.modulate_param(audio_feature_param, original_value, audio_feature_value, strength, feature_mode) - # Ensure the modulated value is within valid ranges - modulated_value = self.validate_param(audio_feature_param, modulated_value) - frame_kwargs[audio_feature_param] = modulated_value - - # Generate the image for the current frame using frame_kwargs - image = self.draw(processor, **frame_kwargs) - result.append(image) - - self.update_progress() - - self.end_progress() - - # Convert the list of numpy arrays to a single numpy array - result_np = np.stack(result) # Shape: (N, H, W, 3) - - #lazy - result_tensor = torch.from_numpy(result_np).float() - mask = result_tensor[:, :, :, 0] - return (result_tensor,mask,) - def validate_param(self, param_name, param_value): """ Ensure that modulated parameter values stay within valid ranges. @@ -221,7 +154,6 @@ def validate_param(self, param_name, param_value): 'radius': lambda x: max(1.0, x), 'base_radius': lambda x: max(1.0, x), 'amplitude_scale': lambda x: max(0.0, x), - # Add other parameters as needed } if param_name in valid_params: @@ -248,7 +180,7 @@ def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): pass @abstractmethod - def draw(self, processor: BaseAudioProcessor, **kwargs) -> np.ndarray: + def apply_effect_internal(self, processor: BaseAudioProcessor, **kwargs) -> np.ndarray: """ Abstract method to generate the image for the current frame. Returns: @@ -296,34 +228,100 @@ def process_audio_data(self, processor: BaseAudioProcessor, frame_index, visuali feature_value = np.mean(np.abs(processor.spectrum)) return processor.spectrum.copy(), feature_value + def apply_effect(self, audio, frame_rate, screen_width, screen_height, + strength, feature_param, feature_mode, feature_threshold, + opt_feature=None, **kwargs): + # Calculate num_frames based on audio duration and frame_rate + audio_duration = len(audio['waveform'].squeeze(0).mean(axis=0)) / audio['sample_rate'] + num_frames = int(audio_duration * frame_rate) + + # Initialize the audio processor + processor = BaseAudioProcessor(audio, num_frames, screen_height, screen_width, frame_rate) + + # Initialize results list + result = [] + + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + for i in range(num_frames): + processor.current_frame = i + + # First process parameters to get the correct values for this frame + processed_kwargs = self.process_parameters( + frame_index=i, + feature_value=self.get_feature_value(i, opt_feature) if opt_feature is not None else None, + feature_param=feature_param if opt_feature is not None else None, + feature_mode=feature_mode if opt_feature is not None else None, + strength=strength, + feature_threshold=feature_threshold, + **kwargs + ) + processed_kwargs["frame_index"] = i + + # Get audio data using the processed parameters + spectrum, _ = self.process_audio_data( + processor, + i, + processed_kwargs.get('visualization_feature'), + processed_kwargs.get('num_points', processed_kwargs.get('num_bars')), + processed_kwargs.get('smoothing'), + processed_kwargs.get('fft_size'), + processed_kwargs.get('min_frequency'), + processed_kwargs.get('max_frequency') + ) + + # Generate the image for the current frame + image = self.apply_effect_internal(processor, **processed_kwargs) + result.append(image) + + self.update_progress() + + self.end_progress() + + # Convert result to tensor + result_np = np.stack(result) + result_tensor = torch.from_numpy(result_np).float() + mask = result_tensor[:, :, :, 0] + + return (result_tensor, mask,) + +@apply_tooltips class FlexAudioVisualizerLine(FlexAudioVisualizerBase): @classmethod def INPUT_TYPES(cls): - return { - **super().INPUT_TYPES(), + base_inputs = super().INPUT_TYPES() + base_required = base_inputs.get("required", {}) + base_optional = base_inputs.get("optional", {}) + + new_inputs = { "required": { - **super().INPUT_TYPES()["required"], "visualization_method": (["bar", "line"], {"default": "bar"}), "visualization_feature": (["frequency", "waveform"], {"default": "frequency"}), # Parameters common to both methods/features "smoothing": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), - "rotation": ("FLOAT", {"default":0.0, "min": 0.0, "max": 360.0, "step": 1.0}), - # "position_y": ("FLOAT", {"default":0.5, "min":0.0, "max":1.0,"step":0.01}), - # Additional parameters - "num_bars": ("INT", {"default":64, "min":1, "max":1024, "step":1}), - "max_height": ("FLOAT", {"default":200.0, "min":10.0, "max":2000.0, "step":10.0}), - "min_height": ("FLOAT", {"default":10.0, "min":0.0, "max":500.0, "step":5.0}), - "separation": ("FLOAT", {"default":5.0, "min":0.0, "max":100.0, "step":1.0}), - "curvature": ("FLOAT", {"default":0.0, "min":0.0, "max":50.0, "step":1.0}), + "rotation": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 360.0, "step": 1.0}), + "length": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 4000.0, "step": 10.0}), + # Parameters common to both methods/features + "num_bars": ("INT", {"default": 64, "min": 1, "max": 1024, "step": 1}), + "max_height": ("FLOAT", {"default": 200.0, "min": 10.0, "max": 2000.0, "step": 10.0}), + "min_height": ("FLOAT", {"default": 10.0, "min": 0.0, "max": 500.0, "step": 5.0}), + "separation": ("FLOAT", {"default": 5.0, "min": 0.0, "max": 100.0, "step": 1.0}), + "curvature": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 50.0, "step": 1.0}), + "curve_smoothing": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "fft_size": ("INT", {"default": 2048, "min": 256, "max": 8192, "step": 256}), + "min_frequency": ("FLOAT", {"default": 20.0, "min": 20.0, "max": 20000.0, "step": 10.0}), + "max_frequency": ("FLOAT", {"default": 8000.0, "min": 20.0, "max": 20000.0, "step": 10.0}), "reflect": ("BOOLEAN", {"default": False}), - "curve_smoothing": ("FLOAT", {"default":0.0, "min": 0.0, "max":1.0, "step": 0.01}), - "fft_size": ("INT", {"default":2048, "min":256, "max":8192, "step":256}), - "min_frequency": ("FLOAT", {"default":20.0, "min":20.0, "max":20000.0, "step":10.0}), - "max_frequency": ("FLOAT", {"default":8000.0, "min":20.0, "max":20000.0, "step":10.0}), } } - FUNCTION = "apply_effect" + required = {**base_required, **new_inputs["required"]} + optional = base_optional + + return { + "required": required, + "optional": optional + } @classmethod def get_modifiable_params(cls): @@ -333,7 +331,6 @@ def get_modifiable_params(cls): def __init__(self): super().__init__() - self.bars = None def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): visualization_feature = kwargs.get('visualization_feature') @@ -345,7 +342,7 @@ def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): max_frequency = kwargs.get('max_frequency') # Use the base class method - self.bars, feature_value = self.process_audio_data( + _, feature_value = self.process_audio_data( processor, frame_index, visualization_feature, @@ -358,60 +355,78 @@ def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): return feature_value - def draw(self, processor: BaseAudioProcessor, **kwargs): + def apply_effect_internal(self, processor: BaseAudioProcessor, **kwargs): visualization_method = kwargs.get('visualization_method') screen_width = processor.width screen_height = processor.height rotation = kwargs.get('rotation') % 360 position_y = kwargs.get('position_y') - reflect = kwargs.get('reflect') - num_bars = kwargs.get('num_bars') # Get the potentially modulated num_bars - - image = np.zeros((screen_height, screen_width, 3), dtype=np.float32) + position_x = kwargs.get('position_x') + reflect = kwargs.get('reflect', False) + num_bars = kwargs.get('num_bars') + length = kwargs.get('length', 0.0) + max_height = kwargs.get('max_height') + min_height = kwargs.get('min_height') - # Ensure self.bars matches the current num_bars - if self.bars is None or len(self.bars) != num_bars: - if self.bars is not None: - # Interpolate existing data to match new num_bars - old_indices = np.linspace(0, 1, len(self.bars)) - new_indices = np.linspace(0, 1, num_bars) - self.bars = np.interp(new_indices, old_indices, self.bars) + # Calculate visualization length based on rotation when length is 0 + if length == 0: + # Convert rotation to radians + rotation_rad = np.deg2rad(rotation) + # For rotation 0° or 180°, use width + # For rotation 90° or 270°, use height + # For other angles, calculate the appropriate length + cos_theta = abs(np.cos(rotation_rad)) + sin_theta = abs(np.sin(rotation_rad)) + + if cos_theta > sin_theta: + # Closer to horizontal (0° or 180°) + visualization_length = screen_width / cos_theta else: - self.bars = np.zeros(num_bars) + # Closer to vertical (90° or 270°) + visualization_length = screen_height / sin_theta + else: + visualization_length = length - max_height = kwargs.get('max_height') - min_height = kwargs.get('min_height') + # Create a larger canvas to handle rotation without clipping + # Ensure all dimensions are integers + padding = int(max(visualization_length, max_height) * 0.5) + padded_width = int(visualization_length + 2 * padding) + padded_height = int(screen_height + 2 * padding) + padded_image = np.zeros((padded_height, padded_width, 3), dtype=np.float32) + + # Get the current spectrum data + data = processor.spectrum if visualization_method == 'bar': curvature = kwargs.get('curvature') separation = kwargs.get('separation') - - # Calculate bar width + # Calculate bar width based on visualization length total_separation = separation * (num_bars - 1) - total_bar_width = screen_width - total_separation + total_bar_width = visualization_length - total_separation bar_width = total_bar_width / num_bars - # Baseline Y position - baseline_y = int(screen_height * position_y) + # Center the visualization at the middle of the padded image + baseline_y = padded_height // 2 + x_offset = (padded_width - visualization_length) // 2 # Draw bars - for i, bar_value in enumerate(self.bars): - x = int(i * (bar_width + separation)) + for i, bar_value in enumerate(data): + x = int(x_offset + i * (bar_width + separation)) bar_h = min_height + (max_height - min_height) * bar_value - # Draw bar depending on reflect + # Draw bar based on reflect direction if reflect: - y_start = int(baseline_y - bar_h) + y_start = int(baseline_y) y_end = int(baseline_y + bar_h) else: y_start = int(baseline_y - bar_h) y_end = int(baseline_y) # Ensure y_start and y_end are within bounds - y_start = max(min(y_start, screen_height - 1), 0) - y_end = max(min(y_end, screen_height - 1), 0) + y_start = max(0, y_start) + y_end = min(padded_height - 1, y_end) # Swap y_start and y_end if necessary if y_start > y_end: @@ -431,22 +446,21 @@ def draw(self, processor: BaseAudioProcessor, **kwargs): mask = np.full((rect_height, rect_width), 0, dtype=np.uint8) cv2.rectangle(mask, (0, 0), (rect_width - 1, rect_height - 1), 255, -1) if radius > 1: - mask = cv2.GaussianBlur(mask, (radius*2+1, radius*2+1), 0) + mask = cv2.GaussianBlur(mask, (radius * 2 + 1, radius * 2 + 1), 0) # Apply mask rect[mask > 0] = color # Place rect onto image - image[y_start:y_end, x:x+rect_width] = rect + padded_image[y_start:y_end, x:x + rect_width] = rect else: - cv2.rectangle(image, (x, y_start), (x_end, y_end), color, thickness=-1) + cv2.rectangle(padded_image, (x, y_start), (x_end, y_end), color, thickness=-1) elif visualization_method == 'line': curve_smoothing = kwargs.get('curve_smoothing') - - # Baseline Y position - baseline_y = screen_height * position_y + # Center the visualization + baseline_y = padded_height // 2 + x_offset = (padded_width - visualization_length) // 2 # Apply curve smoothing if specified - data = self.bars if curve_smoothing > 0: window_size = int(len(data) * curve_smoothing) if window_size % 2 == 0: @@ -462,35 +476,37 @@ def draw(self, processor: BaseAudioProcessor, **kwargs): amplitude_range = max_height - min_height amplitude = min_height + data_smooth * amplitude_range - # X-axis + # X-axis using visualization length num_points = len(amplitude) - x_values = np.linspace(0, screen_width, num_points) + x_values = np.linspace(x_offset, x_offset + visualization_length, num_points) + # Single visualization with direction based on reflect if reflect: - # Reflect the visualization - y_values_up = baseline_y - amplitude - y_values_down = baseline_y + amplitude - - points_up = np.array([x_values, y_values_up]).T.astype(np.int32) - points_down = np.array([x_values, y_values_down]).T.astype(np.int32) - - # Draw the curves - if len(points_up) > 1: - cv2.polylines(image, [points_up], False, (1.0, 1.0, 1.0)) - if len(points_down) > 1: - cv2.polylines(image, [points_down], False, (1.0, 1.0, 1.0)) + y_values = baseline_y + amplitude else: - # Single visualization y_values = baseline_y - amplitude - points = np.array([x_values, y_values]).T.astype(np.int32) + points = np.array([x_values, y_values]).T.astype(np.int32) - if len(points) > 1: - cv2.polylines(image, [points], False, (1.0, 1.0, 1.0)) + if len(points) > 1: + cv2.polylines(padded_image, [points], False, (1.0, 1.0, 1.0)) # Apply rotation if needed if rotation != 0: - image = self.rotate_image(image, rotation) + # Rotate around center of padded image + M = cv2.getRotationMatrix2D((padded_width // 2, padded_height // 2), rotation, 1.0) + padded_image = cv2.warpAffine(padded_image, M, (padded_width, padded_height)) + + # Calculate final position + target_x = int(screen_width * position_x) + target_y = int(screen_height * position_y) + + # Calculate the region to extract from padded image + start_x = padded_width // 2 - target_x + start_y = padded_height // 2 - target_y + + # Extract the correctly positioned region + image = padded_image[start_y:start_y + screen_height, start_x:start_x + screen_width] return image @@ -502,31 +518,40 @@ def smooth_curve(self, y, window_size): y_smooth = np.convolve(y, box, mode='same') return y_smooth +@apply_tooltips class FlexAudioVisualizerCircular(FlexAudioVisualizerBase): @classmethod def INPUT_TYPES(cls): - return { - **super().INPUT_TYPES(), + base_inputs = super().INPUT_TYPES() + base_required = base_inputs.get("required", {}) + base_optional = base_inputs.get("optional", {}) + + new_inputs = { "required": { - **super().INPUT_TYPES()["required"], "visualization_method": (["bar", "line"], {"default": "bar"}), "visualization_feature": (["frequency", "waveform"], {"default": "frequency"}), # Parameters common to both methods/features - "smoothing": ("FLOAT", {"default":0.5, "min":0.0, "max":1.0, "step":0.01}), - "rotation": ("FLOAT", {"default": 0.0, "min":0.0, "max":360.0, "step":1.0}), - "num_points": ("INT", {"default":360, "min":3, "max":1000, "step":1}), + "smoothing": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "rotation": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 360.0, "step": 1.0}), + "num_points": ("INT", {"default": 360, "min": 3, "max": 1000, "step": 1}), # Additional parameters - "fft_size": ("INT", {"default":2048, "min":256, "max":8192, "step":256}), - "min_frequency": ("FLOAT", {"default":20.0, "min":20.0, "max":20000.0, "step":10.0}), - "max_frequency": ("FLOAT", {"default":8000.0, "min":20.0, "max":20000.0, "step":10.0}), - "radius": ("FLOAT", {"default":200.0, "min":10.0, "max":1000.0, "step":10.0}), - "line_width": ("INT", {"default":2, "min":1, "max":10, "step":1}), - "amplitude_scale": ("FLOAT", {"default":100.0, "min":1.0, "max":1000.0, "step":10.0}), - "base_radius": ("FLOAT", {"default":200.0, "min":10.0, "max":1000.0, "step":10.0}), + "fft_size": ("INT", {"default": 2048, "min": 256, "max": 8192, "step": 256}), + "min_frequency": ("FLOAT", {"default": 20.0, "min": 20.0, "max": 20000.0, "step": 10.0}), + "max_frequency": ("FLOAT", {"default": 8000.0, "min": 20.0, "max": 20000.0, "step": 10.0}), + "radius": ("FLOAT", {"default": 200.0, "min": 10.0, "max": 1000.0, "step": 10.0}), + "line_width": ("INT", {"default": 2, "min": 1, "max": 10, "step": 1}), + "amplitude_scale": ("FLOAT", {"default": 100.0, "min": 1.0, "max": 1000.0, "step": 10.0}), + "base_radius": ("FLOAT", {"default": 200.0, "min": 10.0, "max": 1000.0, "step": 10.0}), } } - FUNCTION = "apply_effect" + required = {**base_required, **new_inputs["required"]} + optional = base_optional + + return { + "required": required, + "optional": optional + } @classmethod def get_modifiable_params(cls): @@ -560,7 +585,7 @@ def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): return feature_value - def draw(self, processor: BaseAudioProcessor, **kwargs): + def apply_effect_internal(self, processor: BaseAudioProcessor, **kwargs): visualization_method = kwargs.get('visualization_method') rotation = kwargs.get('rotation') % 360 num_points = kwargs.get('num_points') @@ -621,8 +646,245 @@ def draw(self, processor: BaseAudioProcessor, **kwargs): return image +@apply_tooltips +class FlexAudioVisualizerContour(FlexAudioVisualizerBase): + @classmethod + def INPUT_TYPES(cls): + base_inputs = super().INPUT_TYPES() + base_required = base_inputs.get("required", {}) + base_optional = base_inputs.get("optional", {}) + # Remove screen_width, screen_height, position_x, and position_y + for param in ["screen_width", "screen_height", "position_x", "position_y"]: + if param in base_required: + del base_required[param] + new_inputs = { + "required": { + "mask": ("MASK",), # Input mask to find contour + "visualization_method": (["bar", "line"], {"default": "bar"}), + "visualization_feature": (["frequency", "waveform"], {"default": "frequency"}), + # Parameters common to both methods + "smoothing": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "num_points": ("INT", {"default": 360, "min": 3, "max": 1000, "step": 1}), + # Audio processing parameters + "fft_size": ("INT", {"default": 2048, "min": 256, "max": 8192, "step": 256}), + "min_frequency": ("FLOAT", {"default": 20.0, "min": 20.0, "max": 20000.0, "step": 10.0}), + "max_frequency": ("FLOAT", {"default": 8000.0, "min": 20.0, "max": 20000.0, "step": 10.0}), + # Visualization parameters + "bar_length": ("FLOAT", {"default": 20.0, "min": 1.0, "max": 100.0, "step": 1.0}), + "line_width": ("INT", {"default": 2, "min": 1, "max": 10, "step": 1}), + "contour_smoothing": ("INT", {"default": 0, "min": 0, "max": 50, "step": 1}), + "rotation": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 360.0, "step": 1.0}), + # New parameters for direction and multi-contour + "direction": (["outward", "inward", "both"], {"default": "outward"}), + "min_contour_area": ("FLOAT", {"default": 100.0, "min": 0.0, "max": 10000.0, "step": 10.0}), + "max_contours": ("INT", {"default": 5, "min": 1, "max": 20, "step": 1}), + "distribute_by": (["area", "perimeter", "equal"], {"default": "perimeter"}), + } + } + required = {**base_required, **new_inputs["required"]} + optional = base_optional + return { + "required": required, + "optional": optional + } + + @classmethod + def get_modifiable_params(cls): + return ["smoothing", "rotation", "num_points", "fft_size", "min_frequency", "max_frequency", + "bar_length", "line_width", "contour_smoothing", "direction", "min_contour_area", + "max_contours", "None"] + + def apply_effect(self, audio, frame_rate, mask, strength, feature_param, feature_mode, + feature_threshold, opt_feature=None, **kwargs): + # Get dimensions from mask + batch_size, screen_height, screen_width = mask.shape + + # Add mask to kwargs for the draw method + kwargs['mask'] = mask + + # Call parent with mask dimensions as screen dimensions + return super().apply_effect( + audio, frame_rate, screen_width, screen_height, + strength, feature_param, feature_mode, feature_threshold, + opt_feature, **kwargs + ) + + def get_audio_data(self, processor: BaseAudioProcessor, frame_index, **kwargs): + # Reuse existing audio processing logic + visualization_feature = kwargs.get('visualization_feature') + smoothing = kwargs.get('smoothing') + num_points = kwargs.get('num_points') + fft_size = kwargs.get('fft_size') + min_frequency = kwargs.get('min_frequency') + max_frequency = kwargs.get('max_frequency') + + processor.spectrum, feature_value = self.process_audio_data( + processor, frame_index, visualization_feature, num_points, + smoothing, fft_size, min_frequency, max_frequency + ) + return feature_value + + def apply_effect_internal(self, processor: BaseAudioProcessor, **kwargs): + # Get parameters + mask = kwargs.get('mask') + visualization_method = kwargs.get('visualization_method') + batch_size, screen_height, screen_width = mask.shape + line_width = kwargs.get('line_width') + bar_length = kwargs.get('bar_length') + contour_smoothing = kwargs.get('contour_smoothing') + rotation = kwargs.get('rotation', 0.0) % 360.0 + direction = kwargs.get('direction', 'outward') + min_contour_area = kwargs.get('min_contour_area', 100.0) + max_contours = kwargs.get('max_contours', 5) + distribute_by = kwargs.get('distribute_by', 'perimeter') + + # Get the frame index from the processor's current state + frame_index = processor.current_frame if hasattr(processor, 'current_frame') else 0 + + # Create output image + image = np.zeros((screen_height, screen_width, 3), dtype=np.float32) + + # Use the mask corresponding to the current frame + frame_index = min(frame_index, batch_size - 1) # Ensure we don't exceed batch size + mask_uint8 = (mask[frame_index].numpy() * 255).astype(np.uint8) + + # Find contours + contours, _ = cv2.findContours(mask_uint8, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + + if not contours: + return image + + # Filter and sort contours by area + valid_contours = [c for c in contours if cv2.contourArea(c) >= min_contour_area] + valid_contours.sort(key=cv2.contourArea, reverse=True) + valid_contours = valid_contours[:max_contours] + + if not valid_contours: + return image + + # Calculate distribution weights based on chosen method + if distribute_by == 'area': + weights = [cv2.contourArea(c) for c in valid_contours] + elif distribute_by == 'perimeter': + weights = [cv2.arcLength(c, True) for c in valid_contours] + else: # 'equal' + weights = [1] * len(valid_contours) + + # Normalize weights + total_weight = sum(weights) + if total_weight == 0: + weights = [1 / len(weights)] * len(weights) + else: + weights = [w / total_weight for w in weights] + + # Get spectrum data + data = processor.spectrum + + # Function to process a single contour + def process_contour(contour, start_idx, end_idx, direction_multiplier=1.0): + # Apply contour smoothing if specified + if contour_smoothing > 0: + epsilon = contour_smoothing * cv2.arcLength(contour, True) * 0.01 + contour = cv2.approxPolyDP(contour, epsilon, True) + + # Prepare contour points + contour = contour.squeeze() + if len(contour.shape) < 2: # Handle single-point contours + return + + contour_length = len(contour) + if contour_length < 2: + return + + # Ensure the contour is closed + if not np.array_equal(contour[0], contour[-1]): + contour = np.vstack([contour, contour[0]]) + contour_length += 1 + + # Apply rotation as an offset along the contour + rotation_offset = int((rotation / 360.0) * contour_length) + + # Get the portion of data for this contour + contour_data = data[start_idx:end_idx] + num_points = len(contour_data) + + # Create points along the contour with rotation offset + indices = (np.linspace(0, contour_length - 1, num_points) + rotation_offset) % (contour_length - 1) + + # Interpolate contour points + x_coords = np.interp(indices, range(contour_length), contour[:, 0]) + y_coords = np.interp(indices, range(contour_length), contour[:, 1]) + + # Calculate normals along the contour + dx = np.gradient(x_coords) + dy = np.gradient(y_coords) + + # Normalize the normals + lengths = np.sqrt(dx**2 + dy**2) + lengths = np.where(lengths > 0, lengths, 1.0) + normals_x = -dy / lengths + normals_y = dx / lengths + + # Replace any NaN values + normals_x = np.nan_to_num(normals_x, 0.0) + normals_y = np.nan_to_num(normals_y, 0.0) + + if visualization_method == 'bar': + # Draw bars along the contour + for i, amplitude in enumerate(contour_data): + x1, y1 = int(x_coords[i]), int(y_coords[i]) + + # Apply direction multiplier to the bar length + bar_height = amplitude * bar_length * direction_multiplier + x2 = int(x1 + normals_x[i] * bar_height) + y2 = int(y1 + normals_y[i] * bar_height) + + # Clip coordinates to image bounds + x1 = np.clip(x1, 0, screen_width - 1) + y1 = np.clip(y1, 0, screen_height - 1) + x2 = np.clip(x2, 0, screen_width - 1) + y2 = np.clip(y2, 0, screen_height - 1) + + cv2.line(image, (x1, y1), (x2, y2), (1.0, 1.0, 1.0), thickness=line_width) + + else: # line mode + # Calculate points for the continuous line + points = np.column_stack([ + x_coords + normals_x * contour_data * bar_length * direction_multiplier, + y_coords + normals_y * contour_data * bar_length * direction_multiplier + ]).astype(np.int32) + + # Clip points to image bounds + points[:, 0] = np.clip(points[:, 0], 0, screen_width - 1) + points[:, 1] = np.clip(points[:, 1], 0, screen_height - 1) + + # Draw the continuous line + cv2.polylines(image, [points], True, (1.0, 1.0, 1.0), thickness=line_width) + + # Distribute data points among contours + total_points = len(data) + start_idx = 0 + + for i, (contour, weight) in enumerate(zip(valid_contours, weights)): + num_points = int(round(total_points * weight)) + if i == len(valid_contours) - 1: # Last contour gets remaining points + num_points = total_points - start_idx + end_idx = start_idx + num_points + + if direction == "both": + # For "both" direction, process the contour twice with half amplitude + process_contour(contour, start_idx, end_idx, 0.5) # Outward + process_contour(contour, start_idx, end_idx, -0.5) # Inward + else: + # For single direction, process once with full amplitude + direction_multiplier = -1.0 if direction == "inward" else 1.0 + process_contour(contour, start_idx, end_idx, direction_multiplier) + + start_idx = end_idx + + return image diff --git a/nodes/depth/depth_base.py b/nodes/depth/depth_base.py index a5aaddb..80723f6 100644 --- a/nodes/depth/depth_base.py +++ b/nodes/depth/depth_base.py @@ -1,24 +1,23 @@ import torch import numpy as np from abc import ABC, abstractmethod -from tqdm import tqdm from comfy.utils import ProgressBar -from ... import RyanOnTheInside +from ..flex.flex_base import FlexBase import cv2 +from ...tooltips import apply_tooltips -class FlexDepthBase(RyanOnTheInside, ABC): +#NOTE: in hindsight, much of this would have been better suited as mask-based operations +@apply_tooltips +class FlexDepthBase(FlexBase): @classmethod def INPUT_TYPES(cls): return { + **super().INPUT_TYPES(), "required": { + **super().INPUT_TYPES()["required"], "depth_maps": ("IMAGE",), - "feature": ("FEATURE",), - "feature_pipe": ("FEATURE_PIPE",), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (cls.get_modifiable_params(), {"default": cls.get_modifiable_params()[0]}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - } + }, + # Optional inputs are inherited from FlexBase } CATEGORY = "RyanOnTheInside/DepthEffects" @@ -26,21 +25,12 @@ def INPUT_TYPES(cls): FUNCTION = "apply_effect" def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) - - def end_progress(self): - self.progress_bar = None + super().__init__() @classmethod @abstractmethod def get_modifiable_params(cls): + """Return a list of parameter names that can be modulated.""" return [] @@ -50,27 +40,59 @@ def modulate_param(self, param_name, param_value, feature_value, strength, mode) else: # absolute return param_value * feature_value * strength - def apply_effect(self, depth_maps, feature, feature_pipe, strength, feature_threshold, feature_param, feature_mode, **kwargs): - num_frames = feature_pipe.frame_count + def apply_effect( + self, + depth_maps, + strength, + feature_threshold, + feature_param, + feature_mode, + opt_feature=None, + **kwargs + ): + num_frames = depth_maps.shape[0] depth_maps_np = depth_maps.cpu().numpy() - self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - - result = [] - for i in range(num_frames): - depth_map = depth_maps_np[i] - feature_value = feature.get_value_at_frame(i) - kwargs['frame_index'] = i - if feature_value >= feature_threshold: - processed_depth_map = self.process_depth_map(depth_map, feature_value, strength, - feature_param=feature_param, - feature_mode=feature_mode, - **kwargs) - else: - processed_depth_map = depth_map - - result.append(processed_depth_map) - self.update_progress() + if opt_feature is None: + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + result = [] + for i in range(num_frames): + processed_depth_map = self.process_depth_map( + depth_maps_np[i], + 0.5, # Default feature value when no feature is provided + strength, + feature_param=feature_param, + feature_mode=feature_mode, + frame_index=i, + **kwargs + ) + result.append(processed_depth_map) + self.update_progress() + else: + num_frames = opt_feature.frame_count + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + result = [] + for i in range(num_frames): + depth_map = depth_maps_np[i] + feature_value = self.get_feature_value(i, opt_feature) + feature_value = 0.5 if feature_value is None else feature_value + kwargs['frame_index'] = i + if feature_value >= feature_threshold: + processed_depth_map = self.process_depth_map( + depth_map, + feature_value, + strength, + feature_param=feature_param, + feature_mode=feature_mode, + **kwargs + ) + else: + processed_depth_map = depth_map + + result.append(processed_depth_map) + self.update_progress() self.end_progress() @@ -81,20 +103,30 @@ def apply_effect(self, depth_maps, feature, feature_pipe, strength, feature_thre result_tensor = torch.from_numpy(result_np).float() # Ensure the tensor is in BHWC format - if result_tensor.shape[1] != depth_maps.shape[1]: # Adjust as needed + if result_tensor.shape[1] != depth_maps.shape[1]: result_tensor = result_tensor.permute(0, 2, 3, 1) return (result_tensor,) - def process_depth_map(self, depth_map: np.ndarray, feature_value: float, strength: float, - feature_param: str, feature_mode: str, **kwargs) -> np.ndarray: + def process_depth_map( + self, + depth_map: np.ndarray, + feature_value: float, + strength: float, + feature_param: str, + feature_mode: str, + **kwargs + ) -> np.ndarray: # Modulate the selected parameter for param_name in self.get_modifiable_params(): - if param_name in kwargs: - if param_name == feature_param: - kwargs[param_name] = self.modulate_param(param_name, kwargs[param_name], - feature_value, strength, feature_mode) - + if param_name in kwargs and param_name == feature_param: + kwargs[param_name] = self.modulate_param( + param_name, + kwargs[param_name], + feature_value, + strength, + feature_mode + ) # Call the child class's implementation return self.apply_effect_internal(depth_map, **kwargs) @@ -104,6 +136,7 @@ def apply_effect_internal(self, depth_map: np.ndarray, **kwargs) -> np.ndarray: pass +@apply_tooltips class DepthInjection(FlexDepthBase): @classmethod def INPUT_TYPES(cls): @@ -178,6 +211,7 @@ def apply_effect_internal(self, depth_map: np.ndarray, mask, frame_index, **kwar return modified_depth +@apply_tooltips class DepthBlender(FlexDepthBase): @classmethod def INPUT_TYPES(cls): @@ -197,13 +231,14 @@ def INPUT_TYPES(cls): def get_modifiable_params(cls): return ["strength", "None"] - def apply_effect_internal(self, depth_map: np.ndarray, other_depth_maps, frame_index, **kwargs) -> np.ndarray: - blend_mode = kwargs.get('blend_mode') + def apply_effect_internal(self, depth_map: np.ndarray, other_depth_maps, blend_mode, **kwargs) -> np.ndarray: strength = kwargs.get('strength', 1.0) - + frame_index = kwargs.get('frame_index') # Get the other depth map for the current frame + other_depth_map = other_depth_maps[frame_index].cpu().numpy() + if blend_mode == "add": blended_depth = depth_map + other_depth_map elif blend_mode == "subtract": @@ -224,6 +259,7 @@ def apply_effect_internal(self, depth_map: np.ndarray, other_depth_maps, frame_i return modified_depth +@apply_tooltips class DepthRippleEffect(FlexDepthBase): @classmethod def INPUT_TYPES(cls): @@ -284,3 +320,5 @@ def apply_effect_internal(self, depth_map: np.ndarray, frame_index, **kwargs) -> modified_depth = np.clip(modified_depth, 0.0, 1.0) return modified_depth + + diff --git a/nodes/flex/feature_extractors.py b/nodes/flex/feature_extractors.py index ebd98ac..e9b51bb 100644 --- a/nodes/flex/feature_extractors.py +++ b/nodes/flex/feature_extractors.py @@ -1,57 +1,65 @@ -from .feature_pipe import FeaturePipe -from ... import RyanOnTheInside -from .features import ManualFeature, TimeFeature, DepthFeature, ColorFeature, BrightnessFeature, MotionFeature, AreaFeature, BaseFeature +from .features import ManualFeature, TimeFeature, DepthFeature, ColorFeature, BrightnessFeature, MotionFeature, AreaFeature, BaseFeature, DrawableFeature, FloatFeature from abc import ABC, abstractmethod -from tqdm import tqdm -from comfy.utils import ProgressBar -import typing import numpy as np -import torch from scipy.interpolate import interp1d +import json +from ...tooltips import apply_tooltips +from ... import ProgressMixin -class FeatureExtractorBase(RyanOnTheInside, ABC): + + +@apply_tooltips +class FeatureExtractorBase(ProgressMixin, ABC): @classmethod @abstractmethod + def feature_type(cls) -> type[BaseFeature]: pass @classmethod def INPUT_TYPES(cls): feature_class = cls.feature_type() + extraction_methods = feature_class.get_extraction_methods() return { "required": { - "extraction_method": (feature_class.get_extraction_methods(), {"default": feature_class.get_extraction_methods()[0]}), + "extraction_method": (extraction_methods, {"default": extraction_methods[0]}), + "frame_rate": ("FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 0.1}), + "frame_count": ("INT", {"default": 30, "min": 1}), + "width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), + "height": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), + } + } + + CATEGORY="RyanOnTheInside/FlexFeatures/Sources" + +@apply_tooltips +class FloatFeatureNode(FeatureExtractorBase): + @classmethod + def feature_type(cls) -> type[BaseFeature]: + return FloatFeature + + @classmethod + def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + return { + "required": { + **parent_inputs, + "floats": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "forceInput": True}), } } - def __init__(self): - self.progress_bar = None - self.tqdm_bar = None - self.current_progress = 0 - self.total_steps = 0 - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - self.tqdm_bar = tqdm(total=total_steps, desc=desc, leave=False) - self.current_progress = 0 - self.total_steps = total_steps - - def update_progress(self, step=1): - self.current_progress += step - if self.progress_bar: - self.progress_bar.update(step) - if self.tqdm_bar: - self.tqdm_bar.update(step) - - def end_progress(self): - if self.tqdm_bar: - self.tqdm_bar.close() - self.progress_bar = None - self.tqdm_bar = None - self.current_progress = 0 - self.total_steps = 0 - CATEGORY="RyanOnTheInside/FlexFeatures" + RETURN_TYPES = ("FEATURE",) + FUNCTION = "create_feature" + + def create_feature(self, value, frame_rate, frame_count, width, height, extraction_method): + values = value if isinstance(value, list) else [value] + + float_feature = FloatFeature("float_feature", frame_rate, frame_count, width, height, values, extraction_method) + float_feature.extract() + return (float_feature,) + +@apply_tooltips class ManualFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: @@ -62,32 +70,30 @@ def INPUT_TYPES(cls): return { **super().INPUT_TYPES(), "required": { - "frame_rate": ("FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 0.1}), - "frame_count": ("INT", {"default": 30, "min": 1}), + **super().INPUT_TYPES()["required"], "frame_numbers": ("STRING", {"default": "0,10,20"}), "values": ("STRING", {"default": "0.0,0.5,1.0"}), "last_value": ("FLOAT", {"default": 1.0}), - "width": ("INT", {"default": 1920, "min": 1}), - "height": ("INT", {"default": 1080, "min": 1}), "interpolation_method": (["none", "linear", "ease_in", "ease_out"], {"default": "none"}), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "create_feature" + CATEGORY = f"{FeatureExtractorBase.CATEGORY}/Manual" - def _apply_interpolation(self, feature_pipe, frame_numbers, values, last_value, interpolation_method): + def _apply_interpolation(self, frame_count, frame_rate, frame_numbers, values, last_value, interpolation_method, width=None, height=None): """Shared interpolation logic""" - manual_feature = ManualFeature("manual_feature", feature_pipe.frame_rate, feature_pipe.frame_count, - frame_numbers[0], frame_numbers[-1], values[0], values[-1], - method=interpolation_method) + manual_feature = ManualFeature("manual_feature", frame_rate, frame_count, width, height, + frame_numbers[0], frame_numbers[-1], values[0], values[-1], + method=interpolation_method) - manual_feature.data = np.zeros(feature_pipe.frame_count, dtype=np.float32) + manual_feature.data = np.zeros(frame_count, dtype=np.float32) interpolation_kind = 'linear' if len(frame_numbers) < 3 else 'quadratic' if interpolation_method == 'none': for frame, value in zip(frame_numbers, values): - if 0 <= frame < feature_pipe.frame_count: + if 0 <= frame < frame_count: manual_feature.data[frame] = value else: raise ValueError(f"Frame number {frame} is out of bounds.") @@ -100,7 +106,7 @@ def _apply_interpolation(self, feature_pipe, frame_numbers, values, last_value, reversed_values = [values[-1] - (v - values[0]) for v in values] f = interp1d(frame_numbers, reversed_values, kind=interpolation_kind, fill_value="extrapolate") - x = np.arange(feature_pipe.frame_count) + x = np.arange(frame_count) manual_feature.data = f(x) if interpolation_method == 'ease_out': @@ -108,7 +114,7 @@ def _apply_interpolation(self, feature_pipe, frame_numbers, values, last_value, return manual_feature - def create_feature(self, frame_rate, frame_count, frame_numbers, values, last_value, width, height, interpolation_method): + def create_feature(self, frame_rate, frame_count, frame_numbers, values, last_value, width, height, interpolation_method, extraction_method): # Parse inputs frame_numbers = list(map(int, frame_numbers.split(','))) values = list(map(float, values.split(','))) @@ -120,15 +126,12 @@ def create_feature(self, frame_rate, frame_count, frame_numbers, values, last_va if max(frame_numbers) >= frame_count: raise ValueError(f"Frame numbers must be less than frame_count ({frame_count})") - # Create feature pipe with specified frame_count - video_frames = torch.zeros((frame_count, height, width, 3), dtype=torch.float32) - feature_pipe = FeaturePipe(frame_rate, video_frames) - # Apply interpolation - manual_feature = self._apply_interpolation(feature_pipe, frame_numbers, values, last_value, interpolation_method) + manual_feature = self._apply_interpolation(frame_count, frame_rate, frame_numbers, values, last_value, interpolation_method, width, height) - return (manual_feature, feature_pipe) + return (manual_feature,) +@apply_tooltips class ManualFeatureFromPipe(ManualFeatureNode): @classmethod def INPUT_TYPES(cls): @@ -143,6 +146,7 @@ def INPUT_TYPES(cls): } FUNCTION = "create_feature_from_pipe" + CATEGORY = f"{FeatureExtractorBase.CATEGORY}/Manual" def create_feature_from_pipe(self, feature_pipe, frame_numbers, values, last_value, interpolation_method): # Parse inputs @@ -157,31 +161,70 @@ def create_feature_from_pipe(self, feature_pipe, frame_numbers, values, last_val values.append(last_value) # Apply interpolation using parent class method - manual_feature = self._apply_interpolation(feature_pipe, frame_numbers, values, last_value, interpolation_method) + manual_feature = self._apply_interpolation(feature_pipe.frame_count, feature_pipe.frame_rate, frame_numbers, values, last_value, interpolation_method) return (manual_feature, feature_pipe) -class FirstFeature(FeatureExtractorBase): +@apply_tooltips +class DrawableFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: - pass + return DrawableFeature @classmethod def INPUT_TYPES(cls): - return { + return { **super().INPUT_TYPES(), "required": { **super().INPUT_TYPES()["required"], - "video_frames": ("IMAGE",), - "frame_rate": ("FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 0.1}), + "points": ("STRING", {"default": "[]"}), # JSON string of points + "min_value": ("FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.1}), + "max_value": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.1}), + "interpolation_method": (["linear", "cubic", "nearest", "zero", "hold", "ease_in", "ease_out"], {"default": "linear"}), + "fill_value": ("FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.1}), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "create_feature" + CATEGORY = f"{FeatureExtractorBase.CATEGORY}/Manual" + + def create_feature(self, points, frame_rate, frame_count, width, height, extraction_method, interpolation_method, min_value, max_value, fill_value): + try: + point_data = json.loads(points) + if not isinstance(point_data, list): + raise ValueError("Points data must be a list") + # Validate points format + for point in point_data: + if not isinstance(point, list) or len(point) != 2: + raise ValueError("Each point must be a [frame, value] pair") + if not (isinstance(point[0], (int, float)) and isinstance(point[1], (float))): + raise ValueError("Frame must be number, value must be float") + if point[0] < 0 or point[0] > frame_count: + raise ValueError(f"Frame {point[0]} out of bounds") + if point[1] < min_value or point[1] > max_value: + raise ValueError(f"Value {point[1]} outside range [{min_value}, {max_value}]") + except json.JSONDecodeError: + raise ValueError("Invalid JSON format for points") + + drawable_feature = DrawableFeature( + "drawable_feature", + frame_rate, + frame_count, + width, + height, + point_data, + method=interpolation_method, + min_value=min_value, + max_value=max_value, + fill_value=fill_value + ) + drawable_feature.extract() + return (drawable_feature,) -class TimeFeatureNode(FirstFeature): +@apply_tooltips +class TimeFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return TimeFeature @@ -192,115 +235,139 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES(), "required": { **super().INPUT_TYPES()["required"], - "speed": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}), + "frames_per_cycle": ("INT", {"default": 30, "min": 1, "max": 1000, "step": 1}), # Number of frames for one cycle "offset": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), } } - + RETURN_TYPES = ("FEATURE",) + FUNCTION = "create_feature" - def create_feature(self, extraction_method, speed, offset, video_frames, frame_rate): - feature_pipe = FeaturePipe(frame_rate, video_frames) - time_feature = TimeFeature("time_effect", feature_pipe.frame_rate, feature_pipe.frame_count, - effect_type=extraction_method, speed=speed, offset=offset) + def create_feature(self, extraction_method, frames_per_cycle, offset, frame_rate, frame_count, width, height): + time_feature = TimeFeature("time_effect", frame_rate, frame_count, width, height, + effect_type=extraction_method, speed=frames_per_cycle, offset=offset) time_feature.extract() - return (time_feature, feature_pipe) + return (time_feature,) -class DepthFeatureNode(FirstFeature): +@apply_tooltips +class DepthFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return DepthFeature @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs.pop("frame_count", None) return { - **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, "depth_maps": ("IMAGE",), } } - def create_feature(self, depth_maps, frame_rate, video_frames, extraction_method): - feature_pipe = FeaturePipe(frame_rate, video_frames) - depth_feature = DepthFeature("depth_feature", feature_pipe.frame_rate, feature_pipe.frame_count, depth_maps, extraction_method) + RETURN_TYPES = ("FEATURE",) + FUNCTION = "create_feature" + + def create_feature(self, depth_maps, frame_rate, width, height, extraction_method): + frame_count = len(depth_maps) + depth_feature = DepthFeature("depth_feature", frame_rate, frame_count, width, height, depth_maps, extraction_method) depth_feature.extract() - return (depth_feature, feature_pipe) + return (depth_feature,) -class ColorFeatureNode(FirstFeature): +@apply_tooltips +class ColorFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return ColorFeature @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs.pop("frame_count", None) return { - **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, + "images": ("IMAGE",), } } - def create_feature(self, video_frames, frame_rate, extraction_method): - feature_pipe = FeaturePipe(frame_rate, video_frames) - color_feature = ColorFeature("color_feature", feature_pipe.frame_rate, feature_pipe.frame_count, video_frames, extraction_method) + RETURN_TYPES = ("FEATURE",) + FUNCTION = "create_feature" + + def create_feature(self, images, frame_rate, width, height, extraction_method): + frame_count = len(images) + color_feature = ColorFeature("color_feature", frame_rate, frame_count, width, height, images, extraction_method) color_feature.extract() - return (color_feature, feature_pipe) + return (color_feature,) -class BrightnessFeatureNode(FirstFeature): +@apply_tooltips +class BrightnessFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return BrightnessFeature @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs.pop("frame_count", None) return { - **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, + "images": ("IMAGE",), } } - def create_feature(self, video_frames, frame_rate, extraction_method): - feature_pipe = FeaturePipe(frame_rate, video_frames) - brightness_feature = BrightnessFeature("brightness_feature", feature_pipe.frame_rate, feature_pipe.frame_count, video_frames, extraction_method) + RETURN_TYPES = ("FEATURE",) + FUNCTION = "create_feature" + + def create_feature(self, images, frame_rate, width, height, extraction_method): + frame_count = len(images) + brightness_feature = BrightnessFeature("brightness_feature", frame_rate, frame_count, width, height, images, extraction_method) brightness_feature.extract() - return (brightness_feature, feature_pipe) + return (brightness_feature,) -class MotionFeatureNode(FirstFeature): +@apply_tooltips +class MotionFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return MotionFeature @classmethod def INPUT_TYPES(cls): + # Get parent input types but exclude frame_count + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs.pop("frame_count", None) + return { - **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, + "images": ("IMAGE",), "flow_method": (["Farneback", "LucasKanade", "PyramidalLK"],), "flow_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.1}), "magnitude_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "create_feature" - def create_feature(self, video_frames, frame_rate, extraction_method, flow_method, flow_threshold, magnitude_threshold): - feature_pipe = FeaturePipe(frame_rate, video_frames) - num_frames = feature_pipe.frame_count - - self.start_progress(num_frames, desc="Extracting motion features") - + def create_feature(self, images, frame_rate, width, height, extraction_method, flow_method, flow_threshold, magnitude_threshold): + # Use length of images as frame_count + frame_count = len(images) + def progress_callback(current_step, total_steps): self.update_progress(current_step - self.current_progress) + self.start_progress(frame_count, desc="Extracting motion features") + motion_feature = MotionFeature( "motion_feature", - feature_pipe.frame_rate, - feature_pipe.frame_count, - video_frames, + frame_rate, + frame_count, + width, + height, + images, extraction_method, flow_method, flow_threshold, @@ -311,35 +378,77 @@ def progress_callback(current_step, total_steps): motion_feature.extract() self.end_progress() - return (motion_feature, feature_pipe) + return (motion_feature,) -class AreaFeatureNode(FirstFeature): +@apply_tooltips +class AreaFeatureNode(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return AreaFeature @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs.pop("frame_count", None) return { - **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, "masks": ("MASK",), "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "create_feature" - def create_feature(self, masks, video_frames, frame_rate, extraction_method, threshold): - feature_pipe = FeaturePipe(frame_rate, video_frames) - area_feature = AreaFeature("area_feature", feature_pipe.frame_rate, feature_pipe.frame_count, - masks, feature_type=extraction_method, threshold=threshold) + def create_feature(self, masks, frame_rate, width, height, extraction_method, threshold): + frame_count = len(masks) + area_feature = AreaFeature("area_feature", frame_rate, frame_count, width, height, masks, extraction_method, threshold) area_feature.extract() - return (area_feature, feature_pipe) + return (area_feature,) + + +@apply_tooltips +class FeatureInfoNode(): + """ + Node that extracts common information from feature inputs. + """ + def __init__(self): + pass + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), # Accepts any feature type + } + } + RETURN_TYPES = ("STRING", "STRING", "INT","FLOAT", "INT", "INT", "INT", "FLOAT", "FLOAT") + RETURN_NAMES = ("name", "type", "frame_rate","frame_rate_float", "frame_count", "width", "height", "min_value", "max_value") + FUNCTION = "get_info" + CATEGORY = "RyanOnTheInside/FlexFeatures/Utilities" + + def get_info(self, feature): + """Extract common information from the feature""" + + + #TODO: rename attr to thresholds impending + values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] # Use feature.min_value and feature.max_value if available, otherwise use actual min/max + min_val = getattr(feature, 'min_value', min(values)) + max_val = getattr(feature, 'max_value', max(values)) + + return ( + feature.name, + feature.type, + feature.frame_rate, + float(feature.frame_rate), + feature.frame_count, + feature.width if feature.width is not None else 0, + feature.height if feature.height is not None else 0, + min_val, + max_val + ) diff --git a/nodes/flex/feature_extractors_audio.py b/nodes/flex/feature_extractors_audio.py index 8fc3151..ee167ac 100644 --- a/nodes/flex/feature_extractors_audio.py +++ b/nodes/flex/feature_extractors_audio.py @@ -1,72 +1,59 @@ -from .feature_extractors import FeatureExtractorBase, FirstFeature -from .feature_pipe import FeaturePipe +from .feature_extractors import FeatureExtractorBase from .features_audio import AudioFeature, PitchFeature, PitchRange, BaseFeature, RhythmFeature from ... import RyanOnTheInside from ..audio.audio_nodes import AudioNodeBase +from ...tooltips import apply_tooltips -class AudioFeatureExtractor(FeatureExtractorBase): - @classmethod - def feature_type(cls) -> type[BaseFeature]: - return AudioFeature +_category = f"{FeatureExtractorBase.CATEGORY}/Audio" +class AudioFeatureExtractorMixin: @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + parent_inputs["frame_count"] = ("INT", {"default": 0, "min": 0}) return { **super().INPUT_TYPES(), "required": { - **super().INPUT_TYPES()["required"], + **parent_inputs, "audio": ("AUDIO",), - "feature_pipe": ("FEATURE_PIPE",), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") - FUNCTION = "extract_feature" - - - def extract_feature(self, audio, feature_pipe, extraction_method): - feature = AudioFeature(extraction_method, audio, feature_pipe.frame_count, feature_pipe.frame_rate, extraction_method) - feature.extract() - return (feature, feature_pipe) + def calculate_target_frame_count(self, audio, frame_rate, frame_count): + """Calculate the target frame count based on audio length and specified frame count""" + waveform = audio["waveform"] + sample_rate = audio["sample_rate"] + natural_frame_count = int((waveform.shape[-1] / sample_rate) * frame_rate) + return frame_count if frame_count > 0 else natural_frame_count -#todo: create base class in prep for version 2 -class AudioFeatureExtractorFirst(FeatureExtractorBase): +@apply_tooltips +class AudioFeatureExtractor(AudioFeatureExtractorMixin, FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return AudioFeature - @classmethod - def INPUT_TYPES(cls): - return { - **super().INPUT_TYPES(), - "required": { - **super().INPUT_TYPES()["required"], - "audio": ("AUDIO",), - "width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), - "height": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), - "frame_rate": ("FLOAT", {"default": 30.0, "min": 0.1, "max": 240.0, "step": 0.1}), - } - } - - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE", "INT") - RETURN_NAMES = ("feature", "feature_pipe", "frame_count") + RETURN_TYPES = ("FEATURE", "INT",) + RETURN_NAMES = ("feature", "frame_count",) FUNCTION = "extract_feature" - CATEGORY = "RyanOnTheInside/FlexFeatures/Audio" + CATEGORY = _category + + def extract_feature(self, audio, frame_rate, frame_count, width, height, extraction_method): + target_frame_count = self.calculate_target_frame_count(audio, frame_rate, frame_count) - def extract_feature(self, audio, width, height, frame_rate, extraction_method): - empty_frames = AudioNodeBase.create_empty_tensor(audio, frame_rate, height, width, channels=3) - feature_pipe = FeaturePipe(frame_rate, empty_frames) feature = AudioFeature( + width=width, + height=height, feature_name=extraction_method, audio=audio, - frame_count=feature_pipe.frame_count, - frame_rate=feature_pipe.frame_rate, + frame_count=target_frame_count, + frame_rate=frame_rate, feature_type=extraction_method ) feature.extract() - return (feature, feature_pipe, feature_pipe.frame_count) + return (feature, target_frame_count) -class RhythmFeatureExtractor(FirstFeature): +@apply_tooltips +class RhythmFeatureExtractor(AudioFeatureExtractorMixin, FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: return RhythmFeature @@ -77,32 +64,35 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES(), "required": { **super().INPUT_TYPES()["required"], - "audio": ("AUDIO",), "time_signature": ("INT", {"default": 4, "min": 1, "max": 12, "step": 1}), }, } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "extract_feature" - CATEGORY = "RyanOnTheInside/FlexFeatures/Audio/Rhythm" + CATEGORY = _category + + def extract_feature(self, audio, extraction_method, time_signature, frame_rate, frame_count, width, height): + target_frame_count = self.calculate_target_frame_count(audio, frame_rate, frame_count) - def extract_feature(self, audio, extraction_method, time_signature, frame_rate, video_frames): - feature_pipe = FeaturePipe(frame_rate, video_frames) feature = RhythmFeature( + width=width, + height=height, feature_name=extraction_method, audio=audio, - frame_count=feature_pipe.frame_count, - frame_rate=feature_pipe.frame_rate, + frame_count=target_frame_count, + frame_rate=frame_rate, feature_type=extraction_method, time_signature=time_signature ) feature.extract() - return (feature, feature_pipe) + return (feature,) -class PitchFeatureExtractor(FeatureExtractorBase): +@apply_tooltips +class PitchFeatureExtractor(AudioFeatureExtractorMixin, FeatureExtractorBase): @classmethod def feature_type(cls) -> type[BaseFeature]: - return PitchFeature + return PitchFeature @classmethod def INPUT_TYPES(cls): @@ -110,37 +100,41 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES(), "required": { **super().INPUT_TYPES()["required"], - "audio": ("AUDIO",), - "feature_pipe": ("FEATURE_PIPE",), "opt_crepe_model":(["none", "medium", "tiny", "small", "large", "full"], {"default": "medium"}) }, "optional": { "opt_pitch_range_collections": ("PITCH_RANGE_COLLECTION",), - # "": ("CREPE_MODEL",), }, } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("FEATURE",) FUNCTION = "extract_feature" + CATEGORY = _category - def extract_feature(self, audio, feature_pipe, extraction_method, opt_pitch_range_collections=None, opt_crepe_model=None): + def extract_feature(self, audio, frame_rate, frame_count, width, height, extraction_method, opt_pitch_range_collections=None, opt_crepe_model=None): if opt_pitch_range_collections is None: opt_pitch_range_collections = [] + + target_frame_count = self.calculate_target_frame_count(audio, frame_rate, frame_count) + feature = PitchFeature( + width=width, + height=height, feature_name=extraction_method, audio=audio, - frame_count=feature_pipe.frame_count, - frame_rate=feature_pipe.frame_rate, + frame_count=target_frame_count, + frame_rate=frame_rate, pitch_range_collections=opt_pitch_range_collections, feature_type=extraction_method, crepe_model=opt_crepe_model ) feature.extract() - return (feature, feature_pipe) + return (feature,) class PitchAbstraction(RyanOnTheInside): CATEGORY="RyanOnTheInside/FlexFeatures/Audio/Pitch" +@apply_tooltips class PitchRangeNode(PitchAbstraction): @classmethod def INPUT_TYPES(cls): @@ -156,8 +150,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PITCH_RANGE_COLLECTION",) FUNCTION = "create_pitch_range" - - CATEGORY = "RyanOnTheInside/FlexFeatures" + CATEGORY = _category def create_pitch_range(self, min_pitch, max_pitch, previous_range_collection=None): pitch_range = PitchRange(min_pitch, max_pitch) @@ -171,6 +164,7 @@ def create_pitch_range(self, min_pitch, max_pitch, previous_range_collection=Non collections = previous_range_collection + [pitch_range_collection] return (collections,) +@apply_tooltips class PitchRangePresetNode(PitchAbstraction): @classmethod def INPUT_TYPES(cls): @@ -195,8 +189,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PITCH_RANGE_COLLECTION",) FUNCTION = "create_pitch_range_preset" - - CATEGORY = "RyanOnTheInside/FlexFeatures" + CATEGORY = _category def create_pitch_range_preset(self, preset, previous_range_collection=None): presets = { @@ -221,6 +214,7 @@ def create_pitch_range_preset(self, preset, previous_range_collection=None): collections = previous_range_collection + [pitch_range_collection] return (collections,) +@apply_tooltips class PitchRangeByNoteNode(PitchAbstraction): @classmethod def INPUT_TYPES(cls): @@ -237,8 +231,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PITCH_RANGE_COLLECTION",) FUNCTION = "create_note_pitch_ranges" - - CATEGORY = "RyanOnTheInside/FlexFeatures" + CATEGORY = _category def create_note_pitch_ranges(self, chord_only, notes, pitch_tolerance_percent, previous_range_collection=None): if not notes: @@ -276,5 +269,4 @@ def create_note_pitch_ranges(self, chord_only, notes, pitch_tolerance_percent, p def _midi_to_frequency(self, midi_note): import librosa return librosa.midi_to_hz(midi_note) - - # The _calculate_tolerance method has been removed from here \ No newline at end of file + # The _calculate_tolerance method has been removed from here diff --git a/nodes/flex/feature_extractors_midi.py b/nodes/flex/feature_extractors_midi.py index 9a390d0..5ec3240 100644 --- a/nodes/flex/feature_extractors_midi.py +++ b/nodes/flex/feature_extractors_midi.py @@ -1,20 +1,19 @@ import mido import os -from .feature_pipe import FeaturePipe import folder_paths from server import PromptServer from aiohttp import web import shutil from .features_midi import MIDIFeature from .feature_extractors import FeatureExtractorBase +from ...tooltips import apply_tooltips +@apply_tooltips class MIDILoadAndExtract(FeatureExtractorBase): @classmethod def feature_type(cls) -> type[MIDIFeature]: return MIDIFeature - - @classmethod def INPUT_TYPES(cls): return { @@ -22,18 +21,16 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES()["required"], "midi_file": (folder_paths.get_filename_list("midi_files"),), "track_selection": (["all"],), - "frame_rate": ("FLOAT", {"default": 30, "min": 0.1, "max": 120, "step": 0.1}), - "video_frames": ("IMAGE",), "chord_only": ("BOOLEAN", {"default": False}), "notes": ("STRING", {"default": ""}), }, } - RETURN_TYPES = ("MIDI", "FEATURE", "FEATURE_PIPE") + RETURN_TYPES = ("MIDI", "FEATURE") FUNCTION = "process_midi" - CATEGORY = "RyanOnTheInside/Audio" + - def process_midi(self, midi_file, track_selection, notes, extraction_method, frame_rate, video_frames, chord_only=False): + def process_midi(self, midi_file, track_selection, notes, extraction_method, frame_rate, frame_count, width, height, chord_only=False): try: midi_path = folder_paths.get_full_path("midi_files", midi_file) if not midi_path or not os.path.exists(midi_path): @@ -42,23 +39,27 @@ def process_midi(self, midi_file, track_selection, notes, extraction_method, fra midi_data = mido.MidiFile(midi_path) selected_notes = [int(n.strip()) for n in notes.split(',') if n.strip().isdigit()] - feature_pipe = FeaturePipe(frame_rate, video_frames) # Convert friendly attribute name to internal attribute name internal_attribute = MIDIFeature.get_attribute_value(extraction_method) - feature = MIDIFeature(f"midi_{internal_attribute}", midi_data, internal_attribute, - feature_pipe.frame_rate, feature_pipe.frame_count, - notes=selected_notes, chord_only=chord_only) + feature = MIDIFeature( + f"midi_{internal_attribute}", + midi_data, + internal_attribute, + frame_rate, + frame_count, + width, + height, + notes=selected_notes, + chord_only=chord_only + ) feature.extract() - return (midi_data, feature, feature_pipe) + return (midi_data, feature) except Exception as e: - # error_msg = f"Error in MIDILoadAndExtract.process_midi: {type(e).__name__}: {str(e)}\n" - # error_msg += traceback.format_exc() - # print(error_msg) raise RuntimeError(f"Error processing MIDI file: {type(e).__name__}: {str(e)}") @classmethod diff --git a/nodes/flex/feature_extractors_proximity.py b/nodes/flex/feature_extractors_proximity.py index 5f048ea..3ee0cf2 100644 --- a/nodes/flex/feature_extractors_proximity.py +++ b/nodes/flex/feature_extractors_proximity.py @@ -1,38 +1,46 @@ -from .features_proximity import Location, ProximityFeature -from .feature_extractors import FirstFeature +from .features_proximity import Location, ProximityFeature +from .feature_extractors import FeatureExtractorBase from ... import RyanOnTheInside -from .feature_pipe import FeaturePipe +from ...tooltips import apply_tooltips import numpy as np import cv2 +_category = f"{FeatureExtractorBase.CATEGORY}/Proximity" + +@apply_tooltips +class ProximityFeatureNode(FeatureExtractorBase): + @classmethod + def feature_type(cls) -> type: + return ProximityFeature -class ProximityFeatureNode(FirstFeature): @classmethod def INPUT_TYPES(cls): return { + **super().INPUT_TYPES(), "required": { - "video_frames": ("IMAGE",), - "frame_rate": ("FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 0.1}), + **super().INPUT_TYPES()["required"], "anchor_locations": ("LOCATION",), "query_locations": ("LOCATION",), "normalization_method": (["frame", "minmax"],), } } - RETURN_TYPES = ("FEATURE", "FEATURE_PIPE") - RETURN_NAMES = ("proximity_feature", "feature_pipe") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("proximity_feature",) FUNCTION = "create_feature" + CATEGORY = _category - def create_feature(self, video_frames, frame_rate, anchor_locations, query_locations, normalization_method): - feature_pipe = FeaturePipe(frame_rate, video_frames) - frame_dimensions = (video_frames.shape[2], video_frames.shape[1]) # width, height + def create_feature(self, frame_rate, frame_count, width, height, anchor_locations, query_locations, normalization_method, extraction_method): + frame_dimensions = (width, height) proximity_feature = ProximityFeature( + width=width, + height=height, name="proximity_feature", anchor_locations=anchor_locations, query_locations=query_locations, frame_rate=frame_rate, - frame_count=len(video_frames), + frame_count=frame_count, frame_dimensions=frame_dimensions, normalization_method=normalization_method ) @@ -50,15 +58,14 @@ def create_feature(self, video_frames, frame_rate, anchor_locations, query_locat location.points = location.points[:, :2] print("Depth ignored. Depth must be included for all points or no points.") - # self.start_progress(len(video_frames), desc="Calculating proximity") proximity_feature.extract() - # self.end_progress() - return (proximity_feature, feature_pipe) + return (proximity_feature,) class ProximityFeatureInput(RyanOnTheInside): - CATEGORY="RyanOnTheInside/Proximity" + CATEGORY=_category +@apply_tooltips class LocationFromMask(ProximityFeatureInput): @classmethod def INPUT_TYPES(cls): @@ -120,6 +127,7 @@ def generate_locations(self, masks, method, depth_maps=None): return (locations,) +@apply_tooltips class LocationFromPoint(ProximityFeatureInput): @classmethod def INPUT_TYPES(cls): @@ -134,7 +142,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("LOCATION",) FUNCTION = "generate_locations" - + CATEGORY = _category def generate_locations(self, x, y, batch_count, z): locations = [] for _ in range(batch_count): @@ -143,6 +151,7 @@ def generate_locations(self, x, y, batch_count, z): return (locations,) +@apply_tooltips class LocationTransform(ProximityFeatureInput): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/flex/feature_extractors_whisper.py b/nodes/flex/feature_extractors_whisper.py new file mode 100644 index 0000000..5cb0334 --- /dev/null +++ b/nodes/flex/feature_extractors_whisper.py @@ -0,0 +1,756 @@ +from .features import WhisperFeature, BaseFeature +from .feature_extractors import FeatureExtractorBase +import json +import torch +import torch.nn.functional as F +from pathlib import Path +import textwrap +from PIL import Image, ImageDraw, ImageFont +import numpy as np +from ...tooltips import apply_tooltips + +#NOTE: below is an example of the data we are expecting. +# This is built to work with ComfyUI-Whisper, but only the json structure below is required. +# # text: + # We're telling a story about water and then about fire and then we're going to do ice and then psychedelic awesomeness. Okay. + + # #segement_alignment + # [{"value": "We're telling a story about water and then about fire and then we're going to do ice and then", "start": 0.0, "end": 6.26}, {"value": "psychedelic awesomeness. Okay.", "start": 7.9799999999999995, "end": 9.38}] + + # #words_alignment + # [{"value": "We're", "start": 0.0, "end": 0.26}, {"value": "telling", "start": 0.26, "end": 0.46}, {"value": "a", "start": 0.46, "end": 0.6}, {"value": "story", "start": 0.6, "end": 0.88}, {"value": "about", "start": 0.88, "end": 1.14}, {"value": "water", "start": 1.14, "end": 1.58}, {"value": "and", "start": 1.58, "end": 2.24}, {"value": "then", "start": 2.24, "end": 2.44}, {"value": "about", "start": 2.44, "end": 3.24}, {"value": "fire", "start": 3.24, "end": 3.66}, {"value": "and", "start": 3.66, "end": 4.1}, {"value": "then", "start": 4.1, "end": 4.3}, {"value": "we're", "start": 4.3, "end": 4.7}, {"value": "going", "start": 4.7, "end": 4.88}, {"value": "to", "start": 4.88, "end": 5.02}, {"value": "do", "start": 5.02, "end": 5.18}, {"value": "ice", "start": 5.18, "end": 5.44}, {"value": "and", "start": 5.44, "end": 5.98}, {"value": "then", "start": 5.98, "end": 6.26}, {"value": "psychedelic", "start": 7.9799999999999995, "end": 8.52}, {"value": "awesomeness.", "start": 8.52, "end": 9.06}, {"value": "Okay.", "start": 9.2, "end": 9.38}] + +_category = f"{FeatureExtractorBase.CATEGORY}/Whisper" + +class TriggerSet: + def __init__(self): + self.triggers = [] + self._expected_image_shape = None # Store the expected shape for validation + + def add_trigger(self, pattern: str, values: tuple, mode: str, fade: str, + duration: int, blend_mode: str, fill_behavior: str, image=None): + # Validate image shape if provided + if image is not None: + current_shape = tuple(image.shape[1:]) # HWC shape (ignore batch dimension) + + if self._expected_image_shape is None: + # First image sets the expected shape + self._expected_image_shape = current_shape + elif current_shape != self._expected_image_shape: + raise ValueError( + f"Image shape mismatch! Expected shape {self._expected_image_shape}, " + f"but got {current_shape}. All trigger images must have the same dimensions." + ) + + trigger = { + "pattern": pattern, + "values": values, + "mode": mode, + "fade": fade, + "duration": duration, + "blend_mode": blend_mode, + "fill_behavior": fill_behavior, + "image": image, + "image_batch_size": image.shape[0] if image is not None else 1 + } + self.triggers.append(trigger) + return self + + def extend(self, other_trigger_set): + if other_trigger_set: + # Validate image shapes from other trigger set + for trigger in other_trigger_set.triggers: + if trigger.get("image") is not None: + current_shape = tuple(trigger["image"].shape[1:]) + if self._expected_image_shape is None: + self._expected_image_shape = current_shape + elif current_shape != self._expected_image_shape: + raise ValueError( + f"Image shape mismatch in trigger set combination! " + f"Expected shape {self._expected_image_shape}, but got {current_shape}. " + f"All trigger images must have the same dimensions." + ) + + self.triggers.extend(other_trigger_set.triggers) + return self + +@apply_tooltips +class WhisperFeatureNode(FeatureExtractorBase): + @classmethod + def feature_type(cls) -> type[BaseFeature]: + return WhisperFeature + + @classmethod + def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES()["required"] + return { + **super().INPUT_TYPES(), + "required": { + **parent_inputs, + "alignment_data": ("whisper_alignment",), + }, + "optional": { + "trigger_set": ("TRIGGER_SET",), + "context_size": ("INT", {"default": +3, "min": 0, "max": 10}), + "overlap_mode": (["blend", "replace", "add"], {"default": "blend"}), + } + } + + RETURN_TYPES = ("FEATURE", "IMAGE") + FUNCTION = "create_feature" + CATEGORY = _category + + def create_feature(self, frame_rate, frame_count, width, height, extraction_method, + alignment_data, trigger_set=None, context_size=3, overlap_mode="blend"): + + # Parse alignment data + try: + data = alignment_data if not isinstance(alignment_data, str) else json.loads(alignment_data) + except (json.JSONDecodeError, KeyError, TypeError) as e: + raise ValueError(f"Invalid alignment data format: {e}") + + # Parse trigger set if provided + triggers = None + if trigger_set: + try: + triggers = json.loads(trigger_set) if isinstance(trigger_set, str) else trigger_set + except json.JSONDecodeError: + print("Warning: Could not parse trigger_set JSON") + + # Create the WhisperFeature with the requested extraction method + whisper_feature = WhisperFeature( + name="whisper_feature", + frame_rate=frame_rate, + frame_count=frame_count, + alignment_data=alignment_data, + trigger_pairs=trigger_set, + feature_name=extraction_method, + width=width, + height=height + ) + + whisper_feature.extract() + + # Process images if triggers contain them + output_images = None + if trigger_set and any(t.get("image") is not None for t in trigger_set.triggers): + try: + print(f"Processing {len(trigger_set.triggers)} triggers with images") + image_sequence = [] + current_frame = 0 + + sorted_triggers = whisper_feature.sort_triggers_by_occurrence(trigger_set.triggers) + print(f"Sorted triggers: {len(sorted_triggers)}") + + # Instead of processing trigger by trigger, let's collect all occurrences first + all_occurrences = [] + for trigger in sorted_triggers: + if trigger.get("image") is not None: + frame_ranges = whisper_feature.find_all_trigger_frames(trigger["pattern"]) + for start_frame, end_frame in frame_ranges: + all_occurrences.append({ + "trigger": trigger, + "start_frame": start_frame, + "end_frame": end_frame + }) + + # Sort all occurrences by start frame to maintain chronological order + all_occurrences.sort(key=lambda x: x["start_frame"]) + print(f"Processing {len(all_occurrences)} total trigger occurrences in chronological order") + + # Process occurrences in order + for occurrence in all_occurrences: + trigger = occurrence["trigger"] + start_frame = occurrence["start_frame"] + end_frame = occurrence["end_frame"] + + # Convert back to tensor + images = torch.tensor(trigger["image"]) if isinstance(trigger["image"], list) else trigger["image"] + batch_size = trigger["image_batch_size"] + frame_count = end_frame - start_frame + + # Handle batch images based on fill behavior + if trigger["fill_behavior"] == "none": + frame_count = 1 + images = images[:1] + else: + # Handle fill behaviors + if batch_size > 1: + if trigger["fill_behavior"] == "loop": + repeats = (frame_count + batch_size - 1) // batch_size + images = images.repeat((repeats, 1, 1, 1))[:frame_count] + elif trigger["fill_behavior"] == "hold": + if frame_count > batch_size: + last_frame = images[-1:] + extra_frames = frame_count - batch_size + images = torch.cat([images, last_frame.repeat((extra_frames, 1, 1, 1))]) + else: + if frame_count > 1: + images = images.repeat((frame_count, 1, 1, 1)) + + if trigger["fill_behavior"] != "none": + # Only fill gaps if not "none" + if current_frame < start_frame: + zero_frames = start_frame - current_frame + zero_image = torch.zeros_like(images[0]) + image_sequence.extend([zero_image] * zero_frames) + + image_sequence.extend(images.unbind(0)) + current_frame = end_frame if trigger["fill_behavior"] != "none" else start_frame + 1 + + if image_sequence: + print(f"Final sequence length: {len(image_sequence)}") + output_images = torch.stack(image_sequence) + else: + print("No images in sequence") + + except Exception as e: + print(f"Error processing trigger images: {e}") + import traceback + traceback.print_exc() + output_images = None + + # Set feature back to requested extraction method + whisper_feature.set_active_feature(extraction_method) + + return (whisper_feature, output_images) if output_images is not None else (whisper_feature, None) + +@apply_tooltips +class TriggerBuilder: + """Creates triggers that respond to specific words or phrases in the Whisper transcription. + Can be chained together to create complex trigger combinations. + + Example Usage: + 1. Single trigger for "amazing": + - pattern: "amazing" + - start_value: 0.0 + - end_value: 1.0 + + 2. Chain multiple triggers: + TriggerBuilder("happy") -> TriggerBuilder("sad") + Each trigger specifies how it blends with the accumulated result + """ + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "pattern": ("STRING", {"multiline": False, "default": "hello"}), + "start_value": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0}), + "end_value": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}), + "match_mode": (["exact", "contains", "regex", "phonetic"], {"default": "contains"}), + "fade_type": (["none", "linear", "smooth"], {"default": "linear"}), + "duration_frames": ("INT", {"default": 0, "min": 0}), + "blend_mode": (["blend", "add", "multiply", "max"], {"default": "blend"}), + "fill_behavior": (["none", "hold", "loop"], {"default": "none"}), + }, + "optional": { + "previous_triggers": ("TRIGGER_SET",), + "trigger_image": ("IMAGE",), + } + } + + RETURN_TYPES = ("TRIGGER_SET",) + FUNCTION = "build" + CATEGORY = _category + + def build(self, pattern: str, start_value: float, end_value: float, + match_mode: str, fade_type: str, duration_frames: int, + blend_mode: str, fill_behavior: str, previous_triggers=None, + trigger_image=None) -> tuple: + + trigger_set = TriggerSet() + + # Add new trigger + trigger_set.add_trigger( + pattern=pattern, + values=(start_value, end_value), + mode=match_mode, + fade=fade_type, + duration=duration_frames, + blend_mode=blend_mode, + fill_behavior=fill_behavior, + image=trigger_image + ) + + # Combine with previous triggers if any + trigger_set.extend(previous_triggers) + + return (trigger_set,) + +@apply_tooltips +class ContextModifier: + """Modifies trigger behavior based on context. + + Example Usage: + 1. Amplify long words: + - modifier_type: "timing" + - condition: "duration > 0.5" + - value_adjust: 1.5 + + 2. Create sequence effects: + - modifier_type: "sequence" + - condition: "index % 2 == 0" + - value_adjust: 0.8 + """ + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "trigger_set": ("TRIGGER_SET",), + + # Type of context to consider: + # - timing: Word duration and position + # - sentiment: Positive/negative context + # - speaker: Who is speaking + # - sequence: Pattern in word sequence + "modifier_type": (["timing", "sentiment", "speaker", "sequence"], + {"default": "timing"}), + + # Python expression that determines when to apply modification + # Available variables depend on modifier_type: + # - timing: duration, start, end + # - sentiment: is_positive, sentiment_score + # - speaker: speaker_id, is_new_speaker + # - sequence: index, total_words + "condition": ("STRING", {"multiline": True, + "default": "duration > 0.5"}), + + # How much to modify the trigger value when condition is true + # 1.0 = no change, >1.0 amplify, <1.0 reduce + "value_adjust": ("FLOAT", {"default": 1.2, "min": 0.0, "max": 2.0}), + + # How many words to look at for context + "window_size": ("INT", {"default": 3, "min": 1, "max": 10}), + } + } + + RETURN_TYPES = ("TRIGGER_SET",) + FUNCTION = "modify" + CATEGORY = _category + + def modify(self, trigger_set: str, modifier_type: str, condition: str, + value_adjust: float, window_size: int) -> tuple: + trigger_data = json.loads(trigger_set) + + context_mod = { + "type": modifier_type, + "condition": condition, + "adjustment": value_adjust, + "window": window_size + } + + trigger_data["context_modifier"] = context_mod + return (json.dumps(trigger_data),) + +import json +@apply_tooltips +class WhisperToPromptTravel: + """Converts Whisper alignment data to prompt travel format""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "alignment_data": ("whisper_alignment",), + "fps": ("FLOAT", {"default": 24.0, "min": 0.1, "max": 120.0}), + } + } + + RETURN_TYPES = ("STRING",) + FUNCTION = "convert" + CATEGORY = _category + + def convert(self, segments_alignment, fps): + import json + + # Parse the alignment data + try: + segments = json.loads(segments_alignment) + except json.JSONDecodeError: + raise ValueError("Invalid segments_alignment JSON format") + + # Create frame-to-prompt mapping + prompt_travel = {} + + for segment in segments: + # Convert time to frame number + frame = int(segment["start"] * fps) + prompt_travel[str(frame)] = segment["value"] + + # Convert to string format + result = "{\n" + for frame, prompt in sorted(prompt_travel.items(), key=lambda x: int(x[0])): + result += f'"{frame}":"{prompt}",\n' + result = result.rstrip(",\n") + "\n}" + + return (result,) + +@apply_tooltips +class WhisperTextRenderer: + """Renders text overlays from Whisper alignment data with animations""" + + # Built-in fonts that are OS-agnostic + BUILTIN_FONTS = { + "arial": "arial.ttf", + "times": "times.ttf", + "courier": "courier.ttf", + "helvetica": "helvetica.ttf" + } + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "images": ("IMAGE",), # Input video frames + "feature": ("FEATURE",), + "font_size": ("INT", {"default": 32, "min": 8, "max": 256}), + "font_name": (list(cls.BUILTIN_FONTS.keys()), {"default": "arial"}), + "position": (["top", "middle", "bottom"], {"default": "bottom"}), + "horizontal_align": (["left", "center", "right"], {"default": "center"}), + "margin": ("INT", {"default": 20, "min": 0, "max": 200}), + "animation_type": (["none", "fade", "pop", "slide"], {"default": "fade"}), + "animation_duration": ("INT", {"default": 15, "min": 1, "max": 60}), + }, + "optional": { + "max_width": ("INT", {"default": 0, "min": 0}), # 0 = full width + "bg_color": ("STRING", {"default": "#000000"}), + "text_color": ("STRING", {"default": "#FFFFFF"}), + "opacity": ("FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "render" + CATEGORY = _category + + def render(self, images, feature, font_size, font_name, position, horizontal_align, + margin, animation_type, animation_duration, max_width=0, + bg_color="#000000", text_color="#FFFFFF", opacity=0.8): + + # Get dimensions from input images + B, H, W, C = images.shape + device = images.device + + # Create output tensor + output = torch.zeros((B, H, W, 4), device=device) + output[..., 3] = 1.0 # Set alpha to 1 + + # Load font + font_path = self._get_font_path(font_name) + font = ImageFont.truetype(str(font_path), font_size) + + # Process each word/segment + for item in feature.alignment_data: + text = item["value"] + start_frame = int(item["start"] * feature.frame_rate) + end_frame = int(item["end"] * feature.frame_rate) + + # Create text mask using PIL (temporarily on CPU) + text_mask = self._create_text_mask( + text, (W, H), font, position, horizontal_align, + margin, max_width + ) + + # Convert mask to tensor and move to GPU + text_mask = torch.from_numpy(text_mask).to(device) + + # Apply animation and colors + self._apply_animation_and_colors( + output, text_mask, start_frame, end_frame, + animation_type, animation_duration, + text_color, bg_color, opacity + ) + + # Composite with input images + output = images * (1 - output[..., 3:]) + output[..., :3] * output[..., 3:] + + return (output,) + + def _create_text_mask(self, text, size, font, position, align, margin, max_width): + """Creates a binary mask for text using PIL""" + W, H = size + img = Image.new('L', size, 0) + draw = ImageDraw.Draw(img) + + # Word wrap if needed + if max_width > 0: + text = textwrap.fill(text, width=max_width) + + # Get text size + bbox = draw.textbbox((0, 0), text, font=font) + text_w = bbox[2] - bbox[0] + text_h = bbox[3] - bbox[1] + + # Calculate position + if align == "left": + x = margin + elif align == "right": + x = W - text_w - margin + else: # center + x = (W - text_w) // 2 + + if position == "top": + y = margin + elif position == "bottom": + y = H - text_h - margin + else: # middle + y = (H - text_h) // 2 + + # Draw text + draw.text((x, y), text, font=font, fill=255) + + return np.array(img) / 255.0 + + def _apply_animation_and_colors(self, output, mask, start_frame, end_frame, + animation_type, duration, text_color, bg_color, opacity): + """Applies animation and colors to the text mask""" + + # Convert colors to RGB tensors + text_rgb = torch.tensor(self._hex_to_rgb(text_color), device=output.device) / 255.0 + bg_rgb = torch.tensor(self._hex_to_rgb(bg_color), device=output.device) / 255.0 + + for frame in range(start_frame, end_frame + 1): + if frame >= len(output): + break + + # Calculate animation factor + if animation_type == "none": + factor = 1.0 + elif animation_type == "fade": + factor = self._get_fade_factor(frame, start_frame, end_frame, duration) + elif animation_type == "pop": + factor = self._get_pop_factor(frame, start_frame, end_frame, duration) + else: # slide + factor = self._get_slide_factor(frame, start_frame, end_frame, duration) + + # Apply animation and colors + alpha = mask * factor * opacity + output[frame, ..., :3] = (text_rgb * alpha[..., None] + + bg_rgb * (1 - alpha[..., None])) + output[frame, ..., 3] = alpha + + @staticmethod + def _hex_to_rgb(hex_color): + """Converts hex color to RGB values""" + hex_color = hex_color.lstrip('#') + return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) + + @staticmethod + def _get_fade_factor(frame, start, end, duration): + """Calculate fade animation factor""" + if frame < start + duration: + return min(1.0, (frame - start) / duration) + elif frame > end - duration: + return max(0.0, (end - frame) / duration) + return 1.0 + + @staticmethod + def _get_pop_factor(frame, start, end, duration): + """Calculate pop animation factor""" + if frame < start + duration: + t = (frame - start) / duration + return min(1.0, 1.2 * (1 - (1 - t) ** 2)) # Overshoot and settle + elif frame > end - duration: + t = (end - frame) / duration + return max(0.0, t) + return 1.0 + + @staticmethod + def _get_slide_factor(frame, start, end, duration): + """Calculate slide animation factor""" + if frame < start + duration: + return min(1.0, (frame - start) / duration) + elif frame > end - duration: + return max(0.0, (end - frame) / duration) + return 1.0 + + def _get_font_path(self, font_name): + """Get built-in font path""" + current_dir = Path(__file__).parent + fonts_dir = current_dir / "fonts" + return fonts_dir / self.BUILTIN_FONTS[font_name] + +@apply_tooltips +class ManualWhisperAlignmentData: + """Creates alignment data from manually entered text and timings. + + You can enter either word alignments or segment alignments. + Format should match ComfyUI-Whisper output. + + Note: For proper whisper alignment data, you should use ComfyUI-Whisper: + https://github.com/yuvraj108c/ComfyUI-Whisper + """ + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "alignment_text": ("STRING", { + "multiline": True, + "default": """ +[{"value": "This is a manual alignment node. You should use ComfyUI-Whisper instead", "start": 0.0, "end": 6.26}, {"value": "for proper speech-to-text with timing. https://github.com/yuvraj108c/ComfyUI-Whisper", "start": 7.98, "end": 9.38}] +""" + }), + } + } + + RETURN_TYPES = ("whisper_alignment",) + RETURN_NAMES = ("alignment_data",) + FUNCTION = "parse" + CATEGORY = _category + + def parse(self, alignment_text: str) -> tuple: + return (alignment_text,) + +@apply_tooltips +class WhisperTimeAdjuster: + """Manually adjust timing in Whisper alignment data""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "alignment_data": ("whisper_alignment",), + "time_offset": ("FLOAT", { + "default": 0.0, + "min": -1000.0, + "max": 1000.0, + "step": 0.1, + "description": "Seconds to shift all timestamps (positive = delay, negative = earlier)" + }), + } + } + + RETURN_TYPES = ("whisper_alignment",) + FUNCTION = "adjust" + CATEGORY = _category + + def adjust(self, alignment_data, time_offset): + try: + data = alignment_data if not isinstance(alignment_data, str) else json.loads(alignment_data) + + # Adjust all timestamps by offset + adjusted_data = [] + for segment in data: + adjusted_segment = segment.copy() + adjusted_segment["start"] = segment["start"] + time_offset + adjusted_segment["end"] = segment["end"] + time_offset + adjusted_data.append(adjusted_segment) + + return (adjusted_data,) + + except (json.JSONDecodeError, KeyError) as e: + raise ValueError(f"Invalid alignment data format: {e}") + +@apply_tooltips +class WhisperAutoAdjust: + """Automatically adjusts Whisper timing by detecting meaningful audio start""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "alignment_data": ("whisper_alignment",), + "audio": ("AUDIO",), # Video Helper Suite audio format + "detection_window": ("INT", { + "default": 1024, + "min": 256, + "max": 8192, + "step": 256, + "description": "Window size for energy detection" + }), + "energy_threshold": ("FLOAT", { + "default": 0.0001, + "min": 0.00001, + "max": 0.001, + "step": 0.00001, + "description": "Energy threshold (lower = more sensitive)" + }) + } + } + + RETURN_TYPES = ("whisper_alignment",) + FUNCTION = "adjust" + CATEGORY = _category + + def detect_audio_start(self, audio_dict, window_size, threshold): + # Extract waveform and convert to mono numpy array, like BaseAudioProcessor + audio = audio_dict['waveform'].squeeze(0).mean(axis=0).cpu().numpy() + sample_rate = audio_dict['sample_rate'] + + print(f"Audio shape before processing: {audio_dict['waveform'].shape}") + print(f"Audio shape after mono conversion: {audio.shape}") + print(f"Sample rate: {sample_rate}") + + # Calculate energy in windows using numpy for efficiency + num_windows = (len(audio) - window_size) // (window_size // 2) + energies = np.zeros(num_windows) + + for i in range(num_windows): + start = i * (window_size // 2) + end = start + window_size + window = audio[start:end] + energies[i] = np.mean(window ** 2) + + print(f"Energy shape: {energies.shape}") + print(f"Max energy: {energies.max():.6f}") + print(f"Min energy: {energies.min():.6f}") + + # Find first window above threshold + start_window = np.where(energies > threshold)[0] + if len(start_window) == 0: + print(f"No windows above threshold {threshold}") + return 0 + + # Convert window index to sample + start_sample = start_window[0] * (window_size // 2) + start_time = start_sample / sample_rate + + print(f"Found start time: {start_time:.3f}s") + return start_time + + def adjust(self, alignment_data, audio, detection_window=1024, energy_threshold=0.0001): + try: + data = alignment_data if not isinstance(alignment_data, str) else json.loads(alignment_data) + + print("Original whisper timings:") + for segment in data[:3]: # Print first 3 segments + print(f" {segment['start']:.3f} -> {segment['end']:.3f}: {segment['value']}") + + # Detect meaningful audio start + audio_start = self.detect_audio_start(audio, detection_window, energy_threshold) + print(f"\nDetected audio start: {audio_start}") + + # Get first whisper timestamp + whisper_start = min(segment["start"] for segment in data) + print(f"First whisper timestamp: {whisper_start}") + + # Calculate needed offset + time_offset = audio_start - whisper_start + print(f"Calculated offset: {time_offset}") + + # Adjust all timestamps + adjusted_data = [] + for segment in data: + adjusted_segment = segment.copy() + adjusted_segment["start"] = segment["start"] + time_offset + adjusted_segment["end"] = segment["end"] + time_offset + adjusted_data.append(adjusted_segment) + + print("\nAdjusted whisper timings:") + for segment in adjusted_data[:3]: # Print first 3 segments + print(f" {segment['start']:.3f} -> {segment['end']:.3f}: {segment['value']}") + + return (adjusted_data,) + + except Exception as e: + print(f"Error during adjustment: {str(e)}") + import traceback + traceback.print_exc() + raise ValueError(f"Error during alignment: {str(e)}") + + + + diff --git a/nodes/flex/feature_modulation.py b/nodes/flex/feature_modulation.py index d3d92df..2444f2c 100644 --- a/nodes/flex/feature_modulation.py +++ b/nodes/flex/feature_modulation.py @@ -1,12 +1,13 @@ from ... import RyanOnTheInside import numpy as np -import matplotlib.pyplot as plt import torch -from io import BytesIO -from PIL import Image import random from ..node_utilities import apply_easing +from ...tooltips import apply_tooltips +from scipy.interpolate import interp1d +from scipy.signal import find_peaks +@apply_tooltips class FeatureModulationBase(RyanOnTheInside): CATEGORY = "RyanOnTheInside/FlexFeatures/FeatureModulators" FUNCTION = "modulate" @@ -19,55 +20,6 @@ def INPUT_TYPES(cls): } } - def visualize(self, feature, width=1920, height=1080): - values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] - frames = len(values) - - plt.figure(figsize=(width/100, height/100), dpi=100) - plt.style.use('dark_background') - - plt.plot(values, color='dodgerblue', linewidth=2) - - plt.xlabel('Frame', color='white', fontsize=14) - plt.ylabel('Value', color='white', fontsize=14) - - plt.grid(True, linestyle='--', alpha=0.3, color='gray') - - plt.tick_params(axis='both', colors='white', labelsize=12) - - max_ticks = 10 - step = max(1, frames // max_ticks) - x_ticks = range(0, frames, step) - plt.xticks(x_ticks, [str(x) for x in x_ticks]) - - y_min, y_max = min(values), max(values) - y_range = y_max - y_min - plt.ylim(y_min - 0.05*y_range, y_max + 0.05*y_range) - - plt.gca().spines['top'].set_visible(False) - plt.gca().spines['right'].set_visible(False) - plt.gca().spines['bottom'].set_color('white') - plt.gca().spines['left'].set_color('white') - - plt.title(f'Feature: {feature.name}', color='white', fontsize=16) - - plt.tight_layout(pad=0.5) - - buf = BytesIO() - plt.savefig(buf, format='png', facecolor='black', edgecolor='none') - buf.seek(0) - - img = Image.open(buf) - img_array = np.array(img) - img_tensor = torch.from_numpy(img_array).float() / 255.0 - if img_tensor.dim() == 3: - img_tensor = img_tensor.unsqueeze(0) - - plt.close() - buf.close() - - return img_tensor - def create_processed_feature(self, original_feature, processed_values, name_prefix="Processed", invert_output=False): class ProcessedFeature(type(original_feature)): def __init__(self, original_feature, processed_values, invert_output): @@ -75,8 +27,7 @@ def __init__(self, original_feature, processed_values, invert_output): self.name = f"{name_prefix}_{original_feature.name}" if invert_output: self.name = f"Inverted_{self.name}" - self.frame_rate = original_feature.frame_rate - self.frame_count = len(processed_values) + if invert_output: min_val, max_val = min(processed_values), max(processed_values) @@ -92,6 +43,7 @@ def get_value_at_frame(self, frame_index): return ProcessedFeature(original_feature, processed_values, invert_output) +@apply_tooltips class FeatureMixer(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -113,8 +65,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "modulate" def modulate(self, feature, base_gain, floor, ceiling, peak_sharpness, valley_sharpness, attack, release, smoothing, feature_threshold, rise_detection_threshold, rise_smoothing_factor, invert_output): @@ -130,12 +82,10 @@ def modulate(self, feature, base_gain, floor, ceiling, peak_sharpness, valley_sh gained = [v * base_gain for v in normalized] - def waveshape(v): return v**peak_sharpness if v > 0.5 else 1 - (1-v)**valley_sharpness waveshaped = [waveshape(v) for v in gained] - def apply_envelope(values, attack, release): envelope = [] current = values[0] @@ -147,8 +97,7 @@ def apply_envelope(values, attack, release): envelope.append(current) return envelope enveloped = apply_envelope(waveshaped, attack, release) - - + def smooth_values(values, smoothing_factor): smoothed = values.copy() for i in range(1, len(values)): @@ -163,7 +112,7 @@ def smooth_values(values, smoothing_factor): final_values = [max(floor, min(ceiling, v)) for v in adjusted] processed_feature = self.create_processed_feature(feature, final_values, "Processed", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) def apply_rise_time_adjustment(self, values, rise_detection_threshold, rise_smoothing_factor): if all(v == 0 for v in values): @@ -188,6 +137,7 @@ def apply_rise_time_adjustment(self, values, rise_detection_threshold, rise_smoo return adjusted +@apply_tooltips class FeatureScaler(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -202,8 +152,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) def modulate(self, feature, scale_type, min_output, max_output, exponent, invert_output): values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] @@ -223,8 +173,9 @@ def modulate(self, feature, scale_type, min_output, max_output, exponent, invert final_values = [min_output + v * (max_output - min_output) for v in scaled] processed_feature = self.create_processed_feature(feature, final_values, "Scaled", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureCombine(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -239,8 +190,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) def modulate(self, feature1, feature2, operation, weight1, weight2, invert_output): values1 = [feature1.get_value_at_frame(i) for i in range(feature1.frame_count)] @@ -265,8 +216,9 @@ def modulate(self, feature1, feature2, operation, weight1, weight2, invert_outpu combined = [min(weight1 * v1, weight2 * v2) for v1, v2 in zip(values1, values2)] processed_feature = self.create_processed_feature(feature1, combined, "Combined", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureMath(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -279,8 +231,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "modulate" def modulate(self, feature, y, operation, invert_output): @@ -300,8 +252,9 @@ def modulate(self, feature, y, operation, invert_output): result = [min(v, y) for v in values] processed_feature = self.create_processed_feature(feature, result, "MathResult", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureSmoothing(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -316,8 +269,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) def modulate(self, feature, smoothing_type, window_size, alpha, sigma, invert_output): values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] @@ -344,8 +297,9 @@ def modulate(self, feature, smoothing_type, window_size, alpha, sigma, invert_ou adjusted_smoothed = [v + adjustment for v in smoothed] processed_feature = self.create_processed_feature(feature, adjusted_smoothed, "Smoothed", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureOscillator(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -361,8 +315,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) def modulate(self, feature, oscillator_type, frequency, amplitude, phase_shift, blend, invert_output): values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] @@ -380,10 +334,11 @@ def modulate(self, feature, oscillator_type, frequency, amplitude, phase_shift, blended = [v * (1 - blend) + osc * blend for v, osc in zip(values, oscillation)] processed_feature = self.create_processed_feature(feature, blended, "Oscillated", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) #NOTE separated from FeatureMath for ease of use. +@apply_tooltips class FeatureFade(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -399,8 +354,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) def modulate(self, feature1, feature2, fader, invert_output, control_feature=None): values1 = [feature1.get_value_at_frame(i) for i in range(feature1.frame_count)] @@ -421,9 +376,10 @@ def modulate(self, feature1, feature2, fader, invert_output, control_feature=Non combined = [(1 - f) * v1 + f * v2 for v1, v2, f in zip(values1, values2, fader_values)] processed_feature = self.create_processed_feature(feature1, combined, "Faded", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) #NOTE: this class is technically redundant to FeatureMixer, but it's kept for clarity and ease of use. +@apply_tooltips class FeatureRebase(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -436,17 +392,15 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "rebase" def rebase(self, feature, lower_threshold, upper_threshold, invert_output): values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] - # Apply thresholds rebased_values = [v if lower_threshold <= v <= upper_threshold else 0 for v in values] - # Re-normalize the values min_val, max_val = min(rebased_values), max(rebased_values) if min_val == max_val: normalized = [0 for _ in rebased_values] # All values are the same, normalize to 0 @@ -454,8 +408,9 @@ def rebase(self, feature, lower_threshold, upper_threshold, invert_output): normalized = [(v - min_val) / (max_val - min_val) for v in rebased_values] processed_feature = self.create_processed_feature(feature, normalized, "Rebased", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureRenormalize(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -467,19 +422,17 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES()["required"], } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "renormalize" def renormalize(self, feature, lower_threshold, upper_threshold, invert_output): values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] - # Calculate the range for normalization range_size = upper_threshold - lower_threshold - # Normalize values to fit between lower and upper threshold if max(values) == min(values): - normalized = [lower_threshold for _ in values] # All values are the same + normalized = [lower_threshold for _ in values] else: normalized = [ lower_threshold + (range_size * (v - min(values)) / (max(values) - min(values))) @@ -487,34 +440,9 @@ def renormalize(self, feature, lower_threshold, upper_threshold, invert_output): ] processed_feature = self.create_processed_feature(feature, normalized, "Renormalized", invert_output) - return (processed_feature, self.visualize(processed_feature)) - -class PreviewFeature(FeatureModulationBase): - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "feature": ("FEATURE",), - **super().INPUT_TYPES()["required"], - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("FEATURE_PREVIEW",) - FUNCTION = "preview" - - def preview(self, feature, invert_output): - values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] - - if invert_output: - min_val, max_val = min(values), max(values) - inverted_values = [max_val - v + min_val for v in values] - processed_feature = self.create_processed_feature(feature, inverted_values, "Inverted", invert_output) - else: - processed_feature = feature - - return (self.visualize(processed_feature),) + return (processed_feature,) +@apply_tooltips class FeatureTruncateOrExtend(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -527,8 +455,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "truncate_or_extend" def truncate_or_extend(self, feature, target_feature_pipe, fill_method, invert_output): @@ -560,9 +488,10 @@ def truncate_or_extend(self, feature, target_feature_pipe, fill_method, invert_o adjusted_values = source_values processed_feature = self.create_processed_feature(feature, adjusted_values, "TruncatedOrExtended", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) +@apply_tooltips class FeatureAccumulate(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -579,8 +508,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "accumulate" def accumulate(self, feature, start, end, threshold, skip_thresholded, frames_window, deccumulate, invert_output): @@ -626,13 +555,13 @@ def accumulate(self, feature, start, end, threshold, skip_thresholded, frames_wi normalized = [start + (v - min_val) * (end - start) / (max_val - min_val) for v in accumulated] processed_feature = self.create_processed_feature(feature, normalized, "Accumulated", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) - import numpy as np from scipy.interpolate import interp1d +@apply_tooltips class FeatureContiguousInterpolate(FeatureModulationBase): @classmethod def INPUT_TYPES(cls): @@ -650,8 +579,8 @@ def INPUT_TYPES(cls): } } - RETURN_TYPES = ("FEATURE", "IMAGE") - RETURN_NAMES = ("FEATURE", "FEATURE_VISUALIZATION") + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) FUNCTION = "interpolate" def interpolate(self, feature, threshold, start, end, easing, fade_out, invert_output): @@ -697,5 +626,156 @@ def interpolate(self, feature, threshold, start, end, easing, fade_out, invert_o interpolated[idx] = fade_out_values[i] processed_feature = self.create_processed_feature(feature, interpolated, "Interpolated", invert_output) - return (processed_feature, self.visualize(processed_feature)) + return (processed_feature,) + +@apply_tooltips +class FeatureInterpolator(FeatureModulationBase): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), + "interpolation_method": (["zero", "hold", "linear", "cubic", "nearest", "previous", "next", "quadratic"],), + "threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "min_difference": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "min_distance": ("INT", {"default": 1, "min": 1, "max": 100, "step": 1}), + "extrapolate": ("BOOLEAN", {"default": False}), + **super().INPUT_TYPES()["required"], + } + } + + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) + FUNCTION = "modulate" + + def modulate(self, feature, interpolation_method, threshold, min_difference, min_distance, extrapolate, invert_output): + # Get feature values + values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] + + # Find significant points based on threshold and difference + significant_indices = [] + last_value = None + last_index = None + + for i, v in enumerate(values): + # Check threshold directly + if v >= threshold: + # Check minimum difference from last point + if last_value is None or abs(v - last_value) >= min_difference: + # Check minimum distance from last point + if last_index is None or (i - last_index) >= min_distance: + significant_indices.append(i) + last_value = v + last_index = i + + if not significant_indices: + # If no significant points found, return original feature + return (feature,) + + significant_values = [values[i] for i in significant_indices] + + # Create interpolation function + x = np.array(significant_indices) + y = np.array(significant_values) + + # Handle extrapolation + fill_value = "extrapolate" if extrapolate else (significant_values[0], significant_values[-1]) + + # Generate output values + if interpolation_method == "zero": + # Only set values at exact points, everything else is zero + interpolated = np.zeros(feature.frame_count) + for idx, val in zip(significant_indices, significant_values): + interpolated[idx] = val + elif interpolation_method == "hold": + # Hold each value until the next point + interpolated = np.zeros(feature.frame_count) + for i in range(len(significant_indices)-1): + start_idx = significant_indices[i] + end_idx = significant_indices[i+1] + interpolated[start_idx:end_idx] = significant_values[i] + # Handle the last point + interpolated[significant_indices[-1]:] = significant_values[-1] + # Handle the beginning if needed + if significant_indices[0] > 0: + interpolated[:significant_indices[0]] = significant_values[0] if extrapolate else 0 + else: + # Create interpolator based on method + if interpolation_method == "linear": + f = interp1d(x, y, kind='linear', bounds_error=False, fill_value=fill_value) + elif interpolation_method == "cubic": + # Need at least 4 points for cubic, fallback to quadratic if not enough points + if len(x) >= 4: + f = interp1d(x, y, kind='cubic', bounds_error=False, fill_value=fill_value) + else: + f = interp1d(x, y, kind='quadratic', bounds_error=False, fill_value=fill_value) + elif interpolation_method == "nearest": + f = interp1d(x, y, kind='nearest', bounds_error=False, fill_value=fill_value) + elif interpolation_method == "previous": + f = interp1d(x, y, kind='previous', bounds_error=False, fill_value=fill_value) + elif interpolation_method == "next": + f = interp1d(x, y, kind='next', bounds_error=False, fill_value=fill_value) + elif interpolation_method == "quadratic": + # Need at least 3 points for quadratic, fallback to linear if not enough points + if len(x) >= 3: + f = interp1d(x, y, kind='quadratic', bounds_error=False, fill_value=fill_value) + else: + f = interp1d(x, y, kind='linear', bounds_error=False, fill_value=fill_value) + + # Generate interpolated values for all frames + x_new = np.arange(feature.frame_count) + interpolated = f(x_new) + + # Create processed feature + processed_feature = self.create_processed_feature(feature, interpolated, "Interpolated", invert_output) + return (processed_feature,) + +@apply_tooltips +class FeaturePeakDetector(FeatureModulationBase): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), + "prominence": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}), + "distance": ("INT", {"default": 1, "min": 1, "max": 100, "step": 1}), + "width": ("INT", {"default": 1, "min": 1, "max": 100, "step": 1}), + "plateau_size": ("INT", {"default": 1, "min": 1, "max": 100, "step": 1}), + "detect_valleys": ("BOOLEAN", {"default": False}), + **super().INPUT_TYPES()["required"], + } + } + + RETURN_TYPES = ("FEATURE",) + RETURN_NAMES = ("FEATURE",) + FUNCTION = "modulate" + + def modulate(self, feature, prominence, distance, width, plateau_size, detect_valleys, invert_output): + # Get feature values + values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] + + # Convert to numpy array for processing + signal = np.array(values) + + # If detecting valleys, invert the signal temporarily + if detect_valleys: + signal = -signal + + # Find peaks with given parameters + peaks, properties = find_peaks( + signal, + prominence=prominence, # Minimum prominence of peaks + distance=distance, # Minimum distance between peaks + width=width, # Minimum width of peaks + plateau_size=plateau_size # Minimum size of flat peaks + ) + + # Create output signal where peaks are 1.0 and everything else is 0.0 + peak_signal = np.zeros_like(signal) + peak_signal[peaks] = 1.0 + + # Create processed feature + name_prefix = "Valleys" if detect_valleys else "Peaks" + processed_feature = self.create_processed_feature(feature, peak_signal, name_prefix, invert_output) + return (processed_feature,) diff --git a/nodes/flex/features.py b/nodes/flex/features.py index 4651d7a..a0697d0 100644 --- a/nodes/flex/features.py +++ b/nodes/flex/features.py @@ -4,16 +4,54 @@ import cv2 from ..masks.mask_utils import calculate_optical_flow from scipy.interpolate import interp1d, make_interp_spline - +import json class BaseFeature(ABC): - def __init__(self, name, feature_type, frame_rate, frame_count): + def __init__(self, name, feature_type, frame_rate, frame_count, width, height): self.name = name self.type = feature_type self.frame_rate = frame_rate self.frame_count = frame_count + self.width = width + self.height = height self.data = None self.features = None self.inverted = False + self._min_value = None + self._max_value = None + + @property + def min_value(self): + """Get minimum value - either set explicitly or calculated from data""" + if self._min_value is not None: + return self._min_value + + if self.data is not None: + return float(np.min(self.data)) + elif self.features is not None and hasattr(self, 'feature_name'): + return float(min(self.features[self.feature_name])) + return 0.0 # Default fallback + + @min_value.setter + def min_value(self, value): + """Set minimum value explicitly""" + self._min_value = float(value) + + @property + def max_value(self): + """Get maximum value - either set explicitly or calculated from data""" + if self._max_value is not None: + return self._max_value + + if self.data is not None: + return float(np.max(self.data)) + elif self.features is not None and hasattr(self, 'feature_name'): + return float(max(self.features[self.feature_name])) + return 1.0 # Default fallback + + @max_value.setter + def max_value(self, value): + """Set maximum value explicitly""" + self._max_value = float(value) @abstractmethod def extract(self): @@ -38,6 +76,13 @@ def normalize(self): if self.data is not None: self.data = (self.data - np.min(self.data)) / (np.max(self.data) - np.min(self.data)) return self + + + def get_normalized_data(self): + if self.data is not None: + return (self.data - np.min(self.data)) / (np.max(self.data) - np.min(self.data)) + return None + def invert(self): if self.data is not None: @@ -53,9 +98,42 @@ def invert(self): self.inverted = not self.inverted return self +class FloatFeature(BaseFeature): + def __init__(self, name, frame_rate, frame_count, width, height, float_values, feature_type='raw'): + super().__init__(name, "float", frame_rate, frame_count, width, height) + self.float_values = np.array(float_values) + self.feature_type = feature_type + self.available_features = self.get_extraction_methods() + + @classmethod + def get_extraction_methods(cls): + return ["raw", "smooth", "cumulative"] + + def extract(self): + if len(self.float_values) != self.frame_count: + # Interpolate to match frame count if necessary + x = np.linspace(0, 1, len(self.float_values)) + x_new = np.linspace(0, 1, self.frame_count) + self.float_values = np.interp(x_new, x, self.float_values) + + if self.feature_type == "raw": + self.data = self.float_values + elif self.feature_type == "smooth": + # Apply simple moving average smoothing + window_size = max(3, self.frame_count // 30) # Dynamic window size + kernel = np.ones(window_size) / window_size + self.data = np.convolve(self.float_values, kernel, mode='same') + elif self.feature_type == "cumulative": + # Cumulative sum of values + self.data = np.cumsum(self.float_values) + else: + raise ValueError(f"Unsupported feature type: {self.feature_type}") + + return self + class ManualFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, start_frame, end_frame, start_value, end_value, method='linear'): - super().__init__(name, "manual", frame_rate, frame_count) + def __init__(self, name, frame_rate, frame_count, width, height, start_frame, end_frame, start_value, end_value, method='linear'): + super().__init__(name, "manual", frame_rate, frame_count, width, height) self.start_frame = start_frame self.end_frame = end_frame self.start_value = start_value @@ -109,11 +187,12 @@ def ease_out(t): return ease_out class TimeFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, effect_type='smooth', speed=1.0, offset=0.0): + def __init__(self, name, frame_rate, frame_count, width, height, effect_type='smooth', speed=1, offset=0.0): + super().__init__(name, "time", frame_rate, frame_count, width, height) self.effect_type = effect_type - self.speed = speed + # speed is now in frames (how many frames to complete one cycle) + self.speed = max(1, int(speed)) # Ensure at least 1 frame self.offset = offset - super().__init__(name, "time", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -122,8 +201,10 @@ def get_extraction_methods(self): ] def extract(self): - t = np.linspace(0, self.frame_count / self.frame_rate, self.frame_count) - t = (t * self.speed + self.offset) % 1 + # Calculate time values based on frames directly + frames = np.arange(self.frame_count) + # Convert to cycle position (0 to 1) based on speed in frames + t = (frames / self.speed + self.offset) % 1 if self.effect_type == 'smooth': self.data = t @@ -138,15 +219,15 @@ def extract(self): else: raise ValueError("Unsupported effect type") - return self.normalize() + return self class DepthFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, depth_maps, feature_name='mean_depth'): + def __init__(self, name, frame_rate, frame_count, width, height, depth_maps, feature_name='mean_depth'): + super().__init__(name, "depth", frame_rate, frame_count, width, height) self.depth_maps = depth_maps self.features = None self.feature_name = feature_name self.available_features = self.get_extraction_methods() - super().__init__(name, "depth", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -214,13 +295,13 @@ def set_active_feature(self, feature_name): raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") class ColorFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, images, feature_name='dominant_color'): + def __init__(self, name, frame_rate, frame_count, width, height, images, feature_name='dominant_color'): if images.dim() != 4 or images.shape[-1] != 3: raise ValueError(f"Expected images in BHWC format, but got shape {images.shape}") + super().__init__(name, "color", frame_rate, frame_count, width, height) self.images = images self.feature_name = feature_name self.available_features = self.get_extraction_methods() - super().__init__(name, "color", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -298,11 +379,11 @@ def set_active_feature(self, feature_name): raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") class BrightnessFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, images, feature_name='mean_brightness'): + def __init__(self, name, frame_rate, frame_count, width, height, images, feature_name='mean_brightness'): + super().__init__(name, "brightness", frame_rate, frame_count, width, height) self.images = images self.feature_name = feature_name self.available_features = self.get_extraction_methods() - super().__init__(name, "brightness", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -366,7 +447,8 @@ def set_active_feature(self, feature_name): raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") class MotionFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, images, feature_name='mean_motion', flow_method='Farneback', flow_threshold=0.0, magnitude_threshold=0.0, progress_callback=None): + def __init__(self, name, frame_rate, frame_count, width, height, images, feature_name='mean_motion', flow_method='Farneback', flow_threshold=0.0, magnitude_threshold=0.0, progress_callback=None): + super().__init__(name, "motion", frame_rate, frame_count, width, height) self.images = images self.feature_name = feature_name self.flow_method = flow_method @@ -374,7 +456,6 @@ def __init__(self, name, frame_rate, frame_count, images, feature_name='mean_mot self.magnitude_threshold = magnitude_threshold self.available_features = self.get_extraction_methods() self.progress_callback = progress_callback - super().__init__(name, "motion", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -465,12 +546,12 @@ def set_active_feature(self, feature_name): raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") class AreaFeature(BaseFeature): - def __init__(self, name, frame_rate, frame_count, masks, feature_type='total_area', threshold=0.5): + def __init__(self, name, frame_rate, frame_count, width, height, masks, feature_type='total_area', threshold=0.5): + super().__init__(name, "area", frame_rate, frame_count, width, height) self.masks = masks self.feature_type = feature_type self.threshold = threshold self.available_features = self.get_extraction_methods() - super().__init__(name, "area", frame_rate, frame_count) @classmethod def get_extraction_methods(self): @@ -504,7 +585,7 @@ def extract(self): self.data.append(area) - return self.normalize() + return self def normalize(self): if self.data: @@ -524,10 +605,295 @@ def get_value_at_frame(self, frame_index): def set_active_feature(self, feature_name): if feature_name in self.available_features: - self.feature_type = feature_name + self.feature_name = feature_name self.extract() # Re-extract the data with the new feature type else: raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") +class DrawableFeature(BaseFeature): + """A feature that can be drawn on a graph interface""" + + @classmethod + def get_extraction_methods(cls): + return ["drawn"] + + def __init__(self, name, frame_rate, frame_count, width, height, points, method="linear", min_value=0.0, max_value=1.0, fill_value=0.0): + super().__init__(name, "drawn", frame_rate, frame_count, width, height) + self.points = points # List of (frame, value) tuples + self.method = method + self._min_value = float(min_value) + self._max_value = float(max_value) + self.fill_value = fill_value + + + + def extract(self): + """Convert drawn points into a continuous feature curve""" + if not self.points: + self.data = np.full(self.frame_count, self.fill_value, dtype=np.float32) + return self + + # Sort points by frame number + sorted_points = sorted(self.points, key=lambda x: x[0]) + frames, values = zip(*sorted_points) + frames = np.array(frames) + values = np.array(values) + x = np.arange(self.frame_count) + + # Initialize with fill value + self.data = np.full(self.frame_count, self.fill_value, dtype=np.float32) + + if len(frames) == 1: + # Single point - just set that point + self.data[int(frames[0])] = values[0] + else: + # Multiple points - interpolate based on method + if self.method == "linear": + f = interp1d(frames, values, kind='linear', bounds_error=False, fill_value=self.fill_value) + self.data = f(x).astype(np.float32) + + elif self.method == "cubic": + if len(frames) >= 4: + from scipy.interpolate import CubicSpline + f = CubicSpline(frames, values, bc_type='natural') + mask = (x >= frames[0]) & (x <= frames[-1]) + self.data[mask] = f(x[mask]).astype(np.float32) + else: + # Fall back to linear if not enough points + f = interp1d(frames, values, kind='linear', bounds_error=False, fill_value=self.fill_value) + self.data = f(x).astype(np.float32) + + elif self.method == "nearest": + f = interp1d(frames, values, kind='nearest', bounds_error=False, fill_value=self.fill_value) + self.data = f(x).astype(np.float32) + + elif self.method == "zero": + # Only set values at exact points + for frame, value in zip(frames, values): + self.data[int(frame)] = value + + elif self.method == "hold": + # Hold each value until the next point + mask = (x >= frames[0]) & (x <= frames[-1]) + for i in range(len(frames)-1): + self.data[int(frames[i]):int(frames[i+1])] = values[i] + self.data[int(frames[-1])] = values[-1] + + elif self.method == "ease_in": + # Quadratic ease-in + mask = (x >= frames[0]) & (x <= frames[-1]) + t = np.zeros_like(x, dtype=float) + t[mask] = (x[mask] - frames[0]) / (frames[-1] - frames[0]) + f = interp1d(frames, values, kind='linear', bounds_error=False, fill_value=self.fill_value) + self.data[mask] = (t[mask] * t[mask] * f(x[mask])).astype(np.float32) + + elif self.method == "ease_out": + # Quadratic ease-out + mask = (x >= frames[0]) & (x <= frames[-1]) + t = np.zeros_like(x, dtype=float) + t[mask] = (x[mask] - frames[0]) / (frames[-1] - frames[0]) + f = interp1d(frames, values, kind='linear', bounds_error=False, fill_value=self.fill_value) + self.data[mask] = ((2 - t[mask]) * t[mask] * f(x[mask])).astype(np.float32) + + else: + raise ValueError(f"Unsupported interpolation method: {self.method}") + + # Normalize the data to 0-1 range + if self.max_value > self.min_value: + self.data = (self.data - self.min_value) / (self.max_value - self.min_value) + + return self + +class WhisperFeature(BaseFeature): + def __init__(self, name, frame_rate, frame_count, width, height, alignment_data, trigger_pairs=None, feature_name='word_timing'): + super().__init__(name, "whisper", frame_rate, frame_count, width, height) + # Handle both string and dict/list alignment data + if isinstance(alignment_data, str): + try: + self.alignment_data = json.loads(alignment_data) + except json.JSONDecodeError: + raise ValueError("Invalid alignment data format: must be valid JSON string or dict/list") + else: + self.alignment_data = alignment_data + self.trigger_pairs = trigger_pairs # Now a TriggerSet instance + self.feature_name = feature_name + self.available_features = self.get_extraction_methods() + + @classmethod + def get_extraction_methods(cls): + return [ + "trigger_values", # Uses trigger pairs to create value sequences + "word_timing", # Creates peaks at word starts + "segment_timing", # Creates plateaus during segments + "speech_density", # Measures words per second over time + "silence_ratio" # Ratio of silence vs speech + ] + + def extract(self): + self.features = {self.feature_name: [0.0] * self.frame_count} + + if self.feature_name == "word_timing": + self._extract_word_timing() + elif self.feature_name == "segment_timing": + self._extract_segment_timing() + elif self.feature_name == "trigger_values": + self._extract_trigger_values() + elif self.feature_name == "speech_density": + self._extract_speech_density() + elif self.feature_name == "silence_ratio": + self._extract_silence_ratio() + + self._normalize_features() + return self + + def _extract_word_timing(self): + feature_data = [0.0] * self.frame_count + for item in self.alignment_data: + start_frame = int(item["start"] * self.frame_rate) + if 0 <= start_frame < self.frame_count: + feature_data[start_frame] = 1.0 + self.features[self.feature_name] = feature_data + + def _extract_segment_timing(self): + feature_data = [0.0] * self.frame_count + for item in self.alignment_data: + start_frame = int(item["start"] * self.frame_rate) + end_frame = int(item["end"] * self.frame_rate) + for frame in range(max(0, start_frame), min(end_frame + 1, self.frame_count)): + feature_data[frame] = 1.0 + self.features[self.feature_name] = feature_data + + def _extract_trigger_values(self): + if not self.trigger_pairs: + raise ValueError("Trigger pairs required for trigger_values feature") + + feature_data = [0.0] * self.frame_count + accumulated_data = [0.0] * self.frame_count + + for item in self.alignment_data: + text = item["value"].lower() + start_frame = int(item["start"] * self.frame_rate) + end_frame = int(item["end"] * self.frame_rate) + + for trigger in self.trigger_pairs.triggers: # Access triggers directly from TriggerSet + pattern = trigger["pattern"].lower() + if pattern in text: + start_val, end_val = trigger["values"] + blend_mode = trigger.get("blend_mode", "blend") + + # Create temporary array for this trigger's values + trigger_data = [0.0] * self.frame_count + if start_frame < self.frame_count: + trigger_data[start_frame] = start_val + if end_frame < self.frame_count: + trigger_data[end_frame] = end_val + + # Blend with accumulated result based on blend mode + for i in range(self.frame_count): + if blend_mode == "blend": + accumulated_data[i] = (accumulated_data[i] + trigger_data[i]) / 2 + elif blend_mode == "add": + accumulated_data[i] = min(1.0, accumulated_data[i] + trigger_data[i]) + elif blend_mode == "multiply": + accumulated_data[i] = accumulated_data[i] * trigger_data[i] + elif blend_mode == "max": + accumulated_data[i] = max(accumulated_data[i], trigger_data[i]) + + self.features[self.feature_name] = accumulated_data + + def _extract_speech_density(self): + feature_data = [0.0] * self.frame_count + window_size = int(self.frame_rate) # 1-second window + + for item in self.alignment_data: + start_frame = int(item["start"] * self.frame_rate) + if 0 <= start_frame < self.frame_count: + # Add word density over a window + for i in range(max(0, start_frame - window_size), min(start_frame + window_size, self.frame_count)): + feature_data[i] += 1.0 / (2 * window_size) + + self.features[self.feature_name] = feature_data + + def _extract_silence_ratio(self): + feature_data = [1.0] * self.frame_count # Initialize as silence + + for item in self.alignment_data: + start_frame = int(item["start"] * self.frame_rate) + end_frame = int(item["end"] * self.frame_rate) + for frame in range(max(0, start_frame), min(end_frame + 1, self.frame_count)): + feature_data[frame] = 0.0 # Mark as speech + + self.features[self.feature_name] = feature_data + + def _normalize_features(self): + if self.feature_name != "trigger_values": # Don't normalize trigger values + feature_array = np.array(self.features[self.feature_name]) + feature_min = np.min(feature_array) + feature_max = np.max(feature_array) + if feature_max > feature_min: + self.features[self.feature_name] = ((feature_array - feature_min) / + (feature_max - feature_min)).tolist() + + def get_feature_sequence(self, feature_name=None): + if self.features is None: + self.extract() + if feature_name is None: + feature_name = self.feature_name + return self.features.get(feature_name, None) + + def set_active_feature(self, feature_name): + if feature_name in self.available_features: + self.feature_name = feature_name + self.extract() + else: + raise ValueError(f"Invalid feature name. Available features are: {', '.join(self.available_features)}") + + def find_trigger_start_time(self, pattern): + """Find the start time of when a pattern appears in the alignment data""" + for segment in self.alignment_data: + if pattern.lower() in segment["value"].lower(): + return segment["start"] + return None + + def find_trigger_end_time(self, pattern): + """Find the end time of when a pattern appears in the alignment data""" + for segment in self.alignment_data: + if pattern.lower() in segment["value"].lower(): + return segment["end"] + return None + + def sort_triggers_by_occurrence(self, triggers): + """Sort triggers based on when their patterns appear in the text""" + def find_first_occurrence(pattern): + text = " ".join(segment["value"] for segment in self.alignment_data) + return text.lower().find(pattern.lower()) + + return sorted(triggers, key=lambda t: find_first_occurrence(t["pattern"])) + + def get_trigger_frames(self, pattern): + """Get the frame range where a trigger pattern occurs""" + start_time = self.find_trigger_start_time(pattern) + if start_time is None: + return None, None + + end_time = self.find_trigger_end_time(pattern) + start_frame = int(start_time * self.frame_rate) + end_frame = int(end_time * self.frame_rate) + + return start_frame, end_frame + + def find_all_trigger_frames(self, pattern): + """Find all frame ranges where a trigger pattern occurs""" + frame_ranges = [] + pattern = pattern.lower() + + for segment in self.alignment_data: + if pattern in segment["value"].lower(): + start_frame = int(segment["start"] * self.frame_rate) + end_frame = int(segment["end"] * self.frame_rate) + frame_ranges.append((start_frame, end_frame)) + + return frame_ranges + #TODO volume feature diff --git a/nodes/flex/features_audio.py b/nodes/flex/features_audio.py index 613bd72..2baf3cf 100644 --- a/nodes/flex/features_audio.py +++ b/nodes/flex/features_audio.py @@ -19,8 +19,8 @@ def get_extraction_methods(cls): """Return a list of parameter names that can be modulated.""" return [] - def __init__(self, name, audio, frame_count, frame_rate): - super().__init__(name, "audio", frame_rate, frame_count) + def __init__(self, name, audio, frame_count, frame_rate, width, height): + super().__init__(name, "audio", frame_rate, frame_count, width, height) self.audio = audio self.sample_rate = None self.frame_duration = None @@ -68,8 +68,8 @@ def set_active_feature(self, feature_name): class AudioFeature(BaseAudioFeature): - def __init__(self, feature_name, audio, frame_count, frame_rate, feature_type='amplitude_envelope'): - super().__init__(feature_name, audio, frame_count, frame_rate) + def __init__(self, feature_name, audio, frame_count, frame_rate, width, height, feature_type='amplitude_envelope'): + super().__init__(feature_name, audio, frame_count, frame_rate, width, height) self.feature_type = feature_type self.available_features = self.get_extraction_methods() self.feature_name = feature_type @@ -128,8 +128,8 @@ def _normalize_features(self): import librosa class RhythmFeature(BaseAudioFeature): - def __init__(self, feature_name, audio, frame_count, frame_rate, feature_type='beat_locations', time_signature=4): - super().__init__(feature_name, audio, frame_count, frame_rate) + def __init__(self, feature_name, audio, frame_count, frame_rate, width, height, feature_type='beat_locations', time_signature=4): + super().__init__(feature_name, audio, frame_count, frame_rate, width, height) self.feature_type = feature_type self.available_features = self.get_extraction_methods() self.feature_name = feature_type @@ -282,13 +282,15 @@ def __init__( audio, frame_count, frame_rate, + width, + height, pitch_range_collections=None, feature_type='frequency', window_size=0, vibrato_options=None, crepe_model="none" ): - super().__init__(feature_name, audio, frame_count, frame_rate) + super().__init__(feature_name, audio, frame_count, frame_rate, width, height) self.available_features = self.get_extraction_methods() self.feature_type = feature_type self.pitch_range_collections = pitch_range_collections or [] diff --git a/nodes/flex/features_midi.py b/nodes/flex/features_midi.py index 8916d2a..30de863 100644 --- a/nodes/flex/features_midi.py +++ b/nodes/flex/features_midi.py @@ -26,8 +26,8 @@ def get_extraction_methods(cls): """Return a list of parameter names that can be modulated.""" return list(cls.ATTRIBUTE_MAP.keys()) - def __init__(self, name, midi_data, attribute, frame_rate, frame_count, notes=None, chord_only=False): - super().__init__(name, "midi", frame_rate, frame_count) + def __init__(self, name, midi_data, attribute, frame_rate, frame_count, width, height, notes=None, chord_only=False): + super().__init__(name, "midi", frame_rate, frame_count, width, height) self.midi_data = midi_data self.attribute = attribute self.notes = set(notes) if notes is not None else set() diff --git a/nodes/flex/features_proximity.py b/nodes/flex/features_proximity.py index 2b941d4..84aae2e 100644 --- a/nodes/flex/features_proximity.py +++ b/nodes/flex/features_proximity.py @@ -6,14 +6,15 @@ from .features import BaseFeature class ProximityFeature(BaseFeature): - def __init__(self, name, anchor_locations, query_locations, frame_rate, frame_count, frame_dimensions, normalization_method='frame'): - super().__init__(name, "proximity", frame_rate, frame_count) + def __init__(self, name, anchor_locations, query_locations, frame_rate, frame_count, frame_dimensions, width, height, normalization_method='frame'): + super().__init__(name, "proximity", frame_rate, frame_count, width, height) self.anchor_locations = anchor_locations self.query_locations = query_locations self.frame_diagonal = np.sqrt(frame_dimensions[0]**2 + frame_dimensions[1]**2) self.proximity_values = None self.normalization_method = normalization_method + @classmethod def get_extraction_methods(self): return ["normalization_method"] diff --git a/nodes/flex/flex_base.py b/nodes/flex/flex_base.py new file mode 100644 index 0000000..c94752d --- /dev/null +++ b/nodes/flex/flex_base.py @@ -0,0 +1,194 @@ +from abc import ABC, abstractmethod +from comfy.utils import ProgressBar +import numpy as np +import torch +from ...tooltips import apply_tooltips +from .parameter_scheduling import ParameterScheduler +from ... import ProgressMixin + +@apply_tooltips +class FlexBase(ProgressMixin, ABC): + @classmethod + def INPUT_TYPES(cls): + + base_inputs = { + "required": { + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "feature_param": ( + cls.get_modifiable_params(), + {"default": cls.get_modifiable_params()[0] if cls.get_modifiable_params() else "None"} + ), + "feature_mode": (["relative", "absolute"], {"default": "relative"}), + }, + "optional": { + "opt_feature": ("FEATURE",), + } + } + + return base_inputs + + + def __init__(self): + self.parameter_scheduler = None + self.frame_count = None + + + def initialize_scheduler(self, frame_count: int, **kwargs): + """Initialize parameter scheduler with all numeric parameters""" + self.frame_count = frame_count + self.parameter_scheduler = ParameterScheduler(frame_count) + for key, value in kwargs.items(): + if isinstance(value, (int, float, list, tuple)): + self.parameter_scheduler.register_parameter(key, value) + + + def get_feature_value(self, frame_index: int, feature=None, param_name=None): + """Get feature value from a provided feature""" + if feature is not None: + return feature.get_value_at_frame(frame_index) + return None + + @classmethod + @abstractmethod + def get_modifiable_params(cls): + """Return a list of parameter names that can be modulated.""" + return [] + + def modulate_param(self, param_name: str, param_value: float | list | tuple | np.ndarray, + feature_value: float, strength: float, mode: str, + frame_index: int = 0) -> float: + """Modulate a parameter value based on a feature value. + + Args: + param_name: Name of the parameter being modulated + param_value: Value to modulate (can be single value or array-like) + feature_value: Feature value to use for modulation (0-1) + strength: Strength of the modulation (0-1) + mode: Modulation mode ("relative" or "absolute") + frame_index: Frame index for array-like parameters + + Returns: + Modulated parameter value + """ + # Handle array-like parameters + if isinstance(param_value, (list, tuple, np.ndarray)): + try: + base_value = float(param_value[frame_index]) + except (IndexError, TypeError): + base_value = float(param_value[0]) + else: + base_value = float(param_value) + + # Apply modulation + if mode == "relative": + # Adjust parameter relative to its value and the feature + return base_value * (1 + (feature_value - 0.5) * 2 * strength) + else: # absolute + # Adjust parameter directly based on the feature + return base_value * feature_value * strength + + @abstractmethod + def apply_effect(self, *args, **kwargs): + """Apply the effect with potential parameter scheduling""" + pass + + @abstractmethod + def apply_effect_internal(self, *args, **kwargs): + """Internal method to be implemented by subclasses.""" + pass + + def process_parameters(self, frame_index: int = 0, feature_value: float = None, + feature_param: str = None, feature_mode: str = "relative", **kwargs) -> dict: + """Process parameters considering both scheduling and feature modulation. + feature_value is treated as pure input and never modulated.""" + # Initialize parameter scheduler if not already done + if self.parameter_scheduler is None: + frame_count = kwargs.get('frame_count', 1) + for value in kwargs.values(): + if isinstance(value, (list, tuple, np.ndarray)): + frame_count = len(value) + break + self.initialize_scheduler(frame_count, **kwargs) + + # Get input types to determine parameter types + input_types = self.INPUT_TYPES()["required"] + + # Get all parameters that could be scheduled + processed_kwargs = {} + + # Helper function to process schedulable parameters + def process_schedulable_param(param_name: str, default_value: float) -> float: + value = kwargs.get(param_name, default_value) + if isinstance(value, (list, tuple, np.ndarray)): + try: + value = float(value[frame_index]) + except (IndexError, TypeError): + value = float(value[0]) + else: + value = float(value) + processed_kwargs[param_name] = value + return value + + # Process parameters needed for feature modulation + strength = process_schedulable_param('strength', 1.0) + feature_threshold = process_schedulable_param('feature_threshold', 0.0) + + # Process remaining parameters + for param_name, value in kwargs.items(): + if param_name in ['strength', 'feature_threshold']: # Skip already processed parameters + continue + + # Pass through any non-numeric parameters + if param_name not in input_types or input_types[param_name][0] not in ["INT", "FLOAT"]: + processed_kwargs[param_name] = value + continue + + try: + # Handle different types of inputs + if isinstance(value, (list, tuple, np.ndarray)): + if isinstance(value, np.ndarray): + if value.ndim > 1: + value = value.flatten().tolist() + else: + value = value.tolist() + try: + base_value = float(value[frame_index]) + except (IndexError, TypeError): + base_value = float(value[0]) + else: + base_value = float(value) + + # Only modulate if: + # 1. This parameter is the target parameter + # 2. We have a feature value + # 3. The parameter isn't the feature value itself + if (param_name == feature_param and + feature_value is not None and + feature_param != 'feature_value'): # Changed this line + + if feature_value >= feature_threshold: + processed_value = self.modulate_param(param_name, base_value, feature_value, strength, feature_mode) + else: + processed_value = base_value + + if input_types[param_name][0] == "INT": + processed_kwargs[param_name] = int(processed_value) + else: + processed_kwargs[param_name] = processed_value + else: + if input_types[param_name][0] == "INT": + processed_kwargs[param_name] = int(base_value) + else: + processed_kwargs[param_name] = base_value + except (ValueError, TypeError): + processed_kwargs[param_name] = value + + # Ensure feature_value is passed through unmodified + if feature_value is not None: + processed_kwargs['feature_value'] = feature_value + processed_kwargs['frame_index'] = frame_index + processed_kwargs['feature_param'] = feature_param + processed_kwargs['feature_mode'] = feature_mode + return processed_kwargs + diff --git a/nodes/flex/feature_externals.py b/nodes/flex/flex_externals.py similarity index 89% rename from nodes/flex/feature_externals.py rename to nodes/flex/flex_externals.py index 124c8a1..8b2bc96 100644 --- a/nodes/flex/feature_externals.py +++ b/nodes/flex/flex_externals.py @@ -2,6 +2,9 @@ import torch.nn.functional as F import numpy as np from ... import RyanOnTheInside +import os +import sys +import importlib.util import cv2 import torch import torch.nn.functional as F @@ -12,10 +15,57 @@ from skimage.segmentation import watershed from scipy import ndimage as ndi import math +from ...tooltips import apply_tooltips +from ... import ProgressMixin + class FlexExternalModulator(RyanOnTheInside): - CATEGORY = "RyanOnTheInside/FlexExternalMod" + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/ExternalTargets" + + @staticmethod + def import_module_from_path(module_name, module_path): + """Helper method to import external modules from other custom node packs. + + Args: + module_name: Name to give the imported module + module_path: Path to the module file + + Returns: + The imported module + """ + package_dir = os.path.dirname(module_path) + original_sys_path = sys.path.copy() + + try: + # Add the parent directory to sys.path + parent_dir = os.path.dirname(package_dir) + if parent_dir not in sys.path: + sys.path.insert(0, parent_dir) + + # Create module spec + spec = importlib.util.spec_from_file_location(module_name, module_path) + if spec is None: + raise ImportError(f"Cannot create a module spec for {module_path}") + + module = importlib.util.module_from_spec(spec) + + # Add the module to sys.modules + sys.modules[module_name] = module + + # Set up package structure + package_name = os.path.basename(package_dir).replace('-', '_') + module.__package__ = package_name + + # Execute the module + spec.loader.exec_module(module) + + return module + + finally: + # Restore original sys.path + sys.path = original_sys_path +@apply_tooltips class FeatureToWeightsStrategy(FlexExternalModulator): @classmethod def INPUT_TYPES(s): @@ -50,6 +100,9 @@ def convert(self, feature): return (weights_strategy,) +_spline_category = f"{FlexExternalModulator.CATEGORY}/Spline" + +@apply_tooltips class FeatureToSplineData(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -105,10 +158,12 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("MASK", "STRING", "FLOAT", "INT", "STRING",) RETURN_NAMES = ("mask", "coord_str", "float", "count", "normalized_str",) FUNCTION = "convert" + CATEGORY = _spline_category def convert(self, feature, mask_width, mask_height, sampling_method, interpolation, tension, repeat_output, float_output_type, min_value=0.0, max_value=1.0): import torch + import numpy as np import json @@ -168,6 +223,7 @@ def convert(self, feature, mask_width, mask_height, sampling_method, interpolati import json from scipy.interpolate import interp1d +@apply_tooltips class SplineFeatureModulator(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -190,7 +246,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("MASK", "STRING", "FLOAT", "INT", "STRING",) RETURN_NAMES = ("mask", "coord_str", "float", "count", "normalized_str",) FUNCTION = "modulate_spline" - CATEGORY = "RyanOnTheInside/SplineFeatureModulator" + CATEGORY = _spline_category def modulate_spline(self, coordinates, feature, mask_width, mask_height, min_speed, max_speed, float_output_type, @@ -266,6 +322,7 @@ def modulate_spline(self, coordinates, feature, mask_width, mask_height, return (masks_out, coord_str, out_floats, len(out_floats), coord_str) +@apply_tooltips class SplineRhythmModulator(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -288,7 +345,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("MASK", "STRING", "FLOAT", "INT", "STRING",) RETURN_NAMES = ("mask", "coord_str", "float", "count", "normalized_str",) FUNCTION = "modulate_rhythm" - + CATEGORY = _spline_category def modulate_rhythm(self, coordinates, feature, mask_width, mask_height, smoothing, direction, float_output_type, min_value=0.0, max_value=1.0): @@ -423,7 +480,8 @@ def modulate_rhythm(self, coordinates, feature, mask_width, mask_height, coord_str = json.dumps(sampled_coordinates) return (masks_out, coord_str, out_floats, len(out_floats), coord_str) - + +@apply_tooltips class FeatureToFloat(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -435,7 +493,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("FLOAT",) FUNCTION = "get_audio_weights" - CATEGORY = "RyanOnTheInside/Audio" + def get_audio_weights(self, feature): data = [] @@ -443,8 +501,11 @@ def get_audio_weights(self, feature): data.append(feature.get_value_at_frame(i)) return (data,) -#TODO: sub somthing else -#TODO: really, sub something else + + +#TODO: sub somthing logical +_depth_category = "RyanOnTheInside/DepthModifiers" +@apply_tooltips class DepthShapeModifier(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -463,7 +524,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("IMAGE",) FUNCTION = "modify_depth" - CATEGORY = "RyanOnTheInside/DepthModifiers" + CATEGORY = _depth_category def modify_depth(self, depth_map, mask, gradient_steepness, depth_min, depth_max, strength): device = depth_map.device @@ -543,6 +604,8 @@ def modify_feature_param(self, feature, feature_param, gradient_steepness, depth return gradient_steepness, depth_min, depth_max, strength + +@apply_tooltips class DepthShapeModifierPrecise(FlexExternalModulator): @classmethod def INPUT_TYPES(cls): @@ -560,7 +623,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("IMAGE",) FUNCTION = "modify_depth" - CATEGORY = "RyanOnTheInside/DepthModifiers" + CATEGORY = _depth_category def modify_depth(self, depth_map, mask, gradient_steepness, depth_min, depth_max, strength, composite_method): device = depth_map.device @@ -689,3 +752,42 @@ def modify_feature_param(self, feature, feature_param, gradient_steepness, depth strength *= value return gradient_steepness, depth_min, depth_max, strength + +@apply_tooltips +class FeatureToMask(FlexExternalModulator): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "convert" + + def convert(self, feature): + # Get dimensions from feature + height = feature.height + width = feature.width + + # Get normalized data as numpy array + normalized_data = feature.get_normalized_data() + if normalized_data is None: + # If no data available, use frame-by-frame normalization + normalized_data = np.array([feature.get_value_at_frame(i) for i in range(feature.frame_count)]) + if len(normalized_data) > 0: + min_val = np.min(normalized_data) + max_val = np.max(normalized_data) + if max_val > min_val: + normalized_data = (normalized_data - min_val) / (max_val - min_val) + else: + normalized_data = np.zeros_like(normalized_data) + + # Convert to torch tensor and reshape for broadcasting + normalized_tensor = torch.from_numpy(normalized_data).float() + + # Create masks for all frames at once by expanding the normalized data + masks_out = normalized_tensor.unsqueeze(-1).unsqueeze(-1).expand(-1, height, width) + return (masks_out,) + diff --git a/nodes/flex/flex_externals_advanced_controlnet.py b/nodes/flex/flex_externals_advanced_controlnet.py new file mode 100644 index 0000000..1d68db1 --- /dev/null +++ b/nodes/flex/flex_externals_advanced_controlnet.py @@ -0,0 +1,119 @@ +import os +from ... import RyanOnTheInside +from ...tooltips import apply_tooltips +from .flex_externals import FlexExternalModulator +import torch +import numpy as np + +# Get paths +current_file_path = os.path.abspath(__file__) +current_directory = os.path.dirname(current_file_path) +custom_nodes_dir = os.path.abspath(os.path.join(current_directory, '..', '..', '..')) + +# Import Advanced-ControlNet components +adv_controlnet_dir = os.path.join(custom_nodes_dir, 'ComfyUI-Advanced-ControlNet') +adv_controlnet_utils_path = os.path.join(adv_controlnet_dir, 'adv_control', 'utils.py') +adv_controlnet_nodes_path = os.path.join(adv_controlnet_dir, 'adv_control', 'nodes_keyframes.py') + +# Import the modules using the helper from FlexExternalModulator +acn_utils = FlexExternalModulator.import_module_from_path('acn_utils', adv_controlnet_utils_path) +acn_nodes = FlexExternalModulator.import_module_from_path('acn_nodes', adv_controlnet_nodes_path) + +# Get required classes +TimestepKeyframe = acn_utils.TimestepKeyframe +TimestepKeyframeGroup = acn_utils.TimestepKeyframeGroup +LatentKeyframe = acn_utils.LatentKeyframe +LatentKeyframeGroup = acn_utils.LatentKeyframeGroup +SI = acn_utils.StrengthInterpolation + +_acn_category = f"{FlexExternalModulator.CATEGORY}/Advanced-ControlNet" + +@apply_tooltips +class FeatureToTimestepKeyframe(FlexExternalModulator): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "feature": ("FEATURE",), + "select_every": ("INT", {"default": 1, "min": 1, "max": 999}), + "guarantee_steps": ("INT", {"default": 1, "min": 0, "max": 10000}), + "inherit_missing": ("BOOLEAN", {"default": True}), + }, + "optional": { + "prev_timestep_kf": ("TIMESTEP_KEYFRAME",), + "cn_weights": ("CONTROL_NET_WEIGHTS",), + "latent_keyframe": ("LATENT_KEYFRAME",), + } + } + + RETURN_TYPES = ("TIMESTEP_KEYFRAME",) + FUNCTION = "convert" + CATEGORY = _acn_category + + def convert(self, feature, select_every, guarantee_steps, inherit_missing, + prev_timestep_kf=None, cn_weights=None, latent_keyframe=None): + # Create or clone keyframe group + if prev_timestep_kf is None: + keyframe_group = TimestepKeyframeGroup() + else: + keyframe_group = prev_timestep_kf.clone() + + # Get number of frames from feature + num_frames = feature.frame_count + + # Create keyframes for every nth frame based on select_every + for i in range(0, num_frames, select_every): + # Calculate percentage through animation for this frame + start_percent = i / (num_frames - 1) if num_frames > 1 else 0.0 + + # Get strength value for this frame + strength = float(feature.get_value_at_frame(i)) + + # Create keyframe with the values + keyframe = TimestepKeyframe( + start_percent=start_percent, + strength=strength, + control_weights=cn_weights, + latent_keyframes=latent_keyframe, + inherit_missing=inherit_missing, + guarantee_steps=guarantee_steps + ) + keyframe_group.add(keyframe) + + return (keyframe_group,) + +@apply_tooltips +class FeatureToLatentKeyframe(FlexExternalModulator): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "feature": ("FEATURE",), + }, + "optional": { + "prev_latent_kf": ("LATENT_KEYFRAME",), + } + } + + RETURN_TYPES = ("LATENT_KEYFRAME",) + FUNCTION = "convert" + CATEGORY = _acn_category + + def convert(self, feature, prev_latent_kf=None): + # Create or clone keyframe group + if prev_latent_kf is None: + keyframe_group = LatentKeyframeGroup() + else: + keyframe_group = prev_latent_kf.clone() + + # For each frame in the feature sequence + for frame_idx in range(feature.frame_count): + # Get strength value for this frame + strength = float(feature.get_value_at_frame(frame_idx)) + + # Create keyframe for this frame's strength value + # Here frame_idx correctly maps to batch_index for animation + keyframe = LatentKeyframe(frame_idx, strength) + keyframe_group.add(keyframe) + + return (keyframe_group,) diff --git a/nodes/flex/flex_advanced_live_portrait.py b/nodes/flex/flex_externals_advanced_live_portrait.py similarity index 98% rename from nodes/flex/flex_advanced_live_portrait.py rename to nodes/flex/flex_externals_advanced_live_portrait.py index 456af35..a587650 100644 --- a/nodes/flex/flex_advanced_live_portrait.py +++ b/nodes/flex/flex_externals_advanced_live_portrait.py @@ -12,9 +12,14 @@ import yaml from ultralytics import YOLO import importlib.util +from .flex_externals import FlexExternalModulator + +#TODO / NOTE: this more robust import module from path should logically be moved to the FlexExternals baseclass. #NOTE: attempt to import advanced live portrait def import_module_from_path(module_name, module_path): + + package_dir = os.path.dirname(module_path) original_sys_path = sys.path.copy() @@ -148,10 +153,11 @@ def INPUT_TYPES(cls): RETURN_NAMES = ("image", "flex_motion_link", "save_exp", "command") FUNCTION = "run" OUTPUT_NODE = True - CATEGORY = "AdvancedLivePortrait" - + CATEGORY = f"{FlexExternalModulator.CATEGORY}/Advanced-Live-Portrait" @classmethod def get_modifiable_params(cls): + + return ["rotate_pitch", "rotate_yaw", "rotate_roll", "blink", "eyebrow", "wink", "pupil_x", "pupil_y", "aaa", "eee", "woo", "smile", "None"] diff --git a/nodes/flex/flex_externals_animatediff.py b/nodes/flex/flex_externals_animatediff.py new file mode 100644 index 0000000..d834e6f --- /dev/null +++ b/nodes/flex/flex_externals_animatediff.py @@ -0,0 +1,164 @@ +import os +from ... import RyanOnTheInside +from ...tooltips import apply_tooltips +from .flex_externals import FlexExternalModulator +import torch + +#NOTE: work in progress + +# Get paths +current_file_path = os.path.abspath(__file__) +current_directory = os.path.dirname(current_file_path) +custom_nodes_dir = os.path.abspath(os.path.join(current_directory, '..', '..', '..')) + +# Import AnimateDiff components +animatediff_dir = os.path.join(custom_nodes_dir, 'ComfyUI-AnimateDiff-Evolved') +animatediff_nodes_path = os.path.join(animatediff_dir, 'animatediff', 'nodes_gen2.py') +animatediff_camera_path = os.path.join(animatediff_dir, 'animatediff', 'nodes_cameractrl.py') +animatediff_pia_path = os.path.join(animatediff_dir, 'animatediff', 'nodes_pia.py') + +# Import the modules using the helper from FlexExternalModulator +ad_nodes = FlexExternalModulator.import_module_from_path('animatediff_nodes', animatediff_nodes_path) +ad_camera = FlexExternalModulator.import_module_from_path('animatediff_camera', animatediff_camera_path) +ad_pia = FlexExternalModulator.import_module_from_path('animatediff_pia', animatediff_pia_path) + +# Get required classes +ADKeyframeGroup = ad_nodes.ADKeyframeGroup +ADKeyframe = ad_nodes.ADKeyframe +CAM = ad_camera.CAM +PIA_RANGES = ad_pia.PIA_RANGES +InputPIA_PaperPresets = ad_pia.InputPIA_PaperPresets + +_ad_category = f"{FlexExternalModulator.CATEGORY}/AnimateDiff" + +@apply_tooltips +class FeatureToADKeyframe(FlexExternalModulator): + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "select_every": ("INT", {"default": 1, "min": 1, "max": 999}), + }, + "optional": { + "scale_feature": ("FEATURE",), + "effect_feature": ("FEATURE",), + } + } + + RETURN_TYPES = ("AD_KEYFRAMES",) + FUNCTION = "convert" + CATEGORY = _ad_category + + + def convert(self, select_every: int, scale_feature=None, effect_feature=None): + if scale_feature is None and effect_feature is None: + raise ValueError("At least one of scale_feature or effect_feature must be provided") + + # Create new keyframe group + keyframes = ADKeyframeGroup() + + # Get number of frames from whichever feature is provided + if scale_feature is not None: + num_frames = scale_feature.frame_count + else: + num_frames = effect_feature.frame_count + + # Create keyframes for every nth frame based on select_every + for i in range(0, num_frames, select_every): + # Calculate percentage through animation for this frame + start_percent = i / (num_frames - 1) if num_frames > 1 else 0.0 + + # Get values for this frame if features are provided + scale_val = float(scale_feature.get_value_at_frame(i)) if scale_feature is not None else None + effect_val = float(effect_feature.get_value_at_frame(i)) if effect_feature is not None else None + + # Create keyframe with the values + keyframe = ADKeyframe( + start_percent=start_percent, + scale_multival=scale_val, + effect_multival=effect_val + ) + keyframes.add(keyframe) + + return (keyframes,) + +@apply_tooltips +class FeatureToCameraKeyframe(FlexExternalModulator): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "feature": ("FEATURE",), + "camera_motion": (CAM._LIST,), + "select_every": ("INT", {"default": 1, "min": 1, "max": 999}), + "inherit_missing": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("AD_KEYFRAMES",) + FUNCTION = "convert" + CATEGORY = _ad_category + + def convert(self, feature, camera_motion, select_every, inherit_missing): + # Create a new keyframe group + keyframe_group = ADKeyframeGroup() + + # Create keyframes for every nth frame based on select_every + for i in range(0, feature.frame_count, select_every): + # Calculate percentage through animation for this frame + start_percent = i / (feature.frame_count - 1) if feature.frame_count > 1 else 0.0 + + # Get camera value for this frame + camera_val = float(feature.get_value_at_frame(i)) + + # Create keyframe with camera control value + keyframe = ADKeyframe( + start_percent=start_percent, + cameractrl_multival=camera_val, # Single value for this frame + inherit_missing=inherit_missing + ) + + keyframe_group.add(keyframe) + + return (keyframe_group,) + +@apply_tooltips +class FeatureToPIAKeyframe(FlexExternalModulator): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "feature": ("FEATURE",), + "preset": (PIA_RANGES._LIST_ALL,), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "guarantee_steps": ("INT", {"default": 1, "min": 0, "max": 10000}), + "inherit_missing": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("AD_KEYFRAMES",) + FUNCTION = "convert" + CATEGORY = _ad_category + + def convert(self, feature, preset, start_percent, guarantee_steps, inherit_missing): + # Create a new keyframe group + keyframe_group = ADKeyframeGroup() + + # Create PIA input with the feature values + pia_input = InputPIA_PaperPresets( + preset=preset, + index=0, # Will be determined by frame index + mult_multival=[feature.get_value_at_frame(i) for i in range(feature.frame_count)] + ) + + # Create keyframe with PIA settings + keyframe = ADKeyframe( + start_percent=start_percent, + pia_input=pia_input, + inherit_missing=inherit_missing, + guarantee_steps=guarantee_steps + ) + + keyframe_group.add(keyframe) + return (keyframe_group,) \ No newline at end of file diff --git a/nodes/flex/parameter_scheduling.py b/nodes/flex/parameter_scheduling.py new file mode 100644 index 0000000..f735130 --- /dev/null +++ b/nodes/flex/parameter_scheduling.py @@ -0,0 +1,164 @@ +from typing import Union, List, Any +import numpy as np +from abc import ABC, abstractmethod +from ... import RyanOnTheInside +from ...tooltips import apply_tooltips + +class ScheduledParameter: + """Wrapper class for parameters that can be either single values or sequences""" + def __init__(self, value: Union[float, int, List[Union[float, int]]], frame_count: int): + self.original_value = value + self.frame_count = frame_count + self._sequence = None + self._initialize_sequence() + + def _initialize_sequence(self): + if isinstance(self.original_value, (list, tuple)): + # If it's a sequence, interpolate to match frame count + x = np.linspace(0, 1, len(self.original_value)) + y = np.array(self.original_value) + f = np.interp(np.linspace(0, 1, self.frame_count), x, y) + self._sequence = f + else: + # If it's a single value, repeat it + self._sequence = np.full(self.frame_count, self.original_value) + + def get_value(self, frame_index: int) -> Union[float, int]: + """Get the parameter value for a specific frame""" + if frame_index < 0 or frame_index >= self.frame_count: + raise ValueError(f"Frame index {frame_index} out of bounds [0, {self.frame_count})") + return float(self._sequence[frame_index]) + + def get_normalized_sequence(self) -> np.ndarray: + """Get the sequence normalized to [0,1] range for feature-like behavior""" + if self._sequence is None: + return None + seq = np.array(self._sequence) + min_val = np.min(seq) + max_val = np.max(seq) + if max_val > min_val: + return (seq - min_val) / (max_val - min_val) + return np.full_like(seq, 0.5) # If all values are the same, return 0.5 + + @property + def is_scheduled(self) -> bool: + """Returns True if the parameter is a sequence, False if it's a single value""" + return isinstance(self.original_value, (list, tuple)) + +class ParameterScheduler: + """Helper class to manage scheduled parameters for a node""" + def __init__(self, frame_count: int): + self.frame_count = frame_count + self.parameters = {} + + def register_parameter(self, name: str, value: Any) -> None: + """Register a parameter that might be scheduled""" + if isinstance(value, (int, float)) or (isinstance(value, (list, tuple)) and all(isinstance(x, (int, float)) for x in value)): + self.parameters[name] = ScheduledParameter(value, self.frame_count) + + def get_value(self, name: str, frame_index: int) -> Any: + """Get the value of a parameter for a specific frame""" + if name in self.parameters: + return self.parameters[name].get_value(frame_index) + raise KeyError(f"Parameter {name} not registered") + + def get_as_feature(self, name: str) -> np.ndarray: + """Get a parameter's sequence normalized as a feature (0-1 range)""" + if name in self.parameters: + return self.parameters[name].get_normalized_sequence() + return None + + def is_scheduled(self, name: str) -> bool: + """Check if a parameter is scheduled""" + if name in self.parameters: + return self.parameters[name].is_scheduled + return False + + def has_scheduled_parameters(self) -> bool: + """Check if any parameters are scheduled""" + return any(param.is_scheduled for param in self.parameters.values()) + + +#TODO: abstract normalize function from here and FeatureRenormalize and place in utils or something. +@apply_tooltips +class SchedulerNode(RyanOnTheInside): + """Base class for nodes that convert features to schedulable parameters""" + CATEGORY = "RyanOnTheInside/FlexFeatures/Scheduling" + FUNCTION = "convert" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), + "invert_output": ("BOOLEAN", {"default": False}), + } + } + + def process_values(self, feature, lower_threshold, upper_threshold, invert_output): + values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] + + # Calculate the range for normalization + range_size = upper_threshold - lower_threshold + + # Use feature.min_value and feature.max_value if available, otherwise use actual min/max + min_val = getattr(feature, 'min_value', min(values)) + max_val = getattr(feature, 'max_value', max(values)) + + # Normalize values to fit between lower and upper threshold + if max_val == min_val: + normalized = [lower_threshold for _ in values] # All values are the same + else: + normalized = [ + lower_threshold + (range_size * (v - min_val) / (max_val - min_val)) + for v in values + ] + + if invert_output: + normalized = [upper_threshold - (v - lower_threshold) for v in normalized] + + return normalized + +@apply_tooltips +class FeatureToFlexIntParam(SchedulerNode): + """Converts a feature to a schedulable integer parameter""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + **super().INPUT_TYPES()["required"], + "lower_threshold": ("INT", {"default": 0, "min": -10000, "max": 10000, "step": 1}), + "upper_threshold": ("INT", {"default": 100, "min": -10000, "max": 10000, "step": 1}), + } + } + + RETURN_TYPES = ("INT",) + RETURN_NAMES = ("PARAMETER",) + + def convert(self, feature, lower_threshold, upper_threshold, invert_output): + values = self.process_values(feature, lower_threshold, upper_threshold, invert_output) + # Round to integers + int_values = [int(round(v)) for v in values] + return (int_values,) + +@apply_tooltips +class FeatureToFlexFloatParam(SchedulerNode): + """Converts a feature to a schedulable float parameter""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + **super().INPUT_TYPES()["required"], + "lower_threshold": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01}), + "upper_threshold": ("FLOAT", {"default": 1.0, "min": -10000.0, "max": 10000.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("FLOAT",) + RETURN_NAMES = ("PARAMETER",) + + def convert(self, feature, lower_threshold, upper_threshold, invert_output): + values = self.process_values(feature, lower_threshold, upper_threshold, invert_output) + return (values,) \ No newline at end of file diff --git a/nodes/flex/visualizers.py b/nodes/flex/visualizers.py index 2d1e2df..c495959 100644 --- a/nodes/flex/visualizers.py +++ b/nodes/flex/visualizers.py @@ -4,6 +4,12 @@ import torch from scipy.spatial.distance import cdist import math +import matplotlib.pyplot as plt +from PIL import Image +from io import BytesIO +import os +import random +import folder_paths class EffectVisualizer(RyanOnTheInside): @classmethod @@ -19,7 +25,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("IMAGE",) FUNCTION = "visualize" - CATEGORY = "RyanOnTheInside/FlexFeatures/EffectVisualizers" + CATEGORY = "RyanOnTheInside/FlexFeatures/Utilities/Previews" def visualize(self, video_frames, feature, text_color, font_scale): text_color = self.parse_color(text_color) @@ -195,3 +201,90 @@ def visualize_pitch(self, video_frames, feature, text_color, font_scale): output_tensor = torch.from_numpy(np.stack(output_frames)).float() / 255.0 return (output_tensor,) + + +class PreviewFeature(RyanOnTheInside): + CATEGORY = "RyanOnTheInside/FlexFeatures/Utilities/Previews" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "feature": ("FEATURE",), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = () + FUNCTION = "preview" + OUTPUT_NODE = True + + def preview(self, feature, prompt=None, extra_pnginfo=None): + width=960 + height=540 + values = [feature.get_value_at_frame(i) for i in range(feature.frame_count)] + + plt.figure(figsize=(width/100, height/100), dpi=100) + plt.style.use('dark_background') + + plt.plot(values, color='dodgerblue', linewidth=2) + + plt.xlabel('Frame', color='white', fontsize=14) + plt.ylabel('Value', color='white', fontsize=14) + + plt.grid(True, linestyle='--', alpha=0.3, color='gray') + + plt.tick_params(axis='both', colors='white', labelsize=12) + + max_ticks = 10 + step = max(1, len(values) // max_ticks) + x_ticks = range(0, len(values), step) + plt.xticks(x_ticks, [str(x) for x in x_ticks]) + + # Use feature's min_value and max_value properties + y_min, y_max = feature.min_value, feature.max_value + y_range = y_max - y_min + plt.ylim(y_min - 0.05*y_range, y_max + 0.05*y_range) + + plt.gca().spines['top'].set_visible(False) + plt.gca().spines['right'].set_visible(False) + plt.gca().spines['bottom'].set_color('white') + plt.gca().spines['left'].set_color('white') + + plt.title(f'Feature: {feature.name}', color='white', fontsize=16) + + plt.tight_layout(pad=0.5) + + buf = BytesIO() + plt.savefig(buf, format='png', facecolor='black', edgecolor='none') + buf.seek(0) + + img = Image.open(buf) + img_array = np.array(img) + img_tensor = torch.from_numpy(img_array).float() / 255.0 + if img_tensor.dim() == 3: + img_tensor = img_tensor.unsqueeze(0) + + plt.close() + buf.close() + + # Save the image to a temporary file like PreviewImage does + output_dir = folder_paths.get_temp_directory() + type = "temp" + prefix = "feature_preview_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) + + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(prefix, output_dir, img_tensor.shape[2], img_tensor.shape[1]) + + # Save the image + i = 255. * img_tensor.cpu().numpy() + img = Image.fromarray(np.clip(i[0], 0, 255).astype(np.uint8)) + file = f"{filename}_{counter:05}_.png" + img.save(os.path.join(full_output_folder, file), compress_level=1) + + results = [{ + "filename": file, + "subfolder": subfolder, + "type": type + }] + + return ({"ui": {"images": results}}) \ No newline at end of file diff --git a/nodes/images/flex_image_base.py b/nodes/images/flex_image_base.py new file mode 100644 index 0000000..206ecfa --- /dev/null +++ b/nodes/images/flex_image_base.py @@ -0,0 +1,99 @@ +import torch +import numpy as np +from abc import ABC, abstractmethod +from tqdm import tqdm +from comfy.utils import ProgressBar +from ... import RyanOnTheInside +from ..flex.flex_base import FlexBase +from ...tooltips import apply_tooltips + +@apply_tooltips +class FlexImageBase(RyanOnTheInside, FlexBase): + @classmethod + def INPUT_TYPES(cls): + base_inputs = super().INPUT_TYPES() + base_inputs["required"].update({ + "images": ("IMAGE",), + }) + return base_inputs + + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Images" + RETURN_TYPES = ("IMAGE",) + FUNCTION = "apply_effect" + + def __init__(self): + super().__init__() # Initialize FlexBase + + @classmethod + @abstractmethod + def get_modifiable_params(cls): + """Return a list of parameter names that can be modulated.""" + return [] + + def apply_effect( + self, + images, + strength, + feature_threshold, + feature_param, + feature_mode, + opt_feature=None, + **kwargs + ): + # Convert images to numpy for processing + images_np = images.cpu().numpy() + + # Determine frame count from either feature or longest parameter list + if opt_feature is not None: + num_frames = opt_feature.frame_count + else: + # Start with number of input frames + num_frames = images_np.shape[0] + # Check all parameters for lists/arrays that might be longer + for value in kwargs.values(): + if isinstance(value, (list, tuple, np.ndarray)): + num_frames = max(num_frames, len(value)) + + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + result = [] + for i in range(num_frames): + # Get the appropriate image frame, handling possible shorter image sequences + image = images_np[i % images_np.shape[0]] + + # Process parameters using base class functionality + processed_kwargs = self.process_parameters( + frame_index=i, + feature_value=self.get_feature_value(i, opt_feature) if opt_feature is not None else None, + feature_param=feature_param if opt_feature is not None else None, + feature_mode=feature_mode if opt_feature is not None else None, + strength=strength, + feature_threshold=feature_threshold, + **kwargs + ) + processed_kwargs["frame_index"] = i + + #TODO: Currently dont care about a threshold check here, but may want to add it in the future + # Apply the effect with processed parameters + processed_image = self.apply_effect_internal(image, **processed_kwargs) + + + + + result.append(processed_image) + self.update_progress() + + self.end_progress() + + # Convert the list of numpy arrays to a single numpy array + result_np = np.stack(result) + + # Convert the numpy array to a PyTorch tensor in BHWC format + result_tensor = torch.from_numpy(result_np).float() + + return (result_tensor,) + + @abstractmethod + def apply_effect_internal(self, image: np.ndarray, **kwargs) -> np.ndarray: + """Apply the effect with processed parameters. To be implemented by child classes.""" + pass diff --git a/nodes/images/flex_images.py b/nodes/images/flex_images.py index a20f103..4b25a08 100644 --- a/nodes/images/flex_images.py +++ b/nodes/images/flex_images.py @@ -1,13 +1,17 @@ import cv2 import torch import numpy as np -from .image_base import FlexImageBase +from .flex_image_base import FlexImageBase from scipy.ndimage import gaussian_filter import torch.nn.functional as F -from .image_utils import transform_image +from .image_utils import transform_image, apply_gaussian_blur_gpu +from ...tooltips import apply_tooltips +from ..node_utilities import string_to_rgb +@apply_tooltips class FlexImageEdgeDetect(FlexImageBase): @classmethod + def INPUT_TYPES(cls): base_inputs = super().INPUT_TYPES() base_inputs["required"].update({ @@ -30,6 +34,7 @@ def apply_effect_internal(self, image: np.ndarray, low_threshold: float, high_th return edges_rgb.astype(float) / 255.0 +@apply_tooltips class FlexImagePosterize(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -39,6 +44,7 @@ def INPUT_TYPES(cls): "dither_strength": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}), "channel_separation": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), "gamma": ("FLOAT", {"default": 1.2, "min": 0.1, "max": 2.2, "step": 0.1}), + "dither_method": (["ordered", "floyd", "none"], {"default": "ordered"}), }) return base_inputs @@ -47,42 +53,61 @@ def get_modifiable_params(cls): return ["max_levels", "dither_strength", "channel_separation", "gamma", "None"] def apply_effect_internal(self, image: np.ndarray, max_levels: int, dither_strength: float, - channel_separation: float, gamma: float, **kwargs) -> np.ndarray: + channel_separation: float, gamma: float, dither_method: str, **kwargs) -> np.ndarray: # Apply gamma correction image_gamma = np.power(image, gamma) - # Convert image to uint8 - image_uint8 = (image_gamma * 255).astype(np.uint8) + # Initialize result array + result = np.zeros_like(image_gamma) - posterized = np.zeros_like(image_uint8) + # Create ordered dither pattern if needed + if dither_method == "ordered": + bayer_pattern = np.array([[0, 8, 2, 10], + [12, 4, 14, 6], + [3, 11, 1, 9], + [15, 7, 13, 5]], dtype=np.float32) / 16.0 + h, w = image.shape[:2] + # Tile the pattern to match image size + pattern_h = (h + 3) // 4 + pattern_w = (w + 3) // 4 + dither_pattern = np.tile(bayer_pattern, (pattern_h, pattern_w))[:h, :w] + dither_pattern = dither_pattern[..., np.newaxis] * dither_strength for c in range(3): # RGB channels - # Calculate levels for each channel + # Calculate levels for each channel with separation channel_levels = int(np.clip(2 + (max_levels - 2) * (1 + channel_separation * (c - 1)), 2, max_levels)) - # Posterize - div = 256 // channel_levels - posterized[:,:,c] = (image_uint8[:,:,c] // div) * div + # Get current channel + channel = image_gamma[..., c] + + if dither_method == "ordered": + # Add ordered dither pattern + channel = np.clip(channel + dither_pattern[..., 0] - 0.5 * dither_strength, 0, 1) + + # Quantize + scale = (channel_levels - 1) + quantized = np.round(channel * scale) / scale + + if dither_method == "floyd": + # Efficient Floyd-Steinberg dithering using convolution + error = (channel - quantized) * dither_strength + + # Prepare error diffusion kernel + kernel = np.array([[0, 0, 0], + [0, 0, 7/16], + [3/16, 5/16, 1/16]]) + + # Apply error diffusion + from scipy.signal import convolve2d + error_diffused = convolve2d(error, kernel, mode='same') + quantized = np.clip(quantized + error_diffused, 0, 1) + + result[..., c] = quantized - if dither_strength > 0: - # Apply Floyd-Steinberg dithering with adjustable strength - error = (image_uint8.astype(np.float32) - posterized) * dither_strength - h, w = image.shape[:2] - for c in range(3): # RGB channels - for i in range(h - 1): - for j in range(w - 1): - old_pixel = posterized[i, j, c] - new_pixel = np.clip(old_pixel + error[i, j, c], 0, 255) - quant_error = old_pixel - new_pixel - posterized[i, j, c] = new_pixel - error[i, j+1, c] += quant_error * 7 / 16 - error[i+1, j-1, c] += quant_error * 3 / 16 - error[i+1, j, c] += quant_error * 5 / 16 - error[i+1, j+1, c] += quant_error * 1 / 16 - - # Convert back to float32 and apply gamma correction - return np.power(posterized.astype(np.float32) / 255.0, 1/gamma) + # Apply inverse gamma correction + return np.power(result, 1/gamma) +@apply_tooltips class FlexImageKaleidoscope(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -135,6 +160,7 @@ def apply_effect_internal(self, image: np.ndarray, segments: int, center_x: floa return result.clip(0, 1) +@apply_tooltips class FlexImageColorGrade(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -184,49 +210,167 @@ def apply_effect_internal(self, image: np.ndarray, intensity: float, mix: float, return np.clip(result, 0, 1) +@apply_tooltips class FlexImageGlitch(FlexImageBase): @classmethod def INPUT_TYPES(cls): base_inputs = super().INPUT_TYPES() base_inputs["required"].update({ - "shift_amount": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}), - "scan_lines": ("INT", {"default": 10, "min": 0, "max": 100, "step": 1}), - "color_shift": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}), + "glitch_type": (["digital", "analog", "compression", "wave", "corrupt"], {"default": "digital"}), + "intensity": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "block_size": ("INT", {"default": 32, "min": 8, "max": 128, "step": 8}), + "wave_amplitude": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}), + "wave_frequency": ("FLOAT", {"default": 5.0, "min": 0.1, "max": 20.0, "step": 0.1}), + "corruption_amount": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}), + "time_seed": ("INT", {"default": 0, "min": 0, "max": 10000, "step": 1}), }) return base_inputs @classmethod def get_modifiable_params(cls): - return ["shift_amount", "scan_lines", "color_shift", "None"] + return ["intensity", "block_size", "wave_amplitude", "wave_frequency", "corruption_amount", "time_seed", "None"] - def apply_effect_internal(self, image: np.ndarray, shift_amount: float, scan_lines: int, color_shift: float, **kwargs) -> np.ndarray: + def apply_effect_internal(self, image: np.ndarray, glitch_type: str, intensity: float, + block_size: int, wave_amplitude: float, wave_frequency: float, + corruption_amount: float, time_seed: int, **kwargs) -> np.ndarray: h, w = image.shape[:2] - - # Apply horizontal shift - shift = int(w * shift_amount) - result = np.roll(image, shift, axis=1) - - # Add scan lines - if scan_lines > 0: - scan_line_mask = np.zeros((h, w)) - scan_line_mask[::scan_lines] = 1 - result = result * (1 - scan_line_mask)[:,:,np.newaxis] + scan_line_mask[:,:,np.newaxis] - - # Apply color channel shift - if color_shift > 0: - color_shift_amount = int(w * color_shift) - result[:,:,0] = np.roll(result[:,:,0], color_shift_amount, axis=1) - result[:,:,2] = np.roll(result[:,:,2], -color_shift_amount, axis=1) - + + # Add smart padding - using reflection for most natural look + pad_size = max(int(min(h, w) * 0.1), 32) # At least 32 pixels or 10% of size + padded = cv2.copyMakeBorder(image, pad_size, pad_size, pad_size, pad_size, + cv2.BORDER_REFLECT_101) + + ph, pw = padded.shape[:2] + result = padded.copy() + + # Set random seed for reproducibility + np.random.seed(time_seed) + + # Apply effects as before, but now working with padded image + if glitch_type == "digital": + for c in range(3): + shift_x = int(pw * intensity * np.random.uniform(-0.1, 0.1)) + shift_y = int(ph * intensity * np.random.uniform(-0.1, 0.1)) + result[..., c] = np.roll(np.roll(padded[..., c], shift_x, axis=1), shift_y, axis=0) + + num_blocks = int(intensity * 10) + for _ in range(num_blocks): + x = np.random.randint(0, pw - block_size) + y = np.random.randint(0, ph - block_size) + block = result[y:y+block_size, x:x+block_size].copy() + + shift_x = int(block_size * np.random.uniform(-1, 1)) + shift_y = int(block_size * np.random.uniform(-1, 1)) + + new_x = np.clip(x + shift_x, 0, pw - block_size) + new_y = np.clip(y + shift_y, 0, ph - block_size) + + result[new_y:new_y+block_size, new_x:new_x+block_size] = block + + elif glitch_type == "compression": + # Simulate JPEG compression artifacts + num_blocks_y = ph // block_size + num_blocks_x = pw // block_size + + for by in range(num_blocks_y): + for bx in range(num_blocks_x): + y1, y2 = by * block_size, (by + 1) * block_size + x1, x2 = bx * block_size, (bx + 1) * block_size + + # Random block corruption + if np.random.random() < corruption_amount: + # Quantization effect + block = result[y1:y2, x1:x2] + # Simulate DCT quantization + quant_level = int(8 * intensity) + block = (block * quant_level).astype(int) / quant_level + # Add blocking artifacts + block += np.random.uniform(-0.1, 0.1, block.shape) * intensity + result[y1:y2, x1:x2] = block + + elif glitch_type == "wave": + y_coords, x_coords = np.mgrid[0:ph, 0:pw] + + for i in range(3): + freq = wave_frequency * (i + 1) + amp = wave_amplitude / (i + 1) + + x_offset = amp * pw * np.sin(2 * np.pi * y_coords / ph * freq + time_seed * 0.1) + y_offset = amp * ph * np.cos(2 * np.pi * x_coords / pw * freq + time_seed * 0.1) + + x_map = (x_coords + x_offset * intensity).astype(np.float32) + y_map = (y_coords + y_offset * intensity).astype(np.float32) + + x_map = np.clip(x_map, 0, pw-1) + y_map = np.clip(y_map, 0, ph-1) + + result = cv2.remap(result, x_map, y_map, cv2.INTER_LINEAR) + + elif glitch_type == "corrupt": + # Data corruption simulation + for _ in range(int(corruption_amount * 20)): + # Random line corruption + if np.random.random() < 0.5: + y = np.random.randint(0, ph) + length = int(pw * np.random.uniform(0.1, 0.5)) + start = np.random.randint(0, pw - length) + + # Corrupt line with various effects + corrupt_type = np.random.choice(['repeat', 'shift', 'noise']) + if corrupt_type == 'repeat': + result[y, start:start+length] = result[y, start] + elif corrupt_type == 'shift': + shift = np.random.randint(-50, 50) + result[y, start:start+length] = np.roll(result[y, start:start+length], shift, axis=0) + else: # noise + result[y, start:start+length] = np.random.random((length, 3)) + + # Block corruption + else: + y = np.random.randint(0, ph - block_size) + x = np.random.randint(0, pw - block_size) + + # Different corruption patterns + pattern = np.random.choice(['solid', 'noise', 'repeat']) + if pattern == 'solid': + result[y:y+block_size, x:x+block_size] = np.random.random(3) + elif pattern == 'noise': + result[y:y+block_size, x:x+block_size] = np.random.random((block_size, block_size, 3)) + else: # repeat + result[y:y+block_size, x:x+block_size] = result[y, x] + + elif glitch_type == "analog": + # Simulate analog TV distortion + # Add scan lines + scan_lines = np.ones((ph, pw, 3)) + scan_lines[::2] *= 0.8 + result *= scan_lines + + # Add noise + noise = np.random.normal(0, 0.1 * intensity, (ph, pw, 3)) + result += noise + + # Add vertical hold distortion + hold_offset = int(ph * 0.1 * intensity * np.sin(time_seed * 0.1)) + result = np.roll(result, hold_offset, axis=0) + + # Add ghosting + ghost = np.roll(result, int(pw * 0.05 * intensity), axis=1) * 0.3 + result = result * 0.7 + ghost + + # Extract the center portion (removing padding) + result = result[pad_size:pad_size+h, pad_size:pad_size+w] + return np.clip(result, 0, 1) +@apply_tooltips class FlexImageChromaticAberration(FlexImageBase): @classmethod def INPUT_TYPES(cls): base_inputs = super().INPUT_TYPES() base_inputs["required"].update({ - "shift_amount": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 0.1, "step": 0.001}), - "angle": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 360.0, "step": 1.0}), + "shift_amount": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 0.5, "step": 0.001}), + "angle": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 720.0, "step": 1.0}), }) return base_inputs @@ -249,6 +393,7 @@ def apply_effect_internal(self, image: np.ndarray, shift_amount: float, angle: f return np.clip(result, 0, 1) +@apply_tooltips class FlexImagePixelate(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -282,6 +427,7 @@ def apply_effect_internal(self, image: np.ndarray, pixel_size: int, **kwargs) -> return result +@apply_tooltips class FlexImageBloom(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -290,26 +436,133 @@ def INPUT_TYPES(cls): "threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), "blur_amount": ("FLOAT", {"default": 10.0, "min": 0.0, "max": 50.0, "step": 0.1}), "intensity": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "num_passes": ("INT", {"default": 4, "min": 1, "max": 8, "step": 1}), + "color_bleeding": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), + "falloff": ("FLOAT", {"default": 1.2, "min": 0.1, "max": 3.0, "step": 0.1}), + }) + base_inputs["optional"].update({ + "opt_normal_map": ("IMAGE",), + "opt_mask": ("MASK",), }) return base_inputs @classmethod def get_modifiable_params(cls): - return ["threshold", "blur_amount", "intensity", "None"] + return ["intensity", "threshold", "blur_amount", "num_passes", "color_bleeding", "falloff", "None"] def apply_effect_internal(self, image: np.ndarray, threshold: float, blur_amount: float, - intensity: float, **kwargs) -> np.ndarray: - # Extract bright areas - bright_areas = np.maximum(image - threshold, 0) / (1 - threshold) - - # Apply gaussian blur - blurred = gaussian_filter(bright_areas, sigma=blur_amount) - - # Combine with original image - result = image + blurred * intensity - + intensity: float, num_passes: int, color_bleeding: float, + falloff: float, opt_normal_map: np.ndarray = None, + opt_mask: np.ndarray = None, **kwargs) -> np.ndarray: + # Set up device (GPU if available, CPU if not) + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + # Convert input image to tensor + image_tensor = torch.from_numpy(image).to(device) + + # Extract bright areas with smooth threshold + brightness = torch.max(image_tensor, dim=2)[0] + bright_mask = torch.clip((brightness - threshold) / (1 - threshold), 0, 1) + bright_mask = torch.pow(bright_mask, falloff) + + # Process optional mask if provided + if opt_mask is not None: + # Convert mask to tensor and ensure correct shape + if torch.is_tensor(opt_mask): + mask_tensor = opt_mask.to(device) + else: + mask_tensor = torch.from_numpy(opt_mask).to(device) + + # Handle batched masks + if len(mask_tensor.shape) > 2: + frame_index = kwargs.get('frame_index', 0) + mask_tensor = mask_tensor[frame_index] + + # Ensure mask is 2D + if len(mask_tensor.shape) > 2: + mask_tensor = mask_tensor.squeeze() + + # Resize mask if needed + if mask_tensor.shape != bright_mask.shape: + mask_tensor = torch.nn.functional.interpolate( + mask_tensor.unsqueeze(0).unsqueeze(0), + size=bright_mask.shape, + mode='bilinear' + ).squeeze() + + # Combine mask with brightness mask + bright_mask = bright_mask * mask_tensor + + # Pre-calculate color bleeding contribution + if color_bleeding > 0: + mean_color = torch.mean(image_tensor, dim=2, keepdim=True) + color_contribution = image_tensor * (1 - color_bleeding) + mean_color * color_bleeding + else: + color_contribution = image_tensor + + # Initialize accumulator and calculate pass weights + bloom_accumulator = torch.zeros_like(image_tensor) + pass_weights = torch.tensor([1.0 / (2 ** i) for i in range(num_passes)], device=device) + pass_weights /= pass_weights.sum() + + # Process normal map if provided + if opt_normal_map is not None: + if torch.is_tensor(opt_normal_map): + normal_tensor = opt_normal_map.to(device) + else: + normal_tensor = torch.from_numpy(opt_normal_map).to(device) + + if len(normal_tensor.shape) > 3: + normal_tensor = normal_tensor[kwargs.get('frame_index', 0)] + + # Convert normal map to [-1,1] range + normals = normal_tensor * 2.0 - 1.0 + + # Calculate surface alignment + view_vector = torch.tensor([0, 0, 1], device=device) + surface_alignment = torch.sum(normals * view_vector, dim=2) + surface_alignment = (surface_alignment + 1) * 0.5 + + # Multi-pass gaussian blur + for i in range(num_passes): + # Calculate kernel size based on blur amount + kernel_size = int(blur_amount * (1 + i)) | 1 # Ensure odd + kernel_size = max(3, min(kernel_size, min(image.shape[:2]))) + sigma = kernel_size / 6.0 + + # Apply bright mask with color contribution + pass_contribution = color_contribution * bright_mask.unsqueeze(-1) + + # Apply gaussian blur + if opt_normal_map is not None: + # Apply directional blur based on normal map + pass_contribution = apply_gaussian_blur_gpu( + pass_contribution.permute(2, 0, 1), + kernel_size, + sigma + ).permute(1, 2, 0) + + # Modulate by surface alignment + pass_contribution = pass_contribution * (1 - surface_alignment.unsqueeze(-1)) + else: + # Standard gaussian blur + pass_contribution = apply_gaussian_blur_gpu( + pass_contribution.permute(2, 0, 1), + kernel_size, + sigma + ).permute(1, 2, 0) + + # Add weighted contribution to accumulator + bloom_accumulator += pass_contribution * pass_weights[i] + + # Combine with original image using intensity + result = image_tensor + bloom_accumulator * intensity + + # Convert back to numpy and ensure range + result = result.cpu().numpy() return np.clip(result, 0, 1) - + +@apply_tooltips class FlexImageTiltShift(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -320,40 +573,100 @@ def INPUT_TYPES(cls): "focus_position_y": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), "focus_width": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), "focus_height": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), - "focus_shape": (["rectangle", "ellipse"], {"default": "rectangle"}), + "focus_shape": (["rectangle", "ellipse", "gradient"], {"default": "gradient"}), + "bokeh_shape": (["circular", "hexagonal", "star"], {"default": "circular"}), + "bokeh_size": ("FLOAT", {"default": 0.5, "min": 0.1, "max": 2.0, "step": 0.1}), + "bokeh_brightness": ("FLOAT", {"default": 1.2, "min": 0.5, "max": 2.0, "step": 0.1}), + "chromatic_aberration": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), }) return base_inputs @classmethod def get_modifiable_params(cls): - return ["blur_amount", "focus_position_x", "focus_position_y", "focus_width", "focus_height", "None"] + return ["blur_amount", "focus_position_x", "focus_position_y", "focus_width", "focus_height", + "bokeh_size", "bokeh_brightness", "chromatic_aberration", "None"] + + def _create_bokeh_kernel(self, size, shape, brightness): + # Create bokeh kernel based on shape + kernel_size = int(size * 20) | 1 # Ensure odd size + center = kernel_size // 2 + kernel = np.zeros((kernel_size, kernel_size), dtype=np.float32) + + if shape == "circular": + y, x = np.ogrid[-center:center+1, -center:center+1] + mask = x*x + y*y <= center*center + kernel[mask] = 1.0 + + elif shape == "hexagonal": + for y in range(kernel_size): + for x in range(kernel_size): + # Hexagonal distance calculation + dx = abs(x - center) + dy = abs(y - center) + if dx * 0.866025 + dy * 0.5 <= center: + kernel[y, x] = 1.0 + + elif shape == "star": + for y in range(kernel_size): + for x in range(kernel_size): + dx = x - center + dy = y - center + angle = np.arctan2(dy, dx) + dist = np.sqrt(dx*dx + dy*dy) + # Create 6-point star shape + star_factor = np.abs(np.sin(3 * angle)) + if dist <= center * (0.8 + 0.2 * star_factor): + kernel[y, x] = 1.0 + + # Normalize and apply brightness + kernel = kernel / np.sum(kernel) * brightness + return kernel def apply_effect_internal(self, image: np.ndarray, blur_amount: float, focus_position_x: float, focus_position_y: float, focus_width: float, focus_height: float, - focus_shape: str, **kwargs) -> np.ndarray: + focus_shape: str, bokeh_shape: str, bokeh_size: float, + bokeh_brightness: float, chromatic_aberration: float, **kwargs) -> np.ndarray: h, w = image.shape[:2] - mask = np.zeros((h, w), dtype=np.float32) center_x, center_y = int(w * focus_position_x), int(h * focus_position_y) width, height = int(w * focus_width), int(h * focus_height) + # Create focus mask + mask = np.zeros((h, w), dtype=np.float32) if focus_shape == "rectangle": cv2.rectangle(mask, (center_x - width//2, center_y - height//2), (center_x + width//2, center_y + height//2), 1, -1) - else: # ellipse + elif focus_shape == "ellipse": cv2.ellipse(mask, (center_x, center_y), (width//2, height//2), 0, 0, 360, 1, -1) - + else: # gradient + y, x = np.ogrid[0:h, 0:w] + # Create smooth gradient based on distance from focus center + dx = (x - center_x) / (width/2) + dy = (y - center_y) / (height/2) + dist = np.sqrt(dx*dx + dy*dy) + mask = np.clip(1 - dist, 0, 1) + + # Apply gaussian blur to mask for smooth transition mask = cv2.GaussianBlur(mask, (0, 0), sigmaX=min(width, height) / 6) - blurred = cv2.GaussianBlur(image, (0, 0), sigmaX=blur_amount) - result = image * mask[:,:,np.newaxis] + blurred * (1 - mask[:,:,np.newaxis]) + + # Create bokeh kernel + bokeh_kernel = self._create_bokeh_kernel(bokeh_size, bokeh_shape, bokeh_brightness) + + # Process each channel separately for chromatic aberration + result = np.zeros_like(image) + for c in range(3): + # Apply channel-specific blur offset for chromatic aberration + offset = (c - 1) * chromatic_aberration * blur_amount + channel_blur = cv2.filter2D(image[..., c], -1, bokeh_kernel * (blur_amount + offset)) + result[..., c] = image[..., c] * mask + channel_blur * (1 - mask) return np.clip(result, 0, 1) - +@apply_tooltips class FlexImageParallax(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -423,6 +736,7 @@ def apply_effect_internal( return np.clip(result, 0, 1) +@apply_tooltips class FlexImageContrast(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -462,6 +776,7 @@ def apply_effect_internal(self, image: np.ndarray, contrast: float, brightness: import numpy as np import cv2 +@apply_tooltips class FlexImageWarp(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -510,7 +825,12 @@ def apply_effect_internal(self, image: np.ndarray, warp_type: str, warp_strength for _ in range(warp_octaves): freq = warp_frequency * (2 ** _) amp = warp_strength / (2 ** _) - noise += amp * np.random.rand(h, w, 2) * np.sin(freq * np.stack((y, x)) / np.array([h, w])) + # Calculate phase grid + phase_x = freq * x / w + phase_y = freq * y / h + # Generate random noise and modulate with sine waves + rand_noise = np.random.rand(h, w, 2) + noise += amp * rand_noise * np.stack((np.sin(phase_y), np.sin(phase_x)), axis=-1) x_warped = x + noise[:,:,0] * w * mask y_warped = y + noise[:,:,1] * h * mask @@ -534,11 +854,12 @@ def apply_effect_internal(self, image: np.ndarray, warp_type: str, warp_strength y_warped = np.clip(y_warped, 0, h-1) # Remap image - warped = cv2.remap(image, x_warped, y_warped, cv2.INTER_LINEAR) + warped = cv2.remap(image, x_warped.astype(np.float32), y_warped.astype(np.float32), cv2.INTER_LINEAR) return warped +@apply_tooltips class FlexImageVignette(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -592,6 +913,7 @@ def apply_effect_internal(self, image: np.ndarray, intensity: float, radius: flo return np.clip(result, 0, 1) +@apply_tooltips class FlexImageTransform(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -610,12 +932,13 @@ def get_modifiable_params(cls): def apply_effect_internal(self, image: np.ndarray, transform_type: str, x_value: float, y_value: float, **kwargs) -> np.ndarray: return transform_image(image, transform_type, x_value, y_value) +@apply_tooltips class FlexImageHueShift(FlexImageBase): @classmethod def INPUT_TYPES(cls): base_inputs = super().INPUT_TYPES() base_inputs["required"].update({ - "hue_shift": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 360.0, "step": 1.0}), + "hue_shift": ("INT", {"default": 0, "min": 0, "max": 360, "step": 1}), }) base_inputs["optional"].update({ "opt_mask": ("MASK",), @@ -627,39 +950,72 @@ def get_modifiable_params(cls): return ["hue_shift", "None"] def apply_effect_internal(self, image: np.ndarray, hue_shift: float, opt_mask: np.ndarray = None, **kwargs) -> np.ndarray: - # Convert RGB to HSV - hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV) - - # Create a copy of the original HSV image - result_hsv = hsv_image.copy() + # Convert to float32 for better precision + image = image.astype(np.float32) - # Apply hue shift - result_hsv[:,:,0] = (result_hsv[:,:,0] + hue_shift / 2) % 180 + # Convert RGB to LCH color space for better hue manipulation + # First convert to LAB + lab = cv2.cvtColor(image, cv2.COLOR_RGB2LAB) + + # Convert LAB to LCH (cylindrical color space) + L = lab[:,:,0] + a = lab[:,:,1] + b = lab[:,:,2] + + # Calculate C (chroma) and H (hue) from a,b + C = np.sqrt(np.square(a) + np.square(b)) + H = np.arctan2(b, a) + + # Apply hue shift in radians (convert from degrees) + H_shifted = H + (hue_shift * np.pi / 180.0) + + # Convert back to LAB + a_new = C * np.cos(H_shifted) + b_new = C * np.sin(H_shifted) + + # Reconstruct LAB image + lab_shifted = np.stack([L, a_new, b_new], axis=2) + + # Convert back to RGB + result = cv2.cvtColor(lab_shifted, cv2.COLOR_LAB2RGB) if opt_mask is not None: - # Ensure mask has the same shape as the image - if opt_mask.shape[:2] != image.shape[:2]: - opt_mask = cv2.resize(opt_mask, (image.shape[1], image.shape[0])) + # Convert mask to numpy if it's a tensor + if torch.is_tensor(opt_mask): + opt_mask = opt_mask.cpu().numpy() + + # Select the correct frame from the mask batch + frame_index = kwargs.get('frame_index', 0) + if len(opt_mask.shape) > 2: + opt_mask = opt_mask[frame_index] + + # Ensure mask is 2D + if len(opt_mask.shape) > 2: + opt_mask = opt_mask.squeeze() + + # Get target dimensions and resize if needed + target_height, target_width = image.shape[:2] + if opt_mask.shape != (target_height, target_width): + opt_mask = cv2.resize(opt_mask.astype(np.float32), (target_width, target_height)) # Normalize mask to range [0, 1] if opt_mask.max() > 1: opt_mask = opt_mask / 255.0 - # Expand mask dimensions to match HSV image + # Expand mask dimensions to match image mask_3d = np.expand_dims(opt_mask, axis=2) - # Apply the mask - result_hsv = hsv_image * (1 - mask_3d) + result_hsv * mask_3d - - # Convert back to RGB - result = cv2.cvtColor(result_hsv, cv2.COLOR_HSV2RGB) + # Apply the mask by blending original and shifted images + result = image * (1 - mask_3d) + result * mask_3d return np.clip(result, 0, 1) + import numpy as np import cv2 +@apply_tooltips class FlexImageDepthWarp(FlexImageBase): @classmethod @@ -722,6 +1078,8 @@ def apply_effect_internal( print("Warning: No depth map provided.") return image + +@apply_tooltips class FlexImageHorizontalToVertical(FlexImageBase): @classmethod def INPUT_TYPES(cls): @@ -833,4 +1191,5 @@ def apply_effect_internal(self, image: np.ndarray, blur_amount: float, backgroun return np.clip(result, 0, 1) + \ No newline at end of file diff --git a/nodes/images/image_base.py b/nodes/images/image_base.py deleted file mode 100644 index 7f405a7..0000000 --- a/nodes/images/image_base.py +++ /dev/null @@ -1,125 +0,0 @@ -import torch -import numpy as np -from abc import ABC, abstractmethod -from tqdm import tqdm -from comfy.utils import ProgressBar -from ... import RyanOnTheInside - -class FlexImageBase(RyanOnTheInside, ABC): - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "images": ("IMAGE",), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (cls.get_modifiable_params(), {"default": cls.get_modifiable_params()[0]}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - }, - "optional": { - "opt_feature": ("FEATURE",), - "opt_feature_pipe": ("FEATURE_PIPE",), - } - } - - CATEGORY = "RyanOnTheInside/FlexImage" - RETURN_TYPES = ("IMAGE",) - FUNCTION = "apply_effect" - - def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) - - def end_progress(self): - self.progress_bar = None - - @classmethod - @abstractmethod - def get_modifiable_params(cls): - """Return a list of parameter names that can be modulated.""" - return [] - - def modulate_param(self, param_name, param_value, feature_value, strength, mode): - if mode == "relative": - return param_value * (1 + (feature_value - 0.5) * strength) - else: # absolute - return param_value * feature_value * strength - - def apply_effect(self, images, strength, feature_threshold, feature_param, feature_mode, opt_feature=None, opt_feature_pipe=None, **kwargs): - if (opt_feature is None) != (opt_feature_pipe is None): - raise ValueError("Both opt_feature and opt_feature_pipe must be provided together, or neither should be provided.") - - if opt_feature is None and opt_feature_pipe is None: - # If neither feature nor feature_pipe is provided, process all frames without modulation - num_frames = images.shape[0] - images_np = images.cpu().numpy() - - self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - - result = [] - for i in range(num_frames): - processed_image = self.process_image(images_np[i], 0.5, strength, - feature_param=feature_param, - feature_mode=feature_mode, - **kwargs) - result.append(processed_image) - self.update_progress() - else: - # Original behavior when both feature and feature_pipe are provided - num_frames = opt_feature_pipe.frame_count - images_np = images.cpu().numpy() - - self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - - result = [] - for i in range(num_frames): - image = images_np[i] - feature_value = opt_feature.get_value_at_frame(i) - kwargs['frame_index'] = i - if feature_value >= feature_threshold: - processed_image = self.process_image(image, feature_value, strength, - feature_param=feature_param, - feature_mode=feature_mode, - **kwargs) - else: - processed_image = image - - result.append(processed_image) - self.update_progress() - - self.end_progress() - - # Convert the list of numpy arrays to a single numpy array - result_np = np.stack(result) - - # Convert the numpy array to a PyTorch tensor and ensure it's in BHWC format - result_tensor = torch.from_numpy(result_np).float() - - # If the tensor is not in BHWC format, transpose it - if result_tensor.shape[1] == 3: # If it's in BCHW format - result_tensor = result_tensor.permute(0, 2, 3, 1) - - return (result_tensor,) - - def process_image(self, image: np.ndarray, feature_value: float, strength: float, - feature_param: str, feature_mode: str, **kwargs) -> np.ndarray: - # Modulate the selected parameter - for param_name in self.get_modifiable_params(): - if param_name in kwargs: - if param_name == feature_param: - kwargs[param_name] = self.modulate_param(param_name, kwargs[param_name], - feature_value, strength, feature_mode) - - # Call the child class's implementation - return self.apply_effect_internal(image, **kwargs) - - @abstractmethod - def apply_effect_internal(self, image: np.ndarray, **kwargs) -> np.ndarray: - """Apply the effect to the image. To be implemented by child classes.""" - pass diff --git a/nodes/images/image_utility_nodes.py b/nodes/images/image_utility_nodes.py index 84b9c06..26463ff 100644 --- a/nodes/images/image_utility_nodes.py +++ b/nodes/images/image_utility_nodes.py @@ -2,23 +2,14 @@ import torch.nn.functional as F from ..node_utilities import string_to_rgb from ... import RyanOnTheInside -from comfy.utils import ProgressBar +from comfy.utils import ProgressBar, common_upscale +from ... import ProgressMixin +from ...tooltips import apply_tooltips -class ImageUtilityNode(RyanOnTheInside): - def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) - - def end_progress(self): - self.progress_bar = None - CATEGORY = "RyanOnTheInside/image/utility" +class ImageUtilityNode(ProgressMixin): + CATEGORY = "RyanOnTheInside/Utility/Images" +@apply_tooltips class DyeImage(ImageUtilityNode): @classmethod def INPUT_TYPES(s): @@ -51,6 +42,7 @@ def dye_image(self, image, source_rgb, target_rgb, tolerance): # From https://github.com/Jamy-L/Pytorch-Contrast-Adaptive-Sharpening/ # THEN from comfyui essentials shoutout MATEO +@apply_tooltips class ImageCASBatch(ImageUtilityNode): @classmethod def INPUT_TYPES(cls): @@ -63,7 +55,6 @@ def INPUT_TYPES(cls): } RETURN_TYPES = ("IMAGE",) - CATEGORY = "essentials/image processing" FUNCTION = "execute" def execute(self, image, amount, batch_size): @@ -122,7 +113,8 @@ def process_batch(self, batch, amount): return output -from comfy.utils import common_upscale + +@apply_tooltips class ImageScaleToTarget(ImageUtilityNode): upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"] crop_methods = ["disabled", "center"] @@ -136,8 +128,6 @@ def INPUT_TYPES(s): RETURN_TYPES = ("IMAGE",) FUNCTION = "upscale" - CATEGORY = "image/upscaling" - def upscale(self, image, upscale_method, target_image, crop): b,height,width,c = target_image.shape if width == 0 and height == 0: @@ -154,3 +144,54 @@ def upscale(self, image, upscale_method, target_image, crop): s = s.movedim(1,-1) return (s,) + +import json + +class ColorPicker: + """ + A node that provides a color picker interface and outputs hex color, RGB color, and hue values. + """ + + CATEGORY = "RyanOnTheInside" + FUNCTION = "process_color" + RETURN_TYPES = ("STRING", "STRING", "INT") + RETURN_NAMES = ("hex_color", "rgb_color", "hue_shift") + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "color": ("STRING", {"default": '{"hex":"#FF0000","rgb":"255,0,0","hue":0}'}) + } + } + + def process_color(self, color): + try: + # Parse the JSON data from the widget + color_data = json.loads(color) + + # Extract values with defaults + hex_color = color_data.get("hex", "#FF0000").upper() # Ensure uppercase for consistency + rgb_value = color_data.get("rgb", "255,0,0") + hue = color_data.get("hue", 0) + + # Convert RGB string to integers for validation + try: + r, g, b = map(int, rgb_value.split(',')) + # Ensure RGB values are in valid range + r = max(0, min(255, r)) + g = max(0, min(255, g)) + b = max(0, min(255, b)) + # Reconstruct validated RGB string + rgb_value = f"{r},{g},{b}" + except ValueError: + rgb_value = "255,0,0" # Default if parsing fails + + # Ensure hue is in valid range (0-360) + hue = max(0, min(360, int(hue))) + + return (hex_color, rgb_value, hue) + + except (json.JSONDecodeError, KeyError): + # Return defaults if JSON parsing fails + return ("#FF0000", "255,0,0", 0) \ No newline at end of file diff --git a/nodes/images/image_utils.py b/nodes/images/image_utils.py index 38528c5..5642b64 100644 --- a/nodes/images/image_utils.py +++ b/nodes/images/image_utils.py @@ -1,5 +1,6 @@ import numpy as np import cv2 +import torch def apply_blend_mode(base_image: np.ndarray, blend_image: np.ndarray, mode: str, opacity: float) -> np.ndarray: """ @@ -117,43 +118,58 @@ def apply_blur(image: np.ndarray, intensity: float, kernel_size: int, sigma: flo blurred = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma) return blurred -def apply_sharpen(image: np.ndarray, intensity: float, kernel_size: int, sigma: float = 1.0) -> np.ndarray: - blurred = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma) - sharpened = cv2.addWeighted(image, 1 + intensity, blurred, -intensity, 0) - return np.clip(sharpened, 0, 1) - -def apply_edge_detect(image: np.ndarray, intensity: float, kernel_size: int) -> np.ndarray: - gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) - edges = cv2.Canny(np.uint8(gray * 255), 100, 200) - edges = edges.astype(float) / 255.0 - return np.clip(image * (1 - intensity) + np.dstack([edges] * 3) * intensity, 0, 1) - -def apply_emboss(image: np.ndarray, intensity: float, kernel_size: int) -> np.ndarray: - kernel = np.array([[-1,-1,0], [-1,0,1], [0,1,1]]) - if kernel_size > 3: - kernel = cv2.resize(kernel, (kernel_size, kernel_size), interpolation=cv2.INTER_LINEAR) - gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) - embossed = cv2.filter2D(gray, -1, kernel * intensity) - embossed = (embossed - np.min(embossed)) / (np.max(embossed) - np.min(embossed)) - return np.clip(image * (1 - intensity) + np.dstack([embossed] * 3) * intensity, 0, 1) - -def apply_posterize(image: np.ndarray, intensity: float, levels: int, dither: bool = False) -> np.ndarray: - effective_levels = int(np.clip(levels * (1 - intensity) + 2 * intensity, 2, levels)) - quantized = np.round(image * (effective_levels - 1)) / (effective_levels - 1) - if dither: - error = image - quantized - quantized += np.random.uniform(-0.5/effective_levels, 0.5/effective_levels, image.shape) - return np.clip(quantized, 0, 1) - -def apply_brightness(image: np.ndarray, intensity: float, midpoint: float = 0.5, preserve_luminosity: bool = False) -> np.ndarray: - adjusted = image + intensity +def create_gaussian_kernel_gpu(kernel_size: int, sigma: float, device: torch.device) -> torch.Tensor: + """ + Create a 2D Gaussian kernel for GPU-accelerated blur operations. - if preserve_luminosity: - original_luminosity = np.mean(image) - adjusted_luminosity = np.mean(adjusted) - adjusted *= original_luminosity / adjusted_luminosity + :param kernel_size: Size of the kernel (must be odd) + :param sigma: Standard deviation of the Gaussian + :param device: PyTorch device (GPU or CPU) + :return: Gaussian kernel tensor ready for convolution + """ + # Create 1D Gaussian kernel + x = torch.linspace(-kernel_size // 2 + 1, kernel_size // 2, kernel_size, device=device) + gauss = torch.exp(-x.pow(2) / (2 * sigma ** 2)) + kernel = gauss / gauss.sum() - return np.clip(adjusted, 0, 1) + # Create 2D kernel by outer product + kernel = kernel.unsqueeze(0) * kernel.unsqueeze(1) + + # Normalize and reshape for conv2d + kernel = kernel / kernel.sum() + kernel = kernel.view(1, 1, kernel_size, kernel_size) + return kernel.repeat(3, 1, 1, 1) # Repeat for RGB channels + +def apply_gaussian_blur_gpu(x: torch.Tensor, kernel_size: int, sigma: float) -> torch.Tensor: + """ + Apply Gaussian blur using GPU acceleration via PyTorch. + + :param x: Input tensor in format (C, H, W) or (N, C, H, W) + :param kernel_size: Size of the Gaussian kernel (must be odd) + :param sigma: Standard deviation of the Gaussian + :return: Blurred tensor in same format as input + """ + if kernel_size < 3: + return x + + # Ensure input is in the right format (N, C, H, W) + if len(x.shape) == 3: + x = x.unsqueeze(0) + + # Create gaussian kernel + kernel = create_gaussian_kernel_gpu(kernel_size, sigma, x.device) + + # Apply padding to prevent border artifacts + pad_size = kernel_size // 2 + x_padded = torch.nn.functional.pad(x, (pad_size, pad_size, pad_size, pad_size), mode='reflect') + + # Apply convolution for each channel + groups = x.shape[1] # Number of channels + blurred = torch.nn.functional.conv2d(x_padded, kernel, groups=groups, padding=0) + + return blurred.squeeze(0) if len(x.shape) == 4 else blurred + + def apply_contrast(image: np.ndarray, intensity: float, midpoint: float = 0.5, preserve_luminosity: bool = False) -> np.ndarray: factor = 1 + intensity @@ -249,4 +265,125 @@ def transform_image(image: np.ndarray, transform_type: str, x_value: float, y_va elif transform_type == "scale": return scale_image(image, 1 + x_value, 1 + y_value) else: - raise ValueError(f"Unknown transform type: {transform_type}") \ No newline at end of file + raise ValueError(f"Unknown transform type: {transform_type}") + +def create_wave_distortion_map(height: int, width: int, frequency: float, amplitude: float, device: torch.device) -> torch.Tensor: + """ + Create a wave distortion displacement map for image warping. + + :param height: Image height + :param width: Image width + :param frequency: Wave frequency + :param amplitude: Wave amplitude + :param device: PyTorch device (GPU/CPU) + :return: Displacement map tensor + """ + y, x = torch.meshgrid( + torch.arange(height, device=device), + torch.arange(width, device=device), + indexing='ij' + ) + + displacement = amplitude * torch.sin(2 * np.pi * frequency * y.float()) + return displacement + +def extract_and_move_blocks(image: torch.Tensor, block_size: int, shift_range: float, device: torch.device) -> torch.Tensor: + """ + Extract and randomly move blocks in the image. + + :param image: Input tensor (H,W,C) + :param block_size: Size of blocks to move + :param shift_range: Maximum shift distance as fraction of image size + :param device: PyTorch device (GPU/CPU) + :return: Image with moved blocks + """ + h, w = image.shape[:2] + result = image.clone() + + # Calculate maximum shift in pixels + max_shift = int(min(h, w) * shift_range) + + # Create block positions + y_blocks = torch.arange(0, h - block_size + 1, block_size, device=device) + x_blocks = torch.arange(0, w - block_size + 1, block_size, device=device) + + # Random shifts for each block + shifts_y = torch.randint(-max_shift, max_shift + 1, (len(y_blocks), len(x_blocks)), device=device) + shifts_x = torch.randint(-max_shift, max_shift + 1, (len(y_blocks), len(x_blocks)), device=device) + + # Apply shifts using tensor operations + for i, y in enumerate(y_blocks): + for j, x in enumerate(x_blocks): + # Source block coordinates + y1, y2 = y, y + block_size + x1, x2 = x, x + block_size + + # Target coordinates with shift + new_y = torch.clamp(y + shifts_y[i,j], 0, h - block_size) + new_x = torch.clamp(x + shifts_x[i,j], 0, w - block_size) + + # Move block + result[new_y:new_y+block_size, new_x:new_x+block_size] = image[y1:y2, x1:x2] + + return result + +def apply_compression_artifacts(image: torch.Tensor, block_size: int, quality: float, device: torch.device) -> torch.Tensor: + """ + Simulate compression artifacts using block-wise operations. + + :param image: Input tensor (H,W,C) + :param block_size: Size of compression blocks + :param quality: Quality factor (0-1) + :param device: PyTorch device (GPU/CPU) + :return: Image with compression artifacts + """ + h, w = image.shape[:2] + result = image.clone() + + # Quantization levels based on quality + levels = int(2 + (1 - quality) * 14) # 2-16 levels + + # Process blocks + for y in range(0, h - block_size + 1, block_size): + for x in range(0, w - block_size + 1, block_size): + block = image[y:y+block_size, x:x+block_size] + + # Quantize block values + block_q = torch.round(block * (levels - 1)) / (levels - 1) + + # Add block edges + edge_strength = (1 - quality) * 0.1 + block_q += edge_strength * (torch.rand_like(block_q) - 0.5) + + result[y:y+block_size, x:x+block_size] = block_q + + return torch.clamp(result, 0, 1) + +def apply_line_corruption(image: torch.Tensor, corruption_probability: float, device: torch.device) -> torch.Tensor: + """ + Apply random line corruption effects. + + :param image: Input tensor (H,W,C) + :param corruption_probability: Probability of line corruption + :param device: PyTorch device (GPU/CPU) + :return: Image with corrupted lines + """ + h, w = image.shape[:2] + result = image.clone() + + # Generate random line positions + line_mask = torch.rand(h, device=device) < corruption_probability + + # Different corruption types for selected lines + for y in torch.where(line_mask)[0]: + corruption_type = torch.randint(0, 3, (1,), device=device) + + if corruption_type == 0: # Shift + shift = torch.randint(-w//4, w//4 + 1, (1,), device=device) + result[y] = torch.roll(image[y], shift.item(), dims=0) + elif corruption_type == 1: # Noise + result[y] = torch.rand_like(image[y]) + else: # Repeat + result[y] = image[y].roll(1, dims=0) + + return result \ No newline at end of file diff --git a/nodes/latents/flex_latent_base.py b/nodes/latents/flex_latent_base.py new file mode 100644 index 0000000..e8c5ecd --- /dev/null +++ b/nodes/latents/flex_latent_base.py @@ -0,0 +1,98 @@ +import numpy as np +import torch +from abc import abstractmethod +from ... import RyanOnTheInside +from ..flex.flex_base import FlexBase +from ...tooltips import apply_tooltips + +@apply_tooltips +class FlexLatentBase(RyanOnTheInside, FlexBase): + @classmethod + def INPUT_TYPES(cls): + return { + **super().INPUT_TYPES(), + "required": { + **super().INPUT_TYPES()["required"], + "latents": ("LATENT",), + }, + # Optional inputs are inherited from FlexBase + } + + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Latents" + RETURN_TYPES = ("LATENT",) + FUNCTION = "apply_effect" + + def __init__(self): + super().__init__() + + def process_below_threshold(self, latent, feature_value=None, **kwargs): + """Default behavior for when feature value is below threshold: return latent unchanged.""" + return latent + + def apply_effect( + self, + latents, + strength, + feature_threshold, + feature_param, + feature_mode, + opt_feature=None, + **kwargs + ): + latents_np = latents["samples"].cpu().numpy() + + num_frames = latents_np.shape[0] + + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + result = [] + for i in range(num_frames): + # Get the appropriate latent frame, handling possible shorter sequences + latent = latents_np[i % latents_np.shape[0]] + + # Get feature value + feature_value = self.get_feature_value(i, opt_feature) + + # Process parameters using FlexBase functionality + processed_kwargs = self.process_parameters( + frame_index=i, + feature_value=feature_value, + feature_threshold=feature_threshold, + strength=strength, + feature_param=feature_param, + feature_mode=feature_mode, + **kwargs + ) + + # Ensure frame_index is included in processed_kwargs + processed_kwargs['frame_index'] = i + + # Determine if effect should be applied based on feature value and threshold + if feature_value is not None and feature_value >= processed_kwargs['feature_threshold']: + processed_latent = self.apply_effect_internal( + latent, + **processed_kwargs + ) + else: + processed_latent = self.process_below_threshold( + latent, + **processed_kwargs + ) + + result.append(processed_latent) + self.update_progress() + + self.end_progress() + + # Stack results and convert back to tensor + result_np = np.stack(result) + result_tensor = torch.from_numpy(result_np).float() + + return ({"samples": result_tensor},) + + @abstractmethod + def apply_effect_internal(self, latent: np.ndarray, feature_value: float, strength: float, + feature_param: str, feature_mode: str, **kwargs) -> np.ndarray: + """Apply the effect with processed parameters. To be implemented by child classes.""" + pass + diff --git a/nodes/latents/latent_base.py b/nodes/latents/flex_latents.py similarity index 63% rename from nodes/latents/latent_base.py rename to nodes/latents/flex_latents.py index c202d48..184c6fa 100644 --- a/nodes/latents/latent_base.py +++ b/nodes/latents/flex_latents.py @@ -1,91 +1,38 @@ -# custom_nodes/ComfyUI_RyanOnTheInside/nodes/latents/latent_base.py - +from .flex_latent_base import FlexLatentBase import numpy as np -import torch -from abc import ABC, abstractmethod -from comfy.utils import ProgressBar -from ... import RyanOnTheInside - -#NOTE: this is a work in progress, it sucks +from ...tooltips import apply_tooltips -class FlexLatentBase(RyanOnTheInside, ABC): +@apply_tooltips +class FlexLatentInterpolate(FlexLatentBase): @classmethod def INPUT_TYPES(cls): - return { - "required": { - "latents": ("LATENT",), - "feature": ("FEATURE",), - "feature_pipe": ("FEATURE_PIPE",), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (cls.get_modifiable_params(), {"default": cls.get_modifiable_params()[0]}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - } - } - - CATEGORY = "RyanOnTheInside/FlexLatent" - RETURN_TYPES = ("LATENT",) - FUNCTION = "apply_effect" - - def __init__(self): - self.progress_bar = None - - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) - - def end_progress(self): - self.progress_bar = None + inputs = super().INPUT_TYPES() + inputs["required"].update({ + "latent_2": ("LATENT",), + "interpolation_mode": (["Linear", "Spherical"], {"default": "Linear"}), + }) + return inputs @classmethod - @abstractmethod def get_modifiable_params(cls): - """Return a list of parameter names that can be modulated.""" - return [] - - def modulate_param(self, param_name, param_value, feature_value, strength, mode): - if mode == "relative": - return param_value * (1 + (feature_value - 0.5) * strength) - else: # absolute - return param_value * feature_value * strength - - def apply_effect(self, latents, feature, feature_pipe, strength, feature_threshold, feature_param, feature_mode, **kwargs): - num_frames = feature_pipe.frame_count - latents_np = latents["samples"].cpu().numpy() - - self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - - result = [] - for i in range(num_frames): - latent = latents_np[i] - feature_value = feature.get_value_at_frame(i) - kwargs['frame_index'] = i - kwargs['feature_value'] = feature_value - kwargs['strength'] = strength - kwargs['feature_param'] = feature_param - kwargs['feature_mode'] = feature_mode - - if feature_value >= feature_threshold: - processed_latent = self.process_latent(latent, **kwargs) - else: - processed_latent = latent - - result.append(processed_latent) - self.update_progress() - - self.end_progress() + return ["None"] - result_np = np.stack(result) - result_tensor = torch.from_numpy(result_np).float() + def apply_effect_internal(self, latent: np.ndarray, **kwargs) -> np.ndarray: + feature_value = kwargs['feature_value'] + strength = kwargs['strength'] + latent_2 = kwargs['latent_2'] + interpolation_mode = kwargs['interpolation_mode'] + frame_index = kwargs['frame_index'] - return ({"samples": result_tensor},) + latent_2_np = latent_2["samples"].cpu().numpy()[frame_index] - @abstractmethod - def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: - """Process the latent using subclass-specific logic.""" + # Perform interpolation + t = np.clip(feature_value * strength, 0.0, 1.0) + if interpolation_mode == "Linear": + result = (1 - t) * latent + t * latent_2_np + else: # Spherical interpolation + result = self.spherical_interpolation(latent, latent_2_np, t) + return result def spherical_interpolation(self, latent1, latent2, t): # Flatten the latents @@ -108,56 +55,7 @@ def spherical_interpolation(self, latent1, latent2, t): result = coef1 * latent1 + coef2 * latent2 return result.reshape(latent1.shape) -# custom_nodes/ComfyUI_RyanOnTheInside/nodes/latents/flex_latent_interpolate.py - -import numpy as np - -class FlexLatentInterpolate(FlexLatentBase): - @classmethod - def INPUT_TYPES(cls): - inputs = super().INPUT_TYPES() - inputs["required"].update({ - "latent_2": ("LATENT",), - "interpolation_mode": (["Linear", "Spherical"], {"default": "Linear"}), - }) - return inputs - - @classmethod - def get_modifiable_params(cls): - return ["None"] - - def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: - feature_value = kwargs['feature_value'] - strength = kwargs['strength'] - feature_param = kwargs['feature_param'] - feature_mode = kwargs['feature_mode'] - latent_2 = kwargs['latent_2'] - interpolation_mode = kwargs['interpolation_mode'] - - # Modulate any parameters if needed - if feature_param in self.get_modifiable_params(): - modulated_value = self.modulate_param( - feature_param, - kwargs.get(feature_param, 0), - feature_value, - strength, - feature_mode - ) - kwargs[feature_param] = modulated_value - - latent_2_np = latent_2["samples"].cpu().numpy()[kwargs['frame_index']] - - # Perform interpolation - t = np.clip(feature_value * strength, 0.0, 1.0) - if interpolation_mode == "Linear": - result = (1 - t) * latent + t * latent_2_np - else: # Spherical interpolation - result = self.spherical_interpolation(latent, latent_2_np, t) - return result - - -import numpy as np - +@apply_tooltips class EmbeddingGuidedLatentInterpolate(FlexLatentBase): @classmethod def INPUT_TYPES(cls): @@ -174,28 +72,15 @@ def INPUT_TYPES(cls): def get_modifiable_params(cls): return ["interpolation_mode", "None"] - def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: + def apply_effect_internal(self, latent: np.ndarray, **kwargs) -> np.ndarray: feature_value = kwargs['feature_value'] strength = kwargs['strength'] - feature_param = kwargs['feature_param'] - feature_mode = kwargs['feature_mode'] latent_2 = kwargs['latent_2'] embedding_1 = kwargs['embedding_1'] embedding_2 = kwargs['embedding_2'] interpolation_mode = kwargs['interpolation_mode'] frame_index = kwargs['frame_index'] - # Modulate any parameters if needed - if feature_param in self.get_modifiable_params(): - modulated_value = self.modulate_param( - feature_param, - kwargs.get(feature_param, 0), - feature_value, - strength, - feature_mode - ) - kwargs[feature_param] = modulated_value - latent_2_np = latent_2["samples"].cpu().numpy()[frame_index] embedding_1_np = embedding_1.cpu().numpy()[frame_index] embedding_2_np = embedding_2.cpu().numpy()[frame_index] @@ -239,8 +124,8 @@ def spherical_interpolation(self, latent1, latent2, t): coef2 = np.sin(t * omega) / sin_omega result = coef1 * latent1 + coef2 * latent2 return result.reshape(latent1.shape) - +@apply_tooltips class FlexLatentBlend(FlexLatentBase): @classmethod def INPUT_TYPES(cls): @@ -256,7 +141,7 @@ def INPUT_TYPES(cls): def get_modifiable_params(cls): return ["blend_strength", "None"] - def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: + def apply_effect_internal(self, latent: np.ndarray, **kwargs) -> np.ndarray: feature_value = kwargs['feature_value'] strength = kwargs['strength'] feature_param = kwargs['feature_param'] @@ -301,7 +186,8 @@ def apply_blend(self, latent1, latent2, mode): else: # Default to Add if mode is unrecognized return latent1 + latent2 - + +@apply_tooltips class FlexLatentNoise(FlexLatentBase): @classmethod def INPUT_TYPES(cls): @@ -316,7 +202,7 @@ def INPUT_TYPES(cls): def get_modifiable_params(cls): return ["noise_level", "None"] - def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: + def apply_effect_internal(self, latent: np.ndarray, **kwargs) -> np.ndarray: feature_value = kwargs['feature_value'] strength = kwargs['strength'] feature_param = kwargs['feature_param'] @@ -333,7 +219,7 @@ def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: strength, feature_mode ) - # Ensure noise_level remains within [0, 1] + # Ensure noise_level remains within [0.0, 1.0] noise_level = np.clip(noise_level, 0.0, 1.0) # Generate noise @@ -347,4 +233,5 @@ def process_latent(self, latent: np.ndarray, **kwargs) -> np.ndarray: # Add noise to the latent result = latent + noise - return result \ No newline at end of file + return result + diff --git a/nodes/latents/latent_frequency_blender.py b/nodes/latents/latent_frequency_blender.py index 023162c..a948f36 100644 --- a/nodes/latents/latent_frequency_blender.py +++ b/nodes/latents/latent_frequency_blender.py @@ -1,4 +1,4 @@ -from .latent_base import FlexLatentBase +from .flex_latent_base import FlexLatentBase import torch import numpy as np from scipy.signal import butter, sosfilt @@ -8,9 +8,11 @@ calculate_spectral_flux, calculate_zero_crossing_rate ) +from ...tooltips import apply_tooltips #NOTE just an experiment, it sucks #TODO: get to this +@apply_tooltips class LatentFrequencyBlender(FlexLatentBase): @classmethod def INPUT_TYPES(cls): @@ -42,7 +44,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("LATENT",) FUNCTION = "apply_effect" - CATEGORY = "RyanOnTheInside/FlexLatent" + CATEGORY = "RyanOnTheInside/ExperimentalWIP" @classmethod def get_modifiable_params(cls): diff --git a/nodes/masks/flex_mask_base.py b/nodes/masks/flex_mask_base.py new file mode 100644 index 0000000..5493496 --- /dev/null +++ b/nodes/masks/flex_mask_base.py @@ -0,0 +1,158 @@ +from abc import ABC, abstractmethod +import numpy as np +import torch +from ..flex.flex_base import FlexBase +from .mask_base import MaskBase +from ...tooltips import apply_tooltips + +@apply_tooltips +class FlexMaskBase(FlexBase, MaskBase): + """Base class for Flex-enabled mask operations that combines FlexBase feature modulation with MaskBase operations.""" + + @classmethod + def INPUT_TYPES(cls): + # Get input types from FlexBase + base_inputs = super().INPUT_TYPES() + + # Get MaskBase inputs + mask_inputs = MaskBase.INPUT_TYPES() + + # First rename MaskBase's strength to mask_strength so as to not conflict with FlexBase's strength + mask_inputs["required"]["mask_strength"] = mask_inputs["required"].pop("strength") + + # Update the base inputs with mask inputs + base_inputs["required"].update(mask_inputs["required"]) + + + # Update optional inputs + if "optional" in mask_inputs: + if "optional" not in base_inputs: + base_inputs["optional"] = {} + base_inputs["optional"].update(mask_inputs["optional"]) + + return base_inputs + + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Masks" + RETURN_TYPES = ("MASK",) + FUNCTION = "apply_effect" + + def __init__(self): + # Initialize both parent classes + FlexBase.__init__(self) + MaskBase.__init__(self) + self.parameter_scheduler = None + + @classmethod + @abstractmethod + def get_modifiable_params(cls): + """Return a list of parameter names that can be modulated.""" + return ["None"] + + + #TODO update this to make the contract more clear (feature_mode, feature_param, etc) + @abstractmethod + def apply_effect_internal(self, mask: np.ndarray, **kwargs) -> np.ndarray: + """Apply the effect with processed parameters. + + Args: + mask: The input mask to process + **kwargs: All parameters needed for the effect, already processed by the base class + + Returns: + The processed mask + """ + pass + + def process_mask(self, mask: np.ndarray, strength: float, **kwargs) -> np.ndarray: + """Implementation of MaskBase's abstract process_mask method.""" + # This satisfies MaskBase's interface by delegating to the flex system + return self.apply_effect( + masks=torch.from_numpy(mask).unsqueeze(0), # Add batch dimension + strength=strength, + **kwargs + )[0] # Remove batch dimension + + def process_below_threshold(self, mask, **kwargs): + """Default behavior for when feature value is below threshold: return mask unchanged.""" + return mask + + def apply_effect(self, masks, opt_feature=None, strength=1.0, feature_threshold=0.0, + mask_strength=1.0, invert=False, subtract_original=0.0, + grow_with_blur=0.0, feature_param=None, feature_mode="relative", **kwargs): + """Main entry point for the Flex system.""" + if opt_feature is not None: + num_frames = opt_feature.frame_count + else: + # Start with number of input frames + num_frames = masks.shape[0] + # Check all parameters for lists/arrays that might be longer + for value in kwargs.values(): + if isinstance(value, (list, tuple, np.ndarray)): + num_frames = max(num_frames, len(value)) + + original_masks = masks.clone() + + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") + + result = [] + for i in range(num_frames): + mask = masks[i % masks.shape[0]].numpy() + + # Get feature value + feature_value = self.get_feature_value(i, opt_feature) + + # Process parameters using FlexBase functionality + processed_kwargs = self.process_parameters( + frame_index=i, + feature_value=feature_value, + feature_threshold=feature_threshold, + strength=strength, + mask_strength=mask_strength, + subtract_original=subtract_original, + grow_with_blur=grow_with_blur, + feature_param=feature_param, + feature_mode=feature_mode, + **kwargs + ) + + # Determine if effect should be applied based on feature value and threshold + if feature_value is not None and feature_value >= processed_kwargs['feature_threshold']: + processed_mask = self.apply_effect_internal( + mask, + **processed_kwargs + ) + else: + processed_mask = self.process_below_threshold( + mask, + **processed_kwargs + ) + + # Apply mask operations using modulo for original mask indexing + frame_result = self.apply_mask_operation( + processed_mask[np.newaxis, ...], + original_masks[i % masks.shape[0]:i % masks.shape[0]+1], + processed_kwargs['mask_strength'], + invert, + processed_kwargs['subtract_original'], + processed_kwargs['grow_with_blur'], + progress_callback=self.update_progress + ) + result.append(frame_result) + + self.end_progress() + return (torch.cat(result, dim=0),) + def main_function(self, masks, opt_feature=None, strength=1.0, feature_threshold=0.0, + mask_strength=1.0, invert=False, subtract_original=0.0, + grow_with_blur=0.0, **kwargs): + """Implementation of MaskBase's abstract main_function.""" + return self.apply_effect( + masks=masks, + opt_feature=opt_feature, + strength=strength, + feature_threshold=feature_threshold, + mask_strength=mask_strength, + invert=invert, + subtract_original=subtract_original, + grow_with_blur=grow_with_blur, + **kwargs + ) diff --git a/nodes/masks/flex_masks.py b/nodes/masks/flex_masks.py index 676c7e0..286fba7 100644 --- a/nodes/masks/flex_masks.py +++ b/nodes/masks/flex_masks.py @@ -1,18 +1,18 @@ -from .mask_base import FlexMaskBase +from .flex_mask_base import FlexMaskBase from .mask_utils import morph_mask, warp_mask, transform_mask, combine_masks,apply_easing import math import numpy as np from .voronoi_noise import VoronoiNoise #NOTE credit for Voronoi goes to Alan Huang https://github.com/alanhuang67/ from comfy.model_management import get_torch_device import cv2 -from .mask_base import FlexMaskBase from scipy.ndimage import distance_transform_edt -from .mask_base import FlexMaskBase from .shape_utils import create_shape_mask, get_available_shapes import torch from typing import List import torch.nn.functional as F +from ...tooltips import apply_tooltips +@apply_tooltips class FlexMaskMorph(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -26,38 +26,54 @@ def INPUT_TYPES(cls): } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, morph_type: str, max_kernel_size: int, max_iterations: int, **kwargs) -> np.ndarray: - kernel_size = max(3, int(3 + (max_kernel_size - 3) * feature_value * strength)) - iterations = max(1, int(max_iterations * feature_value * strength)) - - return morph_mask(mask, morph_type, kernel_size, iterations) + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_kernel_size", "max_iterations", "None"] + + def apply_effect_internal(self, mask: np.ndarray, morph_type: str, **kwargs) -> np.ndarray: + # Get values from kwargs - they'll have the same names as defined in INPUT_TYPES + kernel_size = kwargs['max_kernel_size'] + iterations = kwargs['max_iterations'] - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, morph_type, max_kernel_size, max_iterations, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, - morph_type=morph_type, max_kernel_size=max_kernel_size, max_iterations=max_iterations, **kwargs),) + # Ensure kernel_size is odd and >= 3 + kernel_size = max(3, int(kernel_size)) + if kernel_size % 2 == 0: + kernel_size += 1 + # Ensure iterations is >= 1 + iterations = max(1, int(iterations)) + + return morph_mask(mask, morph_type, kernel_size, iterations) + +@apply_tooltips class FlexMaskWarp(FlexMaskBase): + #TODO: check warp functions for efficacy..... @classmethod def INPUT_TYPES(cls): - return { - **super().INPUT_TYPES(), - "required": { - **super().INPUT_TYPES()["required"], - "warp_type": (["perlin", "radial", "swirl"],), - "frequency": ("FLOAT", {"default": 0.1, "min": 0.01, "max": 1.0, "step": 0.01}), - "max_amplitude": ("FLOAT", {"default": 30.0, "min": 0.1, "max": 500.0, "step": 0.1}), - "octaves": ("INT", {"default": 3, "min": 1, "max": 8, "step": 1}), - } - } + base_inputs = super().INPUT_TYPES() + base_inputs["required"].update({ + "warp_type": (["perlin", "radial", "swirl"],), + "frequency": ("FLOAT", {"default": 0.1, "min": 0.01, "max": 1.0, "step": 0.01}), + "max_amplitude": ("FLOAT", {"default": 30.0, "min": 0.1, "max": 500.0, "step": 0.1}), + "octaves": ("INT", {"default": 3, "min": 1, "max": 8, "step": 1}), + }) + return base_inputs - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, warp_type: str, frequency: float, max_amplitude: float, octaves: int, **kwargs) -> np.ndarray: - amplitude = max_amplitude * feature_value * strength + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_amplitude", "frequency", "octaves", "None"] + + def apply_effect_internal(self, mask: np.ndarray, warp_type: str, **kwargs) -> np.ndarray: + # Get values from kwargs - they'll have the same names as defined in INPUT_TYPES + amplitude = kwargs['max_amplitude'] + frequency = kwargs['frequency'] + octaves = kwargs['octaves'] + return warp_mask(mask, warp_type, frequency, amplitude, octaves) - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, warp_type, frequency, max_amplitude, octaves, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, - warp_type=warp_type, frequency=frequency, max_amplitude=max_amplitude, octaves=octaves, **kwargs),) - +@apply_tooltips class FlexMaskTransform(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -71,15 +87,19 @@ def INPUT_TYPES(cls): } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, transform_type: str, max_x_value: float, max_y_value: float, **kwargs) -> np.ndarray: - x_value = max_x_value * feature_value * strength - y_value = max_y_value * feature_value * strength + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_x_value", "max_y_value", "None"] + + def apply_effect_internal(self, mask: np.ndarray, transform_type: str, **kwargs) -> np.ndarray: + # Get values from kwargs - they'll have the same names as defined in INPUT_TYPES + x_value = kwargs['max_x_value'] + y_value = kwargs['max_y_value'] + return transform_mask(mask, transform_type, x_value, y_value) - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, transform_type, max_x_value, max_y_value, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, - transform_type=transform_type, max_x_value=max_x_value, max_y_value=max_y_value, **kwargs),) - +@apply_tooltips class FlexMaskMath(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -89,18 +109,26 @@ def INPUT_TYPES(cls): **super().INPUT_TYPES()["required"], "mask_b": ("MASK",), "combination_method": (["add", "subtract", "multiply", "minimum", "maximum"],), + "max_blend": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, mask_b: np.ndarray, combination_method: str, **kwargs) -> np.ndarray: + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_blend", "None"] + + def apply_effect_internal(self, mask: np.ndarray, mask_b: torch.Tensor, combination_method: str, **kwargs) -> np.ndarray: + # Get the frame index and handle mask_b indexing frame_index = kwargs.get('frame_index', 0) mask_b = mask_b[frame_index].numpy() - return combine_masks(mask, mask_b, combination_method, feature_value * strength) + + # Get value from kwargs - it'll have the same name as defined in INPUT_TYPES + blend = kwargs['max_blend'] + + return combine_masks(mask, mask_b, combination_method, blend) - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, mask_b, combination_method, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, - mask_b=mask_b, combination_method=combination_method, **kwargs),) - +@apply_tooltips class FlexMaskOpacity(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -112,15 +140,18 @@ def INPUT_TYPES(cls): } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, max_opacity: float, **kwargs) -> np.ndarray: - opacity = max_opacity * feature_value * strength + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_opacity", "None"] + + def apply_effect_internal(self, mask: np.ndarray, **kwargs) -> np.ndarray: + # Get value from kwargs - it'll have the same name as defined in INPUT_TYPES + opacity = kwargs['max_opacity'] + opacity = np.clip(opacity, 0.0, 1.0) # Ensure opacity stays in valid range return mask * opacity - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, max_opacity, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, - max_opacity=max_opacity, **kwargs),) - -#NOTE credit for the heavy lifting in this class and all of the noise class goes to Alan Huang https://github.com/alanhuang67/ +@apply_tooltips class FlexMaskVoronoiScheduled(FlexMaskBase): formulas = { "Linear": lambda t, a, b: t * a / b, @@ -148,42 +179,37 @@ def INPUT_TYPES(cls): "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), "x_offset": ("FLOAT", {"default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.1}), "y_offset": ("FLOAT", {"default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.1}), - "feature_param": (["scale", "detail", "randomness", "seed", "x_offset", "y_offset"],), + "feature_param": (["None", "scale", "detail", "randomness", "seed", "x_offset", "y_offset"],), "formula": (list(cls.formulas.keys()),), "a": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}), "b": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}), } } + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["scale", "detail", "randomness", "seed", "x_offset", "y_offset", "None"] + def generate_schedule(self, formula, feature_value, a, b): t = feature_value return self.formulas[formula](t, a, b) - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - distance_metric: str, scale: float, detail: int, randomness: float, - seed: int, x_offset: float, y_offset: float, feature_param: str, - formula: str, a: float, b: float, **kwargs) -> np.ndarray: - + def apply_effect_internal(self, mask: np.ndarray, distance_metric: str, formula: str, a: float, b: float, feature_value: float, **kwargs) -> np.ndarray: height, width = mask.shape[:2] - # Generate schedule value + # Generate schedule value for modulation schedule_value = self.generate_schedule(formula, feature_value, a, b) - # Adjust the controlled parameter based on the schedule value and strength - if feature_param == "scale": - scale *= (1 + schedule_value * strength) - elif feature_param == "detail": - detail = int(detail * (1 + schedule_value * strength)) - elif feature_param == "randomness": - randomness *= (1 + schedule_value * strength) - elif feature_param == "seed": - seed = int(seed + (schedule_value * strength * 1000000)) - elif feature_param == "x_offset": - x_offset += width * schedule_value * strength - elif feature_param == "y_offset": - y_offset += height * schedule_value * strength - - # Create VoronoiNoise instance + # Get the pre-processed values from kwargs + scale = kwargs['scale'] + detail = max(10, int(kwargs['detail'])) # Ensure detail is at least 10 and an integer + randomness = max(0.0, kwargs['randomness']) # Ensure randomness is non-negative + seed = int(kwargs['seed']) + x_offset = kwargs['x_offset'] + y_offset = kwargs['y_offset'] + + # Create VoronoiNoise instance with parameters voronoi = VoronoiNoise( width=width, height=height, @@ -200,24 +226,11 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, # Generate Voronoi noise voronoi_tensor = voronoi() - - # Convert to numpy array and extract the first channel (they're all the same) voronoi_mask = voronoi_tensor[0, :, :, 0].cpu().numpy() return voronoi_mask - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, distance_metric, - scale, detail, randomness, seed, x_offset, y_offset, - feature_param, formula, a, b, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, distance_metric=distance_metric, - scale=scale, detail=detail, randomness=randomness, - seed=seed, x_offset=x_offset, y_offset=y_offset, - feature_param=feature_param, - formula=formula, a=a, b=b, **kwargs),) - +@apply_tooltips class FlexMaskBinary(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -226,94 +239,23 @@ def INPUT_TYPES(cls): "required": { **super().INPUT_TYPES()["required"], "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), - "method": (["simple", "adaptive", "hysteresis", "edge"],), - "max_smoothing": ("INT", {"default": 21, "min": 0, "max": 51, "step": 2}), - "max_edge_enhancement": ("FLOAT", {"default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}), - "feature_param": (["threshold", "none", "smoothing", "edge_enhancement"],), - "use_epsilon": ("BOOLEAN", {"default": False}), } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, threshold: float, - method: str, max_smoothing: int, max_edge_enhancement: float, - feature_param: str, use_epsilon: bool, **kwargs) -> np.ndarray: - mask = mask.astype(np.float32) - mask = np.clip(mask, 0, 1) - - # Apply smoothing - if feature_param == "smoothing": - smoothing = int(max_smoothing * feature_value * strength) - else: - smoothing = int(max_smoothing * 0.5) - - if smoothing > 0: - mask = cv2.GaussianBlur(mask, (smoothing * 2 + 1, smoothing * 2 + 1), 0) - - # Apply edge enhancement - if feature_param == "edge_enhancement": - edge_enhancement = max_edge_enhancement * feature_value * strength - else: - edge_enhancement = max_edge_enhancement * 0.5 - - if edge_enhancement > 0: - laplacian = cv2.Laplacian(mask, cv2.CV_32F, ksize=3) - mask = np.clip(mask + edge_enhancement * laplacian, 0, 1) + @classmethod + def get_modifiable_params(cls): + return ["threshold", "None"] - # Adjust threshold - if feature_param == "threshold": - adjusted_threshold = threshold + (feature_value - 0.5) * strength * 0.5 - else: - adjusted_threshold = threshold - adjusted_threshold = max(0.0, min(1.0, adjusted_threshold)) - - if method == "simple": - if use_epsilon: - epsilon = 1e-7 # Small value to avoid exact comparisons - binary_mask = ((mask > adjusted_threshold + epsilon) | - (abs(mask - adjusted_threshold) < epsilon)).astype(np.float32) - else: - binary_mask = (mask > adjusted_threshold).astype(np.float32) - elif method == "adaptive": - mask_uint8 = (mask * 255).astype(np.uint8) - binary_mask = cv2.adaptiveThreshold( - mask_uint8, - 1, - cv2.ADAPTIVE_THRESH_GAUSSIAN_C, - cv2.THRESH_BINARY, - 11, # block size - 2 # C constant - ).astype(np.float32) - elif method == "hysteresis": - low_threshold = max(0, adjusted_threshold - 0.1) - high_threshold = min(1, adjusted_threshold + 0.1) - low_mask = mask > low_threshold - high_mask = mask > high_threshold - binary_mask = cv2.connectedComponents((high_mask * 255).astype(np.uint8))[1] - binary_mask = ((binary_mask > 0) & low_mask).astype(np.float32) - elif method == "edge": - mask_uint8 = (mask * 255).astype(np.uint8) - edges = cv2.Canny(mask_uint8, - int(adjusted_threshold * 255 * 0.5), - int(adjusted_threshold * 255 * 1.5)) - binary_mask = edges.astype(np.float32) / 255.0 - - return binary_mask - - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, - subtract_original, grow_with_blur, threshold, method, max_smoothing, - max_edge_enhancement, feature_param, use_epsilon, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, - threshold=threshold, method=method, - max_smoothing=max_smoothing, - max_edge_enhancement=max_edge_enhancement, - feature_param=feature_param, - use_epsilon=use_epsilon, **kwargs),) + def apply_effect_internal(self, mask: np.ndarray, **kwargs) -> np.ndarray: + # Get the pre-processed threshold value from kwargs + threshold = kwargs['threshold'] + return (mask > threshold).astype(np.float32) +#TODO: stateful node: make reset of state consistent, make state update pattern consistent, consistant state initialization in init +@apply_tooltips class FlexMaskWavePropagation(FlexMaskBase): @classmethod def INPUT_TYPES(cls): - cls.feature_threshold_default = 0.25 return { **super().INPUT_TYPES(), "required": { @@ -326,155 +268,172 @@ def INPUT_TYPES(cls): } } + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["wave_speed", "wave_amplitude", "wave_decay", "wave_frequency", "max_wave_field", "None"] + + def __init__(self): super().__init__() self.wave_field = None self.frame_count = 0 - def process_mask_below_threshold(self, mask, feature_value, strength, **kwargs): + def process_below_threshold(self, mask, feature_value, strength, **kwargs): + """Reset wave field when below threshold""" self.wave_field = None self.frame_count = 0 return mask - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - wave_speed: float, wave_amplitude: float, wave_decay: float, - wave_frequency: float, max_wave_field: float, **kwargs) -> np.ndarray: - height, width = mask.shape - + def apply_effect_internal(self, mask: np.ndarray, **kwargs) -> np.ndarray: + # Get pre-processed values from kwargs + max_wave_field = kwargs['max_wave_field'] + wave_speed = kwargs['wave_speed'] + wave_amplitude = kwargs['wave_amplitude'] + wave_decay = kwargs['wave_decay'] + wave_frequency = kwargs['wave_frequency'] + + + # Initialize wave field if needed if self.wave_field is None: - self.wave_field = np.zeros((height, width), dtype=np.float32) - - # Find mask boundary - kernel = np.ones((3,3), np.uint8) - boundary = cv2.dilate(mask.astype(np.uint8), kernel, iterations=1) - mask.astype(np.uint8) - - # Reset wave field where the mask is not present - self.wave_field[mask == 0] *= wave_decay - - # Emit wave from boundary and propagate - self.wave_field += boundary * feature_value * wave_amplitude - self.wave_field = cv2.GaussianBlur(self.wave_field, (0, 0), sigmaX=wave_speed) - - # Apply decay - self.wave_field *= wave_decay - - # Normalize wave field if it exceeds max_wave_field - max_value = np.max(np.abs(self.wave_field)) - if max_value > max_wave_field: - self.wave_field *= (max_wave_field / max_value) - - time_factor = self.frame_count * wave_frequency - wave_pattern = np.sin(self.wave_field + time_factor) * 0.5 + 0.5 - - # Combine with original mask - result_mask = np.clip(mask + wave_pattern * strength, 0, 1) - - # Print debug information - print(f"Frame: {self.frame_count}") - print(f"Wave field min/max: {self.wave_field.min():.4f} / {self.wave_field.max():.4f}") - print(f"Wave pattern min/max: {wave_pattern.min():.4f} / {wave_pattern.max():.4f}") - print(f"Result mask min/max: {result_mask.min():.4f} / {result_mask.max():.4f}") - print("---") - + self.wave_field = np.zeros_like(mask) + self.frame_count = 0 + + # Update wave field + dt = 1.0 / 30.0 # Assuming 30 fps self.frame_count += 1 - - return result_mask.astype(np.float32) - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, **kwargs): - # Reset wave_field and frame_count for each new feature input - self.wave_field = None - self.frame_count = 0 - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, **kwargs),) + # Create wave sources from mask + wave_sources = np.where(mask > 0.5) + for y, x in zip(*wave_sources): + source_amplitude = wave_amplitude * np.sin(2 * np.pi * wave_frequency * self.frame_count * dt) + self.wave_field[y, x] = source_amplitude + + # Propagate waves + new_field = np.zeros_like(self.wave_field) + for y in range(1, self.wave_field.shape[0] - 1): + for x in range(1, self.wave_field.shape[1] - 1): + # Simple wave equation discretization + laplacian = (self.wave_field[y+1, x] + self.wave_field[y-1, x] + + self.wave_field[y, x+1] + self.wave_field[y, x-1] - + 4 * self.wave_field[y, x]) + new_field[y, x] = self.wave_field[y, x] + wave_speed * dt * laplacian + # Apply decay + new_field *= np.exp(-wave_decay * dt) + + # Update wave field + self.wave_field = new_field + + # Normalize and clip + result = np.clip(self.wave_field / max_wave_field + mask, 0, 1) + return result.astype(np.float32) + +#TODO: stateful node: make reset of state consistent, make state update pattern consistent, consistant state initialization in init +#TODO: FIX THIS #IMPORTANT +@apply_tooltips class FlexMaskEmanatingRings(FlexMaskBase): @classmethod def INPUT_TYPES(cls): - cls.feature_threshold_default = 0.25 return { **super().INPUT_TYPES(), "required": { **super().INPUT_TYPES()["required"], - "num_rings": ("INT", {"default": 4, "min": 1, "max": 50, "step": 1}), - "max_ring_width": ("FLOAT", {"default": 0.5, "min": 0.01, "max": 0.9, "step": 0.01}), - "wave_speed": ("FLOAT", {"default": 0.05, "min": 0.01, "max": 0.5, "step": 0.01}), - "feature_param": (["num_rings", "ring_width", "wave_speed", "all"],), + "ring_speed": ("FLOAT", {"default": 0.05, "min": 0.01, "max": 0.2, "step": 0.01}), + "ring_width": ("FLOAT", {"default": 0.2, "min": 0.01, "max": 0.5, "step": 0.01}), + "ring_falloff": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "binary_mode": ("BOOLEAN", {"default": False}), } } + @classmethod + def get_modifiable_params(cls): + return ["ring_speed", "ring_width", "ring_falloff", "None"] + + def __init__(self): super().__init__() self.rings = [] + # Cache the distance transform result + self.last_mask = None + self.cached_distance = None + self.cached_max_distance = None + + def process_below_threshold(self, mask: np.ndarray, **kwargs) -> np.ndarray: + kwargs['feature_value'] = 0 + return self.apply_effect_internal(mask, **kwargs) + + def apply_effect_internal(self, mask: np.ndarray, **kwargs) -> np.ndarray: + # Get processed parameters + ring_speed = kwargs['ring_speed'] + ring_width = kwargs['ring_width'] + ring_falloff = kwargs['ring_falloff'] + feature_value = kwargs.get('feature_value', 0) + binary_mode = kwargs.get('binary_mode', False) + + # Use cached distance transform if mask hasn't changed + if self.last_mask is None or not np.array_equal(mask, self.last_mask): + distance = distance_transform_edt(1 - mask) + max_distance = np.max(distance) + if max_distance > 0: + normalized_distance = distance / max_distance + else: + normalized_distance = distance + # Cache results + self.last_mask = mask.copy() + self.cached_distance = normalized_distance + self.cached_max_distance = max_distance + else: + normalized_distance = self.cached_distance + max_distance = self.cached_max_distance - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - num_rings: int, max_ring_width: float, wave_speed: float, - feature_param: str, **kwargs) -> np.ndarray: - height, width = mask.shape - distance = distance_transform_edt(1 - mask) - max_distance = np.max(distance) - normalized_distance = distance / max_distance - - # Update existing rings - new_rings = [] - for ring in self.rings: - ring['progress'] += ring['wave_speed'] - if ring['progress'] < 1: - new_rings.append(ring) - self.rings = new_rings + if max_distance == 0: + return mask.copy() - # Create new rings if feature_value > 0 + # Only spawn new ring if feature_value is non-zero if feature_value > 0: - if feature_param in ["num_rings", "all"]: - adjusted_num_rings = max(1, int(num_rings * feature_value * strength)) - else: - adjusted_num_rings = num_rings + self.rings.append({ + 'progress': 0.0, + 'speed': ring_speed, + 'width': ring_width, + 'intensity': feature_value, + 'birth_time': kwargs.get('frame_index', 0) + }) + + # Always start with the original mask + result = mask.copy() + new_rings = [] - if feature_param in ["ring_width", "all"]: - adjusted_max_ring_width = max_ring_width * feature_value * strength - else: - adjusted_max_ring_width = max_ring_width + # Process all rings at once using vectorized operations + if binary_mode: + # Binary mode - sharp rings without falloff + for ring in self.rings: + ring['progress'] += ring['speed'] + if ring['progress'] < 1.0: + # Create sharp ring boundaries + ring_outer = normalized_distance < ring['progress'] + ring_inner = normalized_distance < (ring['progress'] - ring['width']) + ring_mask = np.logical_xor(ring_outer, ring_inner) + result = np.logical_or(result, ring_mask) + new_rings.append(ring) + else: + # Smooth mode - with falloff + for ring in self.rings: + ring['progress'] += ring['speed'] + if ring['progress'] < 1.0: + # Vectorized ring calculation + ring_center = normalized_distance - ring['progress'] + ring_mask = np.exp(-np.square(ring_center/ring['width']) * 4) + fade = np.power(1.0 - ring['progress'], ring_falloff * 3) + ring_mask *= fade * ring['intensity'] + result = np.maximum(result, ring_mask) + new_rings.append(ring) - if feature_param in ["wave_speed", "all"]: - adjusted_wave_speed = wave_speed * feature_value * strength - else: - adjusted_wave_speed = wave_speed - - for i in range(adjusted_num_rings): - self.rings.append({ - 'progress': i / adjusted_num_rings, - 'ring_width': adjusted_max_ring_width, - 'wave_speed': adjusted_wave_speed - }) - - # Create emanating rings - rings = np.zeros_like(mask) - for ring in self.rings: - ring_progress = ring['progress'] % 1 - ring_width = ring['ring_width'] * (1 - ring_progress) # Rings get thinner as they move out - ring_outer = normalized_distance < ring_progress - ring_inner = normalized_distance < (ring_progress - ring_width) - rings = np.logical_or(rings, np.logical_xor(ring_outer, ring_inner)) - - # Combine with original mask - result = np.logical_or(mask, rings).astype(np.float32) - - return result - - def process_mask_below_threshold(self, mask: np.ndarray, feature_value: float, strength: float, **kwargs) -> np.ndarray: - # Continue the animation but don't create new rings - return self.process_mask(mask, 0, strength, **kwargs) - - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, num_rings, - max_ring_width, wave_speed, feature_param, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, num_rings=num_rings, - max_ring_width=max_ring_width, wave_speed=wave_speed, - feature_param=feature_param, **kwargs),) + self.rings = new_rings + return (result > 0.5 if binary_mode else result).astype(np.float32) +#TODO: stateful node: make reset of state consistent, make state update pattern consistent, consistant state initialization in init +@apply_tooltips class FlexMaskRandomShapes(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -490,63 +449,52 @@ def INPUT_TYPES(cls): "appearance_method": (["grow", "pop", "fade"],), "easing_function": (["linear","ease_in_out", "bounce","elastic"],), "shape_type": (get_available_shapes(),), - "feature_param": (["num_shapes", "shape_size", "appearance_duration", "disappearance_duration"],), + "feature_param": (["None", "max_num_shapes", "max_shape_size", "appearance_duration", "disappearance_duration"],), } } + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_num_shapes", "max_shape_size", "appearance_duration", "disappearance_duration", "None"] + def __init__(self): super().__init__() self.shapes = [] self.frame_count = 0 - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - max_num_shapes: int, max_shape_size: float, appearance_duration: int, - disappearance_duration: int, appearance_method: str, easing_function: str, - shape_type: str, feature_param: str, **kwargs) -> np.ndarray: + def apply_effect_internal(self, mask: np.ndarray, appearance_method: str, easing_function: str, shape_type: str, **kwargs) -> np.ndarray: height, width = mask.shape result_mask = mask.copy() - # Adjust parameters based on feature_value and feature_param - if feature_param == "num_shapes": - num_shapes = max(1, int(max_num_shapes * feature_value * strength)) - else: - num_shapes = max_num_shapes - - if feature_param == "shape_size": - shape_size = max_shape_size * feature_value * strength - else: - shape_size = max_shape_size - - if feature_param == "appearance_duration": - app_duration = max(1, int(appearance_duration * feature_value * strength)) - else: - app_duration = appearance_duration - - if feature_param == "disappearance_duration": - disapp_duration = max(1, int(disappearance_duration * feature_value * strength)) - else: - disapp_duration = disappearance_duration + # Get pre-processed values from kwargs + num_shapes = max(1, int(kwargs['max_num_shapes'])) + shape_size = kwargs['max_shape_size'] + app_duration = max(1, int(kwargs['appearance_duration'])) + disapp_duration = max(1, int(kwargs['disappearance_duration'])) # Remove completed shapes self.shapes = [shape for shape in self.shapes if shape['frame'] < shape['total_frames']] - # Add new shapes if needed - while len(self.shapes) < num_shapes: - center = (np.random.randint(0, width), np.random.randint(0, height)) - if shape_type == "random": - selected_shape = np.random.choice(get_available_shapes()) - else: - selected_shape = shape_type - new_shape = { - 'center': center, - 'size': int(min(height, width) * shape_size), - 'type': selected_shape, - 'frame': 0, - 'total_frames': app_duration + disapp_duration, - 'app_duration': app_duration, - 'disapp_duration': disapp_duration, - } - self.shapes.append(new_shape) + # Add new shapes if needed (when feature_value > 0 or feature_param is None) + feature_value = kwargs.get('feature_value', 0) + if feature_value > 0 or kwargs.get('feature_param') == "None": + while len(self.shapes) < num_shapes: + center = (np.random.randint(0, width), np.random.randint(0, height)) + if shape_type == "random": + selected_shape = np.random.choice(get_available_shapes()) + else: + selected_shape = shape_type + new_shape = { + 'center': center, + 'size': int(min(height, width) * shape_size), + 'type': selected_shape, + 'frame': 0, + 'total_frames': app_duration + disapp_duration, + 'app_duration': app_duration, + 'disapp_duration': disapp_duration, + } + self.shapes.append(new_shape) # Update and draw shapes for shape in self.shapes: @@ -577,25 +525,16 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, self.frame_count += 1 return result_mask - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, max_num_shapes, - max_shape_size, appearance_duration, disappearance_duration, - appearance_method, easing_function, shape_type, feature_param, **kwargs): - - self.shapes=[] - self.frame_count=0 - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, max_num_shapes=max_num_shapes, - max_shape_size=max_shape_size, - appearance_duration=appearance_duration, - disappearance_duration=disappearance_duration, - appearance_method=appearance_method, - easing_function=easing_function, - shape_type=shape_type, - feature_param=feature_param, **kwargs),) - +@apply_tooltips class FlexMaskDepthChamber(FlexMaskBase): + """ + This class is a special case that handles its own parameter modulation instead of using the base class's modulation system. + This is intentional because: + 1. It uses paired parameters (z_front/z_back) that define a range and must be modulated together + 2. The feature_modes (squeeze, expand, move_forward, move_back) operate on both values in coordinated ways + 3. The relationship between parameters must be maintained (e.g., ensuring proper depth range) + 4. Moving this logic to the base class would add complexity without clear benefits + """ @classmethod def INPUT_TYPES(cls): return { @@ -605,47 +544,60 @@ def INPUT_TYPES(cls): "depth_map": ("IMAGE",), "z_front": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "z_back": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (["none", "z_front", "z_back", "both"],), + # "feature_param": (["none", "z_front", "z_back", "both"],), "feature_mode": (["squeeze", "expand", "move_forward", "move_back"],), } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - depth_map: torch.Tensor, z_front: float, z_back: float, feature_param: str, - feature_mode: str, **kwargs) -> np.ndarray: + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["z_front", "z_back", "both", "None"] + + def apply_effect_internal(self, mask: np.ndarray, depth_map: torch.Tensor, feature_mode: str, z_front: float, z_back: float, **kwargs) -> np.ndarray: frame_index = kwargs.get('frame_index', 0) depth_map_frame = depth_map[frame_index].cpu().numpy() - depth_map_frame = depth_map_frame[:, :, 0] - # Adjust z_front and z_back based on feature_mode and feature_param - if feature_param != "none": - if feature_mode == "squeeze": - if feature_param in ["z_front", "both"]: - z_front = z_front - (z_front - z_back) * strength * feature_value / 2 if z_front > z_back else z_front + (z_back - z_front) * strength * feature_value / 2 - if feature_param in ["z_back", "both"]: - z_back = z_back + (z_front - z_back) * strength * feature_value / 2 if z_back < z_front else z_back - (z_back - z_front) * strength * feature_value / 2 - elif feature_mode == "expand": - if feature_param in ["z_front", "both"]: - z_front = min(1.0, z_front + (z_front - z_back) * strength * feature_value / 2) if z_front > z_back else max(0.0, z_front - (z_back - z_front) * strength * feature_value / 2) - if feature_param in ["z_back", "both"]: - z_back = max(0.0, z_back - (z_front - z_back) * strength * feature_value / 2) if z_back < z_front else min(1.0, z_back + (z_back - z_front) * strength * feature_value / 2) - elif feature_mode == "move_forward": - if feature_param in ["z_front", "both"]: - z_front = min(1.0, z_front + strength * feature_value) - if feature_param in ["z_back", "both"]: - z_back = min(1.0, z_back + strength * feature_value) - elif feature_mode == "move_back": - if feature_param in ["z_front", "both"]: - z_front = max(0.0, z_front - strength * feature_value) - if feature_param in ["z_back", "both"]: - z_back = max(0.0, z_back - strength * feature_value) + #initialize values + z_front_val = z_front + z_back_val = z_back + + + feature_value = kwargs.get('feature_value', 0) + strength = kwargs.get('strength', 1.0) + feature_param = kwargs.get('feature_param', 'None') + # Apply modulation based on feature_mode and feature_param + if feature_mode == "squeeze": + if feature_param in ["z_front", "both"]: + z_front_val = z_front - (z_front - z_back) * strength * feature_value / 2 if z_front > z_back else z_front + (z_back - z_front) * strength * feature_value / 2 + if feature_param in ["z_back", "both"]: + z_back_val = z_back + (z_front - z_back) * strength * feature_value / 2 if z_back < z_front else z_back - (z_back - z_front) * strength * feature_value / 2 + elif feature_mode == "expand": + if feature_param in ["z_front", "both"]: + z_front_val = min(1.0, z_front + (z_front - z_back) * strength * feature_value / 2) if z_front > z_back else max(0.0, z_front - (z_back - z_front) * strength * feature_value / 2) + if feature_param in ["z_back", "both"]: + z_back_val = max(0.0, z_back - (z_front - z_back) * strength * feature_value / 2) if z_back < z_front else min(1.0, z_back + (z_back - z_front) * strength * feature_value / 2) + elif feature_mode == "move_forward": + if feature_param in ["z_front", "both"]: + z_front_val = min(1.0, z_front + strength * feature_value) + if feature_param in ["z_back", "both"]: + z_back_val = min(1.0, z_back + strength * feature_value) + elif feature_mode == "move_back": + if feature_param in ["z_front", "both"]: + z_front_val = max(0.0, z_front - strength * feature_value) + if feature_param in ["z_back", "both"]: + z_back_val = max(0.0, z_back - strength * feature_value) + else: + z_front_val = z_front + z_back_val = z_back # Create the depth mask - if z_back < z_front: - depth_mask = (depth_map_frame >= z_back) & (depth_map_frame <= z_front) + if z_back_val < z_front_val: + depth_mask = (depth_map_frame >= z_back_val) & (depth_map_frame <= z_front_val) + else: - depth_mask = (depth_map_frame >= z_back) | (depth_map_frame <= z_front) + depth_mask = (depth_map_frame >= z_back_val) | (depth_map_frame <= z_front_val) depth_mask_resized = cv2.resize(depth_mask.astype(np.float32), (mask.shape[1], mask.shape[0])) @@ -654,16 +606,17 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, return combined_mask - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, depth_map, z_front, z_back, - feature_param, feature_mode, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, depth_map=depth_map, z_front=z_front, z_back=z_back, - feature_param=feature_param, feature_mode=feature_mode, - **kwargs),) - +@apply_tooltips class FlexMaskDepthChamberRelative(FlexMaskBase): + """ + This class is a special case that handles its own parameter modulation instead of using the base class's modulation system. + This is intentional because: + 1. It uses paired parameters (z1/z2) that define boundaries and must be modulated together + 2. The feature_modes (squeeze, expand) operate on both values in coordinated ways + 3. Both values must be scaled relative to ROI size, adding another layer of complexity + 4. The relationship between parameters must be maintained (e.g., proper ordering of z1/z2) + 5. Moving this logic to the base class would add complexity without clear benefits + """ @classmethod def INPUT_TYPES(cls): return { @@ -673,11 +626,16 @@ def INPUT_TYPES(cls): "depth_map": ("IMAGE",), "z1": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), "z2": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), - "feature_param": (["none", "z1", "z2", "both"],), + "feature_param": (["None", "z1", "z2", "both"],), "feature_mode": (["squeeze", "expand"],), } } + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["z1", "z2", "both", "None"] + def calculate_roi_size(self, mask: torch.Tensor) -> float: # Calculate the bounding box of the mask y_indices, x_indices = torch.where(mask > 0) @@ -690,57 +648,59 @@ def calculate_roi_size(self, mask: torch.Tensor) -> float: def calculate_reference_size(self, masks: List[torch.Tensor]) -> float: # Calculate the mean or median size of the ROI across all frames sizes = [self.calculate_roi_size(mask) for mask in masks] - return torch.median(torch.tensor(sizes)).item() # or torch.mean(torch.tensor(sizes)).item() + return torch.median(torch.tensor(sizes)).item() - def process_mask(self, mask: torch.Tensor, feature_value: float, strength: float, - depth_map: torch.Tensor, z1: float, z2: float, feature_param: str, - feature_mode: str, reference_size: float, **kwargs) -> torch.Tensor: + def apply_effect_internal(self, mask: torch.Tensor, depth_map: torch.Tensor, z1: float, z2: float, **kwargs) -> torch.Tensor: frame_index = kwargs.get('frame_index', 0) depth_map_frame = depth_map[frame_index, :, :, 0] + # Get feature parameters from kwargs + feature_value = kwargs.get('feature_value', 0) + strength = kwargs.get('strength', 1.0) + feature_param = kwargs.get('feature_param', 'None') + feature_mode = kwargs.get('feature_mode', 'squeeze') + # Calculate the ROI size for the current frame roi_size = self.calculate_roi_size(mask) + reference_size = kwargs.get('reference_size', roi_size) # Use current frame as reference if not provided - if feature_param == "z1": - z1 = z1 * (roi_size / reference_size) - elif feature_param == "z2": - z2 = z2 * (roi_size / reference_size) - elif feature_param == "both": - z1 = z1 * (roi_size / reference_size) - z2 = z2 * (roi_size / reference_size) + # If feature_param is None, use direct values without modulation + if feature_param == "None": + z1_val = z1 + z2_val = z2 + else: + # Apply modulation based on feature_param + if feature_param in ["z1", "both"]: + z1_val = self.modulate_param("z1", z1, feature_value, strength, feature_mode) + z1_val = z1_val * (roi_size / reference_size) + else: + z1_val = z1 * (roi_size / reference_size) + + if feature_param in ["z2", "both"]: + z2_val = self.modulate_param("z2", z2, feature_value, strength, feature_mode) + z2_val = z2_val * (roi_size / reference_size) + else: + z2_val = z2 * (roi_size / reference_size) # Ensure z1 is less than z2 - z1, z2 = min(z1, z2), max(z1, z2) + z1_val, z2_val = min(z1_val, z2_val), max(z1_val, z2_val) + # Apply depth masking based on feature_mode if feature_mode == "squeeze": - depth_mask = (depth_map_frame >= z1) & (depth_map_frame <= z2) + depth_mask = (depth_map_frame >= z1_val) & (depth_map_frame <= z2_val) elif feature_mode == "expand": - depth_mask = (depth_map_frame < z1) | (depth_map_frame > z2) - - depth_mask_resized = F.interpolate(depth_mask.unsqueeze(0).unsqueeze(0).float(), size=mask.shape[-2:], mode='nearest').squeeze(0).squeeze(0) + depth_mask = (depth_map_frame < z1_val) | (depth_map_frame > z2_val) + # Resize and combine with input mask + depth_mask_resized = F.interpolate(depth_mask.unsqueeze(0).unsqueeze(0).float(), + size=mask.shape[-2:], + mode='nearest').squeeze(0).squeeze(0) output_mask = mask.float() * depth_mask_resized return output_mask - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, depth_map, z1, z2, - feature_param, feature_mode, **kwargs): - reference_size = self.calculate_reference_size(masks) - - output_masks = [] - for frame_index, mask in enumerate(masks): - output_mask = self.process_mask(mask, feature_value=1.0, strength=1.0, - depth_map=depth_map, z1=z1, z2=z2, - feature_param=feature_param, feature_mode=feature_mode, - reference_size=reference_size, frame_index=frame_index) - output_masks.append(output_mask) - - # Stack the list of tensors into a single tensor - output_masks_tensor = torch.stack(output_masks) - - return (output_masks_tensor,) - +@apply_tooltips +#TODO: delete this or merge with Math, or make unique class FlexMaskInterpolate(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -754,14 +714,19 @@ def INPUT_TYPES(cls): "cubic", "sigmoid", "radial", "distance_transform", "random_noise" ],), + "max_blend": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "invert_mask_b": ("BOOLEAN", {"default": False}), "blend_mode": (["normal", "add", "multiply", "overlay", "soft_light"],), } } - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, - mask_b: torch.Tensor, interpolation_method: str, invert_mask_b: bool, - blend_mode: str, **kwargs) -> np.ndarray: + @classmethod + def get_modifiable_params(cls): + """Return parameters that can be modulated by features""" + return ["max_blend", "None"] + + def apply_effect_internal(self, mask: np.ndarray, mask_b: torch.Tensor, interpolation_method: str, + invert_mask_b: bool, blend_mode: str, **kwargs) -> np.ndarray: frame_index = kwargs.get('frame_index', 0) mask_b_frame = mask_b[frame_index].numpy() @@ -772,39 +737,39 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, if mask.shape != mask_b_frame.shape: mask_b_frame = cv2.resize(mask_b_frame, (mask.shape[1], mask.shape[0]), interpolation=cv2.INTER_LINEAR) - # Compute interpolation alpha based on feature_value and strength - alpha = np.clip(feature_value * strength, 0.0, 1.0) + # Get pre-processed blend value from kwargs + blend = kwargs['max_blend'] # Apply interpolation method to compute weight if interpolation_method == "linear": - weight = alpha + weight = blend elif interpolation_method == "ease_in": - weight = alpha ** 2 + weight = blend ** 2 elif interpolation_method == "ease_out": - weight = 1 - (1 - alpha) ** 2 + weight = 1 - (1 - blend) ** 2 elif interpolation_method == "ease_in_out": - weight = alpha ** 2 / (alpha ** 2 + (1 - alpha) ** 2 + 1e-6) + weight = blend ** 2 / (blend ** 2 + (1 - blend) ** 2 + 1e-6) elif interpolation_method == "cubic": - weight = 3 * alpha ** 2 - 2 * alpha ** 3 + weight = 3 * blend ** 2 - 2 * blend ** 3 elif interpolation_method == "sigmoid": - weight = 1 / (1 + np.exp(-12 * (alpha - 0.5))) + weight = 1 / (1 + np.exp(-12 * (blend - 0.5))) elif interpolation_method == "radial": # Create a radial gradient centered in the mask height, width = mask.shape X, Y = np.meshgrid(np.linspace(-1, 1, width), np.linspace(-1, 1, height)) distance = np.sqrt(X**2 + Y**2) - weight = np.clip(1 - distance / np.sqrt(2), 0, 1) * alpha + weight = np.clip(1 - distance / np.sqrt(2), 0, 1) * blend elif interpolation_method == "distance_transform": # Use distance transform on mask to calculate weights distance = cv2.distanceTransform((mask * 255).astype(np.uint8), cv2.DIST_L2, 5) max_dist = distance.max() if distance.max() != 0 else 1.0 - weight = (1 - distance / max_dist) * alpha + weight = (1 - distance / max_dist) * blend elif interpolation_method == "random_noise": # Use random noise as weight random_noise = np.random.rand(*mask.shape) - weight = random_noise * alpha + weight = random_noise * blend else: - weight = alpha + weight = blend # Apply blending modes if blend_mode == "normal": @@ -814,7 +779,9 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, elif blend_mode == "multiply": interpolated_mask = mask * (mask_b_frame * weight + (1 - weight) * 1) elif blend_mode == "overlay": - overlay = np.where(mask < 0.5, 2 * mask * (mask_b_frame * weight), 1 - 2 * (1 - mask) * (1 - mask_b_frame * weight)) + overlay = np.where(mask < 0.5, + 2 * mask * (mask_b_frame * weight), + 1 - 2 * (1 - mask) * (1 - mask_b_frame * weight)) interpolated_mask = overlay elif blend_mode == "soft_light": soft_light = (1 - (1 - mask) * (1 - mask_b_frame * weight)) @@ -822,15 +789,4 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, else: interpolated_mask = (1 - weight) * mask + weight * mask_b_frame - interpolated_mask = np.clip(interpolated_mask, 0.0, 1.0) - return interpolated_mask.astype(np.float32) - - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, - invert, subtract_original, grow_with_blur, mask_b, - interpolation_method, invert_mask_b, blend_mode, **kwargs): - return (self.apply_mask_operation(masks, feature, feature_pipe, strength, - feature_threshold, invert, subtract_original, - grow_with_blur, mask_b=mask_b, - interpolation_method=interpolation_method, - invert_mask_b=invert_mask_b, - blend_mode=blend_mode, **kwargs),) \ No newline at end of file + return np.clip(interpolated_mask, 0.0, 1.0).astype(np.float32) \ No newline at end of file diff --git a/nodes/masks/flex_masks_normal.py b/nodes/masks/flex_masks_normal.py index 9fb2ada..d35c294 100644 --- a/nodes/masks/flex_masks_normal.py +++ b/nodes/masks/flex_masks_normal.py @@ -1,8 +1,12 @@ import numpy as np import torch import cv2 -from .mask_base import FlexMaskBase +from .flex_mask_base import FlexMaskBase +from ...tooltips import apply_tooltips +#NOTE: this is a work in progress, it sucks +#TODO +@apply_tooltips class FlexMaskNormalBase(FlexMaskBase): @classmethod def INPUT_TYPES(cls): @@ -14,6 +18,8 @@ def INPUT_TYPES(cls): } } + CATEGORY = "RyanOnTheInside/Targets/Normals" + def normalize_vector(self, vector): return vector / np.linalg.norm(vector) @@ -22,10 +28,11 @@ def normal_map_to_array(self, normal_map: torch.Tensor) -> np.ndarray: normal_array = normal_map.cpu().numpy() * 2 - 1 return normal_array - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, normal_map, **kwargs): + def main_function(self, masks, opt_feature=None, strength=1.0, feature_threshold=0.0, invert=False, subtract_original=0.0, grow_with_blur=0.0, normal_map=None, **kwargs): # This method should be overridden by child classes raise NotImplementedError("Subclasses must implement main_function") +@apply_tooltips class FlexMaskNormalLighting(FlexMaskNormalBase): @classmethod def INPUT_TYPES(cls): @@ -48,8 +55,9 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, normal_map: torch.Tensor, light_direction_x: float, light_direction_y: float, light_direction_z: float, shadow_threshold: float, feature_param: str, feature_mode: str, **kwargs) -> np.ndarray: - - normal_array = self.normal_map_to_array(normal_map) + frame_index = kwargs.get('frame_index', 0) + normal_map_frame = normal_map[frame_index] + normal_array = self.normal_map_to_array(normal_map_frame) # Normalize light direction light_direction = self.normalize_vector(np.array([light_direction_x, light_direction_y, light_direction_z])) @@ -71,7 +79,7 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, shadow_threshold = np.clip(shadow_threshold, 0.0, 1.0) # Calculate dot product between normal vectors and light direction - dot_product = np.einsum('bhwc,c->bhw', normal_array, light_direction) + dot_product = np.einsum('hwc,c->hw', normal_array, light_direction) # Create lighting mask lighting_mask = (dot_product > shadow_threshold).astype(np.float32) @@ -79,24 +87,4 @@ def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, # Combine with input mask combined_mask = mask * lighting_mask - return combined_mask - - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, normal_map, light_direction_x, light_direction_y, light_direction_z, shadow_threshold, feature_param, feature_mode, **kwargs): - processed_masks = [] - for i in range(masks.shape[0]): # Iterate over all frames - mask = masks[i].cpu().numpy() - feature_value = feature.get_value_at_frame(i) - - if feature_value >= feature_threshold: - processed_mask = self.process_mask( - mask, feature_value, strength, normal_map[i], - light_direction_x, light_direction_y, light_direction_z, - shadow_threshold, feature_param, feature_mode - ) - else: - processed_mask = mask - - processed_masks.append(processed_mask) - - processed_masks = np.stack(processed_masks) - return self.apply_mask_operation(torch.from_numpy(processed_masks), masks, strength, invert, subtract_original, grow_with_blur) \ No newline at end of file + return combined_mask \ No newline at end of file diff --git a/nodes/masks/mask_base.py b/nodes/masks/mask_base.py index ed36032..6230490 100644 --- a/nodes/masks/mask_base.py +++ b/nodes/masks/mask_base.py @@ -12,19 +12,19 @@ normalize_array ) from abc import ABC, abstractmethod -import pymunk -import math -import random from typing import List, Tuple import pymunk import cv2 -from ..audio.audio_processor_legacy import AudioFeatureExtractor -from ... import RyanOnTheInside +from ...tooltips import apply_tooltips +from ... import ProgressMixin -class MaskBase(RyanOnTheInside, ABC): + +@apply_tooltips +class MaskBase(ProgressMixin, ABC): @classmethod def INPUT_TYPES(cls): + return { "required": { "masks": ("MASK",), @@ -41,10 +41,6 @@ def INPUT_TYPES(cls): def __init__(self): self.pre_processors = [] self.post_processors = [] - self.progress_bar = None - self.tqdm_bar = None - self.current_progress = 0 - self.total_steps = 0 def add_pre_processor(self, func): self.pre_processors.append(func) @@ -64,26 +60,6 @@ def post_process(self, mask): mask = processor(mask) return mask - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - self.tqdm_bar = tqdm(total=total_steps, desc=desc, leave=False) - self.current_progress = 0 - self.total_steps = total_steps - - def update_progress(self, step=1): - self.current_progress += step - if self.progress_bar: - self.progress_bar.update(step) - if self.tqdm_bar: - self.tqdm_bar.update(step) - - def end_progress(self): - if self.tqdm_bar: - self.tqdm_bar.close() - self.progress_bar = None - self.tqdm_bar = None - self.current_progress = 0 - self.total_steps = 0 @abstractmethod def process_mask(self, mask: np.ndarray, strength: float, **kwargs) -> np.ndarray: @@ -92,12 +68,14 @@ def process_mask(self, mask: np.ndarray, strength: float, **kwargs) -> np.ndarra """ pass - def apply_mask_operation(self, processed_masks: torch.Tensor, original_masks: torch.Tensor, strength: float, invert: bool, subtract_original: float, grow_with_blur: float, **kwargs) -> Tuple[torch.Tensor]: + def apply_mask_operation(self, processed_masks: torch.Tensor, original_masks: torch.Tensor, strength: float, invert: bool, subtract_original: float, grow_with_blur: float, progress_callback=None, **kwargs) -> Tuple[torch.Tensor]: processed_masks_np = processed_masks.cpu().numpy() if isinstance(processed_masks, torch.Tensor) else processed_masks original_masks_np = original_masks.cpu().numpy() if isinstance(original_masks, torch.Tensor) else original_masks num_frames = processed_masks_np.shape[0] - self.start_progress(num_frames, desc="Applying mask operation") + # Only start progress if no callback is provided + if progress_callback is None: + self.start_progress(num_frames, desc="Applying mask operation") result = [] for processed_mask, original_mask in zip(processed_masks_np, original_masks_np): @@ -125,9 +103,16 @@ def apply_mask_operation(self, processed_masks: torch.Tensor, original_masks: to processed_mask = np.clip(processed_mask, 0, 1) result.append(processed_mask) - self.update_progress() + + # Use callback if provided, otherwise use internal progress + if progress_callback: + progress_callback() + else: + self.update_progress() - self.end_progress() + # Only end progress if we started it + if progress_callback is None: + self.end_progress() return torch.from_numpy(np.stack(result)).float() @@ -139,6 +124,7 @@ def main_function(self, *args, **kwargs) -> Tuple[torch.Tensor]: """ pass +@apply_tooltips class TemporalMaskBase(MaskBase, ABC): @classmethod def INPUT_TYPES(cls): @@ -154,7 +140,7 @@ def INPUT_TYPES(cls): } } - CATEGORY="RyanOnTheInside/TemporalMasks" + CATEGORY="RyanOnTheInside/Masks/TemporalMasks" def __init__(self): super().__init__() @@ -211,8 +197,8 @@ def main_function(self, masks, strength, invert, subtract_original, grow_with_bl processed_masks = self.apply_temporal_mask_operation(masks, strength, start_frame, end_frame, effect_duration, temporal_easing, palindrome, **kwargs) ret = (self.apply_mask_operation(processed_masks[0], original_masks, strength, invert, subtract_original, grow_with_blur, **kwargs),) return ret - - + +@apply_tooltips class OpticalFlowMaskBase(MaskBase, ABC): @classmethod def INPUT_TYPES(cls): @@ -227,7 +213,7 @@ def INPUT_TYPES(cls): } } - CATEGORY="RyanOnTheInside/OpticalFlowMasks" + CATEGORY="RyanOnTheInside/OpticalFlow" def __init__(self): super().__init__() @@ -275,58 +261,5 @@ def main_function(self, masks, images, strength, flow_method, flow_threshold, ma processed_masks = np.stack(result) return self.apply_mask_operation(processed_masks, masks, strength, **kwargs) -#TODO check if input mask is blank and just skip, then check children -class FlexMaskBase(MaskBase): - feature_threshold_default=0.0 - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - **super().INPUT_TYPES()["required"], - "feature": ("FEATURE",), - "feature_pipe": ("FEATURE_PIPE",), - "feature_threshold": ("FLOAT", {"default": cls.feature_threshold_default, "min": 0.0, "max": 1.0, "step": 0.01}), - } - } - - CATEGORY = "RyanOnTheInside/FlexMasks" - RETURN_TYPES = ("MASK",) - FUNCTION = "main_function" - @abstractmethod - def process_mask(self, mask: np.ndarray, feature_value: float, strength: float, **kwargs) -> np.ndarray: - pass - - def apply_mask_operation(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, **kwargs): - num_frames = feature_pipe.frame_count - original_masks = masks.clone() - - self.start_progress(num_frames, desc="Applying flex mask operation") - - result = [] - for i in range(num_frames): - kwargs['frame_index'] = i - mask = masks[i].numpy() - feature_value = feature.get_value_at_frame(i) - - if feature_value >= feature_threshold: - processed_mask = self.process_mask(mask, feature_value, strength, **kwargs) - else: - if hasattr(self, 'process_mask_below_threshold'): - processed_mask = self.process_mask_below_threshold(mask, feature_value, strength, **kwargs) - else: - processed_mask = mask - - - result.append(processed_mask) - self.update_progress() - - self.end_progress() - - processed_masks = torch.from_numpy(np.stack(result)).float() - return super().apply_mask_operation(processed_masks, original_masks, strength, invert, subtract_original, grow_with_blur, **kwargs) - - @abstractmethod - def main_function(self, masks, feature, feature_pipe, strength, feature_threshold, invert, subtract_original, grow_with_blur, **kwargs): - pass diff --git a/nodes/masks/mask_base_particle_system.py b/nodes/masks/mask_base_particle_system.py index 2bf921a..8c3e5c4 100644 --- a/nodes/masks/mask_base_particle_system.py +++ b/nodes/masks/mask_base_particle_system.py @@ -14,9 +14,11 @@ import pymunk import cv2 from .mask_base import MaskBase +from ...tooltips import apply_tooltips #TODO clean up the hamfisted resetting of all attributes +@apply_tooltips class ParticleSystemMaskBase(MaskBase, ABC): @classmethod def INPUT_TYPES(cls): @@ -45,7 +47,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("MASK", "IMAGE") FUNCTION = "main_function" - CATEGORY="RyanOnTheInside/ParticleSystemMasks" + CATEGORY="RyanOnTheInside/ParticleSystems" def __init__(self): super().__init__() diff --git a/nodes/masks/mask_utility_nodes.py b/nodes/masks/mask_utility_nodes.py index db05d55..d1d923b 100644 --- a/nodes/masks/mask_utility_nodes.py +++ b/nodes/masks/mask_utility_nodes.py @@ -7,9 +7,14 @@ from tqdm import tqdm import comfy.utils from scipy import interpolate +from ...tooltips import apply_tooltips +from ... import ProgressMixin +_category = "RyanOnTheInside/Masks" -class MovingShape: + +@apply_tooltips +class MovingShape(ProgressMixin): @classmethod def INPUT_TYPES(s): return { @@ -34,7 +39,7 @@ def INPUT_TYPES(s): RETURN_TYPES = ("MASK",) FUNCTION = "generate" - CATEGORY = "RyanOnTheInside/masks/" + CATEGORY = _category def generate(self, frame_width, frame_height, num_frames, rgb, shape, shape_width_percent, shape_height_percent, shape_start_position_x, shape_start_position_y, shape_end_position_x, shape_end_position_y, movement_type, grow, palindrome, delay): rgb = self.parse_rgb_string(rgb) @@ -96,9 +101,9 @@ def elastic(x): progress = np.concatenate([np.zeros(delay), progress]) images = [] - pbar = comfy.utils.ProgressBar(num_frames) + self.start_progress(num_frames, desc="Generating moving shape frames") - for i, prog in tqdm(enumerate(progress), desc='Generating frames', total=num_frames): + for i, prog in enumerate(progress): mask = np.zeros((frame_height, frame_width, 1), dtype=np.float32) # Calculate shape position @@ -129,8 +134,9 @@ def elastic(x): cv2.fillPoly(mask, [points], 1) images.append(torch.from_numpy(mask)) - pbar.update(1) + self.update_progress() + self.end_progress() images_tensor = torch.stack(images, dim=0).squeeze(-1) return (images_tensor,) @@ -146,7 +152,8 @@ def parse_rgb_string(self, rgb_string): except ValueError: raise ValueError("Invalid RGB!") -class TextMaskNode: +@apply_tooltips +class TextMaskNode(ProgressMixin): @classmethod def INPUT_TYPES(s): font_list = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist]) @@ -170,8 +177,7 @@ def INPUT_TYPES(s): RETURN_TYPES = ("MASK", "IMAGE") FUNCTION = "create_text_mask" - - CATEGORY = "RyanOnTheInside/masks/" + CATEGORY = _category def parse_rgb(self, rgb_string): try: @@ -196,7 +202,6 @@ def create_text_mask(self, width, height, text, font, font_size, font_color, bac font_obj = ImageFont.load_default() max_width = int(width * max_width_ratio) - wrapped_text = textwrap.fill(text, width=max_width // font_size) temp_img = Image.new('RGB', (width, height)) @@ -209,7 +214,9 @@ def create_text_mask(self, width, height, text, font, font_size, font_color, bac x = int((width - text_width) * x_position) y = int((height - text_height) * y_position) - for _ in range(batch_size): + self.start_progress(batch_size, desc="Generating text masks") + + for i in range(batch_size): image = Image.new('RGB', (width, height), color=background_color) draw = ImageDraw.Draw(image) @@ -217,24 +224,25 @@ def create_text_mask(self, width, height, text, font, font_size, font_color, bac txt_draw = ImageDraw.Draw(txt_img) txt_draw.multiline_text((x, y), wrapped_text, font=font_obj, fill=font_color) - rotated_txt_img = txt_img.rotate(rotation, expand=1, fillcolor=(0, 0, 0, 0)) - image.paste(rotated_txt_img, (0, 0), rotated_txt_img) gray_image = image.convert('L') - mask = np.array(gray_image).astype(np.float32) / 255.0 masks.append(mask) image_np = np.array(image).astype(np.float32) / 255.0 images.append(image_np) + self.update_progress() + + self.end_progress() mask_tensor = torch.from_numpy(np.stack(masks)) image_tensor = torch.from_numpy(np.stack(images)) return (mask_tensor, image_tensor) +@apply_tooltips class _mfc: @classmethod def INPUT_TYPES(s): @@ -250,7 +258,7 @@ def INPUT_TYPES(s): RETURN_TYPES = ("MASK", "IMAGE") FUNCTION = "execute" - CATEGORY = "RyanOnTheInside/masks/" + CATEGORY = "RyanOnTheInside/Masks" def execute(self, image, red, green, blue, threshold): temp = (torch.clamp(image, 0, 1.0) * 255.0).round().to(torch.int) @@ -268,7 +276,7 @@ def execute(self, image, red, green, blue, threshold): return (mask, mask_image) - +@apply_tooltips class MaskCompositePlus: @classmethod def INPUT_TYPES(s): @@ -282,7 +290,7 @@ def INPUT_TYPES(s): RETURN_TYPES = ("MASK",) FUNCTION = "composite_masks" - CATEGORY = "RyanOnTheInside/masks/" + CATEGORY = _category def composite_masks(self, mask1, mask2, operation): # Ensure masks have the same shape @@ -308,4 +316,261 @@ def composite_masks(self, mask1, mask2, operation): else: raise ValueError(f"Unknown operation: {operation}") - return (result,) \ No newline at end of file + return (result,) + +@apply_tooltips +class AdvancedLuminanceMask(ProgressMixin): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "luminance_threshold": ("FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}), + "glow_radius": ("INT", {"default": 5, "min": 0, "max": 50, "step": 1}), + "edge_preservation": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "background_samples": ("INT", {"default": 10, "min": 1, "max": 100, "step": 1}), + "denoise_strength": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("MASK", "IMAGE") + FUNCTION = "create_mask" + CATEGORY = _category + + def gaussian_kernel(self, kernel_size, sigma, device): + """Create a 2D Gaussian kernel on the specified device""" + x = torch.linspace(-kernel_size // 2, kernel_size // 2, kernel_size, device=device) + kernel_1d = torch.exp(-0.5 * (x / sigma).pow(2)) + kernel_2d = kernel_1d[:, None] * kernel_1d[None, :] + return kernel_2d / kernel_2d.sum() + + def gaussian_blur(self, x, kernel_size, sigma): + """Apply Gaussian blur using separable convolution""" + device = x.device + padding = kernel_size // 2 + kernel = self.gaussian_kernel(kernel_size, sigma, device) + kernel = kernel.view(1, 1, kernel_size, kernel_size) + + if len(x.shape) == 3: + x = x.unsqueeze(0) + + # Expand kernel for each input channel + if x.shape[1] > 1: + kernel = kernel.repeat(x.shape[1], 1, 1, 1) + + # Use groups parameter for efficient channel-wise convolution + return torch.nn.functional.conv2d( + torch.nn.functional.pad(x, (padding, padding, padding, padding), mode='reflect'), + kernel, + groups=x.shape[1] + ) + + def bilateral_filter_torch(self, x, d, sigma_color, sigma_space): + """GPU-optimized bilateral filter implementation""" + device = x.device + b, c, h, w = x.shape + + # Create coordinate grids + y_coords = torch.arange(-(d//2), d//2 + 1, device=device) + x_coords = torch.arange(-(d//2), d//2 + 1, device=device) + + # Create meshgrid + xx, yy = torch.meshgrid(x_coords, y_coords, indexing='ij') + + # Compute spatial weights + spatial_weight = torch.exp(-(xx.pow(2) + yy.pow(2)) / (2 * sigma_space ** 2)) + spatial_weight = spatial_weight.view(1, 1, d, d) + + pad_size = d // 2 + x_pad = torch.nn.functional.pad(x, (pad_size,)*4, mode='reflect') + + result = torch.zeros_like(x) + + # Process in chunks for memory efficiency + chunk_size = min(32, h) + num_chunks = (h + chunk_size - 1) // chunk_size + total_steps = num_chunks * b + + self.start_progress(total_steps, desc="Applying bilateral filter") + + for b_idx in range(b): + for i in range(0, h, chunk_size): + end_i = min(i + chunk_size, h) + chunk_height = end_i - i + + # Extract patches + patches = x_pad[b_idx:b_idx+1, :, i:end_i+d-1, :].unfold(2, d, 1).unfold(3, d, 1) + patches = patches.contiguous() + + # Get center pixels for the chunk + center = x[b_idx:b_idx+1, :, i:end_i, :].unsqueeze(-1).unsqueeze(-1) + + # Compute color weights for the chunk + diff = (patches - center).pow(2) + color_weight = torch.exp(-diff / (2 * sigma_color ** 2)) + + # Apply both weights + weights = spatial_weight * color_weight + norm_factor = weights.sum(dim=(-2, -1), keepdim=True).clamp(min=1e-8) + weights = weights / norm_factor + + # Apply weighted average + result[b_idx:b_idx+1, :, i:end_i, :] = (patches * weights).sum(dim=(-2, -1)) + + self.update_progress() + + self.end_progress() + return result + + def create_mask(self, image, luminance_threshold, glow_radius, edge_preservation, background_samples, denoise_strength): + device = image.device + batch_size = image.shape[0] if len(image.shape) == 4 else 1 + + if len(image.shape) == 3: + image = image.unsqueeze(0) + + # Ensure image is in BCHW format + if image.shape[-1] == 3: # If image is in BHWC format + image = image.permute(0, 3, 1, 2) + + # RGB to Grayscale conversion using torch + rgb_weights = torch.tensor([0.299, 0.587, 0.114], device=device) + gray = torch.einsum('bchw,c->bhw', image, rgb_weights).unsqueeze(1) + + # Background estimation using corner sampling + h, w = gray.shape[2:] + corner_size = max(h, w) // background_samples + corners = [ + gray[:, :, :corner_size, :corner_size], + gray[:, :, :corner_size, -corner_size:], + gray[:, :, -corner_size:, :corner_size], + gray[:, :, -corner_size:, -corner_size:] + ] + bg_value = torch.stack([c.median() for c in corners]).median().view(1, 1, 1, 1) + + # Create initial mask based on luminance difference + diff_from_bg = torch.abs(gray - bg_value) + # Instead of binary threshold, use a smooth ramp + initial_mask = torch.clamp(diff_from_bg / luminance_threshold, 0, 1) + + # Apply denoising if needed + if denoise_strength > 0: + d = max(3, int(denoise_strength * 10)) + sigma_color = denoise_strength * 75 + sigma_space = denoise_strength * 75 + initial_mask = self.bilateral_filter_torch(initial_mask, d, sigma_color, sigma_space) + + # Apply glow effect + if glow_radius > 0: + kernel_size = 2 * glow_radius + 1 + sigma = glow_radius / 3 + blurred = self.gaussian_blur(initial_mask, kernel_size, sigma) + mask = torch.maximum(initial_mask, blurred * edge_preservation) + else: + mask = initial_mask + + # Calculate luminance-based alpha + luminance = gray.squeeze(1) + alpha = torch.clamp(luminance * (1.0 / luminance_threshold), 0, 1) + + # Combine mask with alpha + final_mask = mask.squeeze(1) * alpha + + # Create visualization tensor + vis_tensor = final_mask.unsqueeze(-1).repeat(1, 1, 1, 3) + + return (final_mask, vis_tensor) + +@apply_tooltips +class TranslucentComposite(ProgressMixin): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "background": ("IMAGE",), + "foreground": ("IMAGE",), + "mask": ("MASK",), + "blend_mode": (["normal", "screen", "multiply", "overlay"],), + "opacity": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "preserve_transparency": ("BOOLEAN", {"default": True}), + "luminance_boost": ("FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.01}), + "background_influence": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "composite" + CATEGORY = _category + + def composite(self, background, foreground, mask, blend_mode, opacity, preserve_transparency, luminance_boost, background_influence): + device = background.device + + # Convert to numpy for processing + bg = background.cpu().numpy() + fg = foreground.cpu().numpy() + mask = mask.cpu().numpy() + + # Handle batching + if len(bg.shape) == 3: + bg = bg[None, ...] + if len(fg.shape) == 3: + fg = fg[None, ...] + if len(mask.shape) == 2: + mask = mask[None, ...] + + batch_size = bg.shape[0] + result = [] + + self.start_progress(batch_size, desc="Compositing frames") + + for b in range(batch_size): + # Convert to float32 for processing + bg_frame = (bg[b] * 255).astype(np.float32) + fg_frame = (fg[b] * 255).astype(np.float32) + mask_frame = mask[b] + + # Convert to LAB color space for luminance processing + bg_lab = cv2.cvtColor(bg_frame.astype(np.uint8), cv2.COLOR_RGB2LAB).astype(np.float32) + fg_lab = cv2.cvtColor(fg_frame.astype(np.uint8), cv2.COLOR_RGB2LAB).astype(np.float32) + + # Apply luminance boost to foreground + if luminance_boost != 0: + fg_lab[:, :, 0] = np.clip(fg_lab[:, :, 0] + (luminance_boost * 100), 0, 255) + fg_frame = cv2.cvtColor(fg_lab.astype(np.uint8), cv2.COLOR_LAB2RGB).astype(np.float32) + + # Calculate transparency based on luminance if preserve_transparency is True + if preserve_transparency: + fg_luminance = cv2.cvtColor(fg_frame.astype(np.uint8), cv2.COLOR_RGB2GRAY).astype(np.float32) / 255.0 + mask_frame = mask_frame * fg_luminance + + # Apply blend mode + if blend_mode == "screen": + blended = 255 - ((255 - bg_frame) * (255 - fg_frame) / 255) + elif blend_mode == "multiply": + blended = (bg_frame * fg_frame) / 255 + elif blend_mode == "overlay": + blended = np.where(bg_frame > 127.5, + 255 - ((255 - 2*(bg_frame-127.5)) * (255-fg_frame)) / 255, + (2*bg_frame*fg_frame) / 255) + else: # normal + blended = fg_frame + + # Apply background influence + if background_influence > 0: + bg_influence_mask = cv2.GaussianBlur(mask_frame[..., None], (5, 5), 0) * background_influence + blended = blended * (1 - bg_influence_mask) + bg_frame * bg_influence_mask + + # Final compositing with mask and opacity + mask_3ch = np.stack([mask_frame] * 3, axis=-1) * opacity + composite = bg_frame * (1 - mask_3ch) + blended * mask_3ch + + # Normalize and append to results + result.append(np.clip(composite, 0, 255) / 255.0) + self.update_progress() + + self.end_progress() + + # Convert back to torch tensor + result_tensor = torch.from_numpy(np.stack(result)).float().to(device) + + return (result_tensor,) \ No newline at end of file diff --git a/nodes/masks/optical_flow_masks.py b/nodes/masks/optical_flow_masks.py index 8270a35..5e36645 100644 --- a/nodes/masks/optical_flow_masks.py +++ b/nodes/masks/optical_flow_masks.py @@ -3,10 +3,12 @@ import torch from .mask_base import OpticalFlowMaskBase from .mask_utils import calculate_optical_flow, apply_blur, normalize_array +from ...tooltips import apply_tooltips #TODO make all this better. +@apply_tooltips class OpticalFlowMaskModulation(OpticalFlowMaskBase): @classmethod def INPUT_TYPES(cls): @@ -71,6 +73,7 @@ def apply_optical_flow_modulation(self, masks, images, strength, flow_method, fl self.trail_buffer = [] # Reset trail buffer return (super().main_function(masks, images, strength, flow_method, flow_threshold, magnitude_threshold, modulation_strength=modulation_strength, blur_radius=blur_radius, trail_length=trail_length, decay_factor=decay_factor, decay_style=decay_style, max_thickness=max_thickness, **kwargs),) +@apply_tooltips class OpticalFlowDirectionMask(OpticalFlowMaskBase): @classmethod def INPUT_TYPES(cls): @@ -136,6 +139,7 @@ def apply_flow_mask(self, mask: np.ndarray, flow_magnitude: np.ndarray, flow: np def apply_direction_mask(self, masks, images, strength, flow_method, flow_threshold, magnitude_threshold, direction, angle_threshold, blur_radius, invert, **kwargs): return super().main_function(masks, images, strength, flow_method, flow_threshold, magnitude_threshold, direction=direction, angle_threshold=angle_threshold, blur_radius=blur_radius, invert=invert, **kwargs) +@apply_tooltips class OpticalFlowParticleSystem(OpticalFlowMaskBase): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/masks/particle_system_masks.py b/nodes/masks/particle_system_masks.py index 7dda4b5..e9bcd3a 100644 --- a/nodes/masks/particle_system_masks.py +++ b/nodes/masks/particle_system_masks.py @@ -3,7 +3,9 @@ from typing import List, Tuple import cv2 from ... import RyanOnTheInside +from ...tooltips import apply_tooltips +@apply_tooltips class ParticleEmissionMask(ParticleSystemMaskBase): @classmethod def INPUT_TYPES(cls): @@ -58,8 +60,9 @@ def main_function(self, masks, strength, invert, subtract_original, grow_with_bl static_bodies=static_bodies, **kwargs) class ParticleSystemModulatorBase(RyanOnTheInside): - CATEGORY="RyanOnTheInside/ParticleSystemMasks" + CATEGORY= f"{ParticleSystemMaskBase.CATEGORY}/Modulators" +@apply_tooltips class EmitterModulationBase(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -80,6 +83,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("EMITTER_MODULATION",) FUNCTION = "create_modulation" + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/Emitters" def create_modulation(self, start_frame, end_frame, effect_duration, temporal_easing, palindrome, random, previous_modulation=None, feature=None): modulation = { @@ -106,6 +110,7 @@ def create_modulation(self, start_frame, end_frame, effect_duration, temporal_ea modulation_chain.append(modulation) return (modulation_chain,) +@apply_tooltips class EmitterEmissionRateModulation(EmitterModulationBase): @classmethod def INPUT_TYPES(cls): @@ -125,6 +130,7 @@ def create_emission_rate_modulation(self, target_emission_rate, **kwargs): return (modulation_chain,) +@apply_tooltips class Vortex(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -166,6 +172,7 @@ def create_vortex(self, x, y, strength, radius, inward_factor, movement_speed, c return (vortex_list,) +@apply_tooltips class GravityWell(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -205,6 +212,7 @@ def create_gravity_well(self, x, y, strength, radius, type, color, draw, previou return (well_list,) +@apply_tooltips class ParticleEmitter(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -274,6 +282,7 @@ def create_emitter(self, emitter_x, emitter_y, particle_direction, particle_spre return (emitter_list,) +@apply_tooltips class SpringJointSetting(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -297,6 +306,7 @@ def create_setting(self, stiffness, damping, rest_length, max_distance): "max_distance": max_distance, },) +@apply_tooltips class EmitterMovement(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -317,7 +327,7 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("EMITTER_MOVEMENT",) FUNCTION = "create_movement" - + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/EmitterModulators" def create_movement(self, emitter_x_frequency, emitter_y_frequency, direction_frequency, emitter_x_amplitude, emitter_y_amplitude, direction_amplitude, feature_param, feature=None): @@ -333,6 +343,7 @@ def create_movement(self, emitter_x_frequency, emitter_y_frequency, direction_fr } return (movement,) +@apply_tooltips class StaticBody(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -378,6 +389,7 @@ def create_static_body(self, shape_type, x1, y1, x2, y2, elasticity, friction, d return (body_list,) +@apply_tooltips class ParticleModulationBase(ParticleSystemModulatorBase): @classmethod def INPUT_TYPES(cls): @@ -396,6 +408,8 @@ def INPUT_TYPES(cls): } } + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/ParticleModulators" + def create_modulation(self, start_frame, end_frame, effect_duration, temporal_easing, palindrome, random, previous_modulation=None, feature=None): modulation = { "start_frame": start_frame, @@ -421,6 +435,7 @@ def create_modulation(self, start_frame, end_frame, effect_duration, temporal_ea modulation_chain.append(modulation) return (modulation_chain,) +@apply_tooltips class ParticleSizeModulation(ParticleModulationBase): @classmethod def INPUT_TYPES(cls): @@ -434,12 +449,15 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PARTICLE_MODULATION",) FUNCTION = "create_size_modulation" - + + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/ParticleModulators" + def create_size_modulation(self, target_size, **kwargs): modulation_chain = super().create_modulation(**kwargs)[0] modulation_chain[-1]["target_size"] = target_size return (modulation_chain,) +@apply_tooltips class ParticleSpeedModulation(ParticleModulationBase): @classmethod def INPUT_TYPES(cls): @@ -453,12 +471,14 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PARTICLE_MODULATION",) FUNCTION = "create_speed_modulation" + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/ParticleModulators" def create_speed_modulation(self, target_speed, **kwargs): modulation_chain = super().create_modulation(**kwargs)[0] modulation_chain[-1]["target_speed"] = target_speed return (modulation_chain,) +@apply_tooltips class ParticleColorModulation(ParticleModulationBase): @classmethod def INPUT_TYPES(cls): @@ -472,6 +492,8 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("PARTICLE_MODULATION",) FUNCTION = "create_color_modulation" + CATEGORY = f"{ParticleSystemModulatorBase.CATEGORY}/ParticleModulators" + def create_color_modulation(self, target_color, **kwargs): modulation_chain = super().create_modulation(**kwargs)[0] diff --git a/nodes/masks/temporal_masks.py b/nodes/masks/temporal_masks.py index 7ab0544..09b156e 100644 --- a/nodes/masks/temporal_masks.py +++ b/nodes/masks/temporal_masks.py @@ -4,8 +4,10 @@ import torch import cv2 from scipy.ndimage import distance_transform_edt +from ...tooltips import apply_tooltips +@apply_tooltips class MaskMorph(TemporalMaskBase): @classmethod def INPUT_TYPES(cls): @@ -33,6 +35,7 @@ def process_single_mask(self, mask: np.ndarray, strength: float, morph_type: str def apply_mask_morph(self, masks, strength, morph_type, max_kernel_size, max_iterations, **kwargs): return super().main_function(masks, strength, morph_type=morph_type, max_kernel_size=max_kernel_size, max_iterations=max_iterations, **kwargs) +@apply_tooltips class MaskTransform(TemporalMaskBase): @classmethod def INPUT_TYPES(cls): @@ -57,6 +60,7 @@ def process_single_mask(self, mask: np.ndarray, strength: float, transform_type: def apply_mask_transform(self, masks, strength, transform_type, x_value, y_value, **kwargs): return super().main_function(masks, strength, transform_type=transform_type, x_value=x_value, y_value=y_value, **kwargs) +@apply_tooltips class MaskMath(TemporalMaskBase): @classmethod def INPUT_TYPES(cls): @@ -82,6 +86,7 @@ def apply_mask_math(self, masks, mask_b, strength, combination_method, **kwargs) return super().main_function(masks, strength, mask_b=mask_b_np, combination_method=combination_method, **kwargs) #TODO CONFIRM THAT NOTHING HAPPENS WITH EMPTY MASK +@apply_tooltips class MaskRings(TemporalMaskBase): @classmethod def INPUT_TYPES(cls): @@ -122,6 +127,7 @@ def process_single_mask(self, mask: np.ndarray, strength: float, num_rings: int, def apply_mask_rings(self, masks, strength, num_rings, max_ring_width, **kwargs): return super().main_function(masks, strength, num_rings=num_rings, max_ring_width=max_ring_width, **kwargs) +@apply_tooltips class MaskWarp(TemporalMaskBase): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/misc/misc_nodes.py b/nodes/misc/misc_nodes.py index 7a74179..e69de29 100644 --- a/nodes/misc/misc_nodes.py +++ b/nodes/misc/misc_nodes.py @@ -1,41 +0,0 @@ -import json -class WhisperToPromptTravel: - """Converts Whisper alignment data to prompt travel format""" - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "segments_alignment": ("STRING", {"multiline": True}), # JSON string of segment alignments - "fps": ("FLOAT", {"default": 24.0, "min": 0.1, "max": 120.0}), - } - } - - RETURN_TYPES = ("STRING",) - FUNCTION = "convert" - CATEGORY = "misc" - - def convert(self, segments_alignment, fps): - import json - - # Parse the alignment data - try: - segments = json.loads(segments_alignment) - except json.JSONDecodeError: - raise ValueError("Invalid segments_alignment JSON format") - - # Create frame-to-prompt mapping - prompt_travel = {} - - for segment in segments: - # Convert time to frame number - frame = int(segment["start"] * fps) - prompt_travel[str(frame)] = segment["value"] - - # Convert to string format - result = "{\n" - for frame, prompt in sorted(prompt_travel.items(), key=lambda x: int(x[0])): - result += f'"{frame}":"{prompt}",\n' - result = result.rstrip(",\n") + "\n}" - - return (result,) diff --git a/nodes/models/flex_model_base.py b/nodes/models/flex_model_base.py new file mode 100644 index 0000000..96a286c --- /dev/null +++ b/nodes/models/flex_model_base.py @@ -0,0 +1,332 @@ +from abc import ABC, abstractmethod +from typing import Any, Dict, List, Tuple + +from ...tooltips import apply_tooltips +from ..flex.flex_base import FlexBase +from comfy.ldm.modules.attention import optimized_attention, BasicTransformerBlock, default +import torch +import math + +#NOTE: TOTALLY EXPERIMENTAL + +class FlexFeatureAttentionControl: + @classmethod + + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "feature": ("FEATURE",), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.1}), + "feature_mode": (["relative", "absolute"],), + "attention_type": (["cross", "self", "both"],), + "scaling_mode": (["V only", "K+V", "K+V w/ C penalty", "K+mean(V) w/ C penalty"],), + "layer_selection": (["all", "first_half", "second_half", "custom"],), + "custom_layers": ("STRING", {"default": "1,2,3", "multiline": False}), + "auto_projection": ("BOOLEAN", {"default": True}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + CATEGORY = "RyanOnTheInside/FlexFeatures/ModelModulation" + + def patch(self, model, feature, strength, feature_mode, attention_type, scaling_mode, layer_selection, custom_layers, auto_projection): + print("\n=== FlexFeatureAttentionControl Setup ===") + print(f"Attention type: {attention_type}") + print(f"Scaling mode: {scaling_mode}") + print(f"Feature mode: {feature_mode}") + print(f"Strength: {strength}") + print(f"Layer selection: {layer_selection}") + print(f"Feature frame count: {feature.frame_count}") + print(f"Auto projection: {auto_projection}") + print(f"Feature values: {[feature.get_value_at_frame(i) for i in range(feature.frame_count)]}") + + m = model.clone() + + # Create projection layers for dimension mismatch + projections = {} + + def get_target_layers(model): + """Helper to get target attention layers based on selection""" + layers = [] + + def register_attn_block(name, module): + if isinstance(module, BasicTransformerBlock): + if attention_type == "cross" and module.attn2 is not None: + layers.append((name, module.attn2)) + elif attention_type == "self" and not module.disable_self_attn: + layers.append((name, module.attn1)) + elif attention_type == "both": + if not module.disable_self_attn: + layers.append((name + ".attn1", module.attn1)) + if module.attn2 is not None: + layers.append((name + ".attn2", module.attn2)) + + # Traverse model hierarchy + for name, module in model.model.diffusion_model.named_modules(): + register_attn_block(name, module) + + print(f"\nFound {len(layers)} matching attention layers") + for layer_name, _ in layers: + print(f"- {layer_name}") + + total_layers = len(layers) + if layer_selection == "first_half": + selected = layers[:total_layers//2] + elif layer_selection == "second_half": + selected = layers[total_layers//2:] + elif layer_selection == "custom": + try: + indices = [int(i.strip()) for i in custom_layers.split(",")] + selected = [layers[i] for i in indices if 0 <= i < total_layers] + except: + print("Invalid custom layer indices, using all layers") + selected = layers + else: + selected = layers + + print(f"\nSelected {len(selected)} layers for patching") + for layer_name, _ in selected: + print(f"* {layer_name}") + + return selected + + def create_projection_layer(in_dim, out_dim, layer_name): + """Create a projection layer for dimension mismatch""" + if (in_dim, out_dim, layer_name) not in projections: + # Get device and dtype from model parameters + device = next(model.model.parameters()).device + dtype = next(model.model.parameters()).dtype + + projections[(in_dim, out_dim, layer_name)] = torch.nn.Linear(in_dim, out_dim) + projections[(in_dim, out_dim, layer_name)].to(device=device, dtype=dtype) + print(f"Created projection layer for {layer_name}: {in_dim} -> {out_dim}") + return projections[(in_dim, out_dim, layer_name)] + + def flex_attention(q, k, v, extra_options): + """ + Apply flexible attention scaling based on the current mode and settings + """ + # Store original tensors for comparison + k_orig = k.clone() + v_orig = v.clone() + + print("\n=== FlexFeatureAttentionControl Debug ===") + print(f"Input shapes - Q: {q.shape}, K: {k.shape}, V: {v.shape}") + + # Handle dimension mismatch if auto_projection is enabled + if auto_projection: + expected_dim = q.shape[-1] + if k.shape[-1] != expected_dim: + print(f"K dimension mismatch: {k.shape[-1]} vs {expected_dim}") + proj_k = create_projection_layer(k.shape[-1], expected_dim, f"k_proj_{k.shape[-1]}_{expected_dim}") + k = proj_k(k) + print(f"K shape after projection: {k.shape}") + + if v.shape[-1] != expected_dim: + print(f"V dimension mismatch: {v.shape[-1]} vs {expected_dim}") + proj_v = create_projection_layer(v.shape[-1], expected_dim, f"v_proj_{v.shape[-1]}_{expected_dim}") + v = proj_v(v) + print(f"V shape after projection: {v.shape}") + + # Get current step from sigma if available + sigmas = extra_options.get("sigmas", None) + if sigmas is not None: + sigma = sigmas.detach().cpu()[0].item() + total_steps = len(sigmas) + current_step = total_steps - len([s for s in sigmas if s >= sigma]) + print(f"Step {current_step}/{total_steps} (sigma: {sigma:.4f})") + + # Map step to feature frame with interpolation + frame_float = (current_step / total_steps) * (feature.frame_count - 1) + else: + # If no sigmas available, use middle frame + print("No step information available, using middle frame") + frame_float = (feature.frame_count - 1) / 2 + + frame_low = int(frame_float) + frame_high = min(frame_low + 1, feature.frame_count - 1) + alpha = frame_float - frame_low + + # Interpolate feature values + value_low = feature.get_value_at_frame(frame_low) + value_high = feature.get_value_at_frame(frame_high) + feature_value = value_low * (1 - alpha) + value_high * alpha + print(f"Frame {frame_float:.2f} value: {feature_value:.4f} (interpolated between {value_low:.4f} and {value_high:.4f})") + + # Calculate scale based on feature mode with improved stability + if feature_mode == "relative": + # For relative mode, limit the maximum relative change + clamped_feature = max(-0.75, min(0.75, feature_value)) # Increased range from [-0.5, 0.5] to [-0.75, 0.75] + scale = 1.0 + (clamped_feature * strength * 2.0) # Doubled strength impact + print(f"Relative scale: 1.0 + (clamp({feature_value:.4f}) * {strength:.4f} * 2.0) = {scale:.4f}") + else: + # For absolute mode, ensure we don't scale too far from 1.0 + clamped_feature = max(0.0, min(1.0, feature_value)) # Clamp to [0, 1] + base_scale = 0.5 + (clamped_feature * strength) # Center around 0.5 for more dynamic range + scale = max(0.1, min(2.0, base_scale)) # Wider scale range + print(f"Absolute scale: clamp(0.5 + ({feature_value:.4f} * {strength:.4f})) = {scale:.4f}") + + # Get attention precision from layer if available + attn_precision = None + if hasattr(layer, 'attn_precision'): + attn_precision = layer.attn_precision + print(f"Using attn_precision: {attn_precision}") + + # Apply scaling based on selected mode with improved stability + print(f"Applying {scaling_mode} scaling:") + if scaling_mode == "K+mean(V) w/ C penalty": + # Use sqrt for gentler context penalty + context_size = float(k.shape[2]) + scaling = math.sqrt(context_size / 1280.0) # Base size of 1280 for reference + scale = scale * (scaling * 0.75 + 0.25) # Blend with identity to prevent extreme scaling + print(f"Scale after context penalty: {scale:.4f}") + k = k * scale + v_mean = torch.mean(v, dim=1, keepdim=True) + v = v + (v_mean * (scale - 1.0)) # Removed the 0.5 reduction factor + elif scaling_mode == "K+V": + k = k * scale + v = v * scale + elif scaling_mode == "K+V w/ C penalty": + # Use sqrt for gentler context penalty + context_size = float(k.shape[2]) + scaling = math.sqrt(context_size / 1280.0) # Base size of 1280 for reference + scale = scale * (scaling * 0.75 + 0.25) # Blend with identity to prevent extreme scaling + print(f"Scale after context penalty: {scale:.4f}") + k = k * scale + v = v * scale + else: # "V only" + v = v * scale + + # Log the effect of modifications + print(f"K change: mean diff = {(k - k_orig).abs().mean().item():.4f}") + print(f"V change: mean diff = {(v - v_orig).abs().mean().item():.4f}") + + # Return attention result + return optimized_attention(q, k, v, extra_options["n_heads"]) + + # Get target layers to patch + target_layers = get_target_layers(m) + + # Apply patches to target layers + for layer_name, layer in target_layers: + original_forward = layer.forward + def make_patch(orig_forward): + def patched_forward(x, context=None, value=None, mask=None): + # Get transformer options from x if available + transformer_options = {} + if hasattr(x, 'transformer_options'): + transformer_options = x.transformer_options + + print("\n=== Debug: Tensor Shapes ===") + print(f"Input x shape: {x.shape}") + if context is not None: + print(f"Input context shape: {context.shape}") + if value is not None: + print(f"Input value shape: {value.shape}") + + # Store original input dimensions and tensor + original_dim = x.shape[-1] + x_orig = x + needs_projection = auto_projection and original_dim != layer.to_q.in_features + + # Handle spatial tensor reshaping + if len(x.shape) == 4: + b, c, h, w = x.shape + print(f"Reshaping spatial tensor - Original: {x.shape}") + x = x.movedim(1, 3).flatten(1, 2) # (b, h, w, c) -> (b, h*w, c) + print(f"After reshape: {x.shape}") + if context is not None and len(context.shape) == 4: + print(f"Reshaping context - Original: {context.shape}") + context = context.movedim(1, 3).flatten(1, 2) + print(f"After reshape: {context.shape}") + if value is not None and len(value.shape) == 4: + print(f"Reshaping value - Original: {value.shape}") + value = value.movedim(1, 3).flatten(1, 2) + print(f"After reshape: {value.shape}") + + # Handle input dimension mismatch before q projection + if needs_projection: + print(f"\nInput dimension mismatch for Q projection: {x.shape[-1]} vs {layer.to_q.in_features}") + proj_x = create_projection_layer(x.shape[-1], layer.to_q.in_features, f"x_proj_{x.shape[-1]}_{layer.to_q.in_features}") + x_projected = proj_x(x) + print(f"X shape after projection: {x_projected.shape}") + else: + x_projected = x + + print("\nProjecting q...") + q = layer.to_q(x_projected) + print(f"q shape after projection: {q.shape}") + + context = default(context, x_projected) + # Handle context dimension mismatch before k projection + if auto_projection and context.shape[-1] != layer.to_k.in_features: + print(f"\nContext dimension mismatch for K projection: {context.shape[-1]} vs {layer.to_k.in_features}") + proj_context = create_projection_layer(context.shape[-1], layer.to_k.in_features, f"context_proj_{context.shape[-1]}_{layer.to_k.in_features}") + context = proj_context(context) + print(f"Context shape after projection: {context.shape}") + + print(f"\nContext shape before k projection: {context.shape}") + k = layer.to_k(context) + print(f"k shape after projection: {k.shape}") + + if value is not None: + # Handle value dimension mismatch before v projection + if auto_projection and value.shape[-1] != layer.to_v.in_features: + print(f"\nValue dimension mismatch for V projection: {value.shape[-1]} vs {layer.to_v.in_features}") + proj_value = create_projection_layer(value.shape[-1], layer.to_v.in_features, f"value_proj_{value.shape[-1]}_{layer.to_v.in_features}") + value = proj_value(value) + print(f"Value shape after projection: {value.shape}") + + print(f"\nValue shape before v projection: {value.shape}") + v = layer.to_v(value) + else: + print(f"\nUsing context for v projection: {context.shape}") + v = layer.to_v(context) + print(f"v shape after projection: {v.shape}") + + # Apply our custom attention + if mask is None: + extra_options = { + "n_heads": layer.heads, + "sigmas": transformer_options.get("sigmas", None) + } + print("\n=== Calling flex_attention ===") + print(f"q: {q.shape}, k: {k.shape}, v: {v.shape}") + print(f"n_heads: {extra_options['n_heads']}") + out = flex_attention(q, k, v, extra_options) + print(f"flex_attention output shape: {out.shape}") + else: + print("\n=== Using original forward (masked) ===") + return orig_forward(x, context, value, mask) + + print("\n=== Output Processing ===") + print(f"Shape before output projection: {out.shape}") + out = layer.to_out(out) + print(f"Shape after output projection: {out.shape}") + + # Project output back to original dimension if needed + if needs_projection: + print(f"\nProjecting output back to original dimension: {out.shape[-1]} -> {original_dim}") + proj_out = create_projection_layer(out.shape[-1], original_dim, f"out_proj_{out.shape[-1]}_{original_dim}") + out = proj_out(out) + print(f"Final output shape: {out.shape}") + + # Reshape back to spatial if needed + if len(x.shape) == 4: + print(f"\nReshaping back to spatial - Before: {out.shape}") + out = out.view(b, h, w, -1).movedim(3, 1) # (b, h*w, c) -> (b, c, h, w) + print(f"After spatial reshape: {out.shape}") + + print("=======================================") + # Apply residual connection in original space + return x_orig + out + return patched_forward + + layer.forward = make_patch(original_forward) + + return (m,) + + @classmethod + def IS_CHANGED(cls, model, feature, **kwargs): + """Track model and feature changes""" + return float(feature.get_hash() + hash(model)) \ No newline at end of file diff --git a/nodes/preprocessors/pose.py b/nodes/preprocessors/pose.py index 61241ab..3e44e15 100644 --- a/nodes/preprocessors/pose.py +++ b/nodes/preprocessors/pose.py @@ -1,16 +1,18 @@ import numpy as np from ... import RyanOnTheInside from comfy.utils import ProgressBar - -class PoseInterpolator(RyanOnTheInside): +from ...tooltips import apply_tooltips +from ... import ProgressMixin +@apply_tooltips +class PoseInterpolator(ProgressMixin): @classmethod + def INPUT_TYPES(cls): return { "required": { "pose_1": ("POSE_KEYPOINT",), "pose_2": ("POSE_KEYPOINT",), "feature": ("FEATURE",), - "feature_pipe": ("FEATURE_PIPE",), "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "interpolation_mode": (["Linear", "Spherical"], {"default": "Linear"}), "omit_missing_points": ("BOOLEAN", {"default": False}), @@ -19,12 +21,13 @@ def INPUT_TYPES(cls): RETURN_TYPES = ("POSE_KEYPOINT",) FUNCTION = "interpolate_poses" - CATEGORY = "RyanOnTheInside/Poses" + CATEGORY = "RyanOnTheInside/ExperimentalWIP" - def interpolate_poses(self, pose_1, pose_2, feature, feature_pipe, strength, interpolation_mode, omit_missing_points): + def interpolate_poses(self, pose_1, pose_2, feature, strength, interpolation_mode, omit_missing_points): print("Debug: Starting interpolate_poses method") - num_frames = feature_pipe.frame_count - self.progress_bar = ProgressBar(num_frames) + num_frames = feature.frame_count + self.start_progress(num_frames) + result_poses = [] @@ -47,11 +50,13 @@ def interpolate_poses(self, pose_1, pose_2, feature, feature_pipe, strength, int interpolated_people.append(interpolated_person) result_poses.append({'people': interpolated_people, 'canvas_height': pose_data_1['canvas_height'], 'canvas_width': pose_data_1['canvas_width']}) - self.progress_bar.update(1) + self.update_progress(1) - self.progress_bar = None + + self.end_progress() return (result_poses,) + def match_poses(self, start_poses, end_poses): pose_count = min(len(start_poses), len(end_poses)) pose_matches_final = [] diff --git a/nodes/utility_nodes.py b/nodes/utility_nodes.py index f84b411..f9ba36f 100644 --- a/nodes/utility_nodes.py +++ b/nodes/utility_nodes.py @@ -3,27 +3,30 @@ import torchvision from .. import RyanOnTheInside from abc import ABC +from ..tooltips import apply_tooltips class UtilityNode(RyanOnTheInside, ABC): + #NOTE: for forward compatibility CATEGORY="RyanOnTheInside/Utility" +class BatchUtilityNode(UtilityNode): + #NOTE: for forward compatibility + CATEGORY= f"{UtilityNode.CATEGORY}/Batches" -class ImageIntervalSelect(UtilityNode): +@apply_tooltips +class ImageIntervalSelect(BatchUtilityNode): @classmethod def INPUT_TYPES(cls): return { "required": { "image": ("IMAGE",), - "interval": ("FLOAT", {"default": 1, "min": 1, "max": 100000, "step": 1}), - "start_at": ("FLOAT", {"default": 0, "min": 0, "max": 100000, "step": 1}), - "end_at": ("FLOAT", {"default": 0, "min": 0, "max": 100000, "step": 1}), + "interval": ("INT", {"default": 1, "min": 1, "max": 100000, "step": 1}), + "start_at": ("INT", {"default": 0, "min": 0, "max": 100000, "step": 1}), + "end_at": ("INT", {"default": 0, "min": 0, "max": 100000, "step": 1}), }, } def select_interval(self, image, interval=1, start_at=0, end_at=0): - interval = int(interval) - start_at = int(start_at) - end_at = int(end_at) # Set default for end_at if it is None if end_at == 0: end_at = len(image) @@ -39,8 +42,9 @@ def select_interval(self, image, interval=1, start_at=0, end_at=0): RETURN_TYPES = ("IMAGE",) FUNCTION = "select_interval" -#NOTE eh -class ImageIntervalSelectPercentage(UtilityNode): +#NOTE eh FIX MEH +@apply_tooltips +class ImageIntervalSelectPercentage(BatchUtilityNode): @classmethod def INPUT_TYPES(cls): return { @@ -69,7 +73,8 @@ def select_percentage_interval(self, image, interval_percentage=10, start_percen RETURN_TYPES = ("IMAGE",) FUNCTION = "select_percentage_interval" -class ImageChunks(UtilityNode): +@apply_tooltips +class ImageChunks(BatchUtilityNode): @classmethod def INPUT_TYPES(cls): return { @@ -98,7 +103,8 @@ def concatenate_images_into_grid(self, image, padding=0, normalize=False, scale_ FUNCTION = "concatenate_images_into_grid" #TODO inherit from ImageChunk reuse -class VideoChunks(UtilityNode): +@apply_tooltips +class VideoChunks(BatchUtilityNode): @classmethod def INPUT_TYPES(cls): return { @@ -141,37 +147,8 @@ def chunk_images_into_grids(self, image, chunk_size=4, padding=2, normalize=Fals RETURN_TYPES = ("IMAGE",) FUNCTION = "chunk_images_into_grids" -class Image_Shuffle(UtilityNode): - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "image": ("IMAGE",), - "shuffle_size": ("INT", {"default": 4, "min": 1}) - }, - } - - def shuffle_images(self, image, shuffle_size=4): - # Ensure shuffle_size is within the bounds of the image batch - shuffle_size = min(shuffle_size, image.shape[0]) - - # Shuffle the images in groups of shuffle_size - shuffled_images = [] - for i in range(0, len(image), shuffle_size): - chunk = image[i:i+shuffle_size] - indices = torch.randperm(chunk.shape[0]) - shuffled_chunk = chunk[indices] - shuffled_images.append(shuffled_chunk) - - # Concatenate all shuffled chunks back into a single tensor - shuffled_images = torch.cat(shuffled_images, dim=0) - - return (shuffled_images,) - - RETURN_TYPES = ("IMAGE",) - FUNCTION = "shuffle_images" - -class Image_Shuffle(UtilityNode): +@apply_tooltips +class Image_Shuffle(BatchUtilityNode): @classmethod def INPUT_TYPES(cls): return { @@ -201,6 +178,7 @@ def shuffle_images(self, image, shuffle_size=4): RETURN_TYPES = ("IMAGE",) FUNCTION = "shuffle_images" +@apply_tooltips class ImageDifference(UtilityNode): @classmethod def INPUT_TYPES(cls): @@ -227,6 +205,7 @@ def compute_difference(self, image): RETURN_TYPES = ("IMAGE",) FUNCTION = "compute_difference" +@apply_tooltips class SwapDevice(UtilityNode): @classmethod def INPUT_TYPES(cls): diff --git a/nodes/video/flex_video.py b/nodes/video/flex_video.py index 64f18fa..874f00c 100644 --- a/nodes/video/flex_video.py +++ b/nodes/video/flex_video.py @@ -1,70 +1,79 @@ import numpy as np import torch from .video_base import FlexVideoBase -from ..flex.feature_pipe import FeaturePipe from scipy.interpolate import interp1d from ..masks.mask_utils import calculate_optical_flow import cv2 import comfy.model_management as mm +from ...tooltips import apply_tooltips from .flex_video_speed import FlexVideoSpeed +@apply_tooltips class FlexVideoDirection(FlexVideoBase): @classmethod def get_modifiable_params(cls): return ["direction"] - @classmethod - def INPUT_TYPES(cls): - inputs = super().INPUT_TYPES() - # Make feature_pipe optional - inputs.setdefault("optional", {}) - inputs["optional"].update({ - "feature_pipe": ("FEATURE_PIPE",), - }) - return inputs - - def apply_effect_internal( self, video: np.ndarray, feature_values: np.ndarray, - feature_pipe=None, **kwargs, ) -> np.ndarray: - num_frames = video.shape[0] + num_output_frames = len(feature_values) + num_input_frames = video.shape[0] + + # Ensure strength and threshold arrays match feature length + strength = kwargs.get('strength') + feature_threshold = kwargs.get('feature_threshold') + + # If arrays are wrong length (because they were based on video length), resize them + if len(strength) != num_output_frames: + if len(strength) == 1: # If it's a single value expanded + strength = np.full(num_output_frames, strength[0]) + else: # If it's a different length array + strength = np.broadcast_to(strength, (num_output_frames,)) + + if len(feature_threshold) != num_output_frames: + if len(feature_threshold) == 1: + feature_threshold = np.full(num_output_frames, feature_threshold[0]) + else: + feature_threshold = np.broadcast_to(feature_threshold, (num_output_frames,)) - # Use the frame count from the feature pipe if provided, otherwise fallback to the input video length - if feature_pipe is not None: - target_frame_count = feature_pipe.frame_count + # Normalize feature values to 0-1 + feature_min = np.min(feature_values) + feature_max = np.max(feature_values) + if feature_max > feature_min: + normalized_features = (feature_values - feature_min) / (feature_max - feature_min) + normalized_threshold = (feature_threshold - feature_min) / (feature_max - feature_min) else: - target_frame_count = num_frames - - # Normalize feature values to the range [0, 1] over the length of the feature pipe (or input video) - normalized_features = np.clip(feature_values, 0.0, 1.0) - - # Map feature values to frame indices in the input video - frame_indices = (normalized_features * (num_frames - 1)).astype(int) + normalized_features = np.full_like(feature_values, 0.5) + normalized_threshold = feature_threshold - # Ensure frame indices stay within valid bounds - frame_indices = np.clip(frame_indices, 0, num_frames - 1) - - # If a feature pipe is provided, the output video should be the length of the feature pipe - if target_frame_count != num_frames: - # Adjust the output video length to match the feature pipe length - # Select frames based on the feature value mapping - frame_indices = np.interp( - np.linspace(0, 1, target_frame_count), - np.linspace(0, 1, len(feature_values)), - frame_indices - ).astype(int) - - # Create the processed video by selecting frames based on the mapped indices + # Create output video array matching feature length + processed_video = np.empty((num_output_frames, *video.shape[1:]), dtype=video.dtype) + + # Handle thresholding + above_threshold = normalized_features >= normalized_threshold + + # For frames below threshold, use first frame + frame_positions = np.where( + above_threshold, + normalized_features * (num_input_frames - 1) * strength, + np.zeros_like(normalized_features) + ) + + # Convert to integer indices with clipping + frame_indices = np.clip(frame_positions.astype(int), 0, num_input_frames - 1) + + # Create the output video by sampling from input video processed_video = video[frame_indices] return processed_video +@apply_tooltips class FlexVideoSeek(FlexVideoBase): @classmethod @@ -92,31 +101,47 @@ def apply_effect_internal( ) -> np.ndarray: num_frames = video.shape[0] processed_video = np.empty_like(video) - strength = kwargs.get('strength', 1.0) + strength = kwargs.get('strength', np.ones(num_frames)) + feature_threshold = kwargs.get('feature_threshold', np.zeros(num_frames)) seek_speed = 1.0 # Reverse the video if the reverse parameter is True if reverse: video = video[::-1] - # Clip feature values between 0 and 1 - feature_values_clipped = np.clip(feature_values, 0.0, 1.0) + # Create a mask for values above threshold (element-wise comparison) + above_threshold = feature_values >= feature_threshold + + # For values below threshold, we'll use 0 speed (stay on current frame) + # For values above threshold, we'll use the normalized feature value + feature_values_masked = np.where(above_threshold, + np.clip(feature_values, 0.0, 1.0), + 0.0) - # Apply seek_speed to feature values - adjusted_speeds = feature_values_clipped * seek_speed * strength + # Apply seek_speed and strength (element-wise multiplication) + adjusted_speeds = feature_values_masked * seek_speed * strength - # Ensure the total adjusted speed matches the number of frames + # If all speeds are 0 (all below threshold), use uniform movement total_speed = np.sum(adjusted_speeds) if total_speed == 0: adjusted_speeds = np.ones(num_frames) else: adjusted_speeds = adjusted_speeds / total_speed * num_frames - # Calculate cumulative frame positions + # Calculate cumulative positions cumulative_positions = np.cumsum(adjusted_speeds) - - # Map frame indices based on cumulative positions - frame_indices = np.clip(cumulative_positions.astype(int), 0, num_frames - 1) + + # For frames where feature is below threshold, maintain previous frame + frame_indices = np.zeros(num_frames, dtype=int) + last_valid_idx = 0 + + for i in range(num_frames): + if above_threshold[i]: + frame_idx = int(np.clip(cumulative_positions[i], 0, num_frames - 1)) + last_valid_idx = frame_idx + else: + frame_idx = last_valid_idx + frame_indices[i] = frame_idx # Create the processed video by selecting frames based on the mapped indices for idx in range(num_frames): @@ -125,6 +150,7 @@ def apply_effect_internal( return processed_video +@apply_tooltips class FlexVideoFrameBlend(FlexVideoBase): @classmethod diff --git a/nodes/video/flex_video_speed.py b/nodes/video/flex_video_speed.py index b15e977..7e3fca8 100644 --- a/nodes/video/flex_video_speed.py +++ b/nodes/video/flex_video_speed.py @@ -8,11 +8,11 @@ from .vfi_utils import preprocess_frames, postprocess_frames from .video_base import FlexVideoBase import numpy as np -from ..flex.feature_pipe import FeaturePipe from scipy.interpolate import interp1d from ..masks.mask_utils import calculate_optical_flow import cv2 import comfy.model_management as mm +from ...tooltips import apply_tooltips BASE_MODEL_DOWNLOAD_URLS = [ "https://github.com/styler00dollar/VSGAN-tensorrt-docker/releases/download/models/", @@ -25,13 +25,15 @@ "rife49.pth": "4.7", } +@apply_tooltips class FlexVideoSpeed(FlexVideoBase): @classmethod def INPUT_TYPES(cls): + parent_inputs = super().INPUT_TYPES() return { + **parent_inputs, # Keep all parent inputs including optional "required": { - **super().INPUT_TYPES()["required"], - "feature_pipe": ("FEATURE_PIPE",), + **parent_inputs["required"], "speed_factor": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.1}), "interpolation_mode": (["none", "linear", "Farneback", "rife47", "rife49"],), "fast_mode": ("BOOLEAN", {"default": True}), @@ -44,26 +46,30 @@ def INPUT_TYPES(cls): def get_modifiable_params(cls): return ["speed_factor"] - def apply_effect_internal(self, video: np.ndarray, feature_values: np.ndarray, feature_pipe: FeaturePipe, - speed_factor: float, interpolation_mode: str, fast_mode: bool, ensemble: bool, - scale_factor: float, **kwargs): + def apply_effect_internal(self, video: np.ndarray, feature_values: np.ndarray, + speed_factor: np.ndarray, interpolation_mode: str, fast_mode: bool, ensemble: bool, + scale_factor: float, opt_feature=None, **kwargs): num_frames = video.shape[0] - total_duration = feature_pipe.frame_count / feature_pipe.frame_rate - frame_rate = feature_pipe.frame_rate + frame_rate = opt_feature.frame_rate + total_duration = num_frames / frame_rate # Ensure feature_values is the same length as video frames if len(feature_values) != num_frames: raise ValueError("feature_values length must match the number of video frames") - # Adjust feature values based on speed_factor - if speed_factor >= 0: - adjusted_feature_values = 1 - feature_values - else: - adjusted_feature_values = feature_values + # Get threshold from kwargs + feature_threshold = kwargs.get('feature_threshold', 0.0) + + # Apply threshold - zero out values below threshold + above_threshold = feature_values >= feature_threshold + feature_values = np.where(above_threshold, feature_values, 0.0) + + # Adjust feature values based on speed_factor (element-wise comparison) + adjusted_feature_values = np.where(speed_factor >= 0, 1 - feature_values, feature_values) # Calculate frame durations based on adjusted feature values and speed factor base_duration = 1 / frame_rate - adjusted_frame_durations = base_duration + (adjusted_feature_values * abs(speed_factor) * base_duration) + adjusted_frame_durations = base_duration + (adjusted_feature_values * np.abs(speed_factor) * base_duration) cumulative_times = np.cumsum(adjusted_frame_durations) @@ -71,7 +77,7 @@ def apply_effect_internal(self, video: np.ndarray, feature_values: np.ndarray, f normalized_cumulative_times = cumulative_times * (total_duration / cumulative_times[-1]) # Create an array of the target timestamps that the final video must have - target_timestamps = np.linspace(0, total_duration, feature_pipe.frame_count) + target_timestamps = np.linspace(0, total_duration, num_frames) # Interpolate the adjusted frames based on the normalized timestamps frame_indices = np.interp(target_timestamps, normalized_cumulative_times, np.arange(num_frames)) diff --git a/nodes/video/video_base.py b/nodes/video/video_base.py index 31c4630..aab6f5f 100644 --- a/nodes/video/video_base.py +++ b/nodes/video/video_base.py @@ -1,79 +1,93 @@ import torch import numpy as np from abc import ABC, abstractmethod -from ... import RyanOnTheInside +from ..flex.flex_base import FlexBase from comfy.utils import ProgressBar +from ...tooltips import apply_tooltips -class FlexVideoBase(RyanOnTheInside, ABC): +#TODO: maybe implement a batch version of flex base when the time comes. Currently, this differs significantly from its siblings +@apply_tooltips +class FlexVideoBase(FlexBase, ABC): @classmethod def INPUT_TYPES(cls): return { + **super().INPUT_TYPES(), "required": { + **super().INPUT_TYPES()["required"], "images": ("IMAGE",), - "feature": ("FEATURE",), - "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}), - "feature_mode": (["relative", "absolute"], {"default": "relative"}), - "feature_param": (cls.get_modifiable_params(),), - "feature_threshold": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), - }, - "optional": { - "feature_pipe": ("FEATURE_PIPE",) } } - CATEGORY = "RyanOnTheInside/FlexVideo" + CATEGORY = "RyanOnTheInside/FlexFeatures/Targets/Video" RETURN_TYPES = ("IMAGE",) FUNCTION = "apply_effect" - - def __init__(self): - self.progress_bar = None - def start_progress(self, total_steps, desc="Processing"): - self.progress_bar = ProgressBar(total_steps) - - def update_progress(self): - if self.progress_bar: - self.progress_bar.update(1) + def apply_effect(self, images, strength, feature_mode, feature_threshold, feature_param, opt_feature=None, **kwargs): + images_np = images.cpu().numpy() + + # Get feature length first + if opt_feature is not None: + num_frames = opt_feature.frame_count + else: + num_frames = images_np.shape[0] # Fallback to video length if no feature - def end_progress(self): - self.progress_bar = None + self.start_progress(num_frames, desc=f"Applying {self.__class__.__name__}") - @classmethod - @abstractmethod - def get_modifiable_params(cls): - """Return a list of parameter names that can be modulated.""" - return [] + # Handle non-array parameters directly + processed_kwargs = {k: v for k, v in kwargs.items() + if not isinstance(v, (list, tuple, np.ndarray))} + + # Process parameters frame by frame and collect feature values + feature_values = [] + for i in range(num_frames): # Now using feature length! + feature_value = self.get_feature_value(i, opt_feature) + feature_value = 0.5 if feature_value is None else feature_value + feature_values.append(feature_value) - #TODO implement parame name - def modulate_param(self, param_name, param_value, feature_value, strength, mode): - if mode == "relative": - # Adjust parameter relative to its value and the feature - return param_value * (1 + (feature_value - 0.5) * 2 * strength) - else: # absolute - # Adjust parameter directly based on the feature - return param_value * feature_value * strength + # Process parameters + frame_kwargs = self.process_parameters( + frame_index=i, + feature_value=feature_value, + feature_threshold=feature_threshold, + strength=strength, + feature_param=feature_param, + feature_mode=feature_mode, + **kwargs + ) + # Store modulated values and array values + for k, v in frame_kwargs.items(): + if k not in processed_kwargs: + processed_kwargs[k] = [] + if isinstance(processed_kwargs[k], list): + processed_kwargs[k].append(v) - def apply_effect(self, images, feature, strength, feature_mode, feature_threshold, feature_pipe=None, **kwargs): - images_np = images.cpu().numpy() # Convert tensor to numpy array - num_frames = images_np.shape[0] + # Convert collected values to arrays + feature_values = np.array(feature_values) + for k, v in processed_kwargs.items(): + if isinstance(v, list): + processed_kwargs[k] = np.array(v) - target_frame_count = feature_pipe.frame_count if feature_pipe is not None else num_frames - feature_values = np.array([feature.get_value_at_frame(i) for i in range(target_frame_count)]) - - # Apply threshold to feature values - feature_values[feature_values < feature_threshold] = 0 + # Convert strength and feature_threshold to arrays right before passing to child + strength = np.asarray(strength) + feature_threshold = np.asarray(feature_threshold) + if strength.ndim == 0: + strength = np.full(num_frames, strength) + if feature_threshold.ndim == 0: + feature_threshold = np.full(num_frames, feature_threshold) + processed_kwargs['strength'] = strength + processed_kwargs['feature_threshold'] = feature_threshold - # Modulate parameters based on the feature values - for param_name in self.get_modifiable_params(): - if param_name in kwargs: - param_value = kwargs[param_name] - avg_feature_value = np.mean(feature_values) - kwargs[param_name] = self.modulate_param(param_name, param_value, avg_feature_value, strength, feature_mode) + # Let child classes handle the video processing and threshold checks + processed_video = self.apply_effect_internal( + images_np, + feature_values=feature_values, + opt_feature=opt_feature, + **processed_kwargs + ) - # Apply the effect to the entire video - processed_video = self.apply_effect_internal(images_np, feature_values=feature_values, feature_pipe=feature_pipe, **kwargs) + self.end_progress() - # Convert the numpy array back to a tensor and ensure it's in BHWC format + # Convert to tensor and ensure BHWC format result_tensor = torch.from_numpy(processed_video).float() if result_tensor.shape[1] == 3: # If in BCHW format, convert to BHWC result_tensor = result_tensor.permute(0, 2, 3, 1) diff --git a/pyproject.toml b/pyproject.toml index 9ce847c..525969b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,9 @@ [project] name = "comfyui_ryanonyheinside" description = "Custom nodes introducing particle simulations, optical flow, audio manipulation & reactivity, and temporal masks" -version = "1.13.2" +version = "2.0.0" license = {file = "LICENSE"} -dependencies = ["pygame","opencv-python==4.10.0","scipy","torchaudio", "pillow","librosa==0.10.2","pymunk==6.8.1","matplotlib","openunmix","mido"] +dependencies = ["pygame","opencv-python==4.10.0","scipy","torchaudio", "pillow","librosa==0.10.2","pymunk==6.8.1","matplotlib","openunmix","mido","scikit-image"] [project.urls] Repository = "https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside" diff --git a/readme.md b/readme.md index 7771295..26f42e2 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,6 @@ # ComfyUI RyanOnTheInside Node Pack +## 🚨 Important: [Version 2.0 Update](#-important-version-20-update--1) 🚨 ## Overview ### These nodes react to **everything**, including audio. @@ -11,11 +12,49 @@ - 🎵 **Audio & MIDI Processing**: Separate instruments and create audio-reactive visuals - 🎆 **Particle Systems**: Create mesmerizing, fluid-like effects - 🌊 **Optical Flow**: Generate masks based on motion in videos -- ⏳ **Temporal Effects**: Apply time-based transformations to masks and images - 🌊 **DEPTH Flow** 🌊: Use flex features to control depthflow nodes, adding parallax animations to your workflows! -- 🎭 **AdvancedLivePortrait** 🎭: Use flex features to control facial animation expressions! +- 👤 **AdvancedLivePortrait** 👤: Use flex features to control facial animation expressions! +- 🎨 **Advanced Controlnet** 🎨: Direct integration with ComfyUI-AdvancedControlnet! +- 🎭 **AnimateDiff** 🎭: Direct integration with ComfyUI-AnimateDiff-Evolved! -### **Developers**: if you're interested in extending the flex features into your own nodes, check out the [base-class-refactor](../../tree/base-class-refactor) branch and feel free to reach out. + + + + +### 🚨 Important: Version 2.0 Update 🚨 + +This repository has been updated to Version 2.0! After careful consideration, I decided that a complete update was better than maintaining legacy support indefinitely. This new version brings significant improvements while maintaining all existing functionality. This update was done with user experience, extensibility, and functionality in mind. + +### 🎉 What's New in V2 +- **License**: This project is now licensed under the MIT License. +- **EVERYTHING reacts to EVERYTHING:** Now you can modulate ALL parameters of ALL Flex nodes! Possibilities increased by multiple orders of magnitude. +- **Optional Feature Inputs**: Feature inputs are now optional! This means these nodes double as a powerful suite for image, mask, and video manipulation even without reactivity! +- **More Intuitive**: Redesigned with user experience in mind. Less noodles, more intuitive connections. + +- **Help**: Takes full advantage of ComfyUI's tooltip system. +- **Manual Feature Creation**: New interface for drawing/creating features manually - far more powerful than it might seem! +- **Text as Features**: New integration with Open AI Whisper allows text to be used as a feature source, with a fully modular trigger system +- **Enhanced External Integration**: Deeper compatibility with external node packs +- **Image Improvements**: Major improvements to FlexImage nodes. One might say they are more than useful now. +- **Mask Improvements**: Major improvements to FlexMask nodes. +- **Performance Improvements**: Major performance improvements in many nodes. More to follow. +- **Feature Modulation**: More robust and feature-rich modulation system. +- **And much more!** + + +### ⚠️ Breaking Changes Notice +Due to ComfyUI's workflow loading mechanism, **existing workflows using these nodes ~~may~~ *will* break after updating**. I did consider this carefully, as I have yet to introduce breaking changes to this node system, but this extensive update neccesitated a complete overhaul. There will not be a version 3. Rather, version 2 will be updated as needed. I have taken the time to update the most relevant example workflows to version 2. + +If you need to run an older workflow, you can revert to the previous version of these nodes by using the Manager, or by running this command in your ComfyUI_RyanOnTheInside directory: + +```bash +git checkout dab96492ac7d906368ac9c7a17cb0dbd670923d9 +``` + +To return to the latest version later, use: +```bash +git checkout main +``` @@ -48,49 +87,7 @@

🆕 Recent Updates:

-- 12/14/24 - **FeatureToFloat**: Convert features to float data. -- 11/20/24 - **AdvancedLivePortrait Compatibility**: Exciting news! The AdvancedLivePortrait nodes are now compatible with our feature system, enabling dynamic control over facial animations! -- 11/19/24 - **AudioInfo**: Added a node that returns audio information, including duration, sample rate, number of channels, number of samples, max amplitude, mean amplitude, and RMS amplitude. -- 11/8/24 - **DOOM**: Will it run DOOM? Yes. Yes it will. -- 11/6/24 - **Some cleanup in prep for v2**: Control CogVideo by converting features to spline data -- 11/1/24 - **Feature to Spline Data**: Control CogVideo by convert features to spline data -- 10/28/24 - **FlexImageHorizontalToVertical**: Converts horizontal images to vertical format with customizable background effects. -- 10/23/24 - **Flex Images Now Feature Optional**: You no longer need to specify a feature to use Flex Image nodes. -- 10/20/24 - **Audio Visualization Nodes**: Over 1 TRILLION ways to customize! - - **FlexAudioVisualizerCircular**: Creates circular audio visualizations based on frequency or waveform data. - - **FlexAudioVisualizerLine**: Generates linear audio visualizations with customizable styles and parameters. -- 10/20/24 - **ImageScaleToTarget**: New node that upscales images to match a target image's size. -- 10/20/24 - **FlexImageHueShift**: Applies a hue shift effect to images, with optional feature modulation. -- 10/20/24 - **FlexImageDepthWarp**: Warps images based on depth maps, creating pseudo-3D effects. -- 10/18/24 - **Manual Feature**: create features manually. -- 10/18/24 - **Flex image transform and more**: Transform images with your features! -- 10/13/24 - **Depthflow Nodes Compatibility**: Exciting news! The Depthflow Nodes pack by akatz-ai is now compatible with my feature system, opening up new possibilities for dynamic parallax animations! -- 10/12/24 - **A LOT**: I added a lot of new nodes, fixed a lot of bugs, and cleaned up a lot of the code. I will be detailing the cool stuff on YouTube at some point in this timeline of ours - - **FeatureContiguousInterpolate**: Interpolates contiguous segments of a feature that meet a threshold criteria. - - **FeatureRebase**: Rebases feature values within specified thresholds. - - **Latents as flex feature targets**: WORK IN PROGRESS Base class for latent nodes, providing a common interface and functionality for various latent operations. - - **Audio Utility and Effect Nodes**: Added an incomplete set of audio processing nodes. - - **And more** -- 10/3/24 - **FeatureAccumulate**: Adds a new feature modifier that accumulates feature values over time, creating a cumulative effect. -- 9/30/23 - **FlexVideoSeek Node**: Added a new video manipulation node that allows for dynamic frame seeking based on feature inputs. This node enables creation of time-warping effects, music-reactive video manipulations, and other temporal distortions. -- 9/30/23 - **Audio Utility and Effect Nodes**: Added a comprehensive set of audio processing nodes: - - Utility Nodes: AudioPad, AudioVolumeNormalization, AudioResample, AudioChannelMerge, AudioChannelSplit, AudioConcatenate, AudioCombine - - Effect Nodes: AudioPitchShift, AudioTimeStretch, AudioFade, AudioGain, AudioDither - These nodes provide powerful tools for manipulating and processing audio within ComfyUI workflows. -- 9/28/24 - **Video TARGET**: Adds video as a feature target! While all feature targets are inherently *tiiime* based, this additional allows for *video-level* modulation as opposed to modulating individual frames to varying degrees over time. Novel! -- 9/27/24 - MIDI feature bug fix -- 9/25/24 - **FlexImageContrast**: Adds contrast and brightness to images, with an option to preserve luminosity. -- 9/15/24 - **alot** Depth From Shape, Audio Pitch Feature, Pitch Range filters, new MIDI keybord for Pitch Range specification, Image from audio, mask from audio, Improved depth chamber, wave propagation, emanating rings, and a lot more -- 9/8/24 - **Area Feature**: Adds area as a driving reactivity feature! -- 9/7/24 - **Proximity Feature**: Adds proximity as a driving reactivity feature! Allows for the distince of objects from one another to control other nodes. -- 9/5/24 - **FlexImageParallax**: Add illusory depth. -- 9/3/24 - **FlexMaskDepthChamber**: Mask anything within a given depth range -- 9/3/24 - **FeatureFade**: another feature modifier to allow mixing of features, controled by features. Think mixing depth and motion features according to a kick drum or somthing. Ridiculous. -- 9/1/24 - **Utility Nodes**: Added many utility nodes for batch manipulation and more -- 8/31/24 - **FlexMaskRandomShapes**: Create dynamic shapes. Cooler than it sounds! -- 8/30/24 - **FlexMaskEmanatingRings**: Create dynamic, expanding ring patterns emanating from mask edges. -- 8/30/24 - **FlexMaskWavePropagation**: Simulate wave-like distortions propagating from mask boundaries. -- 8/29/24 - **Added feature reactivity to paricle simulations** +**VERSION 2.0**
@@ -143,16 +140,28 @@ Dynamic control over various aspects of your workflow: - Multiple optical flow algorithms available - Create motion-reactive particle simulations -### ⏳ Temporal Effects -- Apply time-based transformations to masks and images -- Create evolving animations with various effects (erosion, dilation, warping) -- Customize with easing functions and palindrome support +### ⏳ Temporal Effects [DEPRECATED] +- You can do all of this 7000x with FlexMask nodes. ## 🤝 Compatible Node Packs -I'm thrilled to announce that external node packs are now compatible with my feature system! Here are some notable examples: +I'm thrilled to announce that external node packs are now compatible with the feature system! Here are some notable examples: + +### 🌊 Depthflow Nodes + +The [Depthflow Nodes pack](https://github.com/akatz-ai/ComfyUI-Depthflow-Nodes) brings the power of parallax animations to ComfyUI, allowing you to turn 2D images into stunning 2.5D animations. What's even more exciting is that it's fully compatible with my feature system! + +Key features of Depthflow Nodes: +- Create complex parallax animations from images and depth maps +- Various motion presets for quick setup +- Fine-grained control with individual motion components + +By combining Depthflow Nodes with my feature system, you can create dynamic, responsive parallax animations that react to audio, MIDI, motion, and more. This collaboration opens up a world of creative possibilities for your ComfyUI workflows! + +Check out the [Depthflow Nodes repository](https://github.com/akatz-ai/ComfyUI-Depthflow-Nodes) for more information and installation instructions. + -### 🎭 AdvancedLivePortrait +### 👤 AdvancedLivePortrait The [AdvancedLivePortrait nodes](https://github.com/Fannovel16/ComfyUI-AdvancedLivePortrait) bring powerful facial animation capabilities to ComfyUI, and now they're fully compatible with our feature system! This means you can create dynamic, responsive facial animations that react to audio, MIDI, motion, and more. @@ -162,22 +171,18 @@ Key features when combined with our system: - Create dynamic emotional responses based on various inputs - Modulate animation parameters in real-time -### 🌊 Depthflow Nodes +### 🎭 AnimateDiff -The [Depthflow Nodes pack](https://github.com/akatz-ai/ComfyUI-Depthflow-Nodes) brings the power of parallax animations to ComfyUI, allowing you to turn 2D images into stunning 2.5D animations. What's even more exciting is that it's fully compatible with my feature system! +The [AnimateDiff Evolved nodes](https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved) bring powerful animation capabilities to ComfyUI. There is now direct integration with this node pack, and this integration will grow over time! -Key features of Depthflow Nodes: -- Create complex parallax animations from images and depth maps -- Various motion presets for quick setup -- Fine-grained control with individual motion components +### 🎨 Advanced Controlnet -By combining Depthflow Nodes with my feature system, you can create dynamic, responsive parallax animations that react to audio, MIDI, motion, and more. This collaboration opens up a world of creative possibilities for your ComfyUI workflows! -Check out the [Depthflow Nodes repository](https://github.com/akatz-ai/ComfyUI-Depthflow-Nodes) for more information and installation instructions. +The [Advanced Controlnet](https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet) bring powerful granular control to ComfyUI. There is now direct integration with this node pack, and this integration will grow over time! +## 📚 Overview Documentation -## 📚 Detailed Documentation

Flex Features

@@ -234,7 +239,16 @@ The Flex Features system allows for dynamic control over various aspects of your - **Sawtooth**: Rapid rise followed by sudden drop - **Bounce**: Emulates a bouncing motion -These features can be used to control IPAdapters, Masks, and Images, creating dynamic and responsive effects that adapt to the input data. +#### Text Features (Whisper) +- **Speech-to-Text**: Convert spoken words from audio into text features +- **Transcription Timing**: Sync features with specific words or phrases +- **Confidence Scores**: Use speech recognition confidence as a feature +- **Language Detection**: Create features based on detected languages +- **Speaker Segments**: Generate features from different speaker segments +- **Sentiment Analysis**: Extract emotional content from spoken words +- **Temporal Alignment**: Map text features to specific timestamps + +These features can be used to control almost anything. IPAdapters, masks, images, video.... particle emitters (see below :D)... creating dynamic and responsive effects that adapt to the input data.
@@ -299,21 +313,7 @@ Optical flow analysis allows for the creation of dynamic, motion-responsive effe -
-

Temporal Effects

- -Add the dimension of time to your mask and image effects: -- **Morphological Operations**: Apply time-varying erosion, dilation, opening, and closing -- **Geometric Transformations**: Animate translation, rotation, and scaling over time -- **Mask Combinations**: Blend multiple masks with time-based operations -- **Warping Effects**: Create dynamic distortions using Perlin noise, radial, or swirl patterns -- **Easing Functions**: Customize the rate of change for smooth animations -- **Palindrome Mode**: Create seamless back-and-forth animations - -These temporal effects enable the creation of evolving, dynamic animations that transform masks and images over the course of your video or animation sequence. - -
## Installation @@ -351,13 +351,8 @@ Contributions are welcome! Both to the code and EXAMPLE WORKFLOWS!!! If you'd li 5. Submit a pull request to the main repository ## License -The choice of license is out of my hands for the time being, but this will change soon. - -This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0). - -You are free to share and adapt the material for non-commercial purposes, as long as you give appropriate credit and indicate if changes were made. -For more details, see the [full license text](https://creativecommons.org/licenses/by-nc/4.0/legalcode). +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## Support diff --git a/tooltips/__init__.py b/tooltips/__init__.py new file mode 100644 index 0000000..3dc6888 --- /dev/null +++ b/tooltips/__init__.py @@ -0,0 +1,11 @@ +""" +Tooltip management system for ComfyUI nodes. +""" + +from .tooltip_manager import TooltipManager, apply_tooltips +from .categories import register_all_tooltips + +__all__ = ['TooltipManager', 'apply_tooltips'] + +# Register tooltips when the module is imported +register_all_tooltips() diff --git a/tooltips/categories/__init__.py b/tooltips/categories/__init__.py new file mode 100644 index 0000000..3bf4d06 --- /dev/null +++ b/tooltips/categories/__init__.py @@ -0,0 +1,29 @@ +""" +Category-specific tooltip definitions. +""" + +from . import ( + audio, + depth, + doom, + flex, + images, + latents, + masks, + misc, + preprocessors, + video +) + +def register_all_tooltips(): + """Register tooltips from all categories.""" + audio.register_tooltips() + depth.register_tooltips() + doom.register_tooltips() + flex.register_tooltips() + images.register_tooltips() + latents.register_tooltips() + masks.register_tooltips() + misc.register_tooltips() + preprocessors.register_tooltips() + video.register_tooltips() diff --git a/tooltips/categories/audio.py b/tooltips/categories/audio.py new file mode 100644 index 0000000..6982841 --- /dev/null +++ b/tooltips/categories/audio.py @@ -0,0 +1,323 @@ +"""Tooltips for audio-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for audio nodes""" + + # BaseAudioProcessor tooltips + TooltipManager.register_tooltips("BaseAudioProcessor", { + "frame_rate": "Frame rate of the video", + "frame_count": "Total number of frames" + }) + + # FlexAudioVisualizerBase tooltips (inherits from: FlexBase, RyanOnTheInside) + TooltipManager.register_tooltips("FlexAudioVisualizerBase", { + "audio": "Input audio to visualize", + "frame_rate": "Frame rate of the output visualization (1.0 to 240.0 fps)", + "screen_width": "Width of the output visualization (100 to 1920 pixels)", + "screen_height": "Height of the output visualization (100 to 1080 pixels)", + "strength": "Strength of parameter modulation (0.0 to 1.0)", + "feature_param": "Parameter to modulate based on the optional feature input", + "feature_mode": "Mode of parameter modulation ('relative' or 'absolute')", + "position_x": "Horizontal position of the visualization center (0.0 to 1.0)", + "position_y": "Vertical position of the visualization center (0.0 to 1.0)", + "opt_feature": "Optional feature input for parameter modulation" + }, inherits_from=['FlexBase', 'RyanOnTheInside']) + + # FlexAudioVisualizerLine tooltips (inherits from: FlexAudioVisualizerBase) + TooltipManager.register_tooltips("FlexAudioVisualizerLine", { + "visualization_method": "Visualization style ('bar' or 'line')", + "visualization_feature": "Data source for visualization ('frequency' or 'waveform')", + "smoothing": "Amount of smoothing applied to the visualization (0.0 to 1.0)", + "rotation": "Rotation angle in degrees (0.0 to 360.0)", + "length": "Length of the visualization in pixels. 0 means auto-fit to screen edges based on rotation (0.0 to 4000.0)", + "num_bars": "Number of bars/points in visualization (1 to 1024)", + "max_height": "Maximum height of visualization (10.0 to 2000.0)", + "min_height": "Minimum height of visualization (0.0 to 500.0)", + "separation": "Separation between bars (0.0 to 100.0)", + "curvature": "Curvature of bar corners (0.0 to 50.0)", + "reflect": "Whether to draw visualization upward (false) or downward (true) from baseline", + "curve_smoothing": "Smoothing for line visualization (0.0 to 1.0)", + "fft_size": "FFT window size for frequency analysis (256 to 8192)", + "min_frequency": "Minimum frequency to visualize (20.0 to 20000.0 Hz)", + "max_frequency": "Maximum frequency to visualize (20.0 to 20000.0 Hz)" + }, inherits_from='FlexAudioVisualizerBase') + + # FlexAudioVisualizerCircular tooltips (inherits from: FlexAudioVisualizerBase) + TooltipManager.register_tooltips("FlexAudioVisualizerCircular", { + "visualization_method": "Visualization style ('bar' or 'line')", + "visualization_feature": "Data source for visualization ('frequency' or 'waveform')", + "smoothing": "Amount of smoothing applied to the visualization (0.0 to 1.0)", + "rotation": "Rotation angle in degrees (0.0 to 360.0)", + "num_points": "Number of points in circular visualization (3 to 1000)", + "fft_size": "FFT window size for frequency analysis (256 to 8192)", + "min_frequency": "Minimum frequency to visualize (20.0 to 20000.0 Hz)", + "max_frequency": "Maximum frequency to visualize (20.0 to 20000.0 Hz)", + "radius": "Radius of visualization (10.0 to 1000.0 pixels)", + "line_width": "Width of visualization lines (1 to 10 pixels)", + "amplitude_scale": "Scaling factor for amplitude (1.0 to 1000.0)", + "base_radius": "Base radius for visualization (10.0 to 1000.0 pixels)" + }, inherits_from='FlexAudioVisualizerBase') + + # FlexAudioVisualizerContour tooltips (inherits from: FlexAudioVisualizerBase) + TooltipManager.register_tooltips("FlexAudioVisualizerContour", { + "visualization_method": """Visualization style: +- bar: Individual bars extending from the contour +- line: Continuous line following the contour""", + "visualization_feature": """Data source for visualization: +- frequency: Shows frequency spectrum analysis +- waveform: Shows direct audio amplitude""", + "smoothing": "Amount of smoothing applied to the visualization (0.0 to 1.0)", + "rotation": "Rotation angle in degrees (0.0 to 360.0)", + "num_points": "Number of points in contour visualization (3 to 1000)", + "fft_size": "FFT window size for frequency analysis (256 to 8192)", + "min_frequency": "Minimum frequency to visualize (20.0 to 20000.0 Hz)", + "max_frequency": "Maximum frequency to visualize (20.0 to 20000.0 Hz)", + "bar_length": "Length of bars extending from contour (1.0 to 100.0 pixels)", + "line_width": "Width of visualization lines (1 to 10 pixels)", + "contour_smoothing": "Amount of smoothing applied to the contour (0 to 50)", + "mask": "Input mask to find contours from - can contain multiple distinct areas", + "direction": """Direction of the visualization relative to the contour: +- outward: Extends away from the contour +- inward: Extends towards the center of the contour +- both: Shows both inward and outward effects simultaneously""", + "min_contour_area": "Minimum area threshold for detecting contours (0.0 to 10000.0)", + "max_contours": "Maximum number of contours to process (1 to 20)", + "distribute_by": """How to distribute audio data among multiple contours: +- area: Larger contours get more data points +- perimeter: Longer contours get more data points +- equal: All contours get equal data points""" + }, inherits_from='FlexAudioVisualizerBase', description="""Visualize audio features along mask contours with customizable effects. + +Perfect for creating audio-reactive animations that follow the edges of masks. +Supports multiple contours and various visualization styles.""") + + # FlexAudioBase tooltips (inherits from: FlexBase, RyanOnTheInside) + TooltipManager.register_tooltips("FlexAudioBase", { + "audio": "Input audio to be processed", + "target_fps": "Target frames per second for processing (1.0 to 60.0 fps)", + "opt_feature": "Optional feature input for parameter modulation", + "opt_feature_pipe": "Optional feature pipe for frame synchronization", + "strength": "Overall strength of the effect (0.0 to 1.0)", + "feature_threshold": "Minimum feature value to apply the effect (0.0 to 1.0)", + "feature_param": "Parameter to be modulated by the feature", + "feature_mode": "How the feature modulates the parameter ('relative' or 'absolute')" + }, inherits_from=['FlexBase', 'RyanOnTheInside']) + + # FlexAudioPitchShift tooltips (inherits from: FlexAudioBase) + TooltipManager.register_tooltips("FlexAudioPitchShift", { + "n_steps": "Amount of pitch shift in semitones (0.0 to 12.0)" + }, inherits_from='FlexAudioBase') + + # FlexAudioTimeStretch tooltips (inherits from: FlexAudioBase) + TooltipManager.register_tooltips("FlexAudioTimeStretch", { + "rate": "Time stretching factor (0.5 to 2.0)" + }, inherits_from='FlexAudioBase', description="Time stretch the audio") + + #AudioNodeBase tooltips + TooltipManager.register_tooltips("AudioNodeBase", { + "audio": "Input audio to be processed" + }, inherits_from='RyanOnTheInside', description="Manipulate audio in various ways") + + # AudioUtility tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("AudioUtility", { + "audio": "Input audio to be processed" + }, inherits_from='AudioNodeBase') + + # AudioPad tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioPad", { + "audio": "Input audio to be processed", + "pad_left": "Number of samples to pad on the left side (0 to 44100)", + "pad_right": "Number of samples to pad on the right side (0 to 44100)", + "pad_mode": "Method of padding ('constant', 'reflect', 'replicate', or 'circular')" + }, inherits_from='AudioUtility') + + # AudioVolumeNormalization tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioVolumeNormalization", { + "audio": "Input audio to be processed", + "target_level": "Desired RMS level in decibels (-60.0 to 0.0 dB)" + }, inherits_from='AudioUtility') + + # AudioResample tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioResample", { + "audio": "Input audio to be processed", + "new_sample_rate": "Desired new sample rate (8000 to 192000 Hz)" + }, inherits_from='AudioUtility') + + # AudioChannelMerge tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioChannelMerge", { + "audio_list": "List of audio channels to merge" + }, inherits_from='AudioUtility') + + # AudioChannelSplit tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioChannelSplit", { + "audio": "Input stereo audio to be split" + }, inherits_from='AudioUtility') + + # AudioConcatenate tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioConcatenate", { + "audio1": "First input audio", + "audio2": "Second input audio" + }, inherits_from='AudioUtility') + + # Audio_Combine tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("Audio_Combine", { + "audio1": "First input audio", + "audio2": "Second input audio", + "weight1": "Weight for the first audio input (0.0 to 1.0)", + "weight2": "Weight for the second audio input (0.0 to 1.0)" + }, inherits_from='AudioUtility') + + # AudioSubtract tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioSubtract", { + "audio1": "First input audio", + "audio2": "Second input audio" + }, inherits_from='AudioUtility') + + # AudioInfo tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioInfo", { + "audio": "Input audio to analyze", + "frame_rate": "Target frame rate for animation timing calculations (frames per second)", + "total_frames": "Total number of frames based on audio duration and frame rate", + "frames_per_beat": "Number of frames per musical beat at the detected tempo", + "frames_per_bar": "Number of frames per musical bar (assumes 4/4 time signature)", + "frames_per_quarter": "Number of frames per quarter note", + "frames_per_eighth": "Number of frames per eighth note", + "audio_duration": "Total duration of the audio in seconds", + "beats_per_second": "Number of beats per second based on detected tempo", + "detected_bpm": "Detected tempo in beats per minute (BPM)", + "sample_rate": "Audio sample rate in Hz", + "num_channels": "Number of audio channels (1 for mono, 2 for stereo)", + "num_samples": "Total number of audio samples", + "max_amplitude": "Maximum absolute amplitude in the audio (0.0 to 1.0)", + "mean_amplitude": "Mean absolute amplitude across all samples (0.0 to 1.0)", + "rms_amplitude": "Root mean square amplitude - indicates overall perceived loudness (0.0 to 1.0)", + "bit_depth": "Bit depth of the audio data (e.g., float32, int16)" + }, inherits_from='AudioUtility', description="""Analyzes audio to provide timing and technical information. + +Perfect for: +- Synchronizing animations with music using detected BPM +- Planning keyframes based on musical timing +- Understanding audio properties for processing +- Creating amplitude-based effects""") + + # AudioDither tooltips (inherits from: AudioUtility) + TooltipManager.register_tooltips("AudioDither", { + "audio": "Input audio to apply dithering", + "bit_depth": "Target bit depth (8 to 32)", + "noise_shaping": "Type of noise shaping to apply ('none' or 'triangular')" + }, inherits_from='AudioUtility') + + # AudioEffect tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("AudioEffect", { + "audio": "Input audio to apply effect" + }, inherits_from='AudioNodeBase') + + # AudioPitchShift tooltips (inherits from: AudioEffect) + TooltipManager.register_tooltips("AudioPitchShift", { + "audio": "Input audio to be processed", + "n_steps": "Amount of pitch shift in semitones (-12 to 12)" + }, inherits_from='AudioEffect') + + # AudioFade tooltips (inherits from: AudioEffect) + TooltipManager.register_tooltips("AudioFade", { + "audio": "Input audio to be processed", + "fade_in_duration": "Duration of fade in (seconds)", + "fade_out_duration": "Duration of fade out (seconds)", + "shape": "Shape of the fade curve ('linear', 'exponential', 'logarithmic', 'quarter_sine', 'half_sine')" + }, inherits_from='AudioEffect') + + # AudioGain tooltips (inherits from: AudioEffect) + TooltipManager.register_tooltips("AudioGain", { + "audio": "Input audio to be processed", + "gain_db": "Gain factor in decibels (-20.0 to 20.0 dB)" + }, inherits_from='AudioEffect') + + # AudioTimeStretch tooltips (inherits from: AudioEffect) + TooltipManager.register_tooltips("AudioTimeStretch", { + "audio": "Input audio to be processed", + "rate": "Time stretching factor (0.5 to 2.0)" + }, inherits_from='AudioEffect') + + # AudioNodeBase tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("AudioNodeBase", { + "audio": "Input audio to be processed" + }, inherits_from='RyanOnTheInside') + + # DownloadOpenUnmixModel tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("DownloadOpenUnmixModel", { + "model_type": "Model type to download ('umxl' for compressed stems, 'umxhq' for uncompressed MUSDB18-HQ)" + }, inherits_from='AudioNodeBase') + + # AudioSeparatorSimple tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("AudioSeparatorSimple", { + "model": "OpenUnmix model for audio separation", + "audio": "Input audio to be separated into stems" + }, inherits_from='AudioNodeBase') + + # AudioFilter tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("AudioFilter", { + "audio": "Input audio to be filtered", + "filters": "Frequency filters to be applied" + }, inherits_from='AudioNodeBase') + + # FrequencyFilterPreset tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("FrequencyFilterPreset", { + "preset": "Predefined filter preset to use", + "previous_filter": "Previous filter chain to append to (optional)" + }, inherits_from='AudioNodeBase') + + # FrequencyFilterCustom tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("FrequencyFilterCustom", { + "filter_type": "Type of filter (lowpass, highpass, bandpass)", + "order": "Filter order (1 to 10)", + "cutoff": "Cutoff frequency (20 to 20000 Hz)", + "previous_filter": "Previous filter chain to append to (optional)" + }, inherits_from='AudioNodeBase') + + # FrequencyRange tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("FrequencyRange", { + "low_cutoff": "Lower cutoff frequency (20 to 20000 Hz)", + "high_cutoff": "Upper cutoff frequency (20 to 20000 Hz)", + "order": "Filter order (1 to 10)", + "previous_range": "Previous frequency range to append to (optional)" + }, inherits_from='AudioNodeBase') + + # AudioFeatureVisualizer tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("AudioFeatureVisualizer", { + "audio": "Input audio to visualize", + "video_frames": "Video frames to overlay visualization on", + "visualization_type": "Type of visualization (waveform, spectrogram, mfcc, chroma, tonnetz, spectral_centroid)", + "frame_rate": "Frame rate of the visualization (0.1 to 120 fps)", + "x_axis": "X-axis scale type", + "y_axis": "Y-axis scale type", + "cmap": "Color map for the visualization", + "visualizer": "Visualization backend to use (pygame or matplotlib)" + }, inherits_from='AudioNodeBase') + + # EmptyImageFromAudio tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("EmptyImageFromAudio", { + "audio": "Input audio to determine frame count", + "frame_rate": "Frame rate of the output image sequence (0.1 to 120 fps)", + "height": "Height of the output images (16 to 4096 pixels)", + "width": "Width of the output images (16 to 4096 pixels)" + }, inherits_from='AudioNodeBase') + + # EmptyMaskFromAudio tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("EmptyMaskFromAudio", { + "audio": "Input audio to determine frame count", + "frame_rate": "Frame rate of the output mask sequence (0.1 to 120 fps)", + "height": "Height of the output masks (16 to 4096 pixels)", + "width": "Width of the output masks (16 to 4096 pixels)" + }, inherits_from='AudioNodeBase') + + # EmptyImageAndMaskFromAudio tooltips (inherits from: AudioNodeBase) + TooltipManager.register_tooltips("EmptyImageAndMaskFromAudio", { + "audio": "Input audio to determine frame count", + "frame_rate": "Frame rate of the output sequences (0.1 to 120 fps)", + "height": "Height of the output images and masks (16 to 4096 pixels)", + "width": "Width of the output images and masks (16 to 4096 pixels)" + }, inherits_from='AudioNodeBase') + + diff --git a/tooltips/categories/depth.py b/tooltips/categories/depth.py new file mode 100644 index 0000000..3d1fb17 --- /dev/null +++ b/tooltips/categories/depth.py @@ -0,0 +1,39 @@ +"""Tooltips for depth-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for depth nodes""" + + # FlexDepthBase tooltips (inherits from: RyanOnTheInside, FlexBase) + TooltipManager.register_tooltips("FlexDepthBase", { + "depth_maps": "Input depth maps to be processed", + "strength": "Overall strength of the effect (0.0 to 1.0)", + "feature_threshold": "Minimum feature value to apply the effect (0.0 to 1.0)", + "feature_param": "Parameter to be modulated by the feature", + "feature_mode": "How the feature modulates the parameter ('relative' or 'absolute')", + "opt_feature": "Optional feature input for parameter modulation", + "opt_feature_pipe": "Optional feature pipe for frame synchronization" + }, inherits_from=['RyanOnTheInside', 'FlexBase']) + + # DepthInjection tooltips (inherits from: FlexDepthBase) + TooltipManager.register_tooltips("DepthInjection", { + "mask": "Input mask defining areas for depth modification", + "gradient_steepness": "Controls the steepness of the spherical gradient (0.1 to 10.0)", + "depth_min": "Minimum depth value for the modified areas (0.0 to 1.0)", + "depth_max": "Maximum depth value for the modified areas (0.0 to 1.0)" + }, inherits_from='FlexDepthBase') + + # DepthBlender tooltips (inherits from: FlexDepthBase) + TooltipManager.register_tooltips("DepthBlender", { + "other_depth_maps": "Secondary depth maps to blend with", + "blend_mode": "Method of blending ('add', 'subtract', 'multiply', 'average')" + }, inherits_from='FlexDepthBase') + + # DepthRippleEffect tooltips (inherits from: FlexDepthBase) + TooltipManager.register_tooltips("DepthRippleEffect", { + "ripple_amplitude": "Amplitude of the ripple effect (0.0 to 0.5)", + "ripple_frequency": "Frequency of the ripples (1.0 to 100.0)", + "ripple_phase": "Phase offset of the ripples (0.0 to 2π)", + "curvature": "Interpolation between linear and circular patterns (0.0 to 1.0)" + }, inherits_from='FlexDepthBase') diff --git a/tooltips/categories/doom.py b/tooltips/categories/doom.py new file mode 100644 index 0000000..2609f15 --- /dev/null +++ b/tooltips/categories/doom.py @@ -0,0 +1,11 @@ +"""Tooltips for doom-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for doom nodes""" + + # Doom tooltips + TooltipManager.register_tooltips("Doom", { + # TODO: Add parameter tooltips + }, description="It's Doom.") diff --git a/tooltips/categories/flex.py b/tooltips/categories/flex.py new file mode 100644 index 0000000..d5917f5 --- /dev/null +++ b/tooltips/categories/flex.py @@ -0,0 +1,807 @@ +"""Tooltips for flex-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for flex nodes""" + + # EffectVisualizer tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("EffectVisualizer", { + "video_frames": "Input video frames (IMAGE type)", + "feature": "Feature to visualize (FEATURE type)", + "text_color": "Color for text overlay (RGB string, e.g., \"(255,255,255)\")", + "font_scale": "Scale factor for the font size (0.1 to 2.0)" + }, inherits_from='RyanOnTheInside') + + # ProximityVisualizer tooltips (inherits from: EffectVisualizer) + TooltipManager.register_tooltips("ProximityVisualizer", { + "anchor_locations": "Locations of anchor points (LOCATION type)", + "query_locations": "Locations of query points (LOCATION type)", + "feature": "Proximity feature to visualize (FEATURE type)", + "anchor_color": "Color for anchor points (RGB string, e.g., \"(255,0,0)\")", + "query_color": "Color for query points (RGB string, e.g., \"(0,255,0)\")", + "line_color": "Color for the line connecting closest points (RGB string, e.g., \"(0,0,255)\")" + }, inherits_from='EffectVisualizer') + + # PitchVisualizer tooltips (inherits from: EffectVisualizer) + TooltipManager.register_tooltips("PitchVisualizer", { + "video_frames": "Input video frames (IMAGE type)", + "feature": "Pitch feature to visualize (FEATURE type)", + "text_color": "Color of the text overlay (RGB string, e.g., \"(255,255,255)\")", + "font_scale": "Scale factor for the font size (0.1 to 2.0)" + }, inherits_from='EffectVisualizer') + + # FlexBase tooltips (inherits from: ABC) + TooltipManager.register_tooltips("FlexBase", { + "strength": """Overall strength of the effect (0.0 to 1.0) + +Higher values create more dramatic changes, while lower values are more subtle.""", + "feature_threshold": """Minimum feature value to trigger the effect (0.0 to 1.0) + +Only applies the effect when the feature value exceeds this threshold. +Lower values make the effect more sensitive, higher values make it more selective.""", + "feature_param": """Choose which parameter of the effect to modulate + +Each effect type has different parameters you can control. +Hover over each option to see what it does.""", + "feature_mode": """How to apply the feature modulation: +- relative: Changes are centered around the original value +- absolute: Changes scale directly from zero to the maximum""", + "opt_feature": """Optional feature input for modulation + +Connect any feature node here to control the effect. +Features can come from audio, motion, color, or other sources.""" + }, inherits_from='ABC', description="""Use features from audio, MIDI, motion, or other sources to dynamically control and animate node parameters. + +Features can modulate a variety of parameters to create dynamic effects that respond to your content. +Great for creating music videos, reactive animations, or automated effects.""") + + # FlexExpressionEditor tooltips (inherits from: ExpressionEditor) + TooltipManager.register_tooltips("FlexExpressionEditor", { + "feature": "Feature used to modulate the effect (FEATURE type)", + "feature_pipe": "Feature pipe containing frame information (FEATURE_PIPE type)", + "feature_threshold": "Threshold for feature activation (0.0 to 1.0)" + }, inherits_from='ExpressionEditor', description="Use flex-features to control the facial expressions. Click the '?' icon to find tutorial video on YouTube.") + + # ManualFeaturePipe tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ManualFeaturePipe", { + "frame_rate": "Frame rate of the video (1.0 to 120.0 fps)", + "frame_count": "Total number of frames (minimum: 1)", + "width": "Width of the output feature (64 to 4096)", + "height": "Height of the output feature (64 to 4096)" + }, inherits_from='RyanOnTheInside') + + # FeatureModulationBase tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("FeatureModulationBase", { + "feature": "Input feature to be processed", + "feature_pipe": "Feature pipe for frame synchronization" + }, inherits_from='RyanOnTheInside', description="Process and modify features to create custom animation curves. Combine multiple features, adjust timing, or transform values to achieve desired effects.") + + # ProcessedFeature tooltips (inherits from: type) + TooltipManager.register_tooltips("ProcessedFeature", { + # TODO: Add parameter tooltips + }, inherits_from='type') + + # FeatureMixer tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureMixer", { + "base_gain": "Overall amplification of the feature values (0.0 to 10.0)", + "floor": "Minimum value for the processed feature (0.0 to 1.0)", + "ceiling": "Maximum value for the processed feature (0.0 to 10.0)", + "peak_sharpness": "Sharpness of peaks in the feature curve (0.1 to 10.0)", + "valley_sharpness": "Sharpness of valleys in the feature curve (0.1 to 10.0)", + "attack": "Speed at which the envelope follower responds to increasing values (0.01 to 1.0)", + "release": "Speed at which the envelope follower responds to decreasing values (0.01 to 1.0)", + "smoothing": "Amount of smoothing applied to the final curve (0.0 to 1.0)" + }, inherits_from='FeatureModulationBase') + + # FeatureScaler tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureScaler", { + "scale_type": "Type of scaling to apply (\"linear\", \"logarithmic\", \"exponential\", \"inverse\")", + "min_output": "Minimum output value after scaling (0.0 to 1.0)", + "max_output": "Maximum output value after scaling (0.0 to 1.0)", + "exponent": "Exponent for exponential scaling (0.1 to 10.0)" + }, inherits_from='FeatureModulationBase') + + # FeatureCombine tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureCombine", { + "feature1": "First input feature", + "feature2": "Second input feature", + "operation": "Mathematical operation to perform (\"add\", \"subtract\", \"multiply\", \"divide\", \"max\", \"min\")", + "weight1": "Weight applied to feature1 (0.0 to 1.0)", + "weight2": "Weight applied to feature2 (0.0 to 1.0)" + }, inherits_from='FeatureModulationBase') + + # FeatureMath tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureMath", { + "y": "Input value", + "operation": "Mathematical operation to perform (\"add\", \"subtract\", \"multiply\", \"divide\", \"max\", \"min\")" + }, inherits_from='FeatureModulationBase') + + # FeatureSmoothing tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureSmoothing", { + "smoothing_type": "Type of smoothing to apply (\"moving_average\", \"exponential\", \"gaussian\")", + "window_size": "Size of the smoothing window for moving average and gaussian (3 to 21, odd numbers only)", + "alpha": "Smoothing factor for exponential smoothing (0.0 to 1.0)", + "sigma": "Standard deviation for gaussian smoothing (0.1 to 5.0)" + }, inherits_from='FeatureModulationBase') + + # FeatureOscillator tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureOscillator", { + "oscillator_type": "Type of oscillation (\"sine\", \"square\", \"sawtooth\", \"triangle\")", + "frequency": "Frequency of oscillation (0.1 to 10.0)", + "amplitude": "Amplitude of oscillation (0.0 to 1.0)", + "phase_shift": "Phase shift of oscillation (0.0 to 2π)", + "blend": "Blend factor between original feature and oscillation (0.0 to 1.0)" + }, inherits_from='FeatureModulationBase') + + # FeatureFade tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureFade", { + "feature1": "First input feature to fade from", + "feature2": "Second input feature to fade to", + "fader": "Static fader value to control the blend (0.0 to 1.0)", + "control_feature": "Optional feature to dynamically control the fader value" + }, inherits_from='FeatureModulationBase') + + # FeatureRebase tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureRebase", { + "lower_threshold": "Lower threshold for feature values (0.0 to 1.0)", + "upper_threshold": "Upper threshold for feature values (0.0 to 1.0)", + "invert_output": "Whether to invert the output feature values" + }, inherits_from='FeatureModulationBase') + + # FeatureRenormalize tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureRenormalize", { + "feature": "Input feature to be renormalized", + "lower_threshold": "Minimum value for the normalized output (-10000.0 to 10000.0)", + "upper_threshold": "Maximum value for the normalized output (-10000.0 to 10000.0)" + }, inherits_from='FeatureModulationBase') + + # PreviewFeature tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("PreviewFeature", { + "feature": "Input feature to preview" + }, inherits_from='FeatureModulationBase') + + # FeatureTruncateOrExtend tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureTruncateOrExtend", { + "feature": "Input feature to truncate or extend", + "target_feature_pipe": "Feature pipe to match length with", + "fill_method": "Method to fill extended frames ('zeros', 'ones', 'average', 'random', 'repeat')" + }, inherits_from='FeatureModulationBase') + + # FeatureAccumulate tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureAccumulate", { + "feature": "Input feature to accumulate", + "start": "Starting value for normalized output (0.0 to 1.0)", + "end": "Ending value for normalized output (0.0 to 1.0)", + "threshold": "Minimum value to consider for accumulation (0.0 to 1.0)", + "skip_thresholded": "Whether to skip values below threshold", + "frames_window": "Number of frames to process at once (0 for all frames)", + "deccumulate": "Whether to alternate accumulation direction between windows" + }, inherits_from='FeatureModulationBase') + + # FeatureContiguousInterpolate tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureContiguousInterpolate", { + "feature": "Input feature to interpolate", + "threshold": "Threshold for identifying contiguous segments (0.0 to 1.0)", + "start": "Starting value for interpolation (0.0 to 1.0)", + "end": "Ending value for interpolation (0.0 to 1.0)", + "easing": "Easing function for interpolation", + "fade_out": "Number of frames for fade-out after each segment (0 to 100)" + }, inherits_from='FeatureModulationBase') + + # ProximityFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("ProximityFeatureNode", { + "anchor_locations": "Reference locations for proximity calculation", + "query_locations": "Locations to calculate proximity from anchors", + "normalization_method": "Method to normalize proximity values ('frame' or 'minmax')" + }, inherits_from='FeatureExtractorBase') + + # ProximityFeatureInput tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ProximityFeatureInput", { + # Base class with no direct parameters + }, inherits_from='RyanOnTheInside', description="Create and manipulate location data for proximity-based effects. Track distances between points, analyze spatial relationships, and generate position-based animations.") + + # LocationFromMask tooltips (inherits from: ProximityFeatureInput) + TooltipManager.register_tooltips("LocationFromMask", { + "masks": "Input masks to extract locations from", + "method": "Method to extract locations ('mask_boundary' or 'mask_center')", + "depth_maps": "Optional depth maps for z-coordinate extraction" + }, inherits_from='ProximityFeatureInput') + + # LocationFromPoint tooltips (inherits from: ProximityFeatureInput) + TooltipManager.register_tooltips("LocationFromPoint", { + "x": "X-coordinate of the point (0.0 or greater)", + "y": "Y-coordinate of the point (0.0 or greater)", + "z": "Z-coordinate of the point (0.0 to 1.0)", + "batch_count": "Number of copies to generate (minimum: 1)" + }, inherits_from='ProximityFeatureInput') + + # LocationTransform tooltips (inherits from: ProximityFeatureInput) + TooltipManager.register_tooltips("LocationTransform", { + "locations": "Input locations to transform", + "feature": "Feature to modulate the transformation", + "transformation_type": "Type of transformation ('translate' or 'scale')", + "transformation_value": "Scale factor for the transformation (default: 1.0)" + }, inherits_from='ProximityFeatureInput') + + # MIDILoadAndExtract tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("MIDILoadAndExtract", { + "midi_file": "MIDI file to load from the midi_files directory", + "extraction_method": """Choose what MIDI information to analyze: + +- Velocity: How hard notes are played - great for impact-based effects +- Pitch: Which notes are being played - good for melody-following effects +- Note On/Off: When notes start/stop - perfect for precise timing +- Note Duration: How long notes are held - use for sustained effects +- Note Density: How many notes are playing - good for complexity-based effects +- Pitchbend: Pitch wheel movements - great for smooth transitions +- Aftertouch: Key pressure changes - useful for pressure-sensitive effects +- Poly Pressure: Per-note pressure - detailed expression control +- Modulation (CC1): Mod wheel - typically used for vibrato/intensity +- Breath (CC2): Breath controller - good for wind instrument effects +- Foot Controller (CC4): Foot pedal - useful for gradual changes +- Volume (CC7): Channel volume - overall level control +- Balance (CC8): Stereo balance - left/right positioning +- Pan (CC10): Stereo panning - spatial movement +- Expression (CC11): Expression control - dynamic volume changes +- Sustain (CC64): Sustain pedal - on/off state""", + "track_selection": "Track to analyze ('all' or specific track number)", + "chord_only": "When true, only considers full chords (default: false)", + "notes": "Comma-separated list of MIDI note numbers (default: empty)" + }, inherits_from='FeatureExtractorBase') + + # AudioFeatureExtractor tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("AudioFeatureExtractor", { + "audio": "Input audio to analyze", + "extraction_method": """Choose how to analyze the audio: + +- amplitude_envelope: Overall loudness changes - great for syncing with dramatic moments +- rms_energy: Continuous energy level - smoother than amplitude, good for sustained effects +- spectral_centroid: Brightness of the sound - high for sharp/crisp sounds, low for bass/warm sounds +- onset_strength: Detects new sounds/beats - perfect for rhythmic effects +- chroma_features: Musical note content - useful for harmony-based effects""", + "frame_count": """Number of frames to generate (default of 0 will automatically calculate frames from audio length and frame rate). + +When set to 0, automatically calculates frames from audio length and frame rate. +When specified, interpolates feature to match the target frame count.""" + }, inherits_from='FeatureExtractorBase') + + # RhythmFeatureExtractor tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("RhythmFeatureExtractor", { + "audio": "Input audio to analyze", + "extraction_method": """Choose how to analyze the rhythm: + +- beat_locations: Marks exact beat timings - perfect for precise beat-synced effects +- tempo: Overall speed of the music - use for speed-based animations +- onset_strength: How strong each beat is - great for impact-based effects +- beat_emphasis: Highlights stronger beats - good for accenting main beats +- syncopation: Detects off-beat rhythms - interesting for complex animations +- rhythm_regularity: How steady the rhythm is - use for stability-based effects +- down_beats: Marks main beats (1st beat) - strong rhythmic emphasis +- up_beats: Marks other beats - lighter rhythmic emphasis""", + "time_signature": "Number of beats per measure (e.g., 4 for 4/4 time)", + "frame_count": """Number of frames to generate (default of 0 will automatically calculate frames from audio length and frame rate). + +When set to 0, automatically calculates frames from audio length and frame rate. +When specified, interpolates feature to match the target frame count.""" + }, inherits_from='FeatureExtractorBase') + + # PitchFeatureExtractor tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("PitchFeatureExtractor", { + "audio": "Input audio to analyze", + "extraction_method": """Choose how to analyze the pitch: + +- frequency: Raw pitch frequency - good for following melody +- semitone: Rounds to nearest musical note - better for musical effects +- pitch_direction: Whether pitch is rising or falling - great for directional animations +- vibrato_signal: Detects pitch wobble - perfect for tremolo effects +- vibrato_strength: How intense the vibrato is - use for intensity-based effects""", + "opt_crepe_model": """CREPE model size for pitch detection: +- none: Use basic pitch detection +- tiny/small: Fast but less accurate +- medium: Good balance of speed and accuracy +- large/full: Most accurate but slower""", + "opt_pitch_range_collections": "Optional collections of pitch ranges to consider", + "frame_count": """Number of frames to generate (default of 0 will automatically calculate frames from audio length and frame rate). + + +When set to 0, automatically calculates frames from audio length and frame rate. +When specified, interpolates feature to match the target frame count.""" + }, inherits_from='FeatureExtractorBase') + + # PitchAbstraction tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("PitchAbstraction", { + # Base class with no direct parameters + }, inherits_from='RyanOnTheInside', description="Work with musical pitch data to create audio-reactive effects. Define pitch ranges, detect specific notes, and create animations based on vocal or instrumental frequencies.") + + # PitchRangeNode tooltips (inherits from: PitchAbstraction) + TooltipManager.register_tooltips("PitchRangeNode", { + "min_pitch": "Minimum frequency of the pitch range in Hz (20.0 to 2000.0)", + "max_pitch": "Maximum frequency of the pitch range in Hz (20.0 to 2000.0)", + "previous_range_collection": "Optional previous pitch range collection to append to" + }, inherits_from='PitchAbstraction') + + # PitchRangePresetNode tooltips (inherits from: PitchAbstraction) + TooltipManager.register_tooltips("PitchRangePresetNode", { + "preset": "Preset vocal range to use ('Bass', 'Baritone', 'Tenor', 'Alto', 'Mezzo-soprano', 'Soprano', 'Contralto')", + "previous_range_collection": "Optional previous pitch range collection to append to" + }, inherits_from='PitchAbstraction') + + # PitchRangeByNoteNode tooltips (inherits from: PitchAbstraction) + TooltipManager.register_tooltips("PitchRangeByNoteNode", { + "chord_only": "If true, only detects when all specified notes are present simultaneously", + "pitch_tolerance_percent": "Tolerance percentage for pitch detection (0.0 to 100.0)", + "notes": "Comma-separated list of MIDI note numbers", + "previous_range_collection": "Optional previous pitch range collection to append to" + }, inherits_from='PitchAbstraction') + + # FeatureExtractorBase tooltips (inherits from: RyanOnTheInside, ABC) + TooltipManager.register_tooltips("FeatureExtractorBase", { + "extraction_method": "Method used to extract features", + "frame_rate": "Frame rate of the video (1.0 to 120.0 fps)", + "frame_count": "Total number of frames (minimum: 1)", + "width": "Width of the output feature (64 to 4096)", + "height": "Height of the output feature (64 to 4096)" + }, inherits_from=['RyanOnTheInside', 'ABC'], description="Feature extractors allow you to extract animation data from various sources like audio, video, or manual input. Use this with the FlexFeature compatible nodes to convert real-world information into features that can control effects and animations.") + + # ManualFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("ManualFeatureNode", { + "frame_numbers": "Comma-separated list of frame numbers (e.g., \"0,10,20\")", + "values": "Comma-separated list of values (e.g., \"0.0,0.5,1.0\")", + "last_value": "Value for the last frame (default: 1.0)", + "interpolation_method": "Method for interpolating between values ('none', 'linear', 'ease_in', 'ease_out')" + }, inherits_from='FeatureExtractorBase') + + # ManualFeatureFromPipe tooltips (inherits from: ManualFeatureNode) + TooltipManager.register_tooltips("ManualFeatureFromPipe", { + "feature_pipe": "Input feature pipe", + "frame_numbers": "Comma-separated list of frame numbers (e.g., \"0,10,20\")", + "values": "Comma-separated list of values (e.g., \"0.0,0.5,1.0\")", + "last_value": "Value for the last frame (default: 1.0)" + }, inherits_from='ManualFeatureNode') + + # TimeFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("TimeFeatureNode", { + "speed": "How quickly the effect progresses (0.1 to 10.0)", + "offset": "Shifts the starting point of the effect (0.0 to 1.0)" + }, inherits_from='FeatureExtractorBase') + + # DepthFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("DepthFeatureNode", { + "depth_maps": "Input depth maps to analyze", + "extraction_method": """Choose how to analyze the depth information: + +- mean_depth: Overall depth of the scene - higher when objects are further away +- depth_variance: How much depth varies in the scene - higher for complex 3D scenes +- depth_range: Distance between closest and farthest points +- gradient_magnitude: How sharply depth changes - high for edges and steep surfaces +- foreground_ratio: Percentage of scene in the front layer +- midground_ratio: Percentage of scene in the middle layer +- background_ratio: Percentage of scene in the back layer""" + }, inherits_from='FeatureExtractorBase') + + # ColorFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("ColorFeatureNode", { + "images": "Input images to analyze", + "extraction_method": """Choose how to analyze the colors: + +- dominant_color: Most prominent color in the scene +- color_variance: How much colors vary - higher for colorful scenes +- saturation: Overall color intensity +- red_ratio: Amount of red in the scene +- green_ratio: Amount of green in the scene +- blue_ratio: Amount of blue in the scene""" + }, inherits_from='FeatureExtractorBase') + + # BrightnessFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("BrightnessFeatureNode", { + "images": "Input images to analyze", + "extraction_method": """Choose how to analyze brightness: + +- mean_brightness: Overall brightness of the scene +- brightness_variance: How much brightness varies - high for high contrast scenes +- brightness_histogram: Distribution of brightness values +- dark_ratio: Percentage of dark areas in the scene +- mid_ratio: Percentage of medium-bright areas +- bright_ratio: Percentage of bright areas""" + }, inherits_from='FeatureExtractorBase') + + # MotionFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("MotionFeatureNode", { + "images": "Input images to analyze", + "extraction_method": """Choose how to analyze motion: + +- mean_motion: Overall amount of movement in the scene +- max_motion: Speed of the fastest moving parts +- motion_direction: Main direction of movement +- horizontal_motion: Amount of left-right movement +- vertical_motion: Amount of up-down movement +- motion_complexity: How chaotic or varied the motion is +- motion_speed: Speed of movement adjusted for frame rate""", + "flow_method": "Method for calculating optical flow ('Farneback', 'LucasKanade', 'PyramidalLK')", + "flow_threshold": "Minimum motion magnitude to consider (0.0 to 10.0)", + "magnitude_threshold": "Relative threshold for motion magnitude (0.0 to 1.0)" + }, inherits_from='FeatureExtractorBase') + + # AreaFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("AreaFeatureNode", { + "masks": "Input mask sequence to analyze", + "extraction_method": """Choose how to analyze the masked area: + +- total_area: Total size of the masked region - good for tracking overall coverage +- largest_contour: Size of the biggest connected region - useful for tracking main objects +- bounding_box: Area of the rectangle containing the mask - great for object size changes""", + "threshold": "Threshold value for considering pixels as part of the area (0.0 to 1.0)" + }, inherits_from='FeatureExtractorBase') + + # DrawableFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("DrawableFeatureNode", { + "points": "JSON string of [frame, value] pairs", + "extraction_method": """Choose how to analyze drawn points: + +- drawn: Creates a feature from manually specified points - perfect for custom animations""", + "min_value": "Minimum value for the feature (-100.0 to 100.0)", + "max_value": "Maximum value for the feature (-100.0 to 100.0)", + "interpolation_method": """Method for interpolating between points: +- linear: Smooth straight-line transitions +- cubic: Smooth curved transitions +- nearest: Snap to closest point +- zero: No interpolation, instant changes +- hold: Keep previous value until next point +- ease_in: Gradually accelerate changes +- ease_out: Gradually decelerate changes""", + "fill_value": "Value to use for undefined regions (-100.0 to 100.0)" + }, inherits_from='FeatureExtractorBase') + + # FlexExternalModulator tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("FlexExternalModulator", { + # Base class with no direct parameters + }, inherits_from='RyanOnTheInside') + + # FeatureToWeightsStrategy tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("FeatureToWeightsStrategy", { + "feature": "Input feature to be converted to weights" + }, inherits_from='FlexExternalModulator') + + # FeatureToSplineData tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("FeatureToSplineData", { + "feature": "Input feature to be converted to spline data", + "mask_width": "Width of the output mask (8 to 4096)", + "mask_height": "Height of the output mask (8 to 4096)", + "sampling_method": "Method for sampling points ('path', 'time', 'controlpoints')", + "interpolation": "Spline interpolation method ('cardinal', 'monotone', 'basis', 'linear', 'step-before', 'step-after', 'polar', 'polar-reverse')", + "tension": "Tension parameter for cardinal splines (0.0 to 1.0)", + "repeat_output": "Number of times to repeat the output (1 to 4096)", + "float_output_type": "Type of float output ('list', 'pandas series', 'tensor')", + "min_value": "Optional minimum value for normalization", + "max_value": "Optional maximum value for normalization" + }, inherits_from='FlexExternalModulator') + + # SplineFeatureModulator tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("SplineFeatureModulator", { + "coordinates": "JSON string containing spline control points", + "feature": "Input feature for modulation", + "mask_width": "Width of the output mask (8 to 4096)", + "mask_height": "Height of the output mask (8 to 4096)", + "min_speed": "Minimum speed of movement along the spline (0.0 to 10.0)", + "max_speed": "Maximum speed of movement along the spline (0.0 to 10.0)", + "float_output_type": "Type of float output ('list', 'pandas series', 'tensor')", + "min_value": "Optional minimum value for normalization", + "max_value": "Optional maximum value for normalization" + }, inherits_from='FlexExternalModulator') + + # SplineRhythmModulator tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("SplineRhythmModulator", { + "coordinates": "JSON string containing spline control points", + "feature": "Input feature for rhythm modulation", + "mask_width": "Width of the output mask (8 to 4096)", + "mask_height": "Height of the output mask (8 to 4096)", + "smoothing": "Amount of smoothing applied to the feature values (0.0 to 1.0)", + "direction": "Direction of movement along the spline ('forward', 'backward', 'bounce')", + "float_output_type": "Type of float output ('list', 'pandas series', 'tensor')", + "min_value": "Optional minimum value for normalization", + "max_value": "Optional maximum value for normalization" + }, inherits_from='FlexExternalModulator') + + # FeatureToFloat tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("FeatureToFloat", { + "feature": "Input feature to be converted to float values" + }, inherits_from='FlexExternalModulator') + + # DepthShapeModifier tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("DepthShapeModifier", { + "depth_map": "Input depth map to be modified", + "mask": "Mask defining areas to apply the shape modification", + "gradient_steepness": "Controls the steepness of the spherical gradient (0.1 to 10.0)", + "depth_min": "Minimum depth value for modified areas (0.0 to 1.0)", + "depth_max": "Maximum depth value for modified areas (0.0 to 1.0)", + "strength": "Overall strength of the modification (0.0 to 1.0)" + }, inherits_from='FlexExternalModulator') + + # DepthShapeModifierPrecise tooltips (inherits from: FlexExternalModulator) + TooltipManager.register_tooltips("DepthShapeModifierPrecise", { + "depth_map": "Input depth map to be modified", + "mask": "Mask defining areas to apply the shape modification", + "gradient_steepness": "Controls the steepness of the spherical gradient (0.1 to 10.0)", + "depth_min": "Minimum depth value for modified areas (0.0 to 1.0)", + "depth_max": "Maximum depth value for modified areas (0.0 to 1.0)", + "strength": "Overall strength of the modification (0.0 to 1.0)", + "composite_method": "Method for compositing the modified depth ('linear', 'depth_aware', 'add', 'subtract', 'multiply', 'divide', 'screen', 'overlay', 'protrude')" + }, inherits_from='FlexExternalModulator') + + # WhisperFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("WhisperFeatureNode", { + "alignment_data": """Whisper transcription alignment data (from ComfyUI-Whisper). +Contains word-level or segment-level timing information for speech.""", + "trigger_set": """Optional set of word-based triggers that define value sequences. +Each trigger specifies how to respond when certain words or phrases are spoken.""", + "context_size": """Number of surrounding words to consider for context (0-10). +Larger values provide more context for trigger decisions but may increase processing time.""", + "overlap_mode": """How to handle overlapping triggers: +- blend: Smooth transition between overlapping values +- replace: Use the most recent trigger's value +- add: Combine values from all active triggers""", + "extraction_method": """Type of feature to extract: +- word_timing: Creates peaks at each word (good for word-synced effects) +- segment_timing: Creates plateaus during speech segments (good for sustained effects) +- trigger_values: Generates values based on word-based triggers +- speech_density: Measures words per second (good for intensity-based effects) +- silence_ratio: Tracks speech vs silence ratio (good for pacing-based effects)""" + }, inherits_from='FeatureExtractorBase', description="""Extract features from Whisper speech transcription data. + +Create timing, trigger, and density features based on speech patterns. +Perfect for syncing effects with spoken words or creating speech-reactive animations. +Works with ComfyUI-Whisper output for precise speech-to-animation synchronization.""") + + # TriggerBuilder tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("TriggerBuilder", { + "pattern": """Word or phrase to match in the transcription. +Can be a single word, multiple words, or a pattern depending on match_mode.""", + "start_value": """Value when the matched word/phrase starts (0-1). +Controls the initial intensity of the effect.""", + "end_value": """Value when the matched word/phrase ends (0-1). +Controls the final intensity of the effect.""", + "match_mode": """How to match the pattern: +- exact: Match whole words only +- contains: Match substrings within words +- regex: Use regular expressions for complex patterns +- phonetic: Match similar-sounding words""", + "fade_type": """How values transition: +- none: Instant change +- linear: Smooth linear transition +- smooth: Eased transition with acceleration/deceleration""", + "duration_frames": """Duration of the effect in frames. +0 = use actual word duration +>0 = force specific duration""", + "blend_mode": """How this trigger combines with others: +- blend: Average with other active triggers +- add: Sum all active trigger values +- multiply: Multiply active trigger values +- max: Use highest active trigger value""", + "fill_behavior": """How to handle frames between triggers: +- none: No values between triggers +- hold: Keep last trigger value +- loop: Repeat trigger sequence""", + "previous_triggers": "Optional previous trigger set to chain with", + "trigger_image": """Optional image to associate with the trigger. +Can be used for visual effects or overlays.""" + }, inherits_from='RyanOnTheInside', description="""Create triggers that respond to specific words or phrases in Whisper transcriptions. + +Chain multiple triggers together to build complex word-reactive animations. +Perfect for creating effects that respond to specific spoken content. +Can be used with images for word-synced visual effects.""") + + # ContextModifier tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ContextModifier", { + "trigger_set": "Input trigger set to modify based on context", + "modifier_type": """Type of context to consider: +- timing: Word duration and position in sentence +- sentiment: Positive/negative emotional context +- speaker: Speaker identity and changes +- sequence: Patterns in word sequence""", + "condition": """Python expression that determines when to apply modification. +Available variables depend on modifier_type: +- timing: duration, start, end +- sentiment: is_positive, sentiment_score +- speaker: speaker_id, is_new_speaker +- sequence: index, total_words""", + "value_adjust": """How much to modify trigger values: +1.0 = no change +>1.0 = amplify effect +<1.0 = reduce effect""", + "window_size": """Number of words to analyze for context. +Larger windows provide more context but may be less responsive.""" + }, inherits_from='RyanOnTheInside', description="""Modify trigger behavior based on speech context. + +Adjust effect intensity based on: +- Word timing and duration +- Speech sentiment/emotion +- Speaker changes +- Word sequence patterns +Perfect for creating context-aware animations.""") + + # WhisperToPromptTravel tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("WhisperToPromptTravel", { + "alignment_data": """Whisper transcription alignment data. +Contains timing information for speech segments.""", + "fps": """Frame rate for converting time to frame numbers. +Should match your video's frame rate.""" + }, inherits_from='RyanOnTheInside', description="""Convert Whisper transcription timing to prompt travel format. + +Creates frame-based prompt sequences for text animation. +Perfect for syncing text prompts with speech. +Compatible with ComfyUI prompt travel nodes.""") + + # WhisperTextRenderer tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("WhisperTextRenderer", { + "images": "Input video frames to overlay text on", + "feature": "Whisper feature containing alignment data", + "font_size": "Size of the rendered text (8-256 pixels)", + "font_name": """Font to use for rendering. +Uses system-independent built-in fonts.""", + "position": """Vertical position of text: +- top: Align to top of frame +- middle: Center vertically +- bottom: Align to bottom of frame""", + "horizontal_align": """Horizontal text alignment: +- left: Align to left edge +- center: Center horizontally +- right: Align to right edge""", + "margin": "Distance from frame edges in pixels", + "animation_type": """Type of text animation: +- none: Static text +- fade: Smooth fade in/out +- pop: Scale animation +- slide: Sliding animation""", + "animation_duration": "Length of animation in frames", + "max_width": """Maximum width for text wrapping. +0 = use full frame width""", + "bg_color": "Background color in hex format (#RRGGBB)", + "text_color": "Text color in hex format (#RRGGBB)", + "opacity": "Overall opacity of text overlay (0.0-1.0)" + }, inherits_from='RyanOnTheInside', description="""Render animated text overlays from Whisper transcription. + +Create professional subtitles and captions with: +- Multiple animation styles +- Flexible positioning +- Color customization +- Automatic text wrapping +Perfect for adding subtitles or creating lyric videos.""") + + # ManualWhisperAlignmentData tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ManualWhisperAlignmentData", { + "alignment_text": """JSON array of speech segments. +Each object needs: +- value: Text content +- start: Start time in seconds +- end: End time in seconds + +Example format: +[ + {"value": "Hello", "start": 0.0, "end": 0.5}, + {"value": "world", "start": 0.6, "end": 1.0} +]""" + }, inherits_from='RyanOnTheInside', description="""Create manual alignment data for testing or custom timing. + +Note: For production use, you should use ComfyUI-Whisper: +https://github.com/yuvraj108c/ComfyUI-Whisper + +This node is useful for: +- Testing without audio +- Creating custom timing +- Manual subtitle creation""") + + # WhisperTimeAdjuster tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("WhisperTimeAdjuster", { + "alignment_data": "Whisper alignment data to adjust", + "time_offset": """Seconds to shift all timestamps: +- Positive: Delay speech timing +- Negative: Advance speech timing +- 0.0: No adjustment""" + }, inherits_from='RyanOnTheInside', description="""Manually adjust timing in Whisper alignment data. + +Perfect for: +- Fixing audio/video sync issues +- Compensating for delays +- Fine-tuning speech timing""") + + # WhisperAutoAdjust tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("WhisperAutoAdjust", { + "alignment_data": "Whisper alignment data to adjust", + "audio": "Audio data to analyze for speech onset", + "detection_window": """Window size for energy detection: +- Larger: More stable but less precise +- Smaller: More precise but may be noisy""", + "energy_threshold": """Energy threshold for speech detection: +- Lower: More sensitive to quiet speech +- Higher: Only detects clear speech""" + }, inherits_from='RyanOnTheInside', description="""Automatically adjust Whisper timing by detecting speech. + +Uses audio analysis to: +- Find actual speech start +- Align transcription with audio +- Fix timing offsets automatically +Perfect for batch processing or when manual adjustment is impractical.""") + + # SchedulerNode tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("SchedulerNode", { + "feature": "Input feature to convert into a schedulable parameter", + "invert_output": "When enabled, inverts the output values (high becomes low and vice versa)" + }, inherits_from='RyanOnTheInside', description="""Base class for nodes that convert features into schedulable parameters. + +These nodes allow you to use features to create dynamic parameter sequences that can control other nodes.""") + + # FeatureToFlexIntParam tooltips (inherits from: SchedulerNode) + TooltipManager.register_tooltips("FeatureToFlexIntParam", { + "lower_threshold": """Minimum integer value for the output parameter. + +The feature's minimum value will be mapped to this threshold.""", + "upper_threshold": """Maximum integer value for the output parameter. + +The feature's maximum value will be mapped to this threshold.""" + }, inherits_from='SchedulerNode', description="""Converts a feature into a sequence of integer values. + +Perfect for controlling parameters that require whole numbers, like frame indices or count-based settings. +The output will automatically adjust to match the constraints of the target parameter.""") + + # FeatureToFlexFloatParam tooltips (inherits from: SchedulerNode) + TooltipManager.register_tooltips("FeatureToFlexFloatParam", { + "lower_threshold": """Minimum float value for the output parameter. + +The feature's minimum value will be mapped to this threshold.""", + "upper_threshold": """Maximum float value for the output parameter. + +The feature's maximum value will be mapped to this threshold.""" + }, inherits_from='SchedulerNode', description="""Converts a feature into a sequence of floating-point values. + +Ideal for controlling parameters that accept decimal values, like strengths or ratios. +The output will automatically adjust to match the constraints of the target parameter.""") + + # FeatureInterpolator tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeatureInterpolator", { + "feature": "Input feature to interpolate", + "interpolation_method": """Choose interpolation method: +- zero: Step function between points +- linear: Straight lines between points +- cubic: Smooth curves (needs 4+ points) +- nearest: Jump to nearest point value +- previous: Hold previous value +- next: Jump to next value early +- quadratic: Smooth curves (needs 3+ points)""", + "threshold": "Only consider points above this value (0.0 to 1.0)", + "min_difference": "Minimum value change required between points (0.0 to 1.0)", + "min_distance": "Minimum frames between points (1 to 100)", + "extrapolate": "Whether to extend values beyond the first/last points" + }, inherits_from='FeatureModulationBase', description="""Interpolate between significant points in a feature. + +Combine with different interpolation methods and point selection criteria to create custom curves. +Great for smoothing, step functions, or custom animation curves.""") + + # FeaturePeakDetector tooltips (inherits from: FeatureModulationBase) + TooltipManager.register_tooltips("FeaturePeakDetector", { + "feature": "Input feature to detect peaks from", + "prominence": "How much a peak needs to stand out from surrounding values (0.0 to 1.0)", + "distance": "Minimum number of frames between peaks (1 to 100)", + "width": "Minimum width of peaks in frames (1 to 100)", + "plateau_size": "Minimum size of flat peaks in frames (1 to 100)", + "detect_valleys": "When enabled, detects troughs instead of peaks" + }, inherits_from='FeatureModulationBase', description="""Detect significant peaks or valleys in any feature. + +Works with any type of feature data (audio, motion, etc). +Outputs a binary signal (1.0 at peaks, 0.0 elsewhere). +Great for detecting significant moments or transitions.""") + + # FloatFeatureNode tooltips (inherits from: FeatureExtractorBase) + TooltipManager.register_tooltips("FloatFeatureNode", { + "float_values": """Comma-separated list of float values (e.g., "0.0, 0.5, 1.0"). + +These values will be automatically normalized to the 0-1 range and interpolated to match the frame count.""", + "extraction_method": """Choose how to process the float values: + +- raw: Direct normalized values - good for precise control +- smooth: Apply smoothing to the values - creates gentler transitions +- cumulative: Running sum of values - good for progressive effects""", + }, inherits_from='FeatureExtractorBase', description="""Convert a sequence of float values into a feature. + +Perfect for creating custom animation curves or controlling effects with specific numeric sequences. +Values are automatically normalized and can be processed in different ways.""") \ No newline at end of file diff --git a/tooltips/categories/images.py b/tooltips/categories/images.py new file mode 100644 index 0000000..9866a2a --- /dev/null +++ b/tooltips/categories/images.py @@ -0,0 +1,318 @@ +"""Tooltips for images-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for images nodes""" + + # FlexImageBase tooltips (inherits from: RyanOnTheInside, FlexBase) + TooltipManager.register_tooltips("FlexImageBase", { + "images": "Input image sequence to be processed (IMAGE type)", + "feature_param": """Choose which parameter to modulate with the input feature + +Each node type has different parameters that can be modulated: +- 'None': No parameter modulation (default behavior) +- Other options depend on the specific node type""" + }, inherits_from=['RyanOnTheInside', 'FlexBase']) + + # FlexImageEdgeDetect tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageEdgeDetect", { + "low_threshold": "Lower bound for the hysteresis thresholding (0 to 255)", + "high_threshold": "Upper bound for the hysteresis thresholding (0 to 255)", + "feature_param": """Choose which parameter to modulate: + +- low_threshold: Dynamically adjust edge sensitivity +- high_threshold: Dynamically adjust edge strength +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImagePosterize tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImagePosterize", { + "max_levels": "Maximum number of color levels per channel. Higher values preserve more color detail (2 to 256)", + "dither_strength": "Intensity of dithering effect. Higher values reduce color banding (0.0 to 1.0)", + "channel_separation": "Degree of separation between color channels. Creates color shift effects (0.0 to 1.0)", + "gamma": "Gamma correction applied before posterization. Affects brightness distribution (0.1 to 2.2)", + "dither_method": """Method used for dithering: +- ordered: Fast Bayer matrix dithering, good for retro effects +- floyd: Floyd-Steinberg dithering, better for natural gradients +- none: No dithering, creates sharp color transitions""", + "feature_param": """Choose which parameter to modulate: + +- max_levels: Dynamically adjust color quantization +- dither_strength: Dynamically adjust dithering intensity +- channel_separation: Dynamically adjust color channel offsets +- gamma: Dynamically adjust brightness distribution +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageKaleidoscope tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageKaleidoscope", { + "segments": "Number of mirror segments (2 to 32)", + "center_x": "X-coordinate of the effect center (0.0 to 1.0)", + "center_y": "Y-coordinate of the effect center (0.0 to 1.0)", + "zoom": "Zoom factor for the effect (0.1 to 2.0)", + "rotation": "Rotation angle of the effect (0.0 to 360.0)", + "precession": "Rate of rotation change over time (-1.0 to 1.0)", + "speed": "Speed of the effect animation (0.1 to 5.0)", + "feature_param": """Choose which parameter to modulate: + +- segments: Dynamically adjust number of mirror segments +- zoom: Dynamically adjust magnification +- rotation: Dynamically adjust pattern rotation +- precession: Dynamically adjust rotation speed +- speed: Dynamically adjust animation speed +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageColorGrade tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageColorGrade", { + "intensity": "Strength of the color grading effect (0.0 to 1.0)", + "mix": "Blend factor between original and graded image (0.0 to 1.0)", + "lut_file": "Path to the LUT file", + "feature_param": """Choose which parameter to modulate: + +- intensity: Dynamically adjust grading strength +- mix: Dynamically adjust blend amount +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageGlitch tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageGlitch", { + "glitch_type": """Type of glitch effect to apply: +- digital: Modern digital artifacts with RGB shifts and block displacement +- analog: Classic TV distortion with scan lines, ghosting, and vertical hold issues +- compression: JPEG-like artifacts with block corruption and quantization +- wave: Smooth wave-based distortions with multiple harmonics +- corrupt: Random data corruption with line and block artifacts""", + "intensity": "Overall strength of the glitch effect. Higher values create more pronounced distortions (0.0 to 1.0)", + "block_size": "Size of blocks for digital glitches and compression artifacts. Larger sizes create more visible blocks (8 to 128)", + "wave_amplitude": "Height of wave distortions. Controls the magnitude of wave-based displacement (0.0 to 1.0)", + "wave_frequency": "Frequency of wave patterns. Higher values create more rapid oscillations (0.1 to 20.0)", + "corruption_amount": "Probability and intensity of corruption artifacts. Affects how often and how severely glitches occur (0.0 to 1.0)", + "time_seed": "Seed for random glitch generation. Same seed produces consistent glitch patterns (0 to 10000)", + "feature_param": """Choose which parameter to modulate: + +- intensity: Dynamically adjust overall glitch strength +- block_size: Dynamically adjust artifact size +- wave_amplitude: Dynamically adjust wave distortion +- wave_frequency: Dynamically adjust wave patterns +- corruption_amount: Dynamically adjust glitch frequency +- time_seed: Dynamically change random patterns +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageChromaticAberration tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageChromaticAberration", { + "shift_amount": "Amount of RGB channel separation. Higher values create more color fringing (0.0 to 0.5)", + "angle": "Direction of the chromatic aberration effect in degrees. 0° is horizontal, 90° is vertical (0.0 to 720.0)", + "feature_param": """Choose which parameter to modulate: + +- shift_amount: Dynamically adjust color separation +- angle: Dynamically adjust separation direction +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImagePixelate tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImagePixelate", { + "pixel_size": "Size of each pixelated block. Larger values create more pronounced pixelation (1 to 100)", + "feature_param": """Choose which parameter to modulate: + +- pixel_size: Dynamically adjust pixelation size +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageBloom tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageBloom", { + "threshold": "Brightness threshold for bloom effect. Only pixels brighter than this value will glow (0.0 to 1.0)", + "blur_amount": "Base radius of the bloom effect. Higher values create softer, more diffused glow (0.0 to 50.0)", + "intensity": "Overall strength of the bloom effect. Controls the brightness of the glow (0.0 to 1.0)", + "num_passes": "Number of bloom passes. More passes create layered, atmospheric glow effects (1 to 8)", + "color_bleeding": "Amount of color spreading between bright areas. Higher values create more color mixing (0.0 to 1.0)", + "falloff": "How quickly the bloom effect diminishes with distance. Higher values create tighter, more focused glow (0.1 to 3.0)", + "surface_scatter": "How much the bloom follows surface geometry when using normal map. Affects glow distribution (0.0 to 1.0)", + "normal_influence": "Strength of normal map's influence on bloom direction. Controls surface-aware lighting (0.0 to 1.0)", + "opt_normal_map": "Optional normal map for surface-aware bloom. Enables realistic light scattering based on surface geometry", + "feature_param": """Choose which parameter to modulate: + +- threshold: Dynamically adjust bloom threshold +- blur_amount: Dynamically adjust bloom radius +- intensity: Dynamically adjust bloom strength +- num_passes: Dynamically adjust bloom quality +- color_bleeding: Dynamically adjust color spread +- falloff: Dynamically adjust bloom falloff +- surface_scatter: Dynamically adjust surface influence +- normal_influence: Dynamically adjust normal map impact +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageTiltShift tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageTiltShift", { + "blur_amount": "Amount of blur applied to out-of-focus areas. Higher values create stronger depth-of-field effect (0.0 to 50.0)", + "focus_position_x": "Horizontal position of focus center. 0 = left edge, 1 = right edge (0.0 to 1.0)", + "focus_position_y": "Vertical position of focus center. 0 = top edge, 1 = bottom edge (0.0 to 1.0)", + "focus_width": "Width of the in-focus area relative to image width. Larger values keep more of the image sharp (0.0 to 1.0)", + "focus_height": "Height of the in-focus area relative to image height. Larger values keep more of the image sharp (0.0 to 1.0)", + "focus_shape": """Shape of the focus area: +- rectangle: Sharp-edged focus region with clear boundaries +- ellipse: Smooth oval focus region for natural transitions +- gradient: Continuous focus falloff for realistic depth simulation""", + "bokeh_shape": """Shape of out-of-focus highlights: +- circular: Natural, round bokeh like modern lenses +- hexagonal: Six-sided bokeh typical of vintage lenses +- star: Decorative star-shaped bokeh for artistic effect""", + "bokeh_size": "Size of bokeh highlights in out-of-focus areas. Larger values create more pronounced bokeh effects (0.1 to 2.0)", + "bokeh_brightness": "Brightness multiplier for bokeh highlights. Higher values make bright points more prominent (0.5 to 2.0)", + "chromatic_aberration": "Amount of color fringing in out-of-focus areas. Simulates lens dispersion effects (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate: + +- blur_amount: Dynamically adjust blur intensity +- focus_position_x: Dynamically adjust horizontal focus +- focus_position_y: Dynamically adjust vertical focus +- focus_width: Dynamically adjust focus area width +- focus_height: Dynamically adjust focus area height +- bokeh_size: Dynamically adjust bokeh highlight size +- bokeh_brightness: Dynamically adjust bokeh intensity +- chromatic_aberration: Dynamically adjust color fringing +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageParallax tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageParallax", { + "shift_x": "Horizontal shift factor for the parallax effect (-1.0 to 1.0)", + "shift_y": "Vertical shift factor for the parallax effect (-1.0 to 1.0)", + "shift_z": "Z-axis shift factor for the parallax effect (-1.0 to 1.0)", + "depth_map": "Optional depth map for 3D parallax effect", + "feature_param": """Choose which parameter to modulate: + +- shift_x: Dynamically adjust horizontal movement +- shift_y: Dynamically adjust vertical movement +- shift_z: Dynamically adjust depth movement +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageContrast tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageContrast", { + "contrast": "Controls the amount of contrast adjustment (0.0 to 3.0)", + "brightness": "Adjusts the overall brightness of the image (-1.0 to 1.0)", + "preserve_luminosity": "When enabled, maintains the overall luminosity of the image", + "feature_param": """Choose which parameter to modulate: + +- contrast: Dynamically adjust contrast level +- brightness: Dynamically adjust brightness level +- preserve_luminosity: Dynamically toggle luminosity preservation +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageWarp tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageWarp", { + "warp_type": "Type of warping effect ('noise', 'twist', 'bulge')", + "warp_strength": "Strength of the warping effect (-1.0 to 1.0)", + "center_x": "X-coordinate of the warp center (0.0 to 1.0)", + "center_y": "Y-coordinate of the warp center (0.0 to 1.0)", + "radius": "Radius of the warp effect (0.0 to 2.0)", + "warp_frequency": "Optional frequency of the warp effect (0.1 to 20.0)", + "warp_octaves": "Optional number of noise octaves (1 to 5)", + "warp_seed": "Optional seed for noise generation", + "feature_param": """Choose which parameter to modulate: + +- warp_strength: Dynamically adjust distortion amount +- center_x: Dynamically adjust horizontal center +- center_y: Dynamically adjust vertical center +- radius: Dynamically adjust effect radius +- warp_frequency: Dynamically adjust noise/pattern frequency +- warp_octaves: Dynamically adjust noise detail +- warp_seed: Dynamically change noise pattern +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageVignette tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageVignette", { + "intensity": "Strength of the vignette effect (0.0 to 1.0)", + "radius": "Radius of the vignette (0.1 to 2.0)", + "feather": "Amount of feathering on the vignette edge (0.0 to 1.0)", + "center_x": "X-coordinate of the vignette center (0.0 to 1.0)", + "center_y": "Y-coordinate of the vignette center (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate: + +- intensity: Dynamically adjust vignette strength +- radius: Dynamically adjust vignette size +- feather: Dynamically adjust edge softness +- center_x: Dynamically adjust horizontal center +- center_y: Dynamically adjust vertical center +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageTransform tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageTransform", { + "transform_type": "Type of transformation ('translate', 'rotate', 'scale')", + "x_value": "X-axis transformation value (-1000.0 to 1000.0)", + "y_value": "Y-axis transformation value (-1000.0 to 1000.0)", + "feature_param": """Choose which parameter to modulate: + +- x_value: Dynamically adjust horizontal transform +- y_value: Dynamically adjust vertical transform +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageHueShift tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageHueShift", { + "hue_shift": "Amount of hue shift to apply (0.0 to 360.0)", + "opt_mask": "Optional mask to apply the effect selectively", + "feature_param": """Choose which parameter to modulate: + +- hue_shift: Dynamically adjust color rotation +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageDepthWarp tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageDepthWarp", { + "warp_strength": "Strength of the warping effect (-10.0 to 10.0)", + "depth_map": "Depth map for warping the image", + "feature_param": """Choose which parameter to modulate: + +- warp_strength: Dynamically adjust depth-based distortion +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # FlexImageHorizontalToVertical tooltips (inherits from: FlexImageBase) + TooltipManager.register_tooltips("FlexImageHorizontalToVertical", { + "blur_amount": "Amount of blur for background when using blur effect (0.1 to 100.0)", + "background_type": "Type of background effect ('blur', 'border', 'mirror', 'gradient', 'pixelate', 'waves')", + "border_color": "Color of the border when using border background type ('black', 'white')", + "scale_factor": "Scale factor for the main image (0.1 to 2.0)", + "effect_strength": "Intensity of the background effect (0.0 to 2.0)", + "feature_param": """Choose which parameter to modulate: + +- blur_amount: Dynamically adjust background blur +- scale_factor: Dynamically adjust image scaling +- effect_strength: Dynamically adjust effect intensity +- None: No parameter modulation""" + }, inherits_from='FlexImageBase') + + # ImageUtilityNode tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ImageUtilityNode", { + # Base class for image utility nodes + }, inherits_from='RyanOnTheInside') + + # DyeImage tooltips (inherits from: ImageUtilityNode) + TooltipManager.register_tooltips("DyeImage", { + "image": "Input image to be processed (IMAGE type)", + "source_rgb": "Source RGB color to replace in format 'R,G,B' (default: '255,255,255')", + "target_rgb": "Target RGB color to replace with in format 'R,G,B' (default: '0,0,0')", + "tolerance": "Color matching tolerance (0.0 to 1.0)" + }, inherits_from='ImageUtilityNode') + + # ImageCASBatch tooltips (inherits from: ImageUtilityNode) + TooltipManager.register_tooltips("ImageCASBatch", { + "image": "Input image to be processed (IMAGE type)", + "amount": "Strength of the contrast adaptive sharpening effect (0.0 to 1.0)", + "batch_size": "Number of images to process in each batch (1 to 64)" + }, inherits_from='ImageUtilityNode') + + # ImageScaleToTarget tooltips (inherits from: ImageUtilityNode) + TooltipManager.register_tooltips("ImageScaleToTarget", { + "image": "Input image to be scaled (IMAGE type)", + "target_image": "Image whose dimensions will be used as the target size (IMAGE type)", + "upscale_method": "Method used for upscaling ('nearest-exact', 'bilinear', 'area', 'bicubic', 'lanczos')", + "crop": "Cropping method to use if aspect ratios don't match ('disabled', 'center')" + }, inherits_from='ImageUtilityNode') diff --git a/tooltips/categories/latents.py b/tooltips/categories/latents.py new file mode 100644 index 0000000..0474657 --- /dev/null +++ b/tooltips/categories/latents.py @@ -0,0 +1,55 @@ +"""Tooltips for latents-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for latents nodes""" + + # FlexLatentBase tooltips (inherits from: RyanOnTheInside, FlexBase) + TooltipManager.register_tooltips("FlexLatentBase", { + "latents": "Input latent tensor to be processed (LATENT type)", + "feature": "Feature used to modulate the effect (FEATURE type)", + "feature_pipe": "Feature pipe containing frame information (FEATURE_PIPE type)", + "feature_threshold": "Threshold for feature activation (0.0 to 1.0)" + }, inherits_from=['RyanOnTheInside', 'FlexBase']) + + # FlexLatentInterpolate tooltips (inherits from: FlexLatentBase) + TooltipManager.register_tooltips("FlexLatentInterpolate", { + "latent_2": "Second latent tensor to interpolate with (LATENT type)", + "interpolation_mode": "Method of interpolation ('Linear' or 'Spherical')" + }, inherits_from='FlexLatentBase') + + # EmbeddingGuidedLatentInterpolate tooltips (inherits from: FlexLatentBase) + TooltipManager.register_tooltips("EmbeddingGuidedLatentInterpolate", { + "latent_2": "Second latent tensor to interpolate with (LATENT type)", + "embedding_1": "First embedding tensor for guidance (EMBEDS type)", + "embedding_2": "Second embedding tensor for guidance (EMBEDS type)", + "interpolation_mode": "Method of interpolation ('Linear' or 'Spherical')" + }, inherits_from='FlexLatentBase') + + # FlexLatentBlend tooltips (inherits from: FlexLatentBase) + TooltipManager.register_tooltips("FlexLatentBlend", { + "latent_2": "Second latent tensor to blend with (LATENT type)", + "blend_mode": "Type of blending operation ('Add', 'Multiply', 'Screen', 'Overlay')", + "blend_strength": "Strength of the blending effect (0.0 to 1.0)" + }, inherits_from='FlexLatentBase') + + # FlexLatentNoise tooltips (inherits from: FlexLatentBase) + TooltipManager.register_tooltips("FlexLatentNoise", { + "noise_level": "Amount of noise to add (0.0 to 1.0)", + "noise_type": "Type of noise to generate ('Gaussian' or 'Uniform')" + }, inherits_from='FlexLatentBase') + + # LatentFrequencyBlender tooltips (inherits from: FlexLatentBase) + TooltipManager.register_tooltips("LatentFrequencyBlender", { + "images": "Input images to be encoded into latents (IMAGE type)", + "vae": "VAE model for encoding images (VAE type)", + "frequency_ranges": "Frequency ranges to analyze (FREQUENCY_RANGE type, multi-select)", + "audio": "Audio input for frequency analysis (AUDIO type)", + "feature_type": "Type of audio feature to extract ('amplitude_envelope', 'rms_energy', 'spectral_flux', 'zero_crossing_rate')", + "strength": "Overall strength of the blending effect (0.0 to 10.0)", + "feature_mode": "How features affect the blending ('relative' or 'absolute')", + "frame_rate": "Frame rate for audio analysis (1.0 to 120.0 fps)", + "nonlinear_transform": "Transform applied to feature values ('none', 'square', 'sqrt', 'log', 'exp')", + "blending_mode": "Method for blending latents ('linear', 'slerp', 'hard_switch')" + }, inherits_from='FlexLatentBase') diff --git a/tooltips/categories/masks.py b/tooltips/categories/masks.py new file mode 100644 index 0000000..8814e05 --- /dev/null +++ b/tooltips/categories/masks.py @@ -0,0 +1,535 @@ +"""Tooltips for masks-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for masks nodes""" + + # Base classes first + # MaskBase tooltips (inherits from: RyanOnTheInside, ABC) + TooltipManager.register_tooltips("MaskBase", { + "masks": "Input mask or sequence of masks to be processed (MASK type)", + "strength": "Overall strength of the mask effect (0.0 to 1.0)", + "invert": "When enabled, inverts the mask output (black becomes white and vice versa)", + "subtract_original": "Amount of the original mask to subtract from the result (0.0 to 1.0)", + "grow_with_blur": "Amount of Gaussian blur to apply for mask growth (0.0 to 10.0)" + }, inherits_from=['RyanOnTheInside', 'ABC'],) + + # FlexMaskBase tooltips (inherits from: FlexBase, MaskBase) + TooltipManager.register_tooltips("FlexMaskBase", { + "feature": "Feature used to modulate the effect (FEATURE type)", + "feature_pipe": "Feature pipe containing frame information (FEATURE_PIPE type)", + "feature_threshold": "Threshold for feature activation (0.0 to 1.0)", + "mask_strength": "Overall strength of the mask effect (0.0 to 1.0)", + "strength": "Overall strength of the feature modulation (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate with the input feature + +Each node type has different parameters that can be modulated: +- 'None': No parameter modulation (default behavior) +- Other options depend on the specific node type""" + }, inherits_from=['FlexBase', 'MaskBase']) + + # TemporalMaskBase tooltips (inherits from: MaskBase, ABC) + TooltipManager.register_tooltips("TemporalMaskBase", { + "start_frame": "Frame number where the effect begins (0 to 1000)", + "end_frame": "Frame number where the effect ends (0 to 1000, 0 means until end)", + "effect_duration": "Number of frames over which the effect is applied (0 to 1000, 0 means full range)", + "temporal_easing": "Controls how the effect strength changes over time ('ease_in_out', 'linear', 'bounce', 'elastic', 'none')", + "palindrome": "When enabled, the effect plays forward then reverses within the specified duration" + }, inherits_from=['MaskBase', 'ABC'], description="[DEPRECATED] these effects can be acheived with more control using the FlexMask nodes") + + + + # OpticalFlowMaskBase tooltips (inherits from: MaskBase, ABC) + TooltipManager.register_tooltips("OpticalFlowMaskBase", { + "images": "Sequence of images to calculate optical flow from (IMAGE type)", + "flow_method": "Algorithm used to calculate optical flow ('Farneback', 'LucasKanade', 'PyramidalLK')", + "flow_threshold": "Minimum flow magnitude to consider (0.0 to 1.0)", + "magnitude_threshold": "Relative threshold for flow magnitude as fraction of maximum (0.0 to 1.0)" + }, inherits_from=['MaskBase', 'ABC'], description="Generate masks based on motion detection between frames, perfect for creating motion-reactive effects.") + + # ParticleSystemMaskBase tooltips (inherits from: MaskBase, ABC) + TooltipManager.register_tooltips("ParticleSystemMaskBase", { + "emitters": "List of particle emitter configurations (PARTICLE_EMITTER type)", + "particle_count": "Maximum number of particles in the system (1 to 10000)", + "particle_lifetime": "How long each particle lives in seconds (0.1 to 10.0)", + "wind_strength": "Strength of the wind force (-100.0 to 100.0)", + "wind_direction": "Direction of the wind in degrees (0.0 to 360.0)", + "gravity": "Strength and direction of gravity (-1000.0 to 1000.0)", + "warmup_period": "Number of frames to simulate before starting (0 to 1000)", + "start_frame": "Frame to start particle emission (0 to 1000)", + "end_frame": "Frame to end particle emission (0 to 1000, 0 means until end)", + "respect_mask_boundary": "Whether particles should collide with mask boundaries", + "vortices": "Optional list of vortex configurations (VORTEX type)", + "wells": "Optional list of gravity well configurations (GRAVITY_WELL type)", + "static_bodies": "Optional list of static collision bodies (STATIC_BODY type)", + "well_strength_multiplier": "Global multiplier for gravity well strengths (0.0 to 10.0)" + }, inherits_from=['MaskBase', 'ABC'], description="Create dynamic mask effects using particle systems with physics simulation, including forces like gravity, wind, and vortices.") + + # FlexMaskNormalBase tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskNormalBase", { + "normal_map": "Normal map to be used for lighting calculations (IMAGE type)" + }, inherits_from='FlexMaskBase') + + # MaskMorph tooltips (inherits from: TemporalMaskBase) + TooltipManager.register_tooltips("MaskMorph", { + "morph_type": "Type of morphological operation ('erode', 'dilate', 'open', 'close')", + "max_kernel_size": "Maximum size of the morphological kernel (3 to 21, odd numbers only)", + "max_iterations": "Maximum number of times to apply the operation (1 to 50)" + }, inherits_from='TemporalMaskBase', description="Morphological operations on masks.") + + # MaskTransform tooltips (inherits from: TemporalMaskBase) + TooltipManager.register_tooltips("MaskTransform", { + "transform_type": "Type of transformation to apply ('translate', 'rotate', 'scale')", + "x_value": "Horizontal component of the transformation (-1000 to 1000)", + "y_value": "Vertical component of the transformation (-1000 to 1000)" + }, inherits_from='TemporalMaskBase', description="Transform masks over time.") + + # MaskMath tooltips (inherits from: TemporalMaskBase) + TooltipManager.register_tooltips("MaskMath", { + "mask_b": "Second mask to combine with the input mask (MASK type)", + "combination_method": "Mathematical operation to apply ('add', 'subtract', 'multiply', 'minimum', 'maximum')" + }, inherits_from='TemporalMaskBase') + + # MaskRings tooltips (inherits from: TemporalMaskBase) + TooltipManager.register_tooltips("MaskRings", { + "num_rings": "Number of rings to generate (1 to 50)", + "max_ring_width": "Maximum width of each ring as a fraction of the total distance (0.01 to 0.5)" + }, inherits_from='TemporalMaskBase') + + # MaskWarp tooltips (inherits from: TemporalMaskBase) + TooltipManager.register_tooltips("MaskWarp", { + "warp_type": "Type of warping effect to apply ('perlin', 'radial', 'swirl')", + "frequency": "Controls the scale of the warping effect (0.01 to 1.0)", + "amplitude": "Controls the strength of the warping effect (0.1 to 500.0)", + "octaves": "For noise-based warps, adds detail at different scales (1 to 8)" + }, inherits_from='TemporalMaskBase') + + # ParticleEmissionMask tooltips (inherits from: ParticleSystemMaskBase) + TooltipManager.register_tooltips("ParticleEmissionMask", { + "emission_strength": "Strength of particle emission effect (0.0 to 1.0)", + "draw_modifiers": "Visibility of vortices and gravity wells (0.0 to 1.0)" + }, inherits_from='ParticleSystemMaskBase') + + # ParticleSystemModulatorBase tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("ParticleSystemModulatorBase", { + # TODO: Add parameter tooltips + }, inherits_from='RyanOnTheInside', description="Modify particle system behavior with controls for forces, emissions, and particle properties.") + + # EmitterModulationBase tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("EmitterModulationBase", { + "start_frame": "Frame number where the effect begins (0 to 1000)", + "end_frame": "Frame number where the effect ends (0 to 1000, 0 means until end)", + "effect_duration": "Number of frames over which the effect is applied (0 to 1000, 0 means full range)", + "temporal_easing": "Controls how the effect strength changes over time ('ease_in_out', 'linear', 'bounce', 'elastic', 'none')", + "palindrome": "When enabled, the effect plays forward then reverses within the specified duration", + "random": "When enabled, selects random values between start and target", + "previous_modulation": "Optional previous modulation to chain with (EMITTER_MODULATION type)", + "feature": "Optional feature to drive the modulation (FEATURE type)" + }, inherits_from='ParticleSystemModulatorBase', description="Control particle emitter properties over time with support for easing, randomization, and feature-driven animation.") + + # EmitterEmissionRateModulation tooltips (inherits from: EmitterModulationBase) + TooltipManager.register_tooltips("EmitterEmissionRateModulation", { + "target_emission_rate": "Target emission rate at the end of the modulation (0.1 to 100.0 particles/frame)" + }, inherits_from='EmitterModulationBase') + + # Vortex tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("Vortex", { + "x": "X-coordinate of the vortex center (0.0 to 1.0)", + "y": "Y-coordinate of the vortex center (0.0 to 1.0)", + "strength": "Strength of the vortex effect (0.0 to 1000.0)", + "radius": "Radius of effect for the vortex (10.0 to 500.0)", + "inward_factor": "Factor controlling how quickly particles are pulled towards the center (0.0 to 1.0)", + "movement_speed": "Speed of movement of the vortex object (0.0 to 10.0)", + "color": "Color of the vortex visualization (RGB tuple)", + "draw": "Thickness of the vortex visualization (0.0 to 1.0)" + }, inherits_from='ParticleSystemModulatorBase') + + # GravityWell tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("GravityWell", { + "x": "X-coordinate of the gravity well (0.0 to 1.0)", + "y": "Y-coordinate of the gravity well (0.0 to 1.0)", + "strength": "Strength of the gravity well", + "radius": "Radius of effect for the gravity well", + "type": "Type of gravity well ('attract' or 'repel')", + "color": "Color of the gravity well visualization (RGB tuple)", + "draw": "Thickness of the gravity well visualization (0.0 to 1.0)" + }, inherits_from='ParticleSystemModulatorBase') + + # ParticleEmitter tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("ParticleEmitter", { + "emitter_x": "X-coordinate of the emitter (0.0 to 1.0)", + "emitter_y": "Y-coordinate of the emitter (0.0 to 1.0)", + "particle_direction": "Direction of particle emission in degrees (0.0 to 360.0)", + "particle_spread": "Spread angle of particle emission in degrees (0.0 to 360.0)", + "particle_size": "Size of emitted particles (1.0 to 400.0)", + "particle_speed": "Speed of emitted particles (1.0 to 1000.0)", + "emission_rate": "Rate of particle emission (0.1 to 100.0)", + "color": "Color of emitted particles (RGB string)", + "initial_plume": "Initial burst of particles (0.0 to 1.0)", + "start_frame": "Frame to start the emission (0 to 10000)", + "end_frame": "Frame to end the emission (0 to 10000)", + "emission_radius": "Radius of the area from which particles are emitted (0.0 to 100.0)", + "previous_emitter": "Optional previous emitter to chain with (PARTICLE_EMITTER type)", + "emitter_movement": "Optional movement configuration (EMITTER_MOVEMENT type)", + "spring_joint_setting": "Optional spring joint configuration (SPRING_JOINT_SETTING type)", + "particle_modulation": "Optional particle modulation configuration (PARTICLE_MODULATION type)", + "emitter_modulation": "Optional emitter modulation configuration (EMITTER_MODULATION type)" + }, inherits_from='ParticleSystemModulatorBase') + + # SpringJointSetting tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("SpringJointSetting", { + "stiffness": "Stiffness of the spring (0.0 to 1000.0)", + "damping": "Damping factor of the spring (0.0 to 100.0)", + "rest_length": "Rest length of the spring (0.0 to 100.0)", + "max_distance": "Maximum distance the spring can stretch (0.0 to 500.0)" + }, inherits_from='ParticleSystemModulatorBase') + + # EmitterMovement tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("EmitterMovement", { + "emitter_x_frequency": "How quickly the emitter moves horizontally (0.0 to 10.0)", + "emitter_x_amplitude": "Maximum horizontal distance the emitter moves (0.0 to 0.5)", + "emitter_y_frequency": "How quickly the emitter moves vertically (0.0 to 10.0)", + "emitter_y_amplitude": "Maximum vertical distance the emitter moves (0.0 to 0.5)", + "direction_frequency": "How quickly the emission angle changes (0.0 to 10.0)", + "direction_amplitude": "Maximum angle change in degrees (0.0 to 360.0)", + "feature_param": "Parameter to be modulated by the feature ('emitter_x_frequency', 'emitter_y_frequency', 'direction_frequency')", + "feature": "Optional feature to modulate the movement (FEATURE type)" + }, inherits_from='ParticleSystemModulatorBase') + + # StaticBody tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("StaticBody", { + "shape_type": "Type of shape (\"segment\" or \"polygon\")", + "x1": "First X coordinate", + "y1": "First Y coordinate", + "x2": "Second X coordinate", + "y2": "Second Y coordinate", + "elasticity": "Bounciness of the static body (0.0 to 1.0)", + "friction": "Friction of the static body (0.0 to 1.0)", + "draw": "Whether to visualize the static body and how thick", + "color": "Color of the static body (RGB tuple)" + }, inherits_from='ParticleSystemModulatorBase') + + # ParticleModulationBase tooltips (inherits from: ParticleSystemModulatorBase) + TooltipManager.register_tooltips("ParticleModulationBase", { + "start_frame": "Frame to start the modulation effect (0 to 1000)", + "end_frame": "Frame to end the modulation effect (0 to 1000)", + "effect_duration": "Duration of the modulation effect in frames (0 to 1000)", + "temporal_easing": "Easing function for the modulation effect ('ease_in_out', 'linear', 'bounce', 'elastic', 'none')", + "palindrome": "Whether to reverse the modulation effect after completion", + "random": "When enabled, selects random values between start and target", + "previous_modulation": "Optional previous modulation to chain with (PARTICLE_MODULATION type)", + "feature": "Optional feature to drive the modulation (FEATURE type)" + }, inherits_from='ParticleSystemModulatorBase') + + # ParticleSizeModulation tooltips (inherits from: ParticleModulationBase) + TooltipManager.register_tooltips("ParticleSizeModulation", { + "target_size": "Target size for particles at the end of the modulation (0.0 to 400.0)" + }, inherits_from='ParticleModulationBase') + + # ParticleSpeedModulation tooltips (inherits from: ParticleModulationBase) + TooltipManager.register_tooltips("ParticleSpeedModulation", { + "target_speed": "Target speed for particles at the end of the modulation (0.0 to 1000.0)" + }, inherits_from='ParticleModulationBase') + + # ParticleColorModulation tooltips (inherits from: ParticleModulationBase) + TooltipManager.register_tooltips("ParticleColorModulation", { + "target_color": "Target color for particles at the end of the modulation (RGB tuple)" + }, inherits_from='ParticleModulationBase') + + # OpticalFlowMaskModulation tooltips (inherits from: OpticalFlowMaskBase) + TooltipManager.register_tooltips("OpticalFlowMaskModulation", { + "modulation_strength": "Intensity of the modulation effect (0.0 to 5.0)", + "blur_radius": "Amount of smoothing applied to the flow magnitude (0 to 20 pixels)", + "trail_length": "Number of frames to maintain in the trail effect (1 to 20)", + "decay_factor": "Rate at which trail intensity decreases (0.1 to 1.0)", + "decay_style": "Method of trail decay ('fade' or 'thickness')", + "max_thickness": "Maximum thickness of trails when using thickness decay (1 to 50 pixels)" + }, inherits_from='OpticalFlowMaskBase') + + # OpticalFlowDirectionMask tooltips (inherits from: OpticalFlowMaskBase) + TooltipManager.register_tooltips("OpticalFlowDirectionMask", { + "direction": "Direction of motion to detect ('horizontal', 'vertical', 'radial_in', 'radial_out', 'clockwise', 'counterclockwise')", + "angle_threshold": "Maximum angle deviation from target direction (0.0 to 180.0 degrees)", + "blur_radius": "Amount of smoothing applied to the mask (0 to 20 pixels)", + "invert": "When enabled, reverses the mask output" + }, inherits_from='OpticalFlowMaskBase') + + # OpticalFlowParticleSystem tooltips (inherits from: OpticalFlowMaskBase) + TooltipManager.register_tooltips("OpticalFlowParticleSystem", { + "num_particles": "Total number of particles in the system (100 to 10000)", + "particle_size": "Size of each particle in pixels (1 to 50)", + "particle_color": "Color of particles in hex format (e.g., '#FFFFFF')", + "particle_opacity": "Transparency of particles (0.0 to 1.0)", + "flow_multiplier": "Multiplier for optical flow influence (0.1 to 5.0)", + "particle_lifetime": "Number of frames each particle exists (1 to 100)", + "initial_velocity": "Starting speed of newly emitted particles (0.1 to 5.0)" + }, inherits_from='OpticalFlowMaskBase') + + # MovingShape tooltips + TooltipManager.register_tooltips("MovingShape", { + "frame_width": "Width of each frame in pixels (1 to 3840)", + "frame_height": "Height of each frame in pixels (1 to 2160)", + "num_frames": "Number of frames in the animation sequence (1 to 120)", + "rgb": "Color of the shape in RGB format (e.g., '(255,255,255)')", + "shape": "Type of shape to generate ('square', 'circle', 'triangle')", + "shape_width_percent": "Width of the shape as percentage of frame width (0 to 100)", + "shape_height_percent": "Height of the shape as percentage of frame height (0 to 100)", + "shape_start_position_x": "Starting X position relative to frame (-100 to 100)", + "shape_start_position_y": "Starting Y position relative to frame (-100 to 100)", + "shape_end_position_x": "Ending X position relative to frame (-100 to 100)", + "shape_end_position_y": "Ending Y position relative to frame (-100 to 100)", + "movement_type": "Type of movement animation ('linear', 'ease_in_out', 'bounce', 'elastic')", + "grow": "Growth factor during animation (0 to 100)", + "palindrome": "Whether to play the animation forward then reverse", + "delay": "Number of static frames at the start (0 to 60)" + }) + + # TextMaskNode tooltips + TooltipManager.register_tooltips("TextMaskNode", { + "width": "Width of the output image in pixels (1 to 8192)", + "height": "Height of the output image in pixels (1 to 8192)", + "text": "Text content to render", + "font": "Font family to use for rendering (from system fonts)", + "font_size": "Size of the font in pixels (1 to 1000)", + "font_color": "Color of the text in RGB format (e.g., '(255,255,255)')", + "background_color": "Color of the background in RGB format (e.g., '(0,0,0)')", + "x_position": "Horizontal position of text relative to frame width (0.0 to 1.0)", + "y_position": "Vertical position of text relative to frame height (0.0 to 1.0)", + "rotation": "Rotation angle of the text in degrees (0 to 360)", + "max_width_ratio": "Maximum text width as ratio of frame width (0.1 to 1.0)", + "batch_size": "Number of identical text masks to generate (1 to 10000)" + }) + + # _mfc tooltips + TooltipManager.register_tooltips("_mfc", { + "image": "Input image to create mask from (IMAGE type)", + "red": "Red component of target color (0 to 255)", + "green": "Green component of target color (0 to 255)", + "blue": "Blue component of target color (0 to 255)", + "threshold": "Color matching tolerance (0 to 127)" + }) + + # MaskCompositePlus tooltips + TooltipManager.register_tooltips("MaskCompositePlus", { + "mask1": "First input mask (MASK type)", + "mask2": "Second input mask (MASK type)", + "operation": "Operation to combine masks ('add', 'subtract', 'multiply', 'divide', 'min', 'max', 'pixel_wise_min', 'pixel_wise_max')" + }) + + # AdvancedLuminanceMask tooltips + TooltipManager.register_tooltips("AdvancedLuminanceMask", { + "image": "Input image to create mask from (IMAGE type)", + "luminance_threshold": "Base threshold for detecting non-background elements (0.0 to 1.0). Lower values catch more subtle details.", + "glow_radius": "Size of the glow effect in pixels (0 to 50). Higher values create larger, softer glows.", + "edge_preservation": "How much to preserve sharp edges while allowing glow (0.0 to 1.0). Higher values maintain more edge detail.", + "background_samples": "Number of corner samples to determine background color (1 to 100). More samples give better background detection.", + "denoise_strength": "Strength of noise reduction (0.0 to 1.0). Higher values smooth out noise while preserving edges." + }, description="Creates a sophisticated luminance-based mask that preserves translucency, glows, and gradients while intelligently handling non-pure-black backgrounds.") + + # TranslucentComposite tooltips + TooltipManager.register_tooltips("TranslucentComposite", { + "background": "The base image to composite onto (IMAGE type)", + "foreground": "The image to composite over the background (IMAGE type)", + "mask": "Mask determining where to apply the composite (MASK type)", + "blend_mode": """Blending method for the composite: +- normal: Standard alpha compositing +- screen: Brightens the result, good for glows and reflections +- multiply: Darkens the result, good for shadows and dark glass +- overlay: Increases contrast while preserving highlights and shadows""", + "opacity": "Overall opacity of the composite effect (0.0 to 1.0)", + "preserve_transparency": "When enabled, uses the foreground's luminance to modify transparency, creating realistic translucent effects", + "luminance_boost": "Adjusts the brightness of the foreground before compositing (-1.0 to 1.0). Useful for enhancing or subduing glow effects", + "background_influence": "How much the background colors influence the final result (0.0 to 1.0). Higher values create more realistic integration" + }, description="Composites a foreground image onto a background with advanced blending modes and transparency preservation, perfect for realistic translucent effects like glasses or holograms.") + + # FlexMaskMorph tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskMorph", { + "morph_type": "Type of morphological operation ('erode', 'dilate', 'open', 'close')", + "max_kernel_size": "Maximum size of the morphological kernel (3 to 21, odd numbers only)", + "max_iterations": "Maximum number of times to apply the operation (1 to 50)", + "feature_param": """Choose which parameter to modulate: + +- kernel_size: Dynamically adjust the size of the morphological operation +- iterations: Dynamically adjust how many times the operation is applied +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskWarp tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskWarp", { + "warp_type": "Type of warping effect ('perlin', 'radial', 'swirl')", + "frequency": "Controls the scale of the warping effect (0.01 to 1.0)", + "max_amplitude": "Maximum amplitude of the warping effect (0.1 to 500.0)", + "octaves": "For noise-based warps, adds detail at different scales (1 to 8)", + "feature_param": """Choose which parameter to modulate: + +- amplitude: Dynamically adjust the strength of warping +- frequency: Dynamically adjust the scale of warping +- octaves: Dynamically adjust the detail level of noise +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskTransform tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskTransform", { + "transform_type": "Type of transformation ('translate', 'rotate', 'scale')", + "max_x_value": "Maximum horizontal component of the transformation (-1000.0 to 1000.0)", + "max_y_value": "Maximum vertical component of the transformation (-1000.0 to 1000.0)", + "feature_param": """Choose which parameter to modulate: + +- x_value: Dynamically adjust horizontal transformation +- y_value: Dynamically adjust vertical transformation +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskMath tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskMath", { + "mask_b": "Second mask to combine with the input mask (MASK type)", + "combination_method": "Mathematical operation to apply ('add', 'subtract', 'multiply', 'minimum', 'maximum')", + "max_blend": "Maximum blend factor between masks (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate: + +- max_blend: Dynamically adjust the blend between masks +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskOpacity tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskOpacity", { + "max_opacity": "Maximum opacity to apply to the mask (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate: + +- opacity: Dynamically adjust the mask opacity +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskVoronoiScheduled tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskVoronoiScheduled", { + "distance_metric": "Method used to calculate distances in the Voronoi diagram", + "scale": "Base scale of the Voronoi cells (0.1 to 10.0)", + "detail": "Number of Voronoi cells (10 to 1000)", + "randomness": "Degree of randomness in cell placement (0.0 to 5.0)", + "seed": "Random seed for reproducible results", + "x_offset": "Horizontal offset of the Voronoi pattern (-1000.0 to 1000.0)", + "y_offset": "Vertical offset of the Voronoi pattern (-1000.0 to 1000.0)", + "formula": "Mathematical formula for feature value mapping ('Linear', 'Quadratic', 'Cubic', 'Sinusoidal', 'Exponential')", + "a": "First parameter for fine-tuning the chosen formula (0.1 to 10.0)", + "b": "Second parameter for fine-tuning the chosen formula (0.1 to 10.0)", + "feature_param": """Choose which parameter to modulate: + +- scale: Dynamically adjust cell size +- detail: Dynamically adjust number of cells +- randomness: Dynamically adjust cell randomness +- seed: Dynamically change pattern +- x_offset: Dynamically adjust horizontal position +- y_offset: Dynamically adjust vertical position +- None: No parameter modulation""", + "formula": "Mathematical formula for feature value mapping ('Linear', 'Quadratic', 'Cubic', 'Sinusoidal', 'Exponential')", + "a": "First parameter for fine-tuning the chosen formula (0.1 to 10.0)", + "b": "Second parameter for fine-tuning the chosen formula (0.1 to 10.0)" + }, inherits_from='FlexMaskBase') + + # FlexMaskBinary tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskBinary", { + "threshold": "Base threshold value for binarization (0.0 to 1.0)", + "feature_param": """Choose which parameter to modulate: + +- threshold: Dynamically adjust the binarization threshold +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskWavePropagation tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskWavePropagation", { + "wave_speed": "Speed of wave propagation (0.1 to 100.0)", + "wave_amplitude": "Amplitude of the wave effect (0.1 to 2.0)", + "wave_decay": "Rate of wave decay (0.9 to 10.0)", + "wave_frequency": "Frequency of wave oscillation (0.01 to 10.0)", + "max_wave_field": "Maximum size of the wave field (10.0 to 10000.0)", + "feature_param": """Choose which parameter to modulate: + +- wave_speed: Dynamically adjust propagation speed +- wave_amplitude: Dynamically adjust wave height +- wave_decay: Dynamically adjust decay rate +- wave_frequency: Dynamically adjust oscillation speed +- max_wave_field: Dynamically adjust field size +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskEmanatingRings tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskEmanatingRings", { + "ring_speed": "Speed of ring propagation (0.01 to 0.2)", + "ring_width": "Width of each ring (0.01 to 0.5)", + "ring_falloff": "Rate at which rings fade out (0.0 to 1.0)", + "binary_mode": "Whether to output binary rings instead of smooth gradients", + "feature_param": """Choose which parameter to modulate: + +- ring_speed: Dynamically adjust propagation speed +- ring_width: Dynamically adjust ring thickness +- ring_falloff: Dynamically adjust ring fade rate +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskRandomShapes tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskRandomShapes", { + "max_num_shapes": "Maximum number of shapes to generate (1 to 100)", + "max_shape_size": "Maximum size of each shape (0.01 to 1.0)", + "appearance_duration": "Duration of shape appearance (1 to 100 frames)", + "disappearance_duration": "Duration of shape disappearance (1 to 100 frames)", + "appearance_method": "Method of shape appearance ('grow', 'pop', 'fade')", + "easing_function": "Easing function for shape animation ('linear', 'ease_in_out', 'bounce', 'elastic')", + "shape_type": "Type of shape to generate", + "feature_param": """Choose which parameter to modulate: + +- max_num_shapes: Dynamically adjust shape count +- max_shape_size: Dynamically adjust shape size +- appearance_duration: Dynamically adjust fade-in time +- disappearance_duration: Dynamically adjust fade-out time +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskDepthChamber tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskDepthChamber", { + "depth_map": "Input depth map (IMAGE type)", + "z_front": "Front depth threshold (0.0 to 1.0)", + "z_back": "Back depth threshold (0.0 to 1.0)", + "feature_mode": "Mode of feature modulation ('squeeze', 'expand', 'move_forward', 'move_back')", + "feature_param": """Choose which parameter to modulate: + +- z_front: Dynamically adjust front threshold +- z_back: Dynamically adjust back threshold +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskDepthChamberRelative tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskDepthChamberRelative", { + "depth_map": "Input depth map (IMAGE type)", + "z1": "First depth threshold (0.0 to 1.0)", + "z2": "Second depth threshold (0.0 to 1.0)", + "feature_mode": "Mode of feature modulation ('squeeze', 'expand')", + "feature_param": """Choose which parameter to modulate: + +- z1: Dynamically adjust first threshold +- z2: Dynamically adjust second threshold +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskInterpolate tooltips (inherits from: FlexMaskBase) + TooltipManager.register_tooltips("FlexMaskInterpolate", { + "mask_b": "Second mask to interpolate with (MASK type)", + "interpolation_method": "Method of interpolation ('linear', 'ease_in', 'ease_out', 'ease_in_out', 'cubic', 'sigmoid', 'radial', 'distance_transform', 'random_noise')", + "max_blend": "Maximum blend factor between masks (0.0 to 1.0)", + "invert_mask_b": "Whether to invert the second mask before interpolation", + "blend_mode": "Method for blending masks ('normal', 'add', 'multiply', 'overlay', 'soft_light')", + "feature_param": """Choose which parameter to modulate: + +- max_blend: Dynamically adjust blend amount +- None: No parameter modulation""" + }, inherits_from='FlexMaskBase') + + # FlexMaskNormalLighting tooltips (inherits from: FlexMaskNormalBase) + TooltipManager.register_tooltips("FlexMaskNormalLighting", { + "light_direction_x": "X component of light direction (-1.0 to 1.0)", + "light_direction_y": "Y component of light direction (-1.0 to 1.0)", + "light_direction_z": "Z component of light direction (-1.0 to 1.0)", + "shadow_threshold": "Threshold for shadow creation (0.0 to 1.0)", + "feature_param": "Parameter to modulate based on the feature ('none', 'direction', 'threshold', 'both')", + "feature_mode": "Mode of feature modulation ('rotate', 'intensity')" + }, inherits_from='FlexMaskNormalBase') \ No newline at end of file diff --git a/tooltips/categories/misc.py b/tooltips/categories/misc.py new file mode 100644 index 0000000..d70d978 --- /dev/null +++ b/tooltips/categories/misc.py @@ -0,0 +1,12 @@ +"""Tooltips for misc-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for misc nodes""" + + # WhisperToPromptTravel tooltips + TooltipManager.register_tooltips("WhisperToPromptTravel", { + "segments_alignment": "JSON string containing segment alignments from Whisper. Each segment should have 'start' (timestamp) and 'value' (text) fields.", + "fps": "Frame rate of the video to sync with (0.1 to 120.0 fps). Used to convert timestamps to frame numbers.", + }) diff --git a/tooltips/categories/preprocessors.py b/tooltips/categories/preprocessors.py new file mode 100644 index 0000000..84a4655 --- /dev/null +++ b/tooltips/categories/preprocessors.py @@ -0,0 +1,16 @@ +"""Tooltips for preprocessors-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for preprocessors nodes""" + + # PoseInterpolator tooltips (inherits from: RyanOnTheInside) + TooltipManager.register_tooltips("PoseInterpolator", { + "pose_1": "First pose keypoint sequence to interpolate between", + "pose_2": "Second pose keypoint sequence to interpolate between", + "feature": "Feature that controls the interpolation amount between poses", + "strength": "Overall strength of the interpolation effect (0.0 to 1.0)", + "interpolation_mode": "Method for interpolating between poses: Linear (straight interpolation) or Spherical (curved path interpolation)", + "omit_missing_points": "When enabled, missing keypoints in either pose will be set to zero in the output. When disabled, uses the available keypoint from either pose.", + }, inherits_from='RyanOnTheInside') diff --git a/tooltips/categories/utility.py b/tooltips/categories/utility.py new file mode 100644 index 0000000..4776bab --- /dev/null +++ b/tooltips/categories/utility.py @@ -0,0 +1,51 @@ +"""Tooltips for utility-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for utility nodes""" + + # ImageIntervalSelect tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("ImageIntervalSelect", { + "image": "Input image sequence (IMAGE type)", + "interval": "Number of frames to skip between selections (1 to 100000)", + "start_at": "Frame number to start selection from (0 to 100000)", + "end_at": "Frame number to end selection at (0 to 100000, 0 means until end)" + }, inherits_from='UtilityNode', description="Select frames from an image sequence at regular intervals, useful for reducing frame count or creating time-lapse effects.") + + # ImageIntervalSelectPercentage tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("ImageIntervalSelectPercentage", { + "image": "Input image sequence (IMAGE type)", + "interval_percentage": "Percentage of total frames to skip between selections (1 to 100)", + "start_percentage": "Percentage point to start selection from (0 to 100)", + "end_percentage": "Percentage point to end selection at (0 to 100)" + }, inherits_from='UtilityNode', description="Select frames using percentages instead of frame numbers, making it easier to work with sequences of different lengths.") + + # ImageChunks tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("ImageChunks", { + "image": "Input image sequence to arrange in a grid (IMAGE type)" + }, inherits_from='UtilityNode', description="Arrange an image sequence into a grid layout, useful for creating sprite sheets or thumbnail previews.") + + # VideoChunks tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("VideoChunks", { + "image": "Input video frames to arrange in grids (IMAGE type)", + "chunk_size": "Number of frames per grid (minimum: 1)" + }, inherits_from='UtilityNode', description="Create multiple grid layouts from a video sequence, with control over how many frames appear in each grid.") + + # Image_Shuffle tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("Image_Shuffle", { + "image": "Input image sequence to shuffle (IMAGE type)", + "shuffle_size": "Size of groups to shuffle together (minimum: 1)" + }, inherits_from='UtilityNode', description="Randomly reorder frames in an image sequence, with control over group size for maintaining some temporal coherence.") + + # ImageDifference tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("ImageDifference", { + "image": "Input image sequence to compute differences between frames (IMAGE type, minimum 2 frames)" + }, inherits_from='UtilityNode', description="Calculate the visual difference between consecutive frames, useful for motion detection or transition effects.") + + # SwapDevice tooltips (inherits from: UtilityNode) + TooltipManager.register_tooltips("SwapDevice", { + "device": "Target device to move tensors to ('cpu' or 'cuda')", + "image": "Optional input image to move to target device (IMAGE type)", + "mask": "Optional input mask to move to target device (MASK type)" + }, inherits_from='UtilityNode', description="Move images and masks between CPU and GPU memory to optimize processing speed and memory usage.") diff --git a/tooltips/categories/video.py b/tooltips/categories/video.py new file mode 100644 index 0000000..769d4da --- /dev/null +++ b/tooltips/categories/video.py @@ -0,0 +1,48 @@ +"""Tooltips for video-related nodes.""" + +from ..tooltip_manager import TooltipManager + +def register_tooltips(): + """Register tooltips for video nodes""" + + # FlexVideoBase tooltips (inherits from: FlexBase, ABC) + TooltipManager.register_tooltips("FlexVideoBase", { + "images": "Input video frames (IMAGE type)", + "feature": "Feature used to modulate the effect (FEATURE type)", + "strength": "Overall strength of the effect (0.0 to 2.0)", + "feature_mode": "How the feature modulates the parameter ('relative' or 'absolute')", + "feature_param": "Parameter to be modulated by the feature", + "feature_threshold": "Minimum feature value to apply the effect (0.0 to 1.0)", + "feature_pipe": "Feature pipe containing frame information (FEATURE_PIPE type)" + }, inherits_from=['FlexBase', 'ABC']) + + # FlexVideoDirection tooltips (inherits from: FlexVideoBase) + TooltipManager.register_tooltips("FlexVideoDirection", { + "feature_pipe": "Feature pipe containing frame information (FEATURE_PIPE type)", + "feature_values": "Array of feature values for each frame (0.0 to 1.0)" + }, inherits_from='FlexVideoBase') + + # FlexVideoSeek tooltips (inherits from: FlexVideoBase) + TooltipManager.register_tooltips("FlexVideoSeek", { + "feature_mode": "Only supports 'relative' mode", + "reverse": "Whether to play the video in reverse", + "feature_values": "Array of feature values for each frame (0.0 to 1.0)" + }, inherits_from='FlexVideoBase') + + # FlexVideoFrameBlend tooltips (inherits from: FlexVideoBase) + TooltipManager.register_tooltips("FlexVideoFrameBlend", { + "blend_strength": "Strength of the frame blending effect (0.0 to 1.0)", + "frame_offset_ratio": "Ratio of frame offset for blending (0.0 to 1.0)", + "direction_bias": "Bias for blending direction (0.0 to 1.0)", + "blend_mode": "Mode for frame blending ('normal', 'additive', 'multiply', 'screen')", + "motion_blur_strength": "Strength of motion blur effect (0.0 to 1.0)" + }, inherits_from='FlexVideoBase') + + # FlexVideoSpeed tooltips (inherits from: FlexVideoBase) + TooltipManager.register_tooltips("FlexVideoSpeed", { + "speed_factor": "Speed factor for playback (-100.0 to 100.0)", + "interpolation_mode": "Method for frame interpolation ('none', 'linear', 'Farneback', 'rife47', 'rife49')", + "fast_mode": "Enable fast processing mode for RIFE interpolation", + "ensemble": "Enable ensemble mode for better quality in RIFE interpolation", + "scale_factor": "Scale factor for processing (0.25, 0.5, 1.0, 2.0, 4.0)" + }, inherits_from='FlexVideoBase') diff --git a/tooltips/tooltip_manager.py b/tooltips/tooltip_manager.py new file mode 100644 index 0000000..4525293 --- /dev/null +++ b/tooltips/tooltip_manager.py @@ -0,0 +1,242 @@ +""" +Core tooltip management functionality. +""" +from typing import Dict, Optional, Union, List +from collections import deque + +class TooltipManager: + """ + Manages tooltips for all nodes in the suite. + Provides a centralized way to define and access tooltips. + """ + + # Dictionary mapping node names to their parameter tooltips + NODE_TOOLTIPS = {} + + # Dictionary mapping node names to their parent classes + INHERITANCE_MAP = {} + + # Dictionary mapping node names to their descriptions + NODE_DESCRIPTIONS = {} + + @classmethod + def get_tooltips(cls, node_class: str) -> dict: + """ + Get all tooltips for a node class, including inherited tooltips. + Uses breadth-first search to build the inheritance chain, properly handling multiple inheritance. + + Args: + node_class: Name of the node class + + Returns: + Dictionary mapping parameter names to tooltip descriptions + """ + tooltips = {} + visited = set() + inheritance_chain = [] + queue = deque([(node_class, 0)]) # (class_name, depth) + max_depth = 0 + + # Build inheritance chain using BFS, tracking depth + while queue: + current, depth = queue.popleft() + if current in visited: + continue + + visited.add(current) + inheritance_chain.append((current, depth)) + max_depth = max(max_depth, depth) + + if current in cls.INHERITANCE_MAP: + parents = cls.INHERITANCE_MAP[current] + if isinstance(parents, list): + # Add all parents at the next depth level + queue.extend((parent, depth + 1) for parent in parents) + else: + queue.append((parents, depth + 1)) + + # Process tooltips in natural order (depth 0 to max_depth) + # This means we'll process derived classes first, which is what we want + # since derived class tooltips should override base class tooltips + for depth in range(0, max_depth + 1): + # Get all classes at this depth level + classes_at_depth = [cls_name for cls_name, d in inheritance_chain if d == depth] + for class_name in classes_at_depth: + if class_name in cls.NODE_TOOLTIPS: + # Add tooltips from this class, but don't override any existing tooltips + # This ensures derived class tooltips take precedence over base class tooltips + class_tooltips = cls.NODE_TOOLTIPS[class_name] + for param, tooltip in class_tooltips.items(): + if param not in tooltips: # Only add if not already defined + tooltips[param] = tooltip + + return tooltips + + @classmethod + def get_tooltip(cls, node_class: str, param_name: str) -> str: + """ + Get the tooltip for a specific parameter of a node. + + Args: + node_class: Name of the node class + param_name: Name of the parameter + + Returns: + str: Tooltip text for the parameter, or empty string if not found + """ + tooltips = cls.get_tooltips(node_class) + return tooltips.get(param_name, "") + + @classmethod + def get_description(cls, node_class: str) -> str: + """ + Get the description for a node class, including inherited descriptions. + Descriptions from parent classes are combined in order. + + Args: + node_class: Name of the node class + + Returns: + str: Combined description text for the node + """ + descriptions = [] + visited = set() + queue = deque([node_class]) + + while queue: + current = queue.popleft() + if current in visited: + continue + + visited.add(current) + + # Add description if it exists + if current in cls.NODE_DESCRIPTIONS: + descriptions.append(cls.NODE_DESCRIPTIONS[current]) + + # Add parent classes to queue + if current in cls.INHERITANCE_MAP: + parents = cls.INHERITANCE_MAP[current] + if isinstance(parents, list): + queue.extend(parents) + else: + queue.append(parents) + + return "\n\n".join(descriptions) if descriptions else "" + + @classmethod + def register_tooltips(cls, node_class: str, tooltips: dict, inherits_from: Optional[Union[str, List[str]]] = None, description: Optional[str] = None): + """ + Register tooltips and description for a node class. + + Args: + node_class: Name of the node class + tooltips: Dictionary mapping parameter names to tooltip descriptions + inherits_from: Optional parent class name(s) to inherit tooltips from + description: Optional description text for the node + """ + if inherits_from: + cls.INHERITANCE_MAP[node_class] = inherits_from + cls.NODE_TOOLTIPS[node_class] = tooltips + if description: + cls.NODE_DESCRIPTIONS[node_class] = description + + +def apply_tooltips(node_class): + """ + Class decorator to apply tooltips to a node class. + This will automatically: + 1. Add tooltips to the INPUT_TYPES configuration + 2. Set the DESCRIPTION attribute based on registered descriptions + Only applies to classes that have an INPUT_TYPES classmethod. + + Args: + node_class: The node class to apply tooltips to + + Returns: + The decorated node class with tooltips and description applied + """ + # Set the DESCRIPTION attribute from registered descriptions + description = TooltipManager.get_description(node_class.__name__) + if description: + node_class.DESCRIPTION = description + + # If the class doesn't have INPUT_TYPES, just return it + if not hasattr(node_class, 'INPUT_TYPES'): + return node_class + + original_input_types = node_class.INPUT_TYPES + + @classmethod + def input_types_with_tooltips(cls): + try: + input_types = original_input_types.__get__(cls, cls)() + if not isinstance(input_types, dict): + return original_input_types.__get__(cls, cls)() + except Exception as e: + return original_input_types.__get__(cls, cls)() + + tooltips = TooltipManager.get_tooltips(cls.__name__) + + def add_tooltip_to_config(param_name, config): + if param_name not in tooltips: + return config + + tooltip = tooltips[param_name] + + # Handle tuple format (type, config_dict) + if isinstance(config, tuple): + if len(config) == 2: + param_type, param_config = config + # If param_config is already a dict, just add the tooltip + if isinstance(param_config, dict): + param_config = param_config.copy() + param_config["tooltip"] = tooltip + return (param_type, param_config) + # If param_type is a list, this is a dropdown without config + elif isinstance(param_type, list): + return (param_type, {"tooltip": tooltip}) + # If param_type is a tuple containing a method call result, preserve it + elif isinstance(param_type, tuple) and len(param_type) > 0: + return (param_type, {"tooltip": tooltip}) + # Otherwise treat second element as is + return config + elif len(config) == 1: + # Handle single-element tuples that might be method call results + if isinstance(config[0], tuple): + return (config[0], {"tooltip": tooltip}) + return (config[0], {"tooltip": tooltip}) + return config + + # Handle list format (dropdown options) + if isinstance(config, list): + return (config, {"tooltip": tooltip}) + + # Handle direct dict format + if isinstance(config, dict): + config = config.copy() + config["tooltip"] = tooltip + return config + + return config + + # Add tooltips to required parameters + if "required" in input_types: + input_types["required"] = { + param_name: add_tooltip_to_config(param_name, config) + for param_name, config in input_types["required"].items() + } + + # Add tooltips to optional parameters + if "optional" in input_types: + input_types["optional"] = { + param_name: add_tooltip_to_config(param_name, config) + for param_name, config in input_types["optional"].items() + } + + return input_types + + # Replace the original INPUT_TYPES with our wrapped version + node_class.INPUT_TYPES = input_types_with_tooltips + + return node_class \ No newline at end of file diff --git a/web/extensions/widget_hotkey.js b/web/extensions/widget_hotkey.js new file mode 100644 index 0000000..6026a65 --- /dev/null +++ b/web/extensions/widget_hotkey.js @@ -0,0 +1,173 @@ +// Extension to add ctrl-click functionality for widget/input conversion +(function() { + // Core ComfyUI functions for widget conversion + function showWidget(widget) { + widget.type = widget.origType; + widget.computeSize = widget.origComputeSize; + widget.serializeValue = widget.origSerializeValue; + delete widget.origType; + delete widget.origComputeSize; + delete widget.origSerializeValue; + if (widget.linkedWidgets) { + for (const w of widget.linkedWidgets) { + showWidget(w); + } + } + } + + function convertToWidget(node, widget) { + showWidget(widget); + const [oldWidth, oldHeight] = node.size; + + // Find and remove the input + const inputIndex = node.inputs.findIndex((i) => i.widget?.name === widget.name); + if (inputIndex !== -1) { + node.removeInput(inputIndex); + } + + // Make sure the widget is in the node's widgets array + if (!node.widgets.includes(widget)) { + node.widgets.push(widget); + } + + // Adjust widget positions + for (const widget2 of node.widgets) { + widget2.last_y -= LiteGraph.NODE_SLOT_HEIGHT; + } + + node.setSize([ + Math.max(oldWidth, node.size[0]), + Math.max(oldHeight, node.size[1]) + ]); + } + + class WidgetHotkeyHandler { + constructor(app) { + this.app = app; + // console.log("[Widget Hotkey] Starting to load extension..."); + this.setupEventHandler(); + } + + setupEventHandler() { + if (!this.app.canvas) { + // console.log("[Widget Hotkey] Canvas not available yet, waiting..."); + setTimeout(() => this.setupEventHandler(), 100); + return; + } + + // console.log("[Widget Hotkey] Setting up event handler..."); + + // Store the original mousedown handler + const originalMouseDown = this.app.canvas.onMouseDown; + + // Override the mousedown handler + this.app.canvas.onMouseDown = (e) => { + if (e.ctrlKey) { + // Get the node under the mouse + const node = this.app.graph.getNodeOnPos(e.canvasX, e.canvasY); + if (node) { + // Convert canvas position to node local position + const localPos = [ + e.canvasX - node.pos[0], + e.canvasY - node.pos[1] + ]; + + // Find widget at position + const widget = this.findWidgetAtPos(node, localPos); + + if (widget) { + return this.handleWidgetClick(node, widget); + } + } + } + + // Call the original handler + if (originalMouseDown) { + return originalMouseDown.call(this.app.canvas, e); + } + }; + + // console.log("[Widget Hotkey] Event handler setup complete!"); + } + + findWidgetAtPos(node, localPos) { + // First check input slots (converted widgets) + let y = LiteGraph.NODE_TITLE_HEIGHT; + for (const input of node.inputs || []) { + if (input.widget) { + // Check if click is in input slot area + if (localPos[0] >= 0 && + localPos[0] <= 20 && + localPos[1] >= y && + localPos[1] <= y + LiteGraph.NODE_SLOT_HEIGHT) { + // Return the widget from the input + return input.widget; + } + } + y += LiteGraph.NODE_SLOT_HEIGHT; + } + + // Then check regular widgets using the same logic as tooltips + for (const w of node.widgets || []) { + // Skip widgets that are already converted to inputs + if (w.type?.startsWith("converted-widget")) continue; + + let widgetWidth, widgetHeight; + if (w.computeSize) { + [widgetWidth, widgetHeight] = w.computeSize(node.size[0]); + } else { + widgetWidth = w.width || node.size[0]; + widgetHeight = LiteGraph.NODE_WIDGET_HEIGHT; + } + + if (w.last_y !== undefined && + localPos[0] >= 6 && + localPos[0] <= widgetWidth - 12 && + localPos[1] >= w.last_y && + localPos[1] <= w.last_y + widgetHeight) { + return w; + } + } + + return null; + } + + handleWidgetClick(node, widget) { + // Check if this widget is from an input (it's already converted) + const isInput = node.inputs.some(input => input.widget === widget); + + if (isInput) { + // TODO + // Convert input back to widget using core ComfyUI's convertToWidget function + // console.log("[Widget Hotkey] Attempting to convert input back to widget:", widget.name); + // convertToWidget(node, widget); + } else { + // Convert widget to input using node's built-in method + // console.log("[Widget Hotkey] Attempting to convert widget to input:", widget.name); + node.convertWidgetToInput(widget); + } + + return false; + } + } + + function registerWidgetHotkeyExtension() { + const app = window.app || window.ComfyApp || window.comfyAPI?.app?.app; + if (app && app.registerExtension) { + app.registerExtension({ + name: "RyanOnTheInside.WidgetInputHotkey", + setup(app) { + // console.log("[Widget Hotkey] Setup phase starting..."); + // Create an instance of the handler class and initialize it + new WidgetHotkeyHandler(app); + } + }); + } else { + // Try again after a short delay if app is not available yet + setTimeout(registerWidgetHotkeyExtension, 100); + } + } + + // Start trying to register the extension + registerWidgetHotkeyExtension(); +})(); \ No newline at end of file diff --git a/web/js/color_picker.js b/web/js/color_picker.js new file mode 100644 index 0000000..09ec1ce --- /dev/null +++ b/web/js/color_picker.js @@ -0,0 +1,197 @@ +import { app } from "../../scripts/app.js"; + +class ColorPickerWidget { + constructor(node) { + this.node = node; + + // Create container element + this.element = document.createElement('div'); + this.element.style.width = '200px'; + this.element.style.height = '300px'; + this.element.style.position = 'relative'; + this.element.style.backgroundColor = '#1a1a1a'; + this.element.style.borderRadius = '8px'; + this.element.style.padding = '10px'; + + // Create color picker container + this.pickerContainer = document.createElement('div'); + this.pickerContainer.style.width = '100%'; + this.pickerContainer.style.height = '100%'; + this.element.appendChild(this.pickerContainer); + + // Initialize color picker once iro.js is loaded + this.initColorPicker(); + } + + initColorPicker() { + if (window.iro) { + // Get initial color from node's state + const initialColor = this.node.color || "#ff0000"; + + // Create color picker + this.colorPicker = new window.iro.ColorPicker(this.pickerContainer, { + width: 180, + color: initialColor, + layout: [ + { + component: iro.ui.Wheel, + options: {} + }, + { + component: iro.ui.Slider, + options: { + sliderType: 'value' + } + } + ] + }); + + // Add color change handler + this.colorPicker.on('color:change', (color) => { + // Update node state + this.node.color = color.hexString; + this.node.rgb = `${color.rgb.r},${color.rgb.g},${color.rgb.b}`; + this.node.hue = Math.round(color.hue); + + // Update hidden widget for Python + if (this.node.widgets) { + const colorWidget = this.node.widgets.find(w => w.name === "color"); + if (colorWidget) { + colorWidget.value = JSON.stringify({ + hex: this.node.color, + rgb: this.node.rgb, + hue: this.node.hue + }); + // Trigger widget change using the node's method + if (this.node.onWidgetChanged) { + this.node.onWidgetChanged("color", colorWidget.value, colorWidget.value, colorWidget); + } + } + } + + // Request canvas update + this.node.setDirtyCanvas(true, true); + }); + } else { + // Retry in 100ms if iro.js hasn't loaded yet + setTimeout(() => this.initColorPicker(), 100); + } + } + + cleanup() { + if (this.colorPicker) { + // Remove event listeners + this.colorPicker.off('color:change'); + // Destroy picker instance + this.colorPicker = null; + } + // Remove DOM elements + this.element.remove(); + } +} + +app.registerExtension({ + name: "RyanOnTheInside.ColorPicker", + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name === "ColorPicker") { + // Store original methods + const onNodeCreated = nodeType.prototype.onNodeCreated; + const onSerialize = nodeType.prototype.onSerialize; + const onConfigure = nodeType.prototype.onConfigure; + + // Add serialization support + nodeType.prototype.onSerialize = function(o) { + if (onSerialize) { + onSerialize.apply(this, arguments); + } + o.color = this.color; + o.rgb = this.rgb; + o.hue = this.hue; + }; + + // Add deserialization support + nodeType.prototype.onConfigure = function(o) { + if (onConfigure) { + onConfigure.apply(this, arguments); + } + this.color = o.color || "#ff0000"; + this.rgb = o.rgb || "255,0,0"; + this.hue = o.hue || 0; + + // Update widget with loaded values + if (this.widgets) { + const colorWidget = this.widgets.find(w => w.name === "color"); + if (colorWidget) { + colorWidget.value = JSON.stringify({ + hex: this.color, + rgb: this.rgb, + hue: this.hue + }); + } + } + + // Update color picker visual state if it exists + if (this.colorPickerWidget && this.colorPickerWidget.colorPicker) { + this.colorPickerWidget.colorPicker.color.set(this.color); + } + }; + + // Override onNodeCreated + nodeType.prototype.onNodeCreated = function() { + const r = onNodeCreated?.apply(this, arguments); + + // Set initial node size + this.setSize([220, 380]); + + // Initialize state + this.color = "#ff0000"; + this.rgb = "255,0,0"; + this.hue = 0; + + // Initialize widgets array if it doesn't exist + if (!this.widgets) { + this.widgets = []; + } + + // Remove default color widget if it exists + const colorWidgetIndex = this.widgets.findIndex(w => w.name === "color"); + if (colorWidgetIndex > -1) { + this.widgets.splice(colorWidgetIndex, 1); + } + + // Create and add the color picker widget + const colorPickerWidget = new ColorPickerWidget(this); + this.colorPicker = this.addDOMWidget("colorpicker", "ColorPicker", colorPickerWidget.element, { + serialize: false, + hideOnZoom: false + }); + + // Store widget instance for cleanup + this.colorPickerWidget = colorPickerWidget; + + // Add hidden color widget at the end + this.widgets.push({ + type: "text", + name: "color", + value: JSON.stringify({ + hex: this.color, + rgb: this.rgb, + hue: this.hue + }), + hidden: true + }); + + return r; + }; + + // Add cleanup on node removal + const onRemoved = nodeType.prototype.onRemoved; + nodeType.prototype.onRemoved = function() { + if (this.colorPickerWidget) { + this.colorPickerWidget.cleanup(); + } + return onRemoved?.apply(this, arguments); + }; + } + } +}); diff --git a/web/js/drawable_feature.js b/web/js/drawable_feature.js new file mode 100644 index 0000000..32ae987 --- /dev/null +++ b/web/js/drawable_feature.js @@ -0,0 +1,801 @@ +import { app } from "../../scripts/app.js"; +import { ComfyWidgets } from "../../scripts/widgets.js"; +import { FeatureTemplates } from "./feature_templates.js"; + + +//TODO: add handling for maximum frame count change +// Register custom widget type +app.registerExtension({ + name: "RyanOnTheInside.DrawableFeature", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + // console.log("Registering DrawableFeature extension", { nodeType, nodeData }); + + if (nodeData.name === "DrawableFeatureNode") { + // console.log("Found DrawableFeatureNode, setting up widget"); + + // Set default size + nodeType.size = [700, 800]; // Increased size for better usability + + // Store the original methods + const onNodeCreated = nodeType.prototype.onNodeCreated; + const onDrawForeground = nodeType.prototype.onDrawForeground; + const onMouseDown = nodeType.prototype.onMouseDown; + const onMouseMove = nodeType.prototype.onMouseMove; + const onMouseUp = nodeType.prototype.onMouseUp; + const onDblClick = nodeType.prototype.onDblClick; + const onResize = nodeType.prototype.onResize; + const onSerialize = nodeType.prototype.onSerialize; + const onConfigure = nodeType.prototype.onConfigure; + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + + // Add serialization support + nodeType.prototype.onSerialize = function(o) { + if (onSerialize) { + onSerialize.apply(this, arguments); + } + o.points = this.points; + }; + + // Add deserialization support + nodeType.prototype.onConfigure = function(o) { + if (onConfigure) { + onConfigure.apply(this, arguments); + } + if (o.points) { + this.points = o.points; + this.updatePointsValue(); + } + }; + + // Add connection change handler + nodeType.prototype.onConnectionsChange = function(slotType, slot, isConnected, link_info, output) { + // console.log("onConnectionsChange:", { slotType, slot, isConnected, link_info }); + + if (onConnectionsChange) { + onConnectionsChange.apply(this, arguments); + } + + // Handle frame_count input connection changes + if (slotType === LiteGraph.INPUT) { + const input = this.inputs[slot]; + // console.log("Input connection change:", { input, name: input?.name }); + + if (input && input.name === "frame_count") { + if (isConnected && link_info) { + // When connected, we'll need to listen for value changes + const inputNode = link_info.origin_id ? this.graph._nodes_by_id[link_info.origin_id] : null; + // console.log("Connected node:", inputNode); + + if (inputNode) { + // Store the connected node for later reference + this.frameCountInputNode = inputNode; + // Set up the trigger and mode for value changes + input.onTrigger = this.onInputUpdated.bind(this); + // Set mode to trigger on any value change + input.mode = LiteGraph.UP | LiteGraph.DOWN | LiteGraph.EVENT; + // Also watch the connected node's widget for changes + const widget = inputNode.widgets?.[0]; + if (widget) { + const originalCallback = widget.callback; + widget.callback = (v) => { + if (originalCallback) { + originalCallback.call(widget, v); + } + // Trigger our input update when the upstream widget changes + console.log("Frame count input updated from upstream widget:", v); + this.onInputUpdated(); + }; + } + // Trigger initial update + this.onInputUpdated(); + } + } else { + // When disconnected, clear the reference and trigger + this.frameCountInputNode = null; + input.onTrigger = null; + input.mode = LiteGraph.DEFAULT; // Reset mode + } + // Redraw since frame count may have changed + this.setDirtyCanvas(true, true); + } + } + }; + + // Add handler for input value changes + nodeType.prototype.onInputUpdated = function() { + // Find frame_count input + const frameCountInput = this.inputs.find(input => input.name === "frame_count"); + + if (frameCountInput && frameCountInput.link !== null) { + // Get the connected node + const link = this.graph.links[frameCountInput.link]; + + if (link && link.origin_id) { + const inputNode = this.graph._nodes_by_id[link.origin_id]; + + if (inputNode) { + // Try to get value from node's widget first + const widget = inputNode.widgets?.[0]; + let frameCount; + if (widget) { + frameCount = widget.value; + } else { + // Fallback to output value if no widget + frameCount = inputNode.getOutputData(link.origin_slot); + } + + if (frameCount !== undefined && frameCount !== null) { + // Get frame count widget + const frameCountWidget = this.widgets.find(w => w.name === "frame_count"); + if (frameCountWidget) { + const oldFrameCount = frameCountWidget.value; + // console.log("Updating frame count from", oldFrameCount, "to", frameCount); + + // Update widget value first + frameCountWidget.value = frameCount; + + // Scale points if needed + if (this.points && this.points.length > 0 && oldFrameCount !== frameCount) { + this.points = this.points.map(([frame, value]) => { + const oldMax = oldFrameCount - 1; + const newMax = frameCount - 1; + const newFrame = Math.min(newMax, Math.round((frame / oldMax) * newMax)); + return [newFrame, value]; + }); + this.points.sort((a, b) => a[0] - b[0]); + this.updatePointsValue(); + } + + // Force graph area update + this.setSize(this.size); // This will trigger size update and redraw + this.setDirtyCanvas(true, true); + } + } + } + } + } + }; + + // Override onNodeCreated to initialize the node + nodeType.prototype.onNodeCreated = function() { + // console.log("Node created, initializing node"); + const r = onNodeCreated?.apply(this, arguments); + + // Add trigger for input updates + this.onInputTriggered = this.onInputUpdated.bind(this); + + // Register for input triggers + if (!this.inputs) { + this.inputs = []; + } + + // Find or create frame_count input + let frameCountInput = this.inputs.find(input => input.name === "frame_count"); + if (frameCountInput) { + // Add trigger callback + frameCountInput.onTrigger = this.onInputTriggered; + // Set mode to trigger on value change + frameCountInput.mode = LiteGraph.UP | LiteGraph.DOWN; + } + + // Remove default points widget if it exists + const pointsWidgetIndex = this.widgets.findIndex(w => w.name === "points"); + if (pointsWidgetIndex > -1) { + this.widgets.splice(pointsWidgetIndex, 1); + } + + // Initialize state + this.points = []; + this.isDragging = false; + this.selectedPoint = null; + this.hoverPoint = null; + this.isAddingPoint = false; + + // Add frame count change handler + const frameCountWidget = this.widgets.find(w => w.name === "frame_count"); + if (frameCountWidget) { + // Track the last frame count outside the callback + let lastFrameCount = frameCountWidget.value; + const originalCallback = frameCountWidget.callback; + frameCountWidget.callback = function(v, e, skipCallback) { + // console.log("Frame count widget callback triggered"); + const oldFrameCount = lastFrameCount; // Use tracked value + // console.log("Current frame count:", oldFrameCount); + // console.log("New frame count:", v); + // console.log("this.points exists:", !!this.points); + // console.log("this.points:", JSON.stringify(this.points)); + // console.log("this.points length:", this.points?.length); + // console.log("oldFrameCount !== v:", oldFrameCount !== v); + + // Update tracked value before calling original callback + lastFrameCount = v; + + // Call original callback to update the widget value + if (originalCallback && !skipCallback) { + originalCallback.call(frameCountWidget, v, e); + } + + // Now scale points based on the frame count change + if (this.points && this.points.length > 0 && oldFrameCount !== v) { + // console.log("Original points:", JSON.stringify(this.points)); + this.points = this.points.map(([frame, value]) => { + const oldMax = oldFrameCount - 1; // Convert to 0-based + const newMax = v - 1; // Convert to 0-based + const newFrame = Math.min(newMax, Math.round((frame / oldMax) * newMax)); + // console.log(`Scaling point frame ${frame} to ${newFrame} (old max: ${oldMax}, new max: ${newMax})`); + return [newFrame, value]; + }); + // Sort points by frame number + this.points.sort((a, b) => a[0] - b[0]); + // console.log("Scaled points:", JSON.stringify(this.points)); + this.updatePointsValue(); + this.setDirtyCanvas(true, true); + } else { + // console.log("Skipped points scaling because:", { + // hasPoints: !!this.points, + // pointsLength: this.points?.length, + // frameCountChanged: oldFrameCount !== v + // }); + } + }.bind(this); // Still bind to node instance for this.points access + } + + // Add hidden points widget at the end + this.widgets.push({ + type: "text", + name: "points", + value: "[]", + hidden: true + }); + + // Restore points from widget value + try { + const savedPoints = JSON.parse(this.widgets[this.widgets.length - 1].value); + if (Array.isArray(savedPoints)) { + this.points = savedPoints; + } + } catch (e) { + // console.error("Failed to restore points:", e); + } + + + // Add template dropdown and controls + const templateWidget = this.addWidget("combo", "Template", "selected_template", (v) => {}, { + values: [ + "none", + // Basic waveforms + "sine", + "square", + "triangle", + "sawtooth", + // Animation curves + "easeInOut", + "easeIn", + "easeOut", + // Special patterns + "bounce", + "pulse", + "random", + "smoothRandom", + "heartbeat", + "steps" + ], + value: "none" + }); + templateWidget.name = "template"; + + // Add cycles control + const cyclesWidget = this.addWidget("number", "Template Cycles", "template_cycles", function(v) { + return Math.max(0.1, Math.min(200, v)); + }, { + value: 1.0, + min: 0.1, + max: 200, + step: 0.1, + precision: 2 + }); + cyclesWidget.name = "template_cycles"; + cyclesWidget.value = 1.0; // Explicitly set initial value + + // Add load template button + const loadButton = this.addWidget("button", "Load Template", "load", () => { + const templateWidget = this.widgets.find(w => w.name === "template"); + if (templateWidget && templateWidget.value && templateWidget.value !== "none") { + this.loadTemplate(templateWidget.value); + } + }); + + + // Add clear button widget + this.addWidget("button", "Clear Graph", "clear", () => { + this.points = []; + this.updatePointsValue(); + this.setDirtyCanvas(true, true); + }); + + // Add handlers for min/max value changes + const minValueWidget = this.widgets.find(w => w.name === "min_value"); + const maxValueWidget = this.widgets.find(w => w.name === "max_value"); + + if (minValueWidget) { + const originalCallback = minValueWidget.callback; + minValueWidget.callback = (v) => { + const result = originalCallback?.call(this, v); + this.clampPoints(); + return result; + }; + } + + if (maxValueWidget) { + const originalCallback = maxValueWidget.callback; + maxValueWidget.callback = (v) => { + const result = originalCallback?.call(this, v); + this.clampPoints(); + return result; + }; + } + + return r; + }; + + // Add method to clamp points to min/max range + nodeType.prototype.clampPoints = function() { + if (!this.points || this.points.length === 0) return; + + // Get current min/max values + const minValue = this.widgets.find(w => w.name === "min_value")?.value ?? 0; + const maxValue = this.widgets.find(w => w.name === "max_value")?.value ?? 1; + + // Clamp any out-of-bounds points + let needsUpdate = false; + this.points = this.points.map(([frame, value]) => { + const clampedValue = Math.min(Math.max(value, minValue), maxValue); + if (clampedValue !== value) needsUpdate = true; + return [frame, clampedValue]; + }); + + // Only update if points were actually clamped + if (needsUpdate) { + this.updatePointsValue(); + this.setDirtyCanvas(true, true); + } + }; + + // Calculate widget area height + nodeType.prototype.getWidgetAreaHeight = function() { + let height = 0; + const titleHeight = 30; + const widgetSpacing = 4; + + height += titleHeight; + + for (const w of this.widgets) { + if (!w.hidden) { + height += w.computeSize?.[1] || 20; + height += widgetSpacing; + } + } + + return height + 10; // Add padding + }; + + // Get current frame count value, checking both widget and input + nodeType.prototype.getCurrentFrameCount = function() { + // First check if we have a connected input + const frameCountInput = this.inputs.find(input => input.name === "frame_count"); + if (frameCountInput && frameCountInput.link !== null) { + const link = this.graph.links[frameCountInput.link]; + if (link) { + const inputNode = this.graph._nodes_by_id[link.origin_id]; + if (inputNode) { + // Try to get value from node's widget first + const widget = inputNode.widgets?.[0]; + if (widget) { + // console.log("Getting frame count from widget:", widget.value); + return widget.value; + } + // Fallback to output value if no widget + const frameCount = inputNode.getOutputData(link.origin_slot); + // console.log("Getting frame count from output:", frameCount); + return frameCount; + } + } + } + + // Fallback to widget value + const frameCountWidget = this.widgets.find(w => w.name === "frame_count"); + return frameCountWidget?.value || 30; // Default to 30 if no value found + }; + + // Override onDrawForeground to draw the graph + nodeType.prototype.onDrawForeground = function(ctx) { + if (onDrawForeground) { + onDrawForeground.apply(this, arguments); + } + + if (this.flags.collapsed) return; + + // Calculate graph dimensions based on node size and widget area + const margin = 30; + const widgetAreaHeight = this.getWidgetAreaHeight(); + const graphWidth = this.size[0] - 2 * margin; + const graphHeight = Math.max(200, this.size[1] - widgetAreaHeight - margin * 2); + const graphY = widgetAreaHeight + margin; + + // Draw background + ctx.fillStyle = "#1a1a1a"; + ctx.fillRect(margin, graphY, graphWidth, graphHeight); + ctx.strokeStyle = "#666"; + ctx.strokeRect(margin, graphY, graphWidth, graphHeight); + + // Draw help text + ctx.fillStyle = "#888"; + ctx.font = "12px Arial"; + ctx.textAlign = "center"; + ctx.fillText("Click empty space to add • Double-click point to delete • Drag points to move", + margin + graphWidth / 2, graphY + 20); + + // Draw grid + ctx.strokeStyle = "#333"; + ctx.lineWidth = 0.5; + + // Vertical lines (frames) and labels + const frameCount = this.getCurrentFrameCount(); + const maxFrame = frameCount - 1; // Maximum valid frame + const frameStep = Math.max(1, Math.floor(maxFrame / 10)); + ctx.fillStyle = "#888"; + ctx.font = "10px Arial"; + ctx.textAlign = "center"; + + for (let f = 0; f <= maxFrame; f += frameStep) { + const x = margin + (f / maxFrame) * graphWidth; + ctx.beginPath(); + ctx.moveTo(x, graphY); + ctx.lineTo(x, graphY + graphHeight); + ctx.stroke(); + // Frame number labels + ctx.fillText(f.toString(), x, graphY + graphHeight + 15); + } + + // Get min/max values from widgets + const minValue = this.widgets.find(w => w.name === "min_value")?.value ?? 0; + const maxValue = this.widgets.find(w => w.name === "max_value")?.value ?? 1; + const valueRange = maxValue - minValue; + + // Horizontal lines (values) and labels + ctx.textAlign = "right"; + for (let v = 0; v <= 1; v += 0.1) { + const y = graphY + v * graphHeight; + ctx.beginPath(); + ctx.moveTo(margin, y); + ctx.lineTo(margin + graphWidth, y); + ctx.stroke(); + // Value labels + const value = maxValue - (v * valueRange); + ctx.fillText(value.toFixed(1), margin - 5, y + 4); + } + + // Axis labels + ctx.save(); + ctx.translate(margin - 25, graphY + graphHeight / 2); + ctx.rotate(-Math.PI / 2); + ctx.textAlign = "center"; + ctx.fillText("Value", 0, 0); + ctx.restore(); + + ctx.textAlign = "center"; + ctx.fillText("Frame", margin + graphWidth / 2, graphY + graphHeight + 30); + + // Draw points and lines + if (this.points && this.points.length > 0) { + // Draw lines between points + ctx.strokeStyle = "#fff"; + ctx.lineWidth = 2; + ctx.beginPath(); + + const points = this.points.map(([frame, value]) => ({ + x: margin + (frame / maxFrame) * graphWidth, + y: graphY + (1 - this.normalizeValue(value)) * graphHeight + })); + + ctx.moveTo(points[0].x, points[0].y); + for (let i = 1; i < points.length; i++) { + ctx.lineTo(points[i].x, points[i].y); + } + ctx.stroke(); + + // Draw points with hover and selection effects + points.forEach((point, i) => { + ctx.beginPath(); + ctx.arc(point.x, point.y, i === this.selectedPoint ? 7 : 5, 0, Math.PI * 2); + + if (i === this.selectedPoint) { + ctx.fillStyle = "#00ff00"; + } else if (i === this.hoverPoint) { + ctx.fillStyle = "#ffff00"; + } else { + ctx.fillStyle = "#fff"; + } + + ctx.fill(); + + if (i === this.selectedPoint || i === this.hoverPoint) { + ctx.strokeStyle = "#000"; + ctx.lineWidth = 2; + ctx.stroke(); + } + }); + } + + // Draw potential new point position + if (this.isAddingPoint && this.mousePos) { + const [frame, value] = this.coordsToGraphValues(this.mousePos[0], this.mousePos[1]); + if (frame >= 0 && frame < frameCount) { + const x = margin + (frame / maxFrame) * graphWidth; + const y = graphY + (1 - this.normalizeValue(value)) * graphHeight; + + ctx.beginPath(); + ctx.arc(x, y, 5, 0, Math.PI * 2); + ctx.fillStyle = "rgba(255, 255, 255, 0.5)"; + ctx.fill(); + ctx.strokeStyle = "#fff"; + ctx.lineWidth = 1; + ctx.stroke(); + } + } + }; + + // Normalize value to 0-1 range based on min/max widgets + nodeType.prototype.normalizeValue = function(value) { + const minValue = this.widgets.find(w => w.name === "min_value")?.value ?? 0; + const maxValue = this.widgets.find(w => w.name === "max_value")?.value ?? 1; + return (value - minValue) / (maxValue - minValue); + }; + + // Denormalize value from 0-1 range to min/max range + nodeType.prototype.denormalizeValue = function(normalized) { + const minValue = this.widgets.find(w => w.name === "min_value")?.value ?? 0; + const maxValue = this.widgets.find(w => w.name === "max_value")?.value ?? 1; + return normalized * (maxValue - minValue) + minValue; + }; + + // Convert coordinates to graph values + nodeType.prototype.coordsToGraphValues = function(x, y) { + const margin = 30; + const widgetAreaHeight = this.getWidgetAreaHeight(); + const graphWidth = this.size[0] - 2 * margin; + const graphHeight = Math.max(200, this.size[1] - widgetAreaHeight - margin * 2); + const graphY = widgetAreaHeight + margin; + + const frameCount = this.getCurrentFrameCount(); + const maxFrame = frameCount - 1; + + // Calculate frame (x value) and clamp to valid range + const frame = Math.round(((x - margin) / graphWidth) * maxFrame); + const clampedFrame = Math.max(0, Math.min(maxFrame, frame)); + + // Calculate value (y value) - normalize based on graph position + const normalizedY = Math.max(0, Math.min(1, (y - graphY) / graphHeight)); + const value = this.denormalizeValue(1 - normalizedY); + + return [clampedFrame, value]; + }; + + // Check if mouse is over graph area + nodeType.prototype.isMouseOverGraph = function(x, y) { + const margin = 30; + const widgetAreaHeight = this.getWidgetAreaHeight(); + const graphWidth = this.size[0] - 2 * margin; + const graphHeight = Math.max(200, this.size[1] - widgetAreaHeight - margin * 2); + const graphY = widgetAreaHeight + margin; + + return x >= margin && + x <= this.size[0] - margin && + y >= graphY && + y <= graphY + graphHeight; + }; + + // Find point near coordinates + nodeType.prototype.findNearPoint = function(x, y) { + const margin = 30; + const widgetAreaHeight = this.getWidgetAreaHeight(); + const graphWidth = this.size[0] - 2 * margin; + const graphHeight = Math.max(200, this.size[1] - widgetAreaHeight - margin * 2); + const graphY = widgetAreaHeight + margin; + const frameCount = this.widgets.find(w => w.name === "frame_count")?.value || 30; + const maxFrame = frameCount - 1; + + for (let i = 0; i < this.points.length; i++) { + const [frame, value] = this.points[i]; + const px = margin + (frame / maxFrame) * graphWidth; + const py = graphY + (1 - this.normalizeValue(value)) * graphHeight; + const dist = Math.sqrt((x - px) ** 2 + (y - py) ** 2); + if (dist < 10) return i; + } + return null; + }; + + // Update the hidden points value + nodeType.prototype.updatePointsValue = function() { + const pointsStr = JSON.stringify(this.points); + // Find or create a hidden widget to store the points + let pointsWidget = this.widgets.find(w => w.name === "points"); + if (!pointsWidget) { + // Create new points widget at the end of the list + pointsWidget = { + type: "text", + name: "points", + value: "[]", + hidden: true + }; + this.widgets.push(pointsWidget); + } + pointsWidget.value = pointsStr; + // Trigger widget change to ensure value is saved + if (this.onWidgetChanged) { + this.onWidgetChanged(pointsWidget.name, pointsWidget.value, pointsWidget.value, pointsWidget); + } + }; + + // Override mouse handlers for improved drawing + nodeType.prototype.onMouseDown = function(e, pos) { + const [x, y] = pos; + if (!this.isMouseOverGraph(x, y)) return false; + + const pointIndex = this.findNearPoint(x, y); + + if (pointIndex !== null) { + if (this.isDragging && this.selectedPoint !== null) { + // If already dragging and clicked, drop the point + this.isDragging = false; + this.selectedPoint = null; + this.dragStartPos = null; + } else { + // Start dragging + this.selectedPoint = pointIndex; + this.dragStartPos = [...pos]; + this.isDragging = true; + } + } else { + // Not on a point - add new point + const [frame, value] = this.coordsToGraphValues(x, y); + const frameCount = this.widgets.find(w => w.name === "frame_count")?.value || 30; + const maxFrame = frameCount - 1; + if (frame >= 0 && frame <= maxFrame) { + // Remove any existing point at the same frame + const existingIndex = this.points.findIndex(p => p[0] === frame); + if (existingIndex !== -1) { + this.points.splice(existingIndex, 1); + } + + this.points.push([frame, value]); + this.points.sort((a, b) => a[0] - b[0]); + this.selectedPoint = this.points.findIndex(p => p[0] === frame); + this.updatePointsValue(); + } + } + + this.setDirtyCanvas(true, true); + return true; + }; + + nodeType.prototype.onMouseMove = function(e, pos) { + const [x, y] = pos; + this.mousePos = pos; + + if (!this.isMouseOverGraph(x, y)) { + // Clear all states when mouse leaves graph area + this.hoverPoint = null; + this.isAddingPoint = false; + this.selectedPoint = null; + this.isDragging = false; + this.dragStartPos = null; + this.setDirtyCanvas(true, true); + return false; + } + + if (this.isDragging && this.selectedPoint !== null) { + const [frame, value] = this.coordsToGraphValues(x, y); + const frameCount = this.widgets.find(w => w.name === "frame_count")?.value || 30; + const maxFrame = frameCount - 1; + // Keep strict < frameCount for dragging to prevent edge issues + if (frame >= 0 && frame <= maxFrame) { + // Check if there's already a point at the target frame (except selected point) + const existingIndex = this.points.findIndex((p, i) => + i !== this.selectedPoint && p[0] === frame); + + if (existingIndex === -1) { + this.points[this.selectedPoint] = [frame, value]; + this.points.sort((a, b) => a[0] - b[0]); + this.selectedPoint = this.points.findIndex(p => + p[0] === frame && p[1] === value); + this.updatePointsValue(); + } + } + } else { + // Update hover state + this.hoverPoint = this.findNearPoint(x, y); + this.isAddingPoint = this.hoverPoint === null; + } + + this.setDirtyCanvas(true, true); + return true; + }; + + nodeType.prototype.onMouseUp = function(e, pos) { + // Only clear states if we're not in dragging mode + if (!this.isDragging) { + this.selectedPoint = null; + this.dragStartPos = null; + } + this.mouseDownTime = null; + this.setDirtyCanvas(true, true); + return false; + }; + + // Add double click handler + nodeType.prototype.onDblClick = function(e, pos) { + const [x, y] = pos; + if (!this.isMouseOverGraph(x, y)) return false; + + const pointIndex = this.findNearPoint(x, y); + if (pointIndex !== null) { + this.points.splice(pointIndex, 1); + this.updatePointsValue(); + // Clear all interaction states + this.selectedPoint = null; + this.isDragging = false; + this.dragStartPos = null; + this.setDirtyCanvas(true, true); + return true; + } + return false; + }; + + // Handle node resizing + nodeType.prototype.onResize = function(size) { + if (onResize) { + onResize.apply(this, arguments); + } + // Ensure minimum size + this.size[0] = Math.max(400, size[0]); + this.size[1] = Math.max(500, size[1]); + // Force graph area recalculation + this.setDirtyCanvas(true, true); + }; + + // Add method to update node size + nodeType.prototype.setSize = function(size) { + this.size = size; + if (this.onResize) { + this.onResize(size); + } + }; + + // Add click handler + nodeType.prototype.onClick = function(e, pos) { + // Clear all states on any click as a safety measure + this.selectedPoint = null; + this.isDragging = false; + this.dragStartPos = null; + this.setDirtyCanvas(true, true); + return false; + }; + + // Template loading method + nodeType.prototype.loadTemplate = function(templateName) { + const frameCount = this.getCurrentFrameCount(); + const minValue = this.widgets.find(w => w.name === "min_value")?.value ?? 0; + const maxValue = this.widgets.find(w => w.name === "max_value")?.value ?? 1; + const cyclesWidget = this.widgets.find(w => w.name === "template_cycles"); + const cycles = cyclesWidget?.value ?? 1; + + if (templateName in FeatureTemplates) { + this.points = FeatureTemplates[templateName](frameCount, minValue, maxValue, cycles); + this.updatePointsValue(); + this.setDirtyCanvas(true, true); + } + }; + } + } +}); \ No newline at end of file diff --git a/web/js/feature_templates.js b/web/js/feature_templates.js new file mode 100644 index 0000000..b25bb8b --- /dev/null +++ b/web/js/feature_templates.js @@ -0,0 +1,202 @@ +// Feature template generation functions +export const FeatureTemplates = { + // Basic waveforms + sine: (frameCount, minValue, maxValue, cycles = 1) => { + const amplitude = (maxValue - minValue) / 2; + const center = minValue + amplitude; + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const value = center + amplitude * Math.sin((i / (numPoints - 1)) * Math.PI * 2 * cycles); + points.push([frame, value]); + } + return points; + }, + + square: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const phase = (i / (numPoints - 1)) * cycles; + const value = Math.floor(phase % 1 * 2) ? minValue : maxValue; + points.push([frame, value]); + } + return points; + }, + + triangle: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const phase = (i / (numPoints - 1)) * cycles % 1; + const triangleValue = phase < 0.5 + ? 2 * phase + : 2 * (1 - phase); + const value = minValue + (maxValue - minValue) * triangleValue; + points.push([frame, value]); + } + return points; + }, + + sawtooth: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const phase = (i / (numPoints - 1)) * cycles % 1; + const value = minValue + (maxValue - minValue) * phase; + points.push([frame, value]); + } + return points; + }, + + // Animation curves + easeInOut: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Cubic ease in-out + const easeValue = t < 0.5 + ? 4 * t * t * t + : 1 - Math.pow(-2 * t + 2, 3) / 2; + const value = minValue + (maxValue - minValue) * easeValue; + points.push([frame, value]); + } + return points; + }, + + easeIn: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Cubic ease in + const easeValue = t * t * t; + const value = minValue + (maxValue - minValue) * easeValue; + points.push([frame, value]); + } + return points; + }, + + easeOut: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Cubic ease out + const easeValue = 1 - Math.pow(1 - t, 3); + const value = minValue + (maxValue - minValue) * easeValue; + points.push([frame, value]); + } + return points; + }, + + // Bounce patterns + bounce: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Bounce calculation with bounds check + const bounceValue = Math.abs(Math.sin(t * Math.PI * 3) * (1 - t)); + const value = minValue + (maxValue - minValue) * (1 - bounceValue); + points.push([frame, Math.max(minValue, Math.min(maxValue, value))]); + } + return points; + }, + + // Pulse patterns + pulse: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Gaussian pulse + const pulseValue = Math.exp(-Math.pow((Math.sin(t * Math.PI * 2) * 2), 2)); + const value = minValue + (maxValue - minValue) * pulseValue; + points.push([frame, Math.max(minValue, Math.min(maxValue, value))]); + } + return points; + }, + + // Random patterns + random: (frameCount, minValue, maxValue) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const value = minValue + (maxValue - minValue) * Math.random(); + points.push([frame, value]); + } + return points; + }, + + smoothRandom: (frameCount, minValue, maxValue) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + let lastValue = minValue + (maxValue - minValue) * Math.random(); + const maxStep = (maxValue - minValue) * 0.2; // Maximum change per step + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const randomStep = (Math.random() * 2 - 1) * maxStep; + lastValue = Math.max(minValue, Math.min(maxValue, lastValue + randomStep)); + points.push([frame, lastValue]); + } + return points; + }, + + // Special patterns + heartbeat: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + // Double-pulse heartbeat pattern with bounds check + const x = t * 4; + const heartbeatValue = Math.min(1, Math.max(0, + Math.pow(Math.E, -Math.pow(x % 1 * 6 - 1, 2)) * 0.8 + + Math.pow(Math.E, -Math.pow(x % 1 * 6 - 2, 2)) + )); + const value = minValue + (maxValue - minValue) * heartbeatValue; + points.push([frame, value]); + } + return points; + }, + + steps: (frameCount, minValue, maxValue, cycles = 1) => { + const points = []; + const numPoints = Math.min(frameCount, 30); + const numSteps = Math.max(2, Math.round(cycles * 5)); // 5 steps per cycle + + for (let i = 0; i < numPoints; i++) { + const frame = Math.round((i / (numPoints - 1)) * (frameCount - 1)); + const t = (i / (numPoints - 1)) * cycles % 1; + const step = Math.floor(t * numSteps) / (numSteps - 1); + const value = minValue + (maxValue - minValue) * Math.min(1, Math.max(0, step)); + points.push([frame, value]); + } + return points; + } +}; \ No newline at end of file diff --git a/web/js/help_popup.js b/web/js/help_popup.js index ce9bc90..02dfe1f 100644 --- a/web/js/help_popup.js +++ b/web/js/help_popup.js @@ -89,7 +89,49 @@ const create_documentation_stylesheet = () => { border-color: var(--border-color); z-index: 5; overflow: hidden; + opacity: 0; + transform: scale(0.95); + animation: popup-appear 0.3s ease forwards, popup-pulse 2s ease-in-out infinite; } + + @keyframes popup-appear { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } + } + + @keyframes popup-pulse { + 0% { + box-shadow: 0 0 0 0 rgba(255, 165, 0, 0.4); + } + 50% { + box-shadow: 0 0 20px 10px rgba(255, 165, 0, 0.2); + } + 100% { + box-shadow: 0 0 0 0 rgba(255, 165, 0, 0.4); + } + } + + .roti-documentation-popup.closing { + animation: popup-close 0.2s ease forwards; + } + + @keyframes popup-close { + from { + opacity: 1; + transform: scale(1); + } + to { + opacity: 0; + transform: scale(0.95) translateY(-10px); + } + } + .content-wrapper { overflow: auto; max-height: 100%; @@ -133,12 +175,11 @@ const create_documentation_stylesheet = () => { opts = opts || {} const iconSize = opts.icon_size ? opts.icon_size : 14 const iconMargin = opts.icon_margin ? opts.icon_margin : 4 - let docElement = null - let contentWrapper = null - //if no description in the node python code, don't do anything - if (!nodeData.description) { - return - } + + // Store popup elements in the node instance instead of function scope + nodeType.prototype._docElement = null; + nodeType.prototype._contentWrapper = null; + nodeType.prototype._docCtrl = null; const drawFg = nodeType.prototype.onDrawForeground nodeType.prototype.onDrawForeground = function (ctx) { @@ -149,17 +190,52 @@ const create_documentation_stylesheet = () => { const x = this.size[0] - iconSize - iconMargin // create the popup - if (this.show_doc && docElement === null) { - docElement = document.createElement('div') - contentWrapper = document.createElement('div'); - docElement.appendChild(contentWrapper); + if (this.show_doc && !this._docElement) { + // Clean up any existing elements first + this.cleanupDocumentation(); + + this._docElement = document.createElement('div') + this._contentWrapper = document.createElement('div'); + this._docElement.appendChild(this._contentWrapper); create_documentation_stylesheet() - contentWrapper.classList.add('content-wrapper'); - docElement.classList.add('roti-documentation-popup') + this._contentWrapper.classList.add('content-wrapper'); + this._docElement.classList.add('roti-documentation-popup') + + // Construct the content with default links and optional help text + let content = ""; + + // Add ASCII art banner + content += ` +\`\`\` +██████╗ ██╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ███╗ ██╗████████╗██╗ ██╗███████╗██╗███╗ ██╗███████╗██╗██████╗ ███████╗ +██╔══██╗ ╚██╗ ██╔╝██╔══██╗████╗ ██║██╔═══██╗████╗ ██║╚══██╔══╝██║ ██║██╔════╝██║████╗ ██║██╔════╝██║██╔══██╗██╔════╝ +██████╔╝ ╚████╔╝ ███████║██╔██╗ ██║██║ ██║██╔██╗ ██║ ██║ ███████║█████╗ ██║██╔██╗ ██║███████╗██║██║ ██║█████╗ +██╔══██╗ ╚██╔╝ ██╔══██║██║╚██╗██║██║ ██║██║╚██╗██║ ██║ ██╔══██║██╔══╝ ██║██║╚██╗██║╚════██║██║██║ ██║██╔══╝ +██║ ██║ ██║ ██║ ██║██║ ╚████║╚██████╔╝██║ ╚████║ ██║ ██║ ██║███████╗██║██║ ╚████║███████║██║██████╔╝███████╗ +╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝╚═════╝ ╚══════╝ +\`\`\` + +`; + + // Add node-specific help text if available + if (nodeData.help_text) { + content += nodeData.help_text + "\n\n---\n\n"; + } - //parse the string from the python node code to html with marked, and sanitize the html with DOMPurify - contentWrapper.innerHTML = DOMPurify.sanitize(marked.parse(nodeData.description,)) + // Add default links footer + content += ` +## For more information, visit [RyanOnTheInside GitHub](https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside). + +## For tutorials and example workflows visit [RyanOnTheInside Civitai](https://civitai.com/user/ryanontheinside). + +## For video tutorials and more visit [RyanOnTheInside YouTube](https://www.youtube.com/@ryanontheinside). + +## [RyanOnTheInside Linktree](https://linktr.ee/ryanontheinside) +`; + + //parse the combined content with marked and sanitize + this._contentWrapper.innerHTML = DOMPurify.sanitize(marked.parse(content)) // resize handle const resizeHandle = document.createElement('div'); @@ -177,21 +253,22 @@ const create_documentation_stylesheet = () => { resizeHandle.style.borderBottom = `10px solid ${borderColor}`; resizeHandle.style.borderRight = `10px solid ${borderColor}`; - docElement.appendChild(resizeHandle) + this._docElement.appendChild(resizeHandle) let isResizing = false let startX, startY, startWidth, startHeight - resizeHandle.addEventListener('mousedown', function (e) { + // Create new AbortController for this instance + this._docCtrl = new AbortController(); + + resizeHandle.addEventListener('mousedown', (e) => { e.preventDefault(); e.stopPropagation(); isResizing = true; startX = e.clientX; startY = e.clientY; - startWidth = parseInt(document.defaultView.getComputedStyle(docElement).width, 10); - startHeight = parseInt(document.defaultView.getComputedStyle(docElement).height, 10); - }, - { signal: this.docCtrl.signal }, - ); + startWidth = parseInt(document.defaultView.getComputedStyle(this._docElement).width, 10); + startHeight = parseInt(document.defaultView.getComputedStyle(this._docElement).height, 10); + }, { signal: this._docCtrl.signal }); // close button const closeButton = document.createElement('div'); @@ -204,47 +281,38 @@ const create_documentation_stylesheet = () => { closeButton.style.color = 'red'; closeButton.style.fontSize = '12px'; - docElement.appendChild(closeButton) + this._docElement.appendChild(closeButton) closeButton.addEventListener('mousedown', (e) => { e.stopPropagation(); - this.show_doc = !this.show_doc - docElement.parentNode.removeChild(docElement) - docElement = null - if (contentWrapper) { - contentWrapper.remove() - contentWrapper = null - } - }, - { signal: this.docCtrl.signal }, - ); - - document.addEventListener('mousemove', function (e) { + this.show_doc = false; + this.cleanupDocumentation(); + }, { signal: this._docCtrl.signal }); + + document.addEventListener('mousemove', (e) => { if (!isResizing) return; const scale = app.canvas.ds.scale; const newWidth = startWidth + (e.clientX - startX) / scale; - const newHeight = startHeight + (e.clientY - startY) / scale;; - docElement.style.width = `${newWidth}px`; - docElement.style.height = `${newHeight}px`; - }, - { signal: this.docCtrl.signal }, - ); - - document.addEventListener('mouseup', function () { - isResizing = false - }, - { signal: this.docCtrl.signal }, - ) - - document.body.appendChild(docElement) + const newHeight = startHeight + (e.clientY - startY) / scale; + if (this._docElement) { + this._docElement.style.width = `${newWidth}px`; + this._docElement.style.height = `${newHeight}px`; + } + }, { signal: this._docCtrl.signal }); + + document.addEventListener('mouseup', () => { + isResizing = false; + }, { signal: this._docCtrl.signal }); + + document.body.appendChild(this._docElement) } // close the popup - else if (!this.show_doc && docElement !== null) { - docElement.parentNode.removeChild(docElement) - docElement = null + else if (!this.show_doc && this._docElement) { + this.cleanupDocumentation(); } + // update position of the popup - if (this.show_doc && docElement !== null) { + if (this.show_doc && this._docElement) { const rect = ctx.canvas.getBoundingClientRect() const scaleX = rect.width / ctx.canvas.width const scaleY = rect.height / ctx.canvas.height @@ -263,8 +331,8 @@ const create_documentation_stylesheet = () => { transform: scale, left: `${transform.a + transform.e}px`, top: `${transform.d + transform.f}px`, - }; - Object.assign(docElement.style, styleObject); + }; + Object.assign(this._docElement.style, styleObject); } ctx.save() @@ -280,6 +348,31 @@ const create_documentation_stylesheet = () => { ctx.restore() return r } + + // Add cleanup method to the prototype + nodeType.prototype.cleanupDocumentation = function() { + if (this._docCtrl) { + this._docCtrl.abort(); + this._docCtrl = null; + } + + if (this._docElement) { + this._docElement.classList.add('closing'); + const cleanup = () => { + if (this._docElement && this._docElement.parentNode) { + this._docElement.parentNode.removeChild(this._docElement); + } + if (this._contentWrapper) { + this._contentWrapper.remove(); + } + this._docElement = null; + this._contentWrapper = null; + }; + + this._docElement.addEventListener('animationend', cleanup, { once: true }); + } + } + // handle clicking of the icon const mouseDown = nodeType.prototype.onMouseDown nodeType.prototype.onMouseDown = function (e, localPos, canvas) { @@ -292,34 +385,20 @@ const create_documentation_stylesheet = () => { localPos[1] > iconY && localPos[1] < iconY + iconSize ) { - if (this.show_doc === undefined) { - this.show_doc = true - } else { - this.show_doc = !this.show_doc - } + // Clean up existing popup before toggling if (this.show_doc) { - this.docCtrl = new AbortController() - } else { - this.docCtrl.abort() + this.cleanupDocumentation(); } + this.show_doc = !this.show_doc; return true; } return r; } - const onRem = nodeType.prototype.onRemoved + const onRem = nodeType.prototype.onRemoved nodeType.prototype.onRemoved = function () { const r = onRem ? onRem.apply(this, []) : undefined - - if (docElement) { - docElement.remove() - docElement = null - } - - if (contentWrapper) { - contentWrapper.remove() - contentWrapper = null - } - return r + this.cleanupDocumentation(); + return r; } } \ No newline at end of file diff --git a/web/js/load_iro.js b/web/js/load_iro.js new file mode 100644 index 0000000..c45a9ff --- /dev/null +++ b/web/js/load_iro.js @@ -0,0 +1,7 @@ +// Load iro.js color picker library +(function() { + const script = document.createElement('script'); + script.src = 'https://cdn.jsdelivr.net/npm/@jaames/iro@5'; + script.async = true; + document.head.appendChild(script); +})(); \ No newline at end of file diff --git a/web/js/min_max_widget_validation.js b/web/js/min_max_widget_validation.js new file mode 100644 index 0000000..b4c9b33 --- /dev/null +++ b/web/js/min_max_widget_validation.js @@ -0,0 +1,334 @@ +// Widget validation for RyanOnTheInside Scheduler nodes +import { app } from "../../../scripts/app.js"; + +//TODO: add validation for DrawableFeatureNode, frame count for instance. +// Register validation behavior when nodes are connected +app.registerExtension({ + name: "RyanOnTheInside.WidgetValidation", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + // Check if this is one of our scheduler nodes + if (!nodeData.category?.startsWith("RyanOnTheInside/FlexFeatures/Scheduling")) { + return; + } + + // Store constraints from connected widgets + nodeType.prototype.targetConstraints = null; + nodeType.prototype.hasInitialized = false; + + // Add handler for when node is created (including on page load) + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function() { + const result = onNodeCreated?.apply(this, arguments); + + // Function to check connections + const checkConnections = () => { + if (this.hasInitialized) { + return; // Skip if we've already initialized + } + + const outputLinks = this.outputs[0]?.links || []; + let combinedConstraints = null; + + // First pass: build combined constraints from all connections + for (const linkId of outputLinks) { + const link = app.graph.links[linkId]; + if (!link) continue; + + const targetNode = app.graph.getNodeById(link.target_id); + const targetSlot = link.target_slot; + + if (targetNode?.widgets) { + const inputName = targetNode.inputs[targetSlot]?.name; + const targetWidget = targetNode.widgets.find(w => w.name === inputName); + + if (targetWidget?.options || (targetWidget?.type === "converted-widget" && targetWidget.options)) { + const currentConstraints = { + min: parseFloat(targetWidget.options.min), + max: parseFloat(targetWidget.options.max), + step: parseFloat(targetWidget.options.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + + if (combinedConstraints) { + // Use most restrictive constraints + combinedConstraints = { + min: Math.max(currentConstraints.min, combinedConstraints.min), + max: Math.min(currentConstraints.max, combinedConstraints.max), + step: Math.max(currentConstraints.step, combinedConstraints.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + } else { + combinedConstraints = currentConstraints; + } + } + } + } + + // Only proceed if we found any constraints + if (combinedConstraints) { + this.targetConstraints = combinedConstraints; + this.updateWidgetConstraints(); + this.hasInitialized = true; + } + }; + + // Check connections at different intervals to ensure graph is loaded + checkConnections(); + setTimeout(checkConnections, 100); + setTimeout(checkConnections, 1000); + + return result; + }; + + const originalOnConnectOutput = nodeType.prototype.onConnectOutput; + nodeType.prototype.onConnectOutput = function (slot, type, input, targetNode, targetSlot) { + const result = originalOnConnectOutput?.apply(this, arguments); + + if (targetNode?.widgets) { + const inputName = targetNode.inputs[targetSlot]?.name; + const targetWidget = targetNode.widgets.find(w => w.name === inputName); + + if (targetWidget?.options || (targetWidget?.type === "converted-widget" && targetWidget.options)) { + const options = targetWidget.options; + + // Check if we already have constraints from another connection + if (this.targetConstraints) { + this.targetConstraints = { + min: Math.max(parseFloat(options.min), this.targetConstraints.min), + max: Math.min(parseFloat(options.max), this.targetConstraints.max), + step: Math.max(parseFloat(options.step), this.targetConstraints.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + } else { + this.targetConstraints = { + min: parseFloat(options.min), + max: parseFloat(options.max), + step: parseFloat(options.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + } + + // Only set initial values if they are undefined, null, or outside the valid range + const lowerWidget = this.widgets.find(w => w.name === "lower_threshold"); + const upperWidget = this.widgets.find(w => w.name === "upper_threshold"); + if (lowerWidget && upperWidget) { + const currentLower = parseFloat(lowerWidget.value); + const currentUpper = parseFloat(upperWidget.value); + + // Only reset individual values if they are invalid + if (currentLower === undefined || currentLower === null || + currentLower < this.targetConstraints.min || + currentLower > this.targetConstraints.max) { + lowerWidget.value = this.targetConstraints.min; + } + + if (currentUpper === undefined || currentUpper === null || + currentUpper < this.targetConstraints.min || + currentUpper > this.targetConstraints.max) { + upperWidget.value = this.targetConstraints.max; + } + } + + this.updateWidgetConstraints(); + } + } + + return result; + }; + + nodeType.prototype.onConnectionsChange = function(slotType, slot, isConnected, link_info, output) { + // Handle disconnection + if (!isConnected && slotType === LiteGraph.OUTPUT) { + // Store current values before resetting constraints + const lowerWidget = this.widgets.find(w => w.name === "lower_threshold"); + const upperWidget = this.widgets.find(w => w.name === "upper_threshold"); + const currentValues = { + lower: lowerWidget ? lowerWidget.value : null, + upper: upperWidget ? upperWidget.value : null + }; + + // Reset constraints initially + this.targetConstraints = null; + + // Check all remaining connections and rebuild constraints + if (this.outputs[0].links && this.outputs[0].links.length > 0) { + let combinedConstraints = null; + + this.outputs[0].links.forEach(linkId => { + const link = this.graph.links[linkId]; + if (!link) return; + + const targetNode = this.graph.getNodeById(link.target_id); + const targetSlot = link.target_slot; + + if (targetNode?.widgets) { + const inputName = targetNode.inputs[targetSlot]?.name; + const targetWidget = targetNode.widgets.find(w => w.name === inputName); + + if (targetWidget?.options) { + const currentConstraints = { + min: parseFloat(targetWidget.options.min), + max: parseFloat(targetWidget.options.max), + step: parseFloat(targetWidget.options.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + + if (combinedConstraints) { + combinedConstraints = { + min: Math.max(currentConstraints.min, combinedConstraints.min), + max: Math.min(currentConstraints.max, combinedConstraints.max), + step: Math.max(currentConstraints.step, combinedConstraints.step), + isInt: this.type === "FeatureToFlexIntParam" + }; + } else { + combinedConstraints = currentConstraints; + } + } + } + }); + + if (combinedConstraints) { + this.targetConstraints = combinedConstraints; + + // Restore previous values if they're within the new constraints + if (lowerWidget && upperWidget) { + if (currentValues.lower !== null && + currentValues.lower >= this.targetConstraints.min && + currentValues.lower <= this.targetConstraints.max) { + lowerWidget.value = currentValues.lower; + } + if (currentValues.upper !== null && + currentValues.upper >= this.targetConstraints.min && + currentValues.upper <= this.targetConstraints.max) { + upperWidget.value = currentValues.upper; + } + } + } + } else { + // If no connections remain, keep the widgets but remove constraints + this.targetConstraints = null; + } + + this.updateWidgetConstraints(); + } + }; + + // Add method to update widget constraints + nodeType.prototype.updateWidgetConstraints = function() { + if (!this.targetConstraints) return; + + // Update thresholds based on target constraints + const thresholdWidgets = ["lower_threshold", "upper_threshold"]; + thresholdWidgets.forEach(name => { + const widget = this.widgets.find(w => w.name === name); + if (widget) { + // Store current value before updating options + const currentValue = widget.value; + + // Update widget options + if (this.targetConstraints.min !== undefined) { + widget.options.min = this.targetConstraints.min; + } + if (this.targetConstraints.max !== undefined) { + widget.options.max = this.targetConstraints.max; + } + if (this.targetConstraints.step !== undefined) { + widget.options.step = this.targetConstraints.step; + } + + // Only reset the value if it's invalid + if (currentValue === null || currentValue === undefined || + currentValue < this.targetConstraints.min || + currentValue > this.targetConstraints.max) { + widget.value = name === "lower_threshold" ? + this.targetConstraints.min : + this.targetConstraints.max; + } + } + }); + }; + + // Add method to clamp widget values + nodeType.prototype.clampWidgetValues = function() { + const lowerWidget = this.widgets.find(w => w.name === "lower_threshold"); + const upperWidget = this.widgets.find(w => w.name === "upper_threshold"); + + if (lowerWidget && upperWidget) { + const targetMin = parseFloat(this.targetConstraints?.min ?? lowerWidget.options.min); + const targetMax = parseFloat(this.targetConstraints?.max ?? upperWidget.options.max); + const step = parseFloat(this.targetConstraints?.step ?? 1); + + // Function to snap value to nearest step with decimal precision + const snapToStep = (value) => { + // Special case: if value is the minimum or maximum, don't snap it + if (value === targetMin || value === targetMax) { + // console.log(`Preserving exact value ${value} (min/max)`); + return value; + } + + // For other values, snap to nearest step but ensure we don't go below minimum + const snapped = Math.max( + targetMin, + Math.round(value / step) * step + ); + // console.log(`Snapping ${value} to step ${step}: ${snapped}`); + return snapped; + }; + + // Ensure lower threshold is less than upper threshold and both are within target constraints + let lowerValue = Math.max(targetMin, Math.min(parseFloat(lowerWidget.value), parseFloat(upperWidget.value))); + let upperValue = Math.max(parseFloat(lowerWidget.value), Math.min(parseFloat(upperWidget.value), targetMax)); + + // Snap values to steps + lowerValue = snapToStep(lowerValue); + upperValue = snapToStep(upperValue); + + // Log values before integer rounding + // console.log('Before integer rounding:', { + // lowerValue, + // upperValue + // }); + + // Round if integer type, otherwise maintain decimal precision + if (this.targetConstraints?.isInt) { + lowerValue = Math.round(lowerValue); + upperValue = Math.round(upperValue); + // console.log('After integer rounding:', { + // lowerValue, + // upperValue + // }); + } + + lowerWidget.value = lowerValue; + upperWidget.value = upperValue; + + // Log final values + // console.log('Final widget values:', { + // lower: lowerWidget.value, + // upper: upperWidget.value + // }); + } + }; + + // Override the widget's callback to enforce constraints + const originalWidgetCallback = nodeType.prototype.onWidgetChanged; + nodeType.prototype.onWidgetChanged = function(widget, value) { + if (["lower_threshold", "upper_threshold"].includes(widget.name)) { + const step = this.targetConstraints?.step ?? 1; + + // Snap to step + value = Math.round(value / step) * step; + + // Round if integer type + if (this.targetConstraints?.isInt) { + value = Math.round(value); + } + + widget.value = value; + this.clampWidgetValues(); + } + + return originalWidgetCallback?.apply(this, [widget, value]); + }; + } +}); \ No newline at end of file diff --git a/web/js/suggestions.js b/web/js/suggestions.js new file mode 100644 index 0000000..c9c7530 --- /dev/null +++ b/web/js/suggestions.js @@ -0,0 +1,70 @@ +import { app } from "../../scripts/app.js"; + +app.registerExtension({ + name: "RyanOnTheInside.Suggestions", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + // Get access to the suggestion lists via the SlotDefaults extension + const suggestions = app.extensions.find(ext => ext.name === "Comfy.SlotDefaults"); + + if (suggestions) { + // console.log("[RyanOnTheInside.Suggestions] Initializing feature suggestions"); + + const type = "FEATURE"; // Our specific type + + // Override input suggestions for the type + suggestions.slot_types_default_in[type] = [ + "Reroute", // Usually keep Reroute as first option + "AudioFeatureExtractor", + "MIDIFeatureExtractor", + "MotionFeatureNode", + "WhisperFeatureExtractor", + "FeatureMixer" + ]; + + // Override output suggestions for the type + suggestions.slot_types_default_out[type] = [ + "Reroute", // Usually keep Reroute as first option + "PreviewFeature", + "FeatureInfoNode", + "FeatureToFlexIntParam", + "FeatureToFlexFloatParam" + ]; + + // Register with LiteGraph's type system + const lowerType = type.toLowerCase(); + + // Register input type if not already registered + if (!(lowerType in LiteGraph.registered_slot_in_types)) { + LiteGraph.registered_slot_in_types[lowerType] = { nodes: [] }; + } + // Add the node classes that can accept this type as input + suggestions.slot_types_default_in[type].forEach(nodeId => { + const nodeType = LiteGraph.registered_node_types[nodeId]; + if (nodeType?.comfyClass) { + LiteGraph.registered_slot_in_types[lowerType].nodes.push(nodeType.comfyClass); + } + }); + + // Register output type if not already registered + if (!(type in LiteGraph.registered_slot_out_types)) { + LiteGraph.registered_slot_out_types[type] = { nodes: [] }; + } + // Add the node classes that can output this type + suggestions.slot_types_default_out[type].forEach(nodeId => { + const nodeType = LiteGraph.registered_node_types[nodeId]; + if (nodeType?.comfyClass) { + LiteGraph.registered_slot_out_types[type].nodes.push(nodeType.comfyClass); + } + }); + + // Register as valid output type if not already registered + if (!LiteGraph.slot_types_out.includes(type)) { + LiteGraph.slot_types_out.push(type); + } + + // console.log("[RyanOnTheInside.Suggestions] Feature suggestions initialized successfully"); + } else { + console.warn("[RyanOnTheInside.Suggestions] SlotDefaults extension not found"); + } + } +}); \ No newline at end of file