diff --git a/py/metadata_collector/metadata_processor.py b/py/metadata_collector/metadata_processor.py index 4721f889..bbd499a1 100644 --- a/py/metadata_collector/metadata_processor.py +++ b/py/metadata_collector/metadata_processor.py @@ -139,12 +139,16 @@ class MetadataProcessor: else: break # Can't follow further - # Extract LoRAs + # Extract LoRAs using the standardized format lora_parts = [] for node_id, lora_info in metadata.get("loras", {}).items(): - name = lora_info.get("name", "unknown") - strength = lora_info.get("strength_model", 1.0) - lora_parts.append(f"") + # Access the lora_list from the standardized format + lora_list = lora_info.get("lora_list", []) + for lora in lora_list: + name = lora.get("name", "unknown") + strength = lora.get("strength", 1.0) + lora_parts.append(f"") + params["loras"] = " ".join(lora_parts) # Set default clip_skip value diff --git a/py/metadata_collector/node_extractors.py b/py/metadata_collector/node_extractors.py index 78d0a81b..a1677b31 100644 --- a/py/metadata_collector/node_extractors.py +++ b/py/metadata_collector/node_extractors.py @@ -1,3 +1,6 @@ +import os + + class NodeMetadataExtractor: """Base class for node-specific metadata extraction""" @@ -87,13 +90,16 @@ class LoraLoaderExtractor(NodeMetadataExtractor): return lora_name = inputs.get("lora_name") - strength_model = inputs.get("strength_model", 1.0) - strength_clip = inputs.get("strength_clip", 1.0) + strength_model = round(float(inputs.get("strength_model", 1.0)), 2) + # Use the standardized format with lora_list metadata["loras"][node_id] = { - "name": lora_name, - "strength_model": strength_model, - "strength_clip": strength_clip, + "lora_list": [ + { + "name": lora_name, + "strength": strength_model + } + ], "node_id": node_id } @@ -120,34 +126,48 @@ class LoraLoaderManagerExtractor(NodeMetadataExtractor): def extract(node_id, inputs, outputs, metadata): if not inputs: return - - # Handle LoraManager nodes which might store loras differently - if "loras" in inputs: - loras = inputs.get("loras", []) - if isinstance(loras, list): - active_loras = [] - # Filter for active loras (may be a list of dicts with 'active' flag) - for lora in loras: - if isinstance(lora, dict) and lora.get("active", True) and not lora.get("_isDummy", False): - active_loras.append({ - "name": lora.get("name", ""), - "strength": lora.get("strength", 1.0) - }) - - if active_loras: - metadata["loras"][node_id] = { - "lora_list": active_loras, - "node_id": node_id - } - # If there's a direct text field with lora definitions - if "text" in inputs: - text = inputs.get("text", "") - if text and "