diff --git a/random_image_picker.py b/random_image_picker.py index b702f0b..89aaba2 100644 --- a/random_image_picker.py +++ b/random_image_picker.py @@ -131,18 +131,23 @@ class RandomImagePicker: Load image based on mode settings. Args: - folder_path: Folder path for random selection - folder_mode: True for explicit folder mode, False for auto-detect + folder_path: Folder path for random selection (used when folder_mode=True) + folder_mode: True=Folder random selection, False=File picker include_subfolders: Whether to scan subfolders seed: Random seed for folder mode - image_data: Base64 encoded image data from file picker + image_data: Base64 encoded image data from file picker (used when folder_mode=False) Returns: Tuple of (image_tensor, width, height) """ - # 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) + if folder_mode: + # Folder mode: random selection from folder_path + if not folder_path or not os.path.exists(folder_path): + raise ValueError(f"Folder mode is enabled but folder_path is invalid: {folder_path}") + + if not os.path.isdir(folder_path): + raise ValueError(f"Folder mode requires a directory path, not a file: {folder_path}") + image_files = self.get_image_files(folder_path, include_subfolders) if not image_files: @@ -152,14 +157,18 @@ 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] Mode: Folder") print(f"[Random Image Picker] Folder: {folder_path}") print(f"[Random Image Picker] Selected: {selected_image}") return self.load_image_file(selected_image) - - # Priority 2: Use file picker data if available - if image_data: + else: + # Single file mode: use file picker (image_data) + if not image_data: + raise ValueError( + "Single file mode is enabled but no image selected.\n\n" + "Please use the 📁 Choose File button to select an image." + ) + import base64 import io @@ -185,20 +194,12 @@ class RandomImagePicker: # Convert to torch tensor and add batch dimension img_tensor = torch.from_numpy(img_array)[None,] - print(f"[Random Image Picker] Mode: File Picker") + print(f"[Random Image Picker] Mode: Single (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 diff --git a/web/random_image_picker.js b/web/random_image_picker.js index 7828c6e..0d401f1 100644 --- a/web/random_image_picker.js +++ b/web/random_image_picker.js @@ -13,14 +13,6 @@ app.registerExtension({ // Add file picker button node.addWidget("button", "📁 Choose File", null, () => { - const folderModeWidget = node.widgets.find(w => w.name === "folder_mode"); - const isFolderMode = folderModeWidget?.value || false; - - if (isFolderMode) { - alert("⚠️ Folder Mode is enabled.\n\nPlease switch to Single mode to use the file picker,\nor enter the folder path in the 'folder_path' field above."); - return; - } - const input = document.createElement("input"); input.type = "file"; input.accept = "image/png,image/jpeg,image/jpg,image/webp,image/bmp,image/gif"; @@ -29,6 +21,13 @@ app.registerExtension({ if (e.target.files && e.target.files[0]) { const file = e.target.files[0]; + // Automatically switch to Single mode (folder_mode = False) + const folderModeWidget = node.widgets.find(w => w.name === "folder_mode"); + if (folderModeWidget) { + folderModeWidget.value = false; + console.log("[Random Image Picker] Switched to Single mode"); + } + // Read file as base64 const reader = new FileReader(); reader.onload = (event) => { @@ -41,7 +40,7 @@ app.registerExtension({ } console.log(`[Random Image Picker] File loaded: ${file.name} (${(base64Data.length / 1024).toFixed(2)} KB)`); - alert(`✅ Image loaded successfully!\n\nFile: ${file.name}\nSize: ${(file.size / 1024).toFixed(2)} KB\n\nYou can now run the workflow.`); + alert(`✅ Image loaded successfully!\n\nFile: ${file.name}\nSize: ${(file.size / 1024).toFixed(2)} KB\n\nMode: Automatically switched to Single\n\nYou can now run the workflow.`); }; reader.onerror = () => {