LoRAInfoExtractor JSON Output Format
Overview
The LoRAInfoExtractor node now outputs structured JSON data instead of concatenated strings, providing better data handling and parsing capabilities for downstream processing.
Implementation Details
Return Types and Names
- RETURN_TYPES:
("STRING", "STRING", "WANVIDLORA") - RETURN_NAMES:
("lora_json", "lora_info", "lora_passthrough")
Output Structure
The first output (lora_json) contains a JSON string with the following structure:
{
"loras": [
{
"index": 0,
"name": "LoRA Name",
"info": "Detailed info string",
"path": "/path/to/lora.safetensors",
"strength": 1.0,
"has_civitai_data": true
}
],
"count": 1,
"combined_display": "LoRA Name + Another LoRA"
}
JSON Fields Description
Root Level Fields
loras: Array of LoRA objects containing detailed metadata for each processed LoRAcount: Integer representing the total number of valid LoRAs processedcombined_display: String with " + " separated LoRA names for easy display (maintains backward compatibility)
LoRA Object Fields
index: Zero-based index of the LoRA in the processing ordername: Clean LoRA name (from CivitAI or extracted from filename)info: Human-readable information string including source (CivitAI/Local) and strengthpath: Full file path to the LoRA filestrength: Numeric strength value from the WANVIDLORA configurationhas_civitai_data: Boolean indicating whether CivitAI metadata was successfully retrieved
Example Outputs
Multiple LoRAs with Mixed Sources
{
"loras": [
{
"index": 0,
"name": "Realistic Vision",
"info": "CivitAI: Realistic Vision (v5.1) by SomeCreator",
"path": "/ComfyUI/models/loras/realistic_vision.safetensors",
"strength": 1.0,
"has_civitai_data": true
},
{
"index": 1,
"name": "CustomStyle",
"info": "Local: CustomStyle (strength: 0.8)",
"path": "/ComfyUI/models/loras/custom_style.safetensors",
"strength": 0.8,
"has_civitai_data": false
}
],
"count": 2,
"combined_display": "Realistic Vision + CustomStyle"
}
No Valid LoRAs (Error Case)
{
"loras": [],
"count": 0,
"combined_display": "No Valid LoRAs",
"error": "No valid LoRAs found"
}
Exception Handling
{
"loras": [],
"count": 0,
"combined_display": "Error Extracting LoRA",
"error": "Specific error message"
}
Processing Logic
Multiple LoRA Processing
- Input Validation: Check if input is WANVIDLORA list structure
- LoRA Filtering: Skip entries with
path: 'none'or empty paths - CivitAI Lookup: Query CivitAI API for each valid LoRA (if enabled)
- Name Extraction: Use CivitAI name or extract from filename
- JSON Construction: Build structured JSON with all metadata
- Return: JSON string, human-readable info, and original passthrough
Single LoRA Processing (Compatibility)
- Maintains backward compatibility with non-list inputs
- Returns same JSON structure with single LoRA in array
- Handles both CivitAI and local extraction methods
Usage Examples
Parsing JSON Output in Python
import json
# From ComfyUI workflow
lora_json, lora_info, lora_passthrough = lora_extractor_node_output
# Parse JSON
lora_data = json.loads(lora_json)
# Access data
total_loras = lora_data["count"]
display_name = lora_data["combined_display"]
# Iterate through LoRAs
for lora in lora_data["loras"]:
print(f"LoRA: {lora['name']} (strength: {lora['strength']})")
if lora["has_civitai_data"]:
print(" Has CivitAI metadata")
else:
print(" Local metadata only")
JavaScript Processing
// Parse JSON output
const loraData = JSON.parse(loraJsonOutput);
// Access combined display for UI
document.getElementById('lora-display').textContent = loraData.combined_display;
// Process individual LoRAs
loraData.loras.forEach((lora, index) => {
console.log(`LoRA ${index + 1}: ${lora.name} at ${lora.strength} strength`);
});
Benefits of JSON Format
Structured Data Access
- Programmatic Processing: Easy to parse and process in any language
- Type Safety: Clear data types for each field
- Extensibility: Easy to add new fields without breaking existing code
Backward Compatibility
- Combined Display:
combined_displayfield maintains the " + " separated format - Info String: Second output still provides human-readable information
- Passthrough: Third output preserves original WANVIDLORA data
Enhanced Metadata
- Strength Values: Individual strength values for each LoRA
- Source Information: Clear indication of CivitAI vs local metadata
- File Paths: Full paths available for further processing
- Processing Status: Error handling and success indicators
Migration Guide
From String Format
Old Usage (string concatenation):
# Old format returned: "LoRA1 + LoRA2"
lora_names = old_output[0]
names_list = lora_names.split(" + ")
New Usage (JSON parsing):
# New format returns structured JSON
lora_json = json.loads(new_output[0])
names_list = [lora["name"] for lora in lora_json["loras"]]
combined_display = lora_json["combined_display"] # Same as old format
Accessing Additional Data
With JSON format, you now have access to:
- Individual LoRA strength values
- Full file paths
- CivitAI metadata indicators
- Processing error information
- Structured arrays for iteration
Implementation Status
- ✅ JSON Structure: Complete with all metadata fields
- ✅ Multiple LoRA Support: Handles WANVIDLORA list structure
- ✅ Single LoRA Compatibility: Backward compatibility maintained
- ✅ Error Handling: Proper JSON error responses
- ✅ CivitAI Integration: Preserves CivitAI metadata detection
- ✅ Testing: Validated with mock data and real WANVIDLORA structures
Technical Notes
JSON Library
Uses Python's built-in json module for serialization:
- Consistency: Standard JSON formatting with 2-space indentation
- Reliability: Built-in error handling and validation
- Performance: Efficient serialization and parsing
Memory Considerations
- JSON strings are larger than simple concatenated strings
- Rich metadata provides more value than storage overhead
- Structured data enables better caching and processing optimization
Future Enhancements
Potential additions to JSON structure:
- Model Hash: File hash for verification
- File Size: LoRA file size information
- Last Modified: File timestamp data
- Tags: CivitAI tag information
- Ratings: CivitAI popularity/rating data