From 4a13a9f82715a09ebb0f6dbcc2b0e47d5e559998 Mon Sep 17 00:00:00 2001 From: solidlime Date: Wed, 7 Jan 2026 21:26:21 +0900 Subject: [PATCH] Fix: Auto-detect mode based on input priority MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: - Priority 1: If folder_path is valid → use folder random selection - Priority 2: If image_data is available → use file picker image - Works regardless of folder_mode setting Benefits: - folder_path can be maintained while using the node - No need to manually toggle folder_mode - Auto-detects best mode based on available input - Better error messages explaining what's needed This allows seamless workflow: - Keep folder path in field - Node automatically picks random from folder - Can still use file picker if folder_path is empty --- random_image_picker.py | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/random_image_picker.py b/random_image_picker.py index 9686657..b702f0b 100644 --- a/random_image_picker.py +++ b/random_image_picker.py @@ -131,23 +131,18 @@ class RandomImagePicker: Load image based on mode settings. Args: - folder_path: Folder path for random selection (folder mode) - folder_mode: True for folder mode, False for single file mode + folder_path: Folder path for random selection + folder_mode: True for explicit folder mode, False for auto-detect include_subfolders: Whether to scan subfolders seed: Random seed for folder mode - image_data: Base64 encoded image data from file picker (single mode) + image_data: Base64 encoded image data from file picker Returns: Tuple of (image_tensor, width, height) """ - if folder_mode: - # Folder mode: pick random image from folder - if not folder_path or not os.path.exists(folder_path): - raise ValueError(f"Folder path does not exist: {folder_path}") - - if not os.path.isdir(folder_path): - raise ValueError(f"Folder mode requires a directory path: {folder_path}") - + # Priority 1: Check if folder_path is valid (works for both modes) + if folder_path and os.path.exists(folder_path) and os.path.isdir(folder_path): + # Use folder mode (random selection) image_files = self.get_image_files(folder_path, include_subfolders) if not image_files: @@ -157,15 +152,14 @@ class RandomImagePicker: random.seed(seed) selected_image = random.choice(image_files) + mode_str = "Folder Mode" if folder_mode else "Auto (from folder_path)" + print(f"[Random Image Picker] Mode: {mode_str}") print(f"[Random Image Picker] Folder: {folder_path}") print(f"[Random Image Picker] Selected: {selected_image}") return self.load_image_file(selected_image) - else: - # Single file mode: use image_data from file picker - if not image_data: - raise ValueError("Please select an image file using the 📁 Choose File button") - - # Parse base64 image data + + # Priority 2: Use file picker data if available + if image_data: import base64 import io @@ -191,11 +185,20 @@ class RandomImagePicker: # Convert to torch tensor and add batch dimension img_tensor = torch.from_numpy(img_array)[None,] - print(f"[Random Image Picker] Loaded from file picker: {width}x{height}") + print(f"[Random Image Picker] Mode: File Picker") + print(f"[Random Image Picker] Loaded: {width}x{height}") return (img_tensor, width, height) except Exception as e: raise ValueError(f"Failed to load image from file picker: {str(e)}") + + # No valid input provided + raise ValueError( + "No valid input provided.\n\n" + "Please either:\n" + "1. Enter a folder path in 'folder_path' field, OR\n" + "2. Use the 📁 Choose File button to select an image" + ) # Node registration