Files
alexopus-ComfyUI-Image-Saver/__init__.py
T
AdiosF6F 4af6182d57 feat(nodes): implement deferred execution pipe architecture
Introduce an optional Pipe architecture to streamline metadata management
and reduce wire clutter in complex, multi-stage workflows.

This new system utilizes deferred execution (lazy evaluation), passing
metadata and configuration state as raw dictionaries through the pipe.
Expensive operations, such as checkpoint hashing and Civitai API lookups,
are now deferred until the final image save execution. This approach
prevents premature data mutation and significantly reduces execution
overhead during workflow design and routing.

To maintain architectural cleanliness and follow existing module patterns,
these nodes are housed in a dedicated `nodes_pipe.py` file. The pipe
configuration uses dynamic dictionary composition to inherit UI definitions
safely without inheriting incorrect base execution logic.

Key additions:
- `MakeImageSaverSimpleConfig` & `MakeImageSaverMetadataConfig`: Provide
  standalone input configurations.
- `MakeImageSaverPipe`: Bundles configurations into a single connection.
- `EditImageSaverPipe`: Enables non-destructive branching and overrides.
- `ReadImageSaverPipe`: Allows extraction of pipe data for external use.
- `ImageSaverFromPipe`: Triggers disk/network actions.
2026-05-21 21:54:11 +02:00

45 lines
2.4 KiB
Python

from typing import Any
from .nodes import ImageSaver, ImageSaverSimple, ImageSaverMetadata
from .nodes_pipe import MakeImageSaverPipe, EditImageSaverPipe, ReadImageSaverPipe, ImageSaverFromPipe, MakeImageSaverSimpleConfig, MakeImageSaverMetadataConfig
from .nodes_literals import SeedGenerator, StringLiteral, SizeLiteral, IntLiteral, FloatLiteral, CfgLiteral, ConditioningConcatOptional, RandomShapeGenerator
from .nodes_loaders import CheckpointLoaderWithName, UNETLoaderWithName
from .nodes_selectors import SamplerSelector, SchedulerSelector, SchedulerSelectorInspire, SchedulerSelectorEfficiency, InputParameters, AnyToString, WorkflowInputValue
from .civitai_nodes import CivitaiHashFetcher
from .random_tag_picker import RandomTagPicker
NODE_CLASS_MAPPINGS: dict[str, Any] = {
"Checkpoint Loader with Name (Image Saver)": CheckpointLoaderWithName,
"UNet loader with Name (Image Saver)": UNETLoaderWithName,
"Image Saver": ImageSaver,
"Image Saver Simple": ImageSaverSimple,
"Image Saver Metadata": ImageSaverMetadata,
"Make Image Saver Simple Config": MakeImageSaverSimpleConfig,
"Make Image Saver Metadata Config": MakeImageSaverMetadataConfig,
"Make Image Saver Pipe": MakeImageSaverPipe,
"Edit Image Saver Pipe": EditImageSaverPipe,
"Read Image Saver Pipe": ReadImageSaverPipe,
"Image Saver (From Pipe)": ImageSaverFromPipe,
"Sampler Selector (Image Saver)": SamplerSelector,
"Scheduler Selector (Image Saver)": SchedulerSelector,
"Scheduler Selector (inspire) (Image Saver)": SchedulerSelectorInspire,
"Scheduler Selector (Eff.) (Image Saver)": SchedulerSelectorEfficiency,
"Input Parameters (Image Saver)": InputParameters,
"Any to String (Image Saver)": AnyToString,
"Workflow Input Value (Image Saver)": WorkflowInputValue,
"Seed Generator (Image Saver)": SeedGenerator,
"String Literal (Image Saver)": StringLiteral,
"Width/Height Literal (Image Saver)": SizeLiteral,
"Cfg Literal (Image Saver)": CfgLiteral,
"Int Literal (Image Saver)": IntLiteral,
"Float Literal (Image Saver)": FloatLiteral,
"Conditioning Concat Optional (Image Saver)": ConditioningConcatOptional,
"RandomShapeGenerator": RandomShapeGenerator,
"Civitai Hash Fetcher (Image Saver)": CivitaiHashFetcher,
"Random Tag Picker (Image Saver)": RandomTagPicker,
}
WEB_DIRECTORY = "js"
__all__ = ['NODE_CLASS_MAPPINGS', 'WEB_DIRECTORY']