Fix: Auto-detect mode based on input priority
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
This commit is contained in:
+21
-18
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user