# LoadImagesFromDirectory The LoadImagesFromDirectory node is a powerful batch image loader that efficiently processes multiple images from a directory with advanced resizing, sorting, and formatting options. This node is essential for keyframe-based workflows and batch processing tasks where consistent image dimensions and ordering are critical. ## Overview This node loads all supported image files from a specified directory, applies consistent resizing, sorts them according to various criteria, and outputs them as a properly formatted batch tensor ready for use in ComfyUI workflows. It's particularly useful for creating keyframe sequences, batch processing workflows, and preparing image datasets. ## Key Features - **Batch Loading**: Process entire directories of images in one operation - **Smart Resizing**: Multiple resize modes to handle varying input dimensions - **Flexible Sorting**: Sort images by name, date, size, or preserve original order - **Format Support**: Wide range of image formats (PNG, JPG, JPEG, BMP, WEBP, TIF, TIFF) - **Consistent Output**: All images normalized to identical dimensions and format - **Reload Control**: Option to force refresh on each execution - **Error Handling**: Robust error reporting for missing files or invalid formats ## Parameters ### Required Inputs #### `directory` (STRING) The directory path containing images to load, relative to ComfyUI's input directory. **Path Resolution:** - Path is relative to `ComfyUI/input/` directory - Use forward slashes or backslashes as appropriate for your system - Subdirectories are supported (e.g., `keyframes/sequence1`) **Examples:** ``` "keyframes" → loads from ComfyUI/input/keyframes/ "project/frames" → loads from ComfyUI/input/project/frames/ "batch_001" → loads from ComfyUI/input/batch_001/ ``` **Default:** `keyframes` #### `reload_on_execute` (BOOLEAN) Forces the node to reload images on every execution, bypassing ComfyUI's caching system. **When to use:** - **True**: When images in the directory change frequently during workflow development - **False**: For stable directories where images don't change (better performance) **Default:** `False` #### `target_width` (INT) Target width in pixels for all output images. - **Range:** 64 - 8192 pixels - **Step:** 8 pixels - **Default:** 512 #### `target_height` (INT) Target height in pixels for all output images. - **Range:** 64 - 8192 pixels - **Step:** 8 pixels - **Default:** 512 #### `resize_mode` (ENUM) Determines how images are resized to match target dimensions. **Options:** ##### `stretch` Directly stretches images to exact target dimensions. - **Pros**: Exact dimensions guaranteed, simple processing - **Cons**: May distort aspect ratio, can cause visual artifacts - **Use case**: When exact dimensions are critical and aspect ratio changes are acceptable ##### `fit` Maintains original aspect ratio, fits image inside target dimensions with padding. - **Pros**: Preserves aspect ratio, no cropping - **Cons**: May have black padding, doesn't fill entire frame - **Use case**: When preserving entire image content is important - **Padding**: Black padding added to center the image ##### `crop` (Default) Maintains original aspect ratio, crops image to fill target dimensions. - **Pros**: Fills entire frame, preserves aspect ratio - **Cons**: May lose edge content through cropping - **Use case**: When filling the frame completely is important - **Cropping**: Intelligent center cropping to preserve main subject **Default:** `crop` #### `sort_mode` (ENUM) Controls the order in which images are loaded and processed. **Options:** ##### `name_asc` (Default) Sort alphabetically by filename in ascending order (A-Z, 0-9). - **Best for**: Numbered sequences (001.jpg, 002.jpg, etc.) - **Example order**: frame_001.png, frame_002.png, frame_010.png ##### `name_desc` Sort alphabetically by filename in descending order (Z-A, 9-0). - **Best for**: Reverse sequences or reverse alphabetical order ##### `date_asc` Sort by file modification date, oldest first. - **Best for**: Processing images in chronological order of creation/modification - **Useful for**: Photo sequences, time-lapse workflows ##### `date_desc` Sort by file modification date, newest first. - **Best for**: Processing most recent images first ##### `size_asc` Sort by file size, smallest first. - **Best for**: Processing lower resolution images before higher resolution - **Useful for**: Progressive quality workflows ##### `size_desc` Sort by file size, largest first. - **Best for**: Processing highest quality images first ##### `none` No sorting - uses system's default directory listing order. - **Best for**: When order doesn't matter or preserving system order - **Note**: Order may vary between operating systems **Default:** `name_asc` ## Outputs ### `images` (IMAGE) A batch tensor containing all loaded and processed images. **Format:** `(batch_size, height, width, 3)` - **batch_size**: Number of images loaded from directory - **height**: Target height (as specified in parameters) - **width**: Target width (as specified in parameters) - **3**: RGB color channels **Data Type:** `torch.FloatTensor` **Value Range:** 0.0 - 1.0 (normalized from 0-255) ## Supported Image Formats The node supports the following image formats: - **PNG** (.png) - Lossless compression, transparency support - **JPEG** (.jpg, .jpeg) - Lossy compression, smaller file sizes - **BMP** (.bmp) - Uncompressed bitmap format - **WebP** (.webp) - Modern web format with good compression - **TIFF** (.tif, .tiff) - High quality, often used for professional photography **Note:** All images are converted to RGB format regardless of input format, removing any alpha channels. ## Processing Pipeline ### 1. Directory Scanning - Scans specified directory for supported image files - Filters out hidden files (starting with '.') - Validates file extensions against supported formats ### 2. File Sorting - Applies selected sort mode to determine processing order - Handles file system errors gracefully (places problematic files at end) ### 3. Image Loading & Processing For each image: - Opens image using PIL (Python Imaging Library) - Converts to RGB format (removes alpha channels) - Applies selected resize mode to reach target dimensions - Converts to ComfyUI-compatible tensor format - Normalizes values to 0.0-1.0 range ### 4. Batch Assembly - Concatenates all processed images into a single batch tensor - Ensures consistent dimensions across all images in batch ## Usage Examples ### Basic Keyframe Loading ```python # Load numbered keyframes in order directory = "my_keyframes" sort_mode = "name_asc" # Ensures 001.jpg comes before 010.jpg resize_mode = "crop" # Fill frame completely target_width = 512 target_height = 512 ``` ### Time-lapse Processing ```python # Process photos chronologically directory = "timelapse_photos" sort_mode = "date_asc" # Oldest photos first resize_mode = "fit" # Preserve entire photo content target_width = 1920 target_height = 1080 ``` ### Development Workflow ```python # Frequently changing images during development directory = "test_frames" reload_on_execute = True # Always check for new/changed images resize_mode = "stretch" # Quick processing for testing target_width = 256 # Lower resolution for speed target_height = 256 ``` ### High-Quality Processing ```python # Process largest images first for quality workflows directory = "high_res_sources" sort_mode = "size_desc" # Largest files first resize_mode = "crop" # Maintain quality, fill frame target_width = 1024 target_height = 1024 ``` ## Resize Mode Comparison | Mode | Aspect Ratio | Full Frame | Content Loss | Use Case | |------|--------------|------------|--------------|----------| | **stretch** | May change | ✅ Yes | Distortion | Exact dimensions needed | | **fit** | ✅ Preserved | ❌ Padded | None | Preserve all content | | **crop** | ✅ Preserved | ✅ Yes | Edge cropping | Fill frame, natural look | ## Performance Considerations ### Memory Usage - Memory usage scales with: `batch_size × width × height × 3 × 4 bytes` - For 100 images at 512×512: ~300MB RAM - For 100 images at 1024×1024: ~1.2GB RAM ### Processing Speed - **Fastest**: `stretch` mode (simple resize) - **Medium**: `crop` mode (crop + resize) - **Slowest**: `fit` mode (resize + composition) ### Optimization Tips - Use `reload_on_execute = False` for stable directories - Lower target dimensions for faster processing during development - Consider batch size limits for available system memory - Use appropriate resize mode for your specific needs ## Error Handling ### Common Errors and Solutions #### `FileNotFoundError: Directory not found` **Cause:** Specified directory doesn't exist relative to ComfyUI input folder **Solution:** - Verify directory path is correct - Ensure directory exists in `ComfyUI/input/` - Check for typos in directory name #### `ValueError: No valid images found` **Cause:** Directory exists but contains no supported image files **Solution:** - Verify images are in supported formats - Check if images are hidden (filename starting with '.') - Ensure files aren't corrupted #### `RuntimeError: Failed to load image` **Cause:** Specific image file is corrupted or in unsupported format **Solution:** - Check image file integrity - Try opening image in standard image viewer - Remove or replace corrupted files - Verify file format is supported #### Memory errors **Cause:** Too many images or too high resolution for available RAM **Solution:** - Reduce target dimensions - Process fewer images per batch - Increase system RAM - Use lower resolution images ## Integration Patterns ### Typical Workflow Connections #### Keyframe Video Generation ``` LoadImagesFromDirectory → WanKeyframeToVideo ``` #### Batch Processing ``` LoadImagesFromDirectory → Image Processing Node → Save/Export ``` #### Style Transfer Pipeline ``` LoadImagesFromDirectory → Style Transfer → Batch Save ``` #### Dataset Preparation ``` LoadImagesFromDirectory → Preprocessing → Training Dataset ``` ## Best Practices ### Directory Organization - Use consistent naming conventions (001.jpg, 002.jpg, etc.) - Keep related images in dedicated subdirectories - Avoid spaces and special characters in filenames - Use descriptive directory names ### Parameter Selection - **For keyframes**: Use `name_asc` sorting with `crop` resize mode - **For datasets**: Consider `date_asc` for chronological data - **For development**: Enable `reload_on_execute` temporarily - **For production**: Disable `reload_on_execute` for better performance ### File Management - Regularly clean up temporary or test directories - Keep original high-resolution sources separate from processed versions - Consider using version control for important image sequences - Backup critical image directories before batch processing ## Troubleshooting ### Images appear in wrong order - Check `sort_mode` setting - Verify filename numbering (use leading zeros: 001 not 1) - Consider using `date_asc` for chronological ordering ### Images look stretched or distorted - Switch from `stretch` to `crop` or `fit` mode - Verify target dimensions match desired aspect ratio - Check original image aspect ratios ### Memory issues with large batches - Reduce `target_width` and `target_height` - Process images in smaller batches - Monitor system memory usage - Consider using image compression ### Inconsistent results between runs - Enable `reload_on_execute` if images change frequently - Check for hidden files or temporary files in directory - Verify all images are in supported formats