Files
Artificial-Sweetener-Simple…/simple_syrup/services/load_image_list_service.py
T

69 lines
2.2 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
"""Application service for ordered authored-image list loading."""
from __future__ import annotations
from collections.abc import Sequence
from typing import ClassVar
import torch
from ..domain.ordered_files import OrderedFileSelection
from ..runtime.image_file_loader import ImageFileLoader
from ..shared.logging import get_logger
LOGGER = get_logger(__name__)
class LoadImageListService:
"""Load ordered files as independently sized singleton IMAGE tensors."""
loader_class: ClassVar[type[ImageFileLoader]] = ImageFileLoader
def validate(self, files: Sequence[str]) -> None:
"""Validate every selected file through Comfy's native image loader."""
ordered_files = self._selection(files).paths
loader = self.loader_class()
for path in ordered_files:
loader.validate(path)
def load(self, files: Sequence[str]) -> list[torch.Tensor]:
"""Load every authored position without batching or resizing images."""
ordered_files = self._selection(files).paths
loader = self.loader_class()
images = [loader.load(path) for path in ordered_files]
LOGGER.info(
"Authored image list loaded",
extra={
"operation": "load_image_list",
"image_count": len(images),
"image_shapes": [tuple(image.shape) for image in images],
},
)
return images
def fingerprint(self, files: Sequence[str]) -> str:
"""Return an order-sensitive fingerprint for all selected images."""
loader = self.loader_class()
return self._selection(files).fingerprint(loader.fingerprint)
def available_files(self) -> tuple[str, ...]:
"""Return Comfy input images eligible for selection."""
return self.loader_class().available_files()
def _selection(self, files: Sequence[str]) -> OrderedFileSelection:
"""Return validated positional image-file state."""
return OrderedFileSelection.require(
files,
node_name="Load Image List",
item_name="image",
)