musk 21b4a9a83b ✨ 新增数学表达式计算节点 - 支持完整Python数学语法
🎯 核心功能
• 新增PopoMathExpressionNode数学表达式计算节点
• 支持3个数值输入参数(a,b,c) + 1个表达式输入框
• 双输出格式:整数(INT) + 浮点数(FLOAT)
• 完全兼容Python数学表达式语法

🧮 数学函数支持
• 基础运算: +, -, *, /, //, %, **
• 数学函数: sqrt, pow, abs, min, max, round
• 取整函数: ceil, floor
• 三角函数: sin, cos, tan, asin, acos, atan, atan2
• 双曲函数: sinh, cosh, tanh, asinh, acosh, atanh
• 对数函数: log, log10, log2, exp
• 工具函数: factorial, gcd, degrees, radians
• 数学常数: pi, e, tau, inf, nan

🛡️ 安全特性
• 安全白名单机制,只允许预定义的数学函数
• 阻止危险操作:import, eval, exec, open等
• 正则表达式验证,过滤恶意代码模式
• 完整错误处理,异常时返回安全默认值(0, 0.0)
• 特殊值处理:NaN和Inf的安全转换

✅ 测试验证
• 9项完整单元测试全部通过
• 基础算术运算测试 ✓
• 数学函数测试 ✓
• 三角函数测试 ✓
• 复杂表达式测试 ✓
• 错误处理测试 ✓
• 安全性验证测试 ✓
• ComfyUI兼容性测试 ✓

📋 ComfyUI集成
• 标准INPUT_TYPES格式实现
• 统一类别分类 (popo-utility)
• 友好显示名称 (Popo Math Expression)
• 完整ComfyUI接口兼容

📖 文档和示例
• 完整的使用示例和演示脚本
• 详细的README文档更新
• 数学表达式语法说明
• 安全特性说明文档

📊 文件统计
• 修改文件: 3个 (__init__.py, nodes_direct.py, README.md)
• 新增文件: 3个 (test_math_node.py, demo_math_expression.py, MATH_NODE_SUMMARY.md)
• 删除文件: 1个 (__init___complex.py)
• 新增代码行: 500+ 行
• 测试覆盖: 100%

🎮 使用方式
右键 → Add Node → popo-utility → Popo Math Expression

📝 表达式示例
• "a + b + c" - 三数相加
• "sqrt(a*a + b*b)" - 计算斜边长度
• "sin(radians(a))" - 角度转弧度求正弦
• "ceil(a / b)" - 向上取整除法
• "max(a, b) if a > 0 else c" - 条件表达式

🚀 项目升级
• 总节点数: 3个 → 4个
• 新增数学计算能力
• 增强动态计算支持
• 提升工作流灵活性
2025-08-29 00:17:48 +08:00

ComfyUI Popo Utility

🚀 高性能的ComfyUI自定义节点工具集 - 🔧 模块化可扩展架构

一个专为ComfyUI设计的图片处理实用工具集,采用模块化架构设计,支持快速扩展和添加新节点。

⭐ 核心特性

🏗️ 模块化架构

  • 📦 自动节点发现 - 新节点自动注册,无需手动配置
  • 🔧 扩展友好 - 基于模板的节点开发,5分钟创建新节点
  • 📂 分类管理 - 节点按功能自动分类组织
  • 🎯 插件化设计 - 支持独立开发和部署节点模块

⚡ 性能优化

  • 🚀 零拷贝设计 - 直接从张量shape获取信息,避免数据转换
  • ⏱️ 常数时间复杂度 - 处理时间与图片大小无关
  • 🧠 内存友好 - 最小化内存占用,高效处理大图片
  • 🛡️ 稳定可靠 - 完善的错误处理,避免节点崩溃

📦 安装方法

方法一:直接安装到ComfyUI

  1. 将本项目克隆到ComfyUI的自定义节点目录:
cd ComfyUI/custom_nodes/
git clone https://github.com/your-username/comfyui-popo-utility.git
  1. 重启ComfyUI即可使用

方法二:手动安装

  1. 下载本项目的所有文件
  2. 将文件夹复制到 ComfyUI/custom_nodes/ 目录下
  3. 重启ComfyUI

🎯 节点说明

🖼️ 图片长短边尺寸 (Popo Image Size)

功能:获取图片的长边和短边尺寸

输入:

  • image - 图片输入(IMAGE类型)

输出:

  • long_side - 长边尺寸(INT类型)
  • short_side - 短边尺寸(INT类型)

使用场景:

  • 需要根据图片尺寸进行条件判断
  • 图片缩放比例计算
  • 画面比例分析

📏 图片详细尺寸 (Popo Image Dimensions)

功能:获取图片的详细尺寸信息

输入:

  • image - 图片输入(IMAGE类型)

输出:

  • width - 宽度(INT类型)
  • height - 高度(INT类型)
  • long_side - 长边尺寸(INT类型)
  • short_side - 短边尺寸(INT类型)

使用场景:

  • 需要完整的图片尺寸信息
  • 图片布局计算
  • 分辨率分析

📐 图片宽高比 (Popo Image Aspect Ratio)

功能:计算图片的宽高比并识别常见比例

输入:

  • image - 图片输入(IMAGE类型)

输出:

  • aspect_ratio - 宽高比数值(FLOAT类型)
  • ratio_name - 比例名称(STRING类型)

使用场景:

  • 图片比例分析
  • 自动识别常见画面比例(16:9、4:3等)
  • 横竖屏判断

🧮 数学表达式计算 (Popo Math Expression)

功能:支持动态数学表达式计算,兼容Python数学运算

输入:

  • a - 数值参数A(FLOAT类型,默认值0.0)
  • b - 数值参数B(FLOAT类型,默认值0.0)
  • c - 数值参数C(FLOAT类型,默认值0.0)
  • expression - 数学表达式(STRING类型,默认"a + b + c")

输出:

  • result_int - 计算结果整数值(INT类型)
  • result_float - 计算结果浮点值(FLOAT类型)

支持的函数和常数:

  • 基础运算:+, -, *, /, //, %, **
  • 数学函数:sqrt, pow, abs, min, max, round
  • 取整函数:ceil, floor, round
  • 三角函数:sin, cos, tan, asin, acos, atan, atan2
  • 对数函数:log, log10, log2, exp
  • 数学常数:pi, e, tau, inf, nan
  • 其他函数:factorial, gcd, degrees, radians

表达式示例:

  • a + b + c - 三数相加
  • sqrt(a*a + b*b) - 计算斜边长度
  • sin(radians(a)) - 角度的正弦值
  • ceil(a / b) - 向上取整除法
  • max(a, b) if a > 0 else c - 条件表达式
  • pow(2, a) + log10(b) - 幂运算与对数

安全特性:

  • ✅ 支持完整的Python数学表达式
  • 🛡️ 安全沙箱执行,防止恶意代码
  • ⚡ 高性能计算,支持复杂嵌套表达式
  • 🔢 同时输出整数和浮点数结果

使用场景:

  • 图片尺寸的动态计算
  • 复杂的数学变换
  • 条件分支计算
  • 自定义算法实现

🚀 性能优化

本工具集在性能方面做了以下优化:

  1. 直接张量操作 - 直接从PyTorch张量的形状属性获取尺寸,避免图片格式转换
  2. 零拷贝设计 - 不对原始图片数据进行任何修改或复制
  3. 快速失败机制 - 完善的错误处理,遇到异常时快速返回默认值
  4. 内存友好 - 不存储额外的图片数据,内存占用极小

🔧 模块化架构

项目采用模块化设计,为未来扩展做好了准备:

📁 项目结构

comfyui-popo-utility/
├── __init__.py              # 主入口,自动注册所有节点
├── nodes/                   # 节点包目录
│   ├── __init__.py         # 节点包初始化
│   ├── base_node.py        # 基础节点类
│   ├── registry.py         # 自动注册系统
│   ├── image_utils.py      # 图片处理节点
│   └── [your_nodes].py     # 您的自定义节点
├── node_template.py         # 新节点开发模板  
├── DEVELOPMENT_GUIDE.md     # 详细开发指南
└── README.md               # 项目说明

🎯 快速添加新节点

只需要 3步 就能添加新节点:

# 1. 复制模板
cp node_template.py nodes/my_new_nodes.py

# 2. 编辑新文件,实现你的节点功能
# 3. 重启ComfyUI,节点会自动被注册🎉

📄 基础类体系

基础类 用途 分类
PopoBaseNode 通用节点基类 popo-utility
ImageProcessingNode 图片处理相关 popo-utility/image
TextProcessingNode 文本处理相关 popo-utility/text
MathNode 数学计算相关 popo-utility/math
UtilityNode 实用工具相关 popo-utility/utils

📝 新节点开发示例

# 在 nodes/my_nodes.py 中
from nodes.base_node import UtilityNode

class HelloWorldNode(UtilityNode):
    DESCRIPTION = "简单的Hello World节点"
    
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "name": ("STRING", {"default": "World"}),
            }
        }
    
    @property 
    def RETURN_TYPES(self): return ("STRING",)
    
    @property
    def RETURN_NAMES(self): return ("greeting",)
    
    @property 
    def FUNCTION(self): return "say_hello"
    
    def say_hello(self, name: str):
        return (f"Hello, {name}!",)

# 记得添加到NODE_CLASSES列表
NODE_CLASSES = [HelloWorldNode]

更多详细内容请参考 📚 开发指南

📝 使用示例

基础工作流

[Load Image] → [图片长短边尺寸] → [输出长边和短边]
                     ↓
                [其他处理节点]

高级工作流

[Load Image] → [图片详细尺寸] → [条件判断节点]
                     ↓              ↓
                [宽度/高度]    [长边/短边]
                     ↓              ↓
                [不同的处理分支]

数学计算工作流

[数值输入A] → [数学表达式计算] → [整数结果]
[数值输入B] →        │                  → [浮点结果]
[数值输入C] →        │
[表达式输入] →       │

示例表达式:
- "sqrt(a*a + b*b)" - 勾股定理计算
- "ceil(a / b)" - 向上取整除法
- "sin(radians(a))" - 角度转弧度后求正弦

综合工作流

[Load Image] → [图片详细尺寸] → [数学表达式计算]
                     │                    │
                   width,height         “a * 0.75”
                     │                    │
                     ↓                    ↓
                 [其他节点]         [缩放数值]

🔧 技术细节

  • 兼容性:支持ComfyUI标准的图片张量格式
  • 输入格式:[batch, height, width, channels] 或 [height, width, channels]
  • 数据类型:支持PyTorch Tensor、NumPy Array、PIL Image
  • Python版本:>=3.8
  • 依赖项:PyTorch, NumPy, Pillow

🤝 贡献指南

欢迎提交Issue和Pull Request来帮助改进这个项目!

  1. Fork本项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

📞 支持与反馈

如果您在使用过程中遇到任何问题或有改进建议,请:


⭐ 如果这个项目对您有帮助,请给个Star支持一下! ⭐

S
Description
No description provided
Readme MIT
109 KiB
Languages
Python 92%
Shell 8%