Files
Artificial-Sweetener-Simple…/simple_syrup/nodes_v3/vae_encode_options.py
T
Artificial Sweetener f863fcf645 feat(nodes): add VAE options and clone-safe diffusion
Add VAE encode/decode option nodes across legacy and Comfy v3 exports, with tooltip and registration coverage. Preserve cloned model graph composition for differential diffusion in tiled and regional sampling paths.
2026-05-25 13:40:36 -04:00

144 lines
4.6 KiB
Python

# SimpleSyrup - workflow-focused ComfyUI extensions for image generation
# Copyright (C) 2026 Artificial Sweetener and contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Comfy v3 node wrapper for VAE Encode (Options)."""
from __future__ import annotations
from importlib import import_module
from typing import TYPE_CHECKING, Any, ClassVar
from ..nodes import tooltips
from ..nodes.vae_options import (
VAE_ENCODE_TILE_SIZE_STEP,
VAE_OVERLAP_DEFAULT,
VAE_OVERLAP_MAX,
VAE_OVERLAP_MIN,
VAE_OVERLAP_STEP,
VAE_TEMPORAL_OVERLAP_DEFAULT,
VAE_TEMPORAL_OVERLAP_MAX,
VAE_TEMPORAL_OVERLAP_MIN,
VAE_TEMPORAL_OVERLAP_STEP,
VAE_TEMPORAL_SIZE_DEFAULT,
VAE_TEMPORAL_SIZE_MAX,
VAE_TEMPORAL_SIZE_MIN,
VAE_TEMPORAL_SIZE_STEP,
VAE_TILE_SIZE_DEFAULT,
VAE_TILE_SIZE_MAX,
VAE_TILE_SIZE_MIN,
VAEEncodeOptions,
)
if TYPE_CHECKING:
class _ComfyNodeBase:
"""Type-checking base for Comfy v3 nodes."""
RETURN_TYPES: ClassVar[list[str]]
RETURN_NAMES: ClassVar[list[str]]
else:
_ComfyNodeBase = import_module("comfy_api.latest").io.ComfyNode
_comfy_io: Any = None if TYPE_CHECKING else import_module("comfy_api.latest").io
class VAEEncodeOptionsV3(_ComfyNodeBase):
"""Expose VAE Encode (Options) through Comfy's v3 extension API."""
@classmethod
def define_schema(cls) -> Any:
"""Declare the VAE Encode (Options) v3 schema."""
return _comfy_io.Schema(
node_id="SimpleSyrup.VAEEncodeOptions",
display_name="VAE Encode (Options)",
enable_expand=True,
category="SimpleSyrup/Latent",
description=VAEEncodeOptions.DESCRIPTION,
search_aliases=VAEEncodeOptions.SEARCH_ALIASES,
inputs=[
_comfy_io.Boolean.Input(
"use_tiling",
default=False,
tooltip=tooltips.VAE_OPTIONS_USE_TILING,
),
_comfy_io.Image.Input(
"pixels",
raw_link=True,
tooltip=tooltips.VAE_OPTIONS_ENCODE_PIXELS,
),
_comfy_io.Vae.Input(
"vae",
raw_link=True,
tooltip=tooltips.VAE_OPTIONS_VAE,
),
_comfy_io.Int.Input(
"tile_size",
default=VAE_TILE_SIZE_DEFAULT,
min=VAE_TILE_SIZE_MIN,
max=VAE_TILE_SIZE_MAX,
step=VAE_ENCODE_TILE_SIZE_STEP,
advanced=True,
tooltip=tooltips.VAE_OPTIONS_TILE_SIZE,
),
_comfy_io.Int.Input(
"overlap",
default=VAE_OVERLAP_DEFAULT,
min=VAE_OVERLAP_MIN,
max=VAE_OVERLAP_MAX,
step=VAE_OVERLAP_STEP,
advanced=True,
tooltip=tooltips.VAE_OPTIONS_OVERLAP,
),
_comfy_io.Int.Input(
"temporal_size",
default=VAE_TEMPORAL_SIZE_DEFAULT,
min=VAE_TEMPORAL_SIZE_MIN,
max=VAE_TEMPORAL_SIZE_MAX,
step=VAE_TEMPORAL_SIZE_STEP,
advanced=True,
tooltip=tooltips.VAE_OPTIONS_ENCODE_TEMPORAL_SIZE,
),
_comfy_io.Int.Input(
"temporal_overlap",
default=VAE_TEMPORAL_OVERLAP_DEFAULT,
min=VAE_TEMPORAL_OVERLAP_MIN,
max=VAE_TEMPORAL_OVERLAP_MAX,
step=VAE_TEMPORAL_OVERLAP_STEP,
advanced=True,
tooltip=tooltips.VAE_OPTIONS_TEMPORAL_OVERLAP,
),
],
outputs=[
_comfy_io.Latent.Output(
"latent",
tooltip=tooltips.VAE_OPTIONS_LATENT_OUTPUT,
),
],
)
@classmethod
def execute(
cls,
use_tiling: bool,
pixels: object,
vae: object,
tile_size: int,
overlap: int,
temporal_size: int,
temporal_overlap: int,
) -> Any:
"""Expand through the legacy VAE Encode (Options) implementation."""
return VAEEncodeOptions().encode(
use_tiling=use_tiling,
pixels=pixels,
vae=vae,
tile_size=tile_size,
overlap=overlap,
temporal_size=temporal_size,
temporal_overlap=temporal_overlap,
)