From 363db1e21eb24a133d65540bdaa65b284fedf941 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 6 Dec 2023 14:49:02 -0800 Subject: [PATCH] refactor + entangled --- __init__.py | 7 -- nodes/__init__.py | 14 ++++ nodes.py => nodes/core.py | 42 ++++++---- debug.py => nodes/debug.py | 0 nodes/entangled.py | 167 +++++++++++++++++++++++++++++++++++++ 5 files changed, 205 insertions(+), 25 deletions(-) create mode 100644 nodes/__init__.py rename nodes.py => nodes/core.py (98%) rename debug.py => nodes/debug.py (100%) create mode 100644 nodes/entangled.py diff --git a/__init__.py b/__init__.py index af13844..7a6face 100644 --- a/__init__.py +++ b/__init__.py @@ -29,11 +29,4 @@ from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS print(os.environ.get('COMFYUI_DEBUG_MODE')) -from .debug import NODE_CLASS_MAPPINGS as ncm0, NODE_DISPLAY_NAME_MAPPINGS as ndnm0 - -# there's probably a cleaner, more-dummy-proof way to do this. -# feels like an accident waiting to happen. low risk though. -NODE_CLASS_MAPPINGS.update(ncm0) -NODE_DISPLAY_NAME_MAPPINGS.update(ndnm0) - __all__ =["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] diff --git a/nodes/__init__.py b/nodes/__init__.py new file mode 100644 index 0000000..4095bbf --- /dev/null +++ b/nodes/__init__.py @@ -0,0 +1,14 @@ + +from .core import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS +from .debug import NODE_CLASS_MAPPINGS as ncm0, NODE_DISPLAY_NAME_MAPPINGS as ndnm0 +from .entangled import NODE_CLASS_MAPPINGS as ncm1, NODE_DISPLAY_NAME_MAPPINGS as ndnm1 + +# there's probably a cleaner, more-dummy-proof way to do this. +# feels like an accident waiting to happen. low risk though. +NODE_CLASS_MAPPINGS.update(ncm0) +NODE_CLASS_MAPPINGS.update(ncm1) +NODE_DISPLAY_NAME_MAPPINGS.update(ndnm0) +NODE_DISPLAY_NAME_MAPPINGS.update(ndnm1) + + +__all__ =["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] \ No newline at end of file diff --git a/nodes.py b/nodes/core.py similarity index 98% rename from nodes.py rename to nodes/core.py index efb62d9..d7e8e0f 100644 --- a/nodes.py +++ b/nodes/core.py @@ -69,7 +69,7 @@ label: foo""" class KfEvaluateCurveAtT: - CATEGORY=CATEGORY + CATEGORY=CATEGORY # TODO: create a "utils" group FUNCTION = 'main' RETURN_TYPES = ("FLOAT","INT") @@ -352,7 +352,7 @@ class KfCurveConstant: ################################################################## -#### Working with parameter groups +### TODO: Working with parameter groups # Label curve @@ -438,6 +438,8 @@ class KfSinusoidalWithWavelength: ### # ### # ### # ### # ### # ### # ### # ### # ### # +### # ### # ### # ### # ### # ### # ### # ### # ### # + class KfSinusoidalAdjustWavelength: CATEGORY = CATEGORY FUNCTION = "main" @@ -551,6 +553,22 @@ class KfSinusoidalGetWavelength: return (curve.wavelength,) +class KfSinusoidalGetFrequency: + CATEGORY = CATEGORY + FUNCTION = "main" + RETURN_TYPES = ("FLOAT",) + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "curve": ("SINUSOIDAL_CURVE",{"forceInput": True,}), + }} + + def main(self, curve): + return (1/curve.wavelength,) + + class KfSinusoidalGetPhase: CATEGORY = CATEGORY FUNCTION = "main" @@ -582,24 +600,12 @@ class KfSinusoidalGetAmplitude: def main(self, curve): return (curve.amplitude,) +################################################################## -class KfSinusoidalGetFrequency: - CATEGORY = CATEGORY - FUNCTION = "main" - RETURN_TYPES = ("FLOAT",) - - @classmethod - def INPUT_TYPES(s): - return { - "required": { - "curve": ("SINUSOIDAL_CURVE",{"forceInput": True,}), - }} - - def main(self, curve): - return (1/curve.wavelength,) - - +# TODO: 0-1 curves (low frequency oscillators) +# --> "1-X" operator +# TODO: pre-entangled curves ################################################################## diff --git a/debug.py b/nodes/debug.py similarity index 100% rename from debug.py rename to nodes/debug.py diff --git a/nodes/entangled.py b/nodes/entangled.py new file mode 100644 index 0000000..3b93752 --- /dev/null +++ b/nodes/entangled.py @@ -0,0 +1,167 @@ +from .core import CATEGORY +import keyframed as kf +import numpy as np + +class KfSinusoidalEntangledZeroOne: + CATEGORY = CATEGORY + "/entangled [0-1]" + FUNCTION = "main" + #RETURN_TYPES = ("KEYFRAMED_CURVE", "SINUSOIDAL_CURVE") + + def main(self, n, **kargs): + tau = np.pi / 2 + a = 1/n + return [a+kf.SinusoidalCurve(phase=i/tau, amplitude=a, **kargs) for i in range(n)] + + +class KfSinusoidalEntangledZeroOneFromWavelength(KfSinusoidalEntangledZeroOne): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "wavelength": ("FLOAT",{ + "default": 12, + "step": 0.5, + }), + } + } + + +class KfSinusoidalEntangledZeroOneFromWavelengthx2(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*2 + def main(self, wavelength): + return super().main(n=2, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx3(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*3 + def main(self, wavelength): + return super().main(n=3, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx4(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*4 + def main(self, wavelength): + return super().main(n=4, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx5(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*5 + def main(self, wavelength): + return super().main(n=5, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx6(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*6 + def main(self, wavelength): + return super().main(n=6, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx7(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*7 + def main(self, wavelength): + return super().main(n=7, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx8(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*8 + def main(self, wavelength): + return super().main(n=8, wavelength=wavelength) + +class KfSinusoidalEntangledZeroOneFromWavelengthx9(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*9 + def main(self, wavelength): + return super().main(n=9, wavelength=wavelength) + + +############################################################################################### + +class KfSinusoidalEntangledZeroOneFromFrequency(KfSinusoidalEntangledZeroOne): + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "frequency": ("FLOAT",{ + "default": 1/12, + "step": 0.01, + }), + } + } + + +class KfSinusoidalEntangledZeroOneFromFrequencyx2(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*2 + def main(self, frequency): + return super().main(n=2, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx3(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*3 + def main(self, frequency): + return super().main(n=3, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx4(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*4 + def main(self, frequency): + return super().main(n=4, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx5(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*5 + def main(self, frequency): + return super().main(n=5, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx6(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*6 + def main(self, frequency): + return super().main(n=6, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx7(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*7 + def main(self, frequency): + return super().main(n=7, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx8(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*8 + def main(self, frequency): + return super().main(n=8, frequency=frequency) + +class KfSinusoidalEntangledZeroOneFromFrequencyx9(KfSinusoidalEntangledZeroOneFromWavelength): + RETURN_TYPES = ("KEYFRAMED_CURVE",)*9 + def main(self, frequency): + return super().main(n=9, frequency=frequency) + + +############################################################################################### + +NODE_CLASS_MAPPINGS = { + "KfSinusoidalEntangledZeroOneFromWavelengthx2": KfSinusoidalEntangledZeroOneFromWavelengthx2, + "KfSinusoidalEntangledZeroOneFromWavelengthx3": KfSinusoidalEntangledZeroOneFromWavelengthx3, + "KfSinusoidalEntangledZeroOneFromWavelengthx4": KfSinusoidalEntangledZeroOneFromWavelengthx4, + "KfSinusoidalEntangledZeroOneFromWavelengthx5": KfSinusoidalEntangledZeroOneFromWavelengthx5, + "KfSinusoidalEntangledZeroOneFromWavelengthx6": KfSinusoidalEntangledZeroOneFromWavelengthx6, + "KfSinusoidalEntangledZeroOneFromWavelengthx7": KfSinusoidalEntangledZeroOneFromWavelengthx7, + "KfSinusoidalEntangledZeroOneFromWavelengthx8": KfSinusoidalEntangledZeroOneFromWavelengthx8, + "KfSinusoidalEntangledZeroOneFromWavelengthx9": KfSinusoidalEntangledZeroOneFromWavelengthx9, + + "KfSinusoidalEntangledZeroOneFromFrequencyx2": KfSinusoidalEntangledZeroOneFromFrequencyx2, + "KfSinusoidalEntangledZeroOneFromFrequencyx3": KfSinusoidalEntangledZeroOneFromFrequencyx3, + "KfSinusoidalEntangledZeroOneFromFrequencyx4": KfSinusoidalEntangledZeroOneFromFrequencyx4, + "KfSinusoidalEntangledZeroOneFromFrequencyx5": KfSinusoidalEntangledZeroOneFromFrequencyx5, + "KfSinusoidalEntangledZeroOneFromFrequencyx6": KfSinusoidalEntangledZeroOneFromFrequencyx6, + "KfSinusoidalEntangledZeroOneFromFrequencyx7": KfSinusoidalEntangledZeroOneFromFrequencyx7, + "KfSinusoidalEntangledZeroOneFromFrequencyx8": KfSinusoidalEntangledZeroOneFromFrequencyx8, + "KfSinusoidalEntangledZeroOneFromFrequencyx9": KfSinusoidalEntangledZeroOneFromFrequencyx9, +} + +# A dictionary that contains the friendly/humanly readable titles for the nodes +NODE_DISPLAY_NAME_MAPPINGS = { + "KfSinusoidalEntangledZeroOneFromWavelengthx2": "2x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx3": "3x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx4": "4x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx5": "5x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx6": "6x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx7": "7x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx8": "8x Entangled Curves [0,1] (Wavelength)", + "KfSinusoidalEntangledZeroOneFromWavelengthx9": "9x Entangled Curves [0,1] (Wavelength)", + + "KfSinusoidalEntangledZeroOneFromFrequencyx2": "2x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx3": "3x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx4": "4x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx5": "5x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx6": "6x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx7": "7x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx8": "8x Entangled Curves [0,1] (Frequency)", + "KfSinusoidalEntangledZeroOneFromFrequencyx9": "9x Entangled Curves [0,1] (Frequency)", +} \ No newline at end of file