5.6 KiB
5.6 KiB
ComfyUI Universal Toolkit 重构计划
概述
本项目将按照 ComfyUI-LayerStyle 项目的模块化组织方式,将大型节点文件拆分成多个独立的功能模块,提高代码的可维护性和模块化程度。
重构目标
- 模块化组织:将大型节点文件按功能拆分成独立模块
- 代码复用:创建共用工具函数,避免重复代码
- 易于维护:每个节点独立文件,便于修改和调试
- 清晰结构:按功能分类组织代码结构
目录结构
nodes/
├── common_utils.py # 共用工具函数
├── image/ # 图像处理节点
│ ├── __init__.py
│ ├── empty_unit_generator.py
│ ├── image_ratio_detector.py
│ ├── depth_map_blur.py
│ ├── image_concatenate.py
│ ├── image_concatenate_multi.py
│ ├── image_pad_for_outpaint.py
│ ├── image_and_mask_preview.py
│ ├── imitation_hue_node.py
│ ├── image_scale_by_aspect_ratio.py
│ ├── image_mask_scale_as.py
│ ├── image_scale_restore.py
│ ├── image_remove_alpha.py
│ ├── image_combine_alpha.py
│ ├── check_mask.py
│ ├── purge_vram.py
│ ├── crop_by_mask.py
│ └── restore_crop_box.py
├── tools/ # 工具类节点
│ ├── __init__.py
│ ├── show_int.py
│ ├── show_float.py
│ ├── show_list.py
│ ├── show_text.py
│ ├── preview_mask.py
│ └── fill_masked_area.py
├── mask/ # 掩码处理节点
│ ├── __init__.py
│ ├── mask_and.py
│ ├── mask_sub.py
│ └── mask_add.py
├── audio/ # 音频处理节点
│ ├── __init__.py
│ ├── load_audio_plus_from_path.py
│ └── audio_crop_process.py
├── image_nodes_utk.py # 原有文件(逐步迁移后删除)
├── tool_nodes_utk.py # 原有文件(逐步迁移后删除)
├── mask_nodes_utk.py # 原有文件(逐步迁移后删除)
└── audio_nodes_utk.py # 原有文件(逐步迁移后删除)
重构步骤
第一阶段:基础架构 ✅
- 创建目录结构
- 创建共用工具函数
common_utils.py - 创建模块初始化文件
第二阶段:图像节点迁移 🔄
- EmptyUnitGenerator_UTK
- ImageRatioDetector_UTK
- DepthMapBlur_UTK
- ImageConcatenate_UTK
- ImageConcatenateMulti_UTK
- ImagePadForOutpaintMasked_UTK
- ImageAndMaskPreview_UTK
- ImitationHueNode_UTK
- ImageScaleByAspectRatio_UTK
- ImageMaskScaleAs_UTK
- ImageScaleRestore_UTK
- ImageRemoveAlpha_UTK
- ImageCombineAlpha_UTK
- CheckMask_UTK
- PurgeVRAM_UTK
- CropByMask_UTK
- RestoreCropBox_UTK
第三阶段:工具节点迁移
- ShowInt_UTK
- ShowFloat_UTK
- ShowList_UTK
- ShowText_UTK
- PreviewMask_UTK
- FillMaskedArea_UTK
第四阶段:掩码节点迁移
- MaskAnd_UTK
- MaskSub_UTK
- MaskAdd_UTK
第五阶段:音频节点迁移
- LoadAudioPlusFromPath_UTK
- AudioCropProcessUTK
第六阶段:清理和优化
- 删除原有大型文件
- 更新文档
- 测试所有节点功能
- 优化导入结构
节点文件模板
每个节点文件应遵循以下模板:
"""
节点名称
~~~~~~~~
节点功能描述
:copyright: (c) 2024 by May
:license: MIT, see LICENSE for more details.
"""
import torch
# 其他必要的导入
from ..common_utils import log, tensor2pil, pil2tensor # 使用相对导入
class NodeName_UTK:
CATEGORY = "UniversalToolkit"
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
# 输入参数定义
},
"optional": {
# 可选参数定义
}
}
RETURN_TYPES = ("TYPE1", "TYPE2")
RETURN_NAMES = ("name1", "name2")
FUNCTION = "function_name"
def function_name(self, param1, param2, ...):
# 节点实现逻辑
return (output1, output2)
# Node mappings
NODE_CLASS_MAPPINGS = {
"NodeName_UTK": NodeName_UTK,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"NodeName_UTK": "Node Display Name",
}
导入结构
主 __init__.py 文件应使用以下导入结构:
# 导入新的模块化节点
from .nodes.image.node_file import NODE_CLASS_MAPPINGS as NODE_MAPPINGS
from .nodes.image.node_file import NODE_DISPLAY_NAME_MAPPINGS as NODE_DISPLAY_MAPPINGS
# 合并所有映射
NODE_CLASS_MAPPINGS = {}
NODE_CLASS_MAPPINGS.update(NODE_MAPPINGS)
# ... 其他映射
NODE_DISPLAY_NAME_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS.update(NODE_DISPLAY_MAPPINGS)
# ... 其他显示名称映射
优势
- 模块化:每个节点独立文件,便于维护
- 可扩展:新增节点只需创建新文件
- 代码复用:共用函数避免重复代码
- 清晰结构:按功能分类,易于理解
- 冲突减少:独立文件减少合并冲突
注意事项
- 相对导入:使用
from ..common_utils import进行相对导入 - 节点映射:每个文件都要包含
NODE_CLASS_MAPPINGS和NODE_DISPLAY_NAME_MAPPINGS - 文档注释:每个文件都要有清晰的文档字符串
- 功能测试:迁移后要测试节点功能是否正常
- 渐进迁移:逐步迁移,保持项目可用性
完成状态
- 基础架构搭建
- 共用工具函数创建
- 部分图像节点迁移
- 完整节点迁移
- 测试和优化
- 文档更新