86 lines
4.7 KiB
Markdown
86 lines
4.7 KiB
Markdown
# Load Image + Source Info
|
|
|
|
Node ID: `PortraitPhotoLoaderPreview`. Category: `PortraitUtils/IO`.
|
|
|
|
This production loader replaces `LoadImageCombinedV2`, which is no longer
|
|
registered. It has independent transactional batch cursors and content-based
|
|
change detection. It loads photos; it does not crop, straighten, resize, adjust
|
|
levels, or remove borders. The v5.3 workflow already uses it.
|
|
|
|
## Wiring
|
|
|
|
Restart ComfyUI and add **Load Image + Source Info**. Its two outputs are:
|
|
|
|
- `image` goes where the old loader's image went, including Intelligent AutoCrop.
|
|
- `source_info` goes to the existing source-info Set node or **Save Info from
|
|
Source** reader. It is the same `PORTRAIT_SOURCE_INFO_V2` type, not a new bus.
|
|
|
|
Mask generation and editor/upscaler routing do not change.
|
|
|
|
## Controls
|
|
|
|
The first seven controls correspond to the current loader:
|
|
|
|
- `mode`: **Single** loads the uploaded/selected image. **Batch** loads one photo
|
|
from a folder per queued execution, not a multi-image tensor batch.
|
|
- `input_dir`: Required in Batch mode. An absolute path, a `~` path, or a path
|
|
relative to ComfyUI/input. Ignored in Single mode.
|
|
- `output_dir`: Passed unchanged apart from surrounding whitespace to source
|
|
info. Blank leaves output-directory selection to the saver. Loading does not
|
|
create folders or write any images.
|
|
- `pattern`: Batch glob; blank means `*`. `**/*.png` includes subfolders.
|
|
Only PNG, JPEG, WebP, TIFF, and BMP files are eligible. Sorting is deterministic
|
|
and natural: `photo2` comes before `photo10`.
|
|
- `strip_trailing_numbers`: Removes a final copy marker such as `photo (2)`.
|
|
It does not strip normal digits such as `scan2024`.
|
|
- `repeat_last`: Holds the last successfully loaded batch photo. With no previous
|
|
photo, loads the first one. Missing/deleted previous files restart at the first
|
|
available file. A held unchanged photo remains cacheable downstream.
|
|
- `image`: Selection/upload for Single mode. It is ignored in Batch mode, even
|
|
if that selection is missing or ComfyUI/input has no uploaded images.
|
|
|
|
Two additional controls make decoding explicit:
|
|
|
|
- `color_management`: **Convert to sRGB** (default) honors embedded 8-bit ICC
|
|
profiles. Untagged RGB photos are assumed sRGB. **Keep encoded values** skips
|
|
ICC conversion, useful for comparison with the old loader. Non-RGB sources
|
|
still need conversion to RGB; untagged CMYK conversion is approximate.
|
|
- `alpha_background`: **White** (default) or **Black** for transparency.
|
|
Transparency is composited, not discarded. No alpha mask is emitted.
|
|
|
|
## Reliability and image fidelity
|
|
|
|
Each node instance keeps its own cursor for each folder/pattern, with up to 32
|
|
recent listings retained. Two loaders pointed at the same folder do not advance
|
|
each other's positions. A failed decode never commits a new cursor position.
|
|
Repair or replace the offending file to retry; it is not silently skipped.
|
|
Adding files does not reset a cursor whose last file still exists.
|
|
|
|
State lasts only while ComfyUI retains the node object. Restarting the server,
|
|
clearing its object cache, or recreating the node starts from the first file.
|
|
ComfyUI's no-cache mode does not retain node objects, so folder advancement
|
|
requires a normal caching mode. Identical preview nodes remain separate in the
|
|
output cache because their hidden node IDs are included in ComfyUI's cache keys.
|
|
|
|
The image output is CPU float32 RGB, `[1, height, width, 3]`. EXIF orientation is
|
|
applied before recording source dimensions. No spatial resampling occurs.
|
|
Single and held-batch images use streamed content hashes, so even replacements
|
|
with the same filename, size, and timestamp invalidate cached results.
|
|
|
|
Standard 16-bit grayscale/RGB/RGBA PNG/TIFF decoding preserves 16-bit samples.
|
|
TIFF uses `tifffile` (already installed in this development environment and now
|
|
listed in requirements) to avoid decoder-specific orientation problems. Common
|
|
compressed files without orientation/premultiplied-alpha transforms can use the
|
|
existing OpenCV decoder as a lossless fallback. Other compressed TIFF variants
|
|
may additionally need `imagecodecs`; a missing codec is reported with install or
|
|
export guidance rather than silently losing precision.
|
|
Embedded ICC conversion for these files is deliberately refused because the
|
|
available Pillow ICC converter operates at 8-bit precision. Export a 16-bit sRGB
|
|
copy without an embedded profile, or deliberately select **Keep encoded values**
|
|
if the encoded colors are appropriate. 32-bit/HDR files fail with export guidance
|
|
instead of being silently clipped or normalized. Animated/multipage inputs load
|
|
only their first frame/page; this is a still-photo loader.
|
|
|
|
The preview does not remove Alamy or other image-hosting borders. Those remain
|
|
the responsibility of the following **Intelligent AutoCrop** stage.
|