Files
ComfyUI-Lora-Manager/py/workflow_params
Will Miao 4bff17aa1a Update prompt configuration and enhance Lora management functionality
- Expanded the prompt.json file with new configurations for KSampler, CheckpointLoaderSimple, and various CLIPTextEncode nodes.
- Introduced additional Lora management features, including a new Lora Stacker and improved trigger word handling.
- Enhanced the loras_widget.js to log the generated prompt when saving recipes directly, aiding in debugging and user feedback.
- Improved overall structure and organization of the prompt configurations for better maintainability.
2025-03-21 16:35:52 +08:00
..

ComfyUI Workflow Parser

A module for parsing ComfyUI workflow JSON and extracting generation parameters.

Features

  • Parse ComfyUI workflow JSON files to extract generation parameters
  • Extract lora information from workflows
  • Support for node traversal and parameter resolution
  • Extensible architecture for supporting custom node types
  • Dynamic loading of node processor extensions

Usage

Basic Usage

from workflow_params import parse_workflow

# Parse from a file
with open('my_workflow.json', 'r') as f:
    workflow_json = f.read()
    
result = parse_workflow(workflow_json)
print(result)

Using the WorkflowParser directly

from workflow_params import WorkflowParser

parser = WorkflowParser()
result = parser.parse_workflow(workflow_json)

Loading Extensions

Extensions are loaded automatically by default, but you can also control this behavior:

from workflow_params import WorkflowParser

# Don't load extensions
parser = WorkflowParser(load_extensions=False)

# Load extensions from a custom directory
parser = WorkflowParser(extensions_dir='/path/to/extensions')

Creating Custom Node Processors

To support a custom node type, create a processor class:

from workflow_params import NodeProcessor, register_processor

@register_processor
class CustomNodeProcessor(NodeProcessor):
    """Processor for CustomNode nodes"""
    
    NODE_CLASS_TYPE = "CustomNode"
    REQUIRED_FIELDS = {"param1", "param2"}
    
    def process(self, workflow_parser):
        result = {}
        
        # Extract direct values
        if "param1" in self.inputs:
            result["value1"] = self.inputs["param1"]
            
        # Resolve referenced inputs
        if "param2" in self.inputs:
            result["value2"] = self.resolve_input("param2", workflow_parser)
            
        return result

Command Line Interface

A command-line interface is available for testing:

python -m workflow_params.cli input_workflow.json -o output.json

Extension System

The module includes an extension system for dynamically loading node processors:

from workflow_params import get_extension_manager

# Get the extension manager
manager = get_extension_manager()

# Load all extensions
manager.load_all_extensions()

# Load a specific extension
manager.load_extension('path/to/extension.py')

Extensions should be placed in the workflow_params/extensions directory by default, or a custom directory can be specified.

Supported Node Types

  • KSampler
  • CLIPTextEncode
  • EmptyLatentImage
  • JoinStrings
  • StringConstantMultiline
  • CLIPSetLastLayer
  • TriggerWord Toggle (LoraManager)
  • Lora Loader (LoraManager)
  • Lora Stacker (LoraManager)