- Add auto-batching functionality to split large LoRA collections into manageable chunks - Implement batch_size parameter to control number of LoRAs per batch (default: 25) - Add batch_index parameter to select which batch to process - Include batch tracking metadata in LORA_PARAMS for visualization - Display batch info in plot parameters when available - Update lora_list output to show batch header when auto-batching is enabled - Add comprehensive tests for batching functionality - Update documentation with detailed auto-batching usage instructions This feature prevents UI disconnection issues when processing large numbers of LoRAs by allowing users to process them in smaller batches sequentially.
264 lines
8.5 KiB
Markdown
264 lines
8.5 KiB
Markdown
# LoRA Folder Batch
|
||
|
||
## Overview
|
||
The **LoRA Folder Batch** node automates the process of testing multiple LoRA models from a folder. This tool was adapted from [comfyui-essentials-nodes](https://github.com/cubiq/ComfyUI_essentials) (now in maintenance mode) and enhanced with batch processing capabilities for efficient LoRA evaluation workflows.
|
||
|
||
## Attribution
|
||
This node is based on work from [comfyui-essentials-nodes](https://github.com/cubiq/ComfyUI_essentials) by cubiq. The original project is in maintenance-only mode, and we've adopted and enhanced these tools to ensure continued support and compatibility with modern ComfyUI workflows.
|
||
|
||
## Features
|
||
- **Automatic Folder Scanning**: Discovers all .safetensors files in specified folders
|
||
- **Natural Sorting**: Intelligently sorts epochs (e.g., epoch_004, epoch_020, epoch_100)
|
||
- **Pattern Filtering**: Include/exclude LoRAs using regex patterns
|
||
- **Flexible Strength Control**: Single, multiple, or range-based strength values
|
||
- **Batch Modes**: Sequential or combinatorial strength application
|
||
- **Epoch Detection**: Automatically extracts epoch numbers from filenames
|
||
- **Auto-Batching**: Automatically splits large LoRA collections into manageable chunks to prevent UI disconnection
|
||
|
||
## Node Properties
|
||
- **Category**: `ComfyAssets/🧰 xyz-helpers`
|
||
- **Node Name**: `LoRAFolderBatch`
|
||
- **Function**: `batch_loras`
|
||
|
||
## Inputs
|
||
|
||
### Required
|
||
| Parameter | Type | Default | Description |
|
||
|-----------|------|---------|-------------|
|
||
| `folder_path` | STRING | "." | Folder path relative to models/loras (or absolute) |
|
||
| `strength` | STRING | "1.0" | Strength values (see formats below) |
|
||
| `batch_mode` | DROPDOWN | sequential | [sequential, combinatorial] processing mode |
|
||
|
||
### Optional
|
||
| Parameter | Type | Default | Description |
|
||
|-----------|------|---------|-------------|
|
||
| `include_pattern` | STRING | "" | Regex pattern to include files |
|
||
| `exclude_pattern` | STRING | "" | Regex pattern to exclude files |
|
||
| `max_loras` | INT | 50 | Maximum LoRAs to process (when auto_batch disabled) |
|
||
| `sort_order` | DROPDOWN | natural | Sorting method [natural, alphabetical, newest, oldest] |
|
||
| `auto_batch` | DROPDOWN | disabled | Enable auto-batching for large collections [disabled, enabled] |
|
||
| `batch_size` | INT | 25 | Number of LoRAs per batch when auto-batching |
|
||
| `batch_index` | INT | 0 | Which batch to output (0-based) when auto-batching |
|
||
|
||
### Strength Format Options
|
||
- **Single**: `"1.0"` - Apply same strength to all LoRAs
|
||
- **Multiple**: `"0.5, 0.75, 1.0"` - Comma-separated values
|
||
- **Range**: `"0.5...1.0+0.25"` - Start...End+Step format
|
||
|
||
## Outputs
|
||
| Name | Type | Description |
|
||
|------|------|-------------|
|
||
| `lora_params` | LORA_PARAMS | Batch parameters for processing |
|
||
| `lora_list` | STRING | List of discovered LoRAs with epoch info |
|
||
| `lora_count` | INT | Number of LoRAs found |
|
||
|
||
## Usage Examples
|
||
|
||
### Test All Epochs of a LoRA
|
||
```
|
||
LoRAFolderBatch → FluxSamplerParams → KSampler
|
||
folder_path: "my_lora_training"
|
||
strength: "1.0"
|
||
batch_mode: sequential
|
||
```
|
||
|
||
### Strength Testing for Each LoRA
|
||
```
|
||
LoRAFolderBatch → KSampler → Image Grid
|
||
folder_path: "test_loras"
|
||
strength: "0.5, 0.75, 1.0"
|
||
batch_mode: combinatorial
|
||
```
|
||
|
||
### Filter Specific Epochs
|
||
```
|
||
LoRAFolderBatch → Processing Pipeline
|
||
folder_path: "training_results"
|
||
include_pattern: "epoch_0[2-5]0"
|
||
strength: "0.8...1.2+0.1"
|
||
```
|
||
|
||
### Auto-Batch Large Collections
|
||
```
|
||
LoRAFolderBatch → FluxSamplerParams → KSampler
|
||
folder_path: "massive_lora_collection" # 100+ files
|
||
strength: "1.0"
|
||
auto_batch: enabled
|
||
batch_size: 25
|
||
batch_index: 0 # Change to 1, 2, 3... for subsequent batches
|
||
```
|
||
|
||
## Batch Modes Explained
|
||
|
||
### Sequential Mode
|
||
Each LoRA gets one strength value in order:
|
||
- LoRA1 → strength[0]
|
||
- LoRA2 → strength[1]
|
||
- LoRA3 → strength[0] (cycles if fewer strengths than LoRAs)
|
||
|
||
### Combinatorial Mode
|
||
Each LoRA is tested with ALL strength values:
|
||
- LoRA1 → [0.5, 0.75, 1.0]
|
||
- LoRA2 → [0.5, 0.75, 1.0]
|
||
- LoRA3 → [0.5, 0.75, 1.0]
|
||
|
||
## Auto-Batching for Large Collections
|
||
|
||
### Overview
|
||
When testing large numbers of LoRAs (e.g., 75+ files), ComfyUI can experience UI disconnections or memory issues. Auto-batching solves this by automatically splitting your LoRA collection into smaller, manageable chunks.
|
||
|
||
### How It Works
|
||
1. **Enable Auto-Batching**: Set `auto_batch` to "enabled"
|
||
2. **Set Batch Size**: Configure `batch_size` (default: 25, range: 5-100)
|
||
3. **Select Batch**: Use `batch_index` to choose which batch to process
|
||
|
||
### Example: Testing 75 LoRAs
|
||
With 75 LoRAs and batch_size=25, the system creates 3 batches:
|
||
- **Batch 0**: LoRAs 1-25 (set batch_index=0)
|
||
- **Batch 1**: LoRAs 26-50 (set batch_index=1)
|
||
- **Batch 2**: LoRAs 51-75 (set batch_index=2)
|
||
|
||
Run your workflow 3 times, changing only the `batch_index` each time.
|
||
|
||
### Visual Feedback
|
||
When auto-batching is enabled, the `lora_list` output includes batch information:
|
||
```
|
||
=== Batch 1/3 (LoRAs 1-25) ===
|
||
|
||
style-epoch-001
|
||
style-epoch-002
|
||
...
|
||
```
|
||
|
||
### Best Practices for Auto-Batching
|
||
1. **Start with Default**: Use batch_size=25 for most scenarios
|
||
2. **Adjust for Memory**: Decrease batch_size if you still experience issues
|
||
3. **Combinatorial Mode**: Be extra careful - 25 LoRAs × 3 strengths = 75 combinations
|
||
4. **Save Between Batches**: Save your results after each batch to avoid data loss
|
||
5. **Use Plot Parameters**: The batch info appears in plot visualizations for easy tracking
|
||
|
||
## File Naming Patterns
|
||
|
||
### Supported Epoch Formats
|
||
- `model-v1-000004.safetensors` → Epoch 4
|
||
- `style_epoch_020.safetensors` → Epoch 20
|
||
- `lora-000100.safetensors` → Epoch 100
|
||
|
||
### Natural Sorting Examples
|
||
Files are sorted intelligently:
|
||
1. `model-000004.safetensors`
|
||
2. `model-000020.safetensors`
|
||
3. `model-000100.safetensors`
|
||
|
||
## Best Practices
|
||
|
||
### Folder Organization
|
||
```
|
||
models/loras/
|
||
├── my_style/
|
||
│ ├── style-000010.safetensors
|
||
│ ├── style-000020.safetensors
|
||
│ └── style-000030.safetensors
|
||
└── character/
|
||
├── char-v2-000005.safetensors
|
||
└── char-v2-000010.safetensors
|
||
```
|
||
|
||
### Testing Workflows
|
||
1. **Initial Testing**: Use single strength (1.0) to evaluate all epochs
|
||
2. **Fine-tuning**: Use combinatorial mode with multiple strengths
|
||
3. **Final Selection**: Filter to specific epochs and test strength range
|
||
|
||
### Pattern Filtering Examples
|
||
```python
|
||
# Include only specific versions
|
||
include_pattern: "v2|v3"
|
||
|
||
# Exclude test/backup files
|
||
exclude_pattern: "test|backup|old"
|
||
|
||
# Include specific epoch range
|
||
include_pattern: "epoch_0[3-7]0"
|
||
```
|
||
|
||
## Integration with Other Nodes
|
||
|
||
### Common Pipelines
|
||
1. **LoRA Comparison Grid**:
|
||
```
|
||
LoRAFolderBatch → KSampler → Image Grid → Save
|
||
```
|
||
|
||
2. **Strength Testing**:
|
||
```
|
||
LoRAFolderBatch → PlotParameters → Graph Display
|
||
```
|
||
|
||
3. **Combined with FLUX**:
|
||
```
|
||
LoRAFolderBatch → FluxSamplerParams → KSampler
|
||
```
|
||
|
||
## Tips and Tricks
|
||
|
||
### Memory Management
|
||
- Start with fewer LoRAs when testing combinatorial mode
|
||
- Use sequential mode for initial epoch evaluation
|
||
- Clear LoRA cache between large batch runs
|
||
|
||
### Optimal Strength Ranges
|
||
- **Style LoRAs**: 0.5-1.0
|
||
- **Character LoRAs**: 0.7-1.2
|
||
- **Detail LoRAs**: 0.3-0.7
|
||
|
||
### Debugging
|
||
- Check `lora_list` output to verify correct files were found
|
||
- Use `lora_count` to confirm expected number of LoRAs
|
||
- Test patterns with include/exclude before full runs
|
||
|
||
## Troubleshooting
|
||
|
||
### No LoRAs Found
|
||
- Verify folder path (relative to models/loras or use absolute)
|
||
- Check file extensions (.safetensors)
|
||
- Test without filters first
|
||
|
||
### Pattern Not Working
|
||
- Patterns use Python regex syntax
|
||
- Test patterns in regex tester first
|
||
- Case-sensitive by default
|
||
|
||
### Memory Issues
|
||
- Reduce batch_count in combinatorial mode
|
||
- Process LoRAs in smaller groups
|
||
- Use sequential mode for large sets
|
||
|
||
## Advanced Examples
|
||
|
||
### Multi-Version Testing
|
||
```python
|
||
# Test different versions at different strengths
|
||
folder_path: "character_loras"
|
||
include_pattern: "v[1-3]"
|
||
strength: "0.6, 0.8, 1.0"
|
||
batch_mode: combinatorial
|
||
```
|
||
|
||
### Epoch Progression Analysis
|
||
```python
|
||
# Test every 10th epoch
|
||
folder_path: "training_output"
|
||
include_pattern: "0[0-9]0\\.safetensors$"
|
||
strength: "1.0"
|
||
batch_mode: sequential
|
||
```
|
||
|
||
## Version History
|
||
- **1.0.0**: Initial adaptation from comfyui-essentials-nodes
|
||
- **1.0.1**: Added natural sorting for epochs
|
||
- **1.0.2**: Enhanced pattern filtering
|
||
- **1.0.3**: Improved batch modes and strength parsing
|
||
- **1.0.4**: Added auto-batching for large LoRA collections
|
||
|
||
## Credits
|
||
Original implementation by cubiq in [comfyui-essentials-nodes](https://github.com/cubiq/ComfyUI_essentials). Adapted and maintained by the ComfyAssets team. |