Spaces:
Running
Running
from .context import ContextFuseMethod, ContextOptions, ContextOptionsGroup, ContextSchedules | |
from .utils_model import BIGMAX | |
LENGTH_MAX = 128 # keep an eye on these max values; | |
STRIDE_MAX = 32 # would need to be updated | |
OVERLAP_MAX = 128 # if new motion modules come out | |
class LoopedUniformContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"context_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"context_stride": ("INT", {"default": 1, "min": 1, "max": STRIDE_MAX}), | |
"context_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
"closed_loop": ("BOOLEAN", {"default": False},), | |
#"sync_context_to_pe": ("BOOLEAN", {"default": False},), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST,), | |
"use_on_equal_length": ("BOOLEAN", {"default": False},), | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
"view_opts": ("VIEW_OPTS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts" | |
FUNCTION = "create_options" | |
def create_options(self, context_length: int, context_stride: int, context_overlap: int, closed_loop: bool, | |
fuse_method: str=ContextFuseMethod.FLAT, use_on_equal_length=False, start_percent: float=0.0, guarantee_steps: int=1, | |
view_opts: ContextOptions=None, prev_context: ContextOptionsGroup=None): | |
if prev_context is None: | |
prev_context = ContextOptionsGroup() | |
prev_context = prev_context.clone() | |
context_options = ContextOptions( | |
context_length=context_length, | |
context_stride=context_stride, | |
context_overlap=context_overlap, | |
context_schedule=ContextSchedules.UNIFORM_LOOPED, | |
closed_loop=closed_loop, | |
fuse_method=fuse_method, | |
use_on_equal_length=use_on_equal_length, | |
start_percent=start_percent, | |
guarantee_steps=guarantee_steps, | |
view_options=view_opts, | |
) | |
#context_options.set_sync_context_to_pe(sync_context_to_pe) | |
prev_context.add(context_options) | |
return (prev_context,) | |
# This Legacy version exists to maintain compatiblity with old workflows | |
class LegacyLoopedUniformContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"context_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"context_stride": ("INT", {"default": 1, "min": 1, "max": STRIDE_MAX}), | |
"context_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
"context_schedule": (ContextSchedules.LEGACY_UNIFORM_SCHEDULE_LIST,), | |
"closed_loop": ("BOOLEAN", {"default": False},), | |
#"sync_context_to_pe": ("BOOLEAN", {"default": False},), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST, {"default": ContextFuseMethod.FLAT}), | |
"use_on_equal_length": ("BOOLEAN", {"default": False},), | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
"view_opts": ("VIEW_OPTS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "" # No Category, so will not appear in menu | |
FUNCTION = "create_options" | |
def create_options(self, fuse_method: str=ContextFuseMethod.FLAT, context_schedule: str=None, **kwargs): | |
return LoopedUniformContextOptionsNode.create_options(self, fuse_method=fuse_method, **kwargs) | |
class StandardUniformContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"context_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"context_stride": ("INT", {"default": 1, "min": 1, "max": STRIDE_MAX}), | |
"context_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST,), | |
"use_on_equal_length": ("BOOLEAN", {"default": False},), | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
"view_opts": ("VIEW_OPTS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts" | |
FUNCTION = "create_options" | |
def create_options(self, context_length: int, context_stride: int, context_overlap: int, | |
fuse_method: str=ContextFuseMethod.PYRAMID, use_on_equal_length=False, start_percent: float=0.0, guarantee_steps: int=1, | |
view_opts: ContextOptions=None, prev_context: ContextOptionsGroup=None): | |
if prev_context is None: | |
prev_context = ContextOptionsGroup() | |
prev_context = prev_context.clone() | |
context_options = ContextOptions( | |
context_length=context_length, | |
context_stride=context_stride, | |
context_overlap=context_overlap, | |
context_schedule=ContextSchedules.UNIFORM_STANDARD, | |
closed_loop=False, | |
fuse_method=fuse_method, | |
use_on_equal_length=use_on_equal_length, | |
start_percent=start_percent, | |
guarantee_steps=guarantee_steps, | |
view_options=view_opts, | |
) | |
prev_context.add(context_options) | |
return (prev_context,) | |
class StandardStaticContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"context_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"context_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST_STATIC,), | |
"use_on_equal_length": ("BOOLEAN", {"default": False},), | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
"view_opts": ("VIEW_OPTS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts" | |
FUNCTION = "create_options" | |
def create_options(self, context_length: int, context_overlap: int, | |
fuse_method: str=ContextFuseMethod.PYRAMID, use_on_equal_length=False, start_percent: float=0.0, guarantee_steps: int=1, | |
view_opts: ContextOptions=None, prev_context: ContextOptionsGroup=None): | |
if prev_context is None: | |
prev_context = ContextOptionsGroup() | |
prev_context = prev_context.clone() | |
context_options = ContextOptions( | |
context_length=context_length, | |
context_stride=None, | |
context_overlap=context_overlap, | |
context_schedule=ContextSchedules.STATIC_STANDARD, | |
fuse_method=fuse_method, | |
use_on_equal_length=use_on_equal_length, | |
start_percent=start_percent, | |
guarantee_steps=guarantee_steps, | |
view_options=view_opts, | |
) | |
prev_context.add(context_options) | |
return (prev_context,) | |
class BatchedContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"context_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
}, | |
"optional": { | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts" | |
FUNCTION = "create_options" | |
def create_options(self, context_length: int, start_percent: float=0.0, guarantee_steps: int=1, | |
prev_context: ContextOptionsGroup=None): | |
if prev_context is None: | |
prev_context = ContextOptionsGroup() | |
prev_context = prev_context.clone() | |
context_options = ContextOptions( | |
context_length=context_length, | |
context_overlap=0, | |
context_schedule=ContextSchedules.BATCHED, | |
start_percent=start_percent, | |
guarantee_steps=guarantee_steps, | |
) | |
prev_context.add(context_options) | |
return (prev_context,) | |
class ViewAsContextOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"view_opts_req": ("VIEW_OPTS",), | |
}, | |
"optional": { | |
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), | |
"guarantee_steps": ("INT", {"default": 1, "min": 0, "max": BIGMAX}), | |
"prev_context": ("CONTEXT_OPTIONS",), | |
} | |
} | |
RETURN_TYPES = ("CONTEXT_OPTIONS",) | |
RETURN_NAMES = ("CONTEXT_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts" | |
FUNCTION = "create_options" | |
def create_options(self, view_opts_req: ContextOptions, start_percent: float=0.0, guarantee_steps: int=1, | |
prev_context: ContextOptionsGroup=None): | |
if prev_context is None: | |
prev_context = ContextOptionsGroup() | |
prev_context = prev_context.clone() | |
context_options = ContextOptions( | |
context_schedule=ContextSchedules.VIEW_AS_CONTEXT, | |
start_percent=start_percent, | |
guarantee_steps=guarantee_steps, | |
view_options=view_opts_req, | |
use_on_equal_length=True | |
) | |
prev_context.add(context_options) | |
return (prev_context,) | |
######################### | |
# View Options | |
class StandardStaticViewOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"view_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"view_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST,), | |
} | |
} | |
RETURN_TYPES = ("VIEW_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts/view opts" | |
FUNCTION = "create_options" | |
def create_options(self, view_length: int, view_overlap: int, | |
fuse_method: str=ContextFuseMethod.FLAT,): | |
view_options = ContextOptions( | |
context_length=view_length, | |
context_stride=None, | |
context_overlap=view_overlap, | |
context_schedule=ContextSchedules.STATIC_STANDARD, | |
fuse_method=fuse_method, | |
) | |
return (view_options,) | |
class StandardUniformViewOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"view_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"view_stride": ("INT", {"default": 1, "min": 1, "max": STRIDE_MAX}), | |
"view_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST,), | |
} | |
} | |
RETURN_TYPES = ("VIEW_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts/view opts" | |
FUNCTION = "create_options" | |
def create_options(self, view_length: int, view_overlap: int, view_stride: int, | |
fuse_method: str=ContextFuseMethod.PYRAMID,): | |
view_options = ContextOptions( | |
context_length=view_length, | |
context_stride=view_stride, | |
context_overlap=view_overlap, | |
context_schedule=ContextSchedules.UNIFORM_STANDARD, | |
fuse_method=fuse_method, | |
) | |
return (view_options,) | |
class LoopedUniformViewOptionsNode: | |
def INPUT_TYPES(s): | |
return { | |
"required": { | |
"view_length": ("INT", {"default": 16, "min": 1, "max": LENGTH_MAX}), | |
"view_stride": ("INT", {"default": 1, "min": 1, "max": STRIDE_MAX}), | |
"view_overlap": ("INT", {"default": 4, "min": 0, "max": OVERLAP_MAX}), | |
"closed_loop": ("BOOLEAN", {"default": False},), | |
}, | |
"optional": { | |
"fuse_method": (ContextFuseMethod.LIST,), | |
"use_on_equal_length": ("BOOLEAN", {"default": False},), | |
} | |
} | |
RETURN_TYPES = ("VIEW_OPTS",) | |
CATEGORY = "Animate Diff ππ π /context opts/view opts" | |
FUNCTION = "create_options" | |
def create_options(self, view_length: int, view_overlap: int, view_stride: int, closed_loop: bool, | |
fuse_method: str=ContextFuseMethod.PYRAMID, use_on_equal_length=False): | |
view_options = ContextOptions( | |
context_length=view_length, | |
context_stride=view_stride, | |
context_overlap=view_overlap, | |
context_schedule=ContextSchedules.UNIFORM_LOOPED, | |
closed_loop=closed_loop, | |
fuse_method=fuse_method, | |
use_on_equal_length=use_on_equal_length, | |
) | |
return (view_options,) | |