mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-22 05:32:12 -03:00
ComfyUI Workflow Parser
本模块提供了一个灵活的解析系统,可以从ComfyUI工作流中提取生成参数和LoRA信息。
设计理念
工作流解析器基于以下设计原则:
- 模块化: 每种节点类型由独立的mapper处理
- 可扩展性: 通过扩展系统轻松添加新的节点类型支持
- 回溯: 通过工作流图的模型输入路径跟踪LoRA节点
- 灵活性: 适应不同的ComfyUI工作流结构
主要组件
1. NodeMapper
NodeMapper是所有节点映射器的基类,定义了如何从工作流中提取节点信息:
class NodeMapper:
def __init__(self, node_type: str, inputs_to_track: List[str]):
self.node_type = node_type
self.inputs_to_track = inputs_to_track
def process(self, node_id: str, node_data: Dict, workflow: Dict, parser) -> Any:
# 处理节点的通用逻辑
...
def transform(self, inputs: Dict) -> Any:
# 由子类覆盖以提供特定转换
return inputs
2. WorkflowParser
主要解析类,通过跟踪工作流图来提取参数:
parser = WorkflowParser()
result = parser.parse_workflow("workflow.json")
3. 扩展系统
允许通过添加新的自定义mapper来扩展支持的节点类型:
# 在py/workflow/ext/中添加自定义mapper模块
load_extensions() # 自动加载所有扩展
使用方法
基本用法
from workflow.parser import parse_workflow
# 解析工作流并保存结果
result = parse_workflow("workflow.json", "output.json")
自定义解析
from workflow.parser import WorkflowParser
from workflow.mappers import register_mapper, load_extensions
# 加载扩展
load_extensions()
# 创建解析器
parser = WorkflowParser(load_extensions_on_init=False) # 不自动加载扩展
# 解析工作流
result = parser.parse_workflow(workflow_data)
扩展系统
添加新的节点映射器
在py/workflow/ext/目录中创建Python文件,定义从NodeMapper继承的类:
# example_mapper.py
from ..mappers import NodeMapper
class MyCustomNodeMapper(NodeMapper):
def __init__(self):
super().__init__(
node_type="MyCustomNode", # 节点的class_type
inputs_to_track=["param1", "param2"] # 要提取的参数
)
def transform(self, inputs: Dict) -> Any:
# 处理提取的参数
return {
"custom_param": inputs.get("param1", "default")
}
扩展系统会自动加载和注册这些映射器。
LoraManager节点说明
LoraManager相关节点的处理方式:
- Lora Loader: 处理
loras数组,过滤出active=true的条目,和lora_stack输入 - Lora Stacker: 处理
loras数组和已有的lora_stack,构建叠加的LoRA - TriggerWord Toggle: 从
toggle_trigger_words中提取active=true的条目
输出格式
解析器生成的输出格式如下:
{
"gen_params": {
"prompt": "...",
"negative_prompt": "",
"steps": "25",
"sampler": "dpmpp_2m",
"scheduler": "beta",
"cfg": "1",
"seed": "48",
"guidance": 3.5,
"size": "896x1152",
"clip_skip": "2"
},
"loras": "<lora:name1:0.9> <lora:name2:0.8>"
}
高级用法
直接注册映射器
from workflow.mappers import register_mapper
from workflow.mappers import NodeMapper
# 创建自定义映射器
class CustomMapper(NodeMapper):
# ...实现映射器
# 注册映射器
register_mapper(CustomMapper())