203 lines
5.6 KiB
Markdown
203 lines
5.6 KiB
Markdown
# ComfyUI Universal Toolkit 重构计划
|
|
|
|
## 概述
|
|
|
|
本项目将按照 ComfyUI-LayerStyle 项目的模块化组织方式,将大型节点文件拆分成多个独立的功能模块,提高代码的可维护性和模块化程度。
|
|
|
|
## 重构目标
|
|
|
|
1. **模块化组织**:将大型节点文件按功能拆分成独立模块
|
|
2. **代码复用**:创建共用工具函数,避免重复代码
|
|
3. **易于维护**:每个节点独立文件,便于修改和调试
|
|
4. **清晰结构**:按功能分类组织代码结构
|
|
|
|
## 目录结构
|
|
|
|
```
|
|
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 # 原有文件(逐步迁移后删除)
|
|
```
|
|
|
|
## 重构步骤
|
|
|
|
### 第一阶段:基础架构 ✅
|
|
- [x] 创建目录结构
|
|
- [x] 创建共用工具函数 `common_utils.py`
|
|
- [x] 创建模块初始化文件
|
|
|
|
### 第二阶段:图像节点迁移 🔄
|
|
- [x] EmptyUnitGenerator_UTK
|
|
- [x] ImageRatioDetector_UTK
|
|
- [x] DepthMapBlur_UTK
|
|
- [x] 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
|
|
|
|
### 第六阶段:清理和优化
|
|
- [ ] 删除原有大型文件
|
|
- [ ] 更新文档
|
|
- [ ] 测试所有节点功能
|
|
- [ ] 优化导入结构
|
|
|
|
## 节点文件模板
|
|
|
|
每个节点文件应遵循以下模板:
|
|
|
|
```python
|
|
"""
|
|
节点名称
|
|
~~~~~~~~
|
|
|
|
节点功能描述
|
|
|
|
: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` 文件应使用以下导入结构:
|
|
|
|
```python
|
|
# 导入新的模块化节点
|
|
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)
|
|
# ... 其他显示名称映射
|
|
```
|
|
|
|
## 优势
|
|
|
|
1. **模块化**:每个节点独立文件,便于维护
|
|
2. **可扩展**:新增节点只需创建新文件
|
|
3. **代码复用**:共用函数避免重复代码
|
|
4. **清晰结构**:按功能分类,易于理解
|
|
5. **冲突减少**:独立文件减少合并冲突
|
|
|
|
## 注意事项
|
|
|
|
1. **相对导入**:使用 `from ..common_utils import` 进行相对导入
|
|
2. **节点映射**:每个文件都要包含 `NODE_CLASS_MAPPINGS` 和 `NODE_DISPLAY_NAME_MAPPINGS`
|
|
3. **文档注释**:每个文件都要有清晰的文档字符串
|
|
4. **功能测试**:迁移后要测试节点功能是否正常
|
|
5. **渐进迁移**:逐步迁移,保持项目可用性
|
|
|
|
## 完成状态
|
|
|
|
- [x] 基础架构搭建
|
|
- [x] 共用工具函数创建
|
|
- [x] 部分图像节点迁移
|
|
- [ ] 完整节点迁移
|
|
- [ ] 测试和优化
|
|
- [ ] 文档更新 |