siliconflow / BizyAir

BizyAir: Comfy Nodes that can run in any environment.
https://siliconflow.github.io/BizyAir/
MIT License
290 stars 18 forks source link

[BUG] BizyAir对ComfyUI节点ID处理的改进建议 #141

Open lcolok opened 1 month ago

lcolok commented 1 month ago

BizyAir对ComfyUI节点ID处理的改进建议

问题描述

在使用BizyAir插件与ComfyUI配合时,我们发现当涉及Group Node(节点组)时,当前的节点ID处理方式会导致错误。具体来说,ComfyUI在处理Group Node时会使用带冒号的节点ID格式(如"155:0"),而BizyAir目前似乎只支持整数类型的节点ID。

问题细节

  1. ComfyUI的节点ID不再仅限于整数类型。对于Group Node中的子节点,ID格式变为 "主ID:子ID"(例如 "155:0")。

  2. 当前BizyAir(特别是BizyAirNodeIO类)的实现假设节点ID始终为可转换为整数的字符串。

  3. 这导致在处理Group Node时出现类似以下的错误:

    ValueError: invalid literal for int() with base 10: '155:0'
  4. 这个问题影响了Group Node的复制和使用,可能会严重限制用户在复杂工作流中使用BizyAir插件的能力。

影响

在没有使用Group Node的情况: image 使用Group Node后,大大简化节点表示: image

  1. 用户无法正常使用或复制包含BizyAir节点的Group Node,这样就无法享受到复用节点组所带来的便利(可以极大简化工作流表示,请看上图)。
  2. 可能会阻碍用户创建复杂的、模块化的工作流。
  3. 降低了BizyAir插件与ComfyUI的兼容性和稳定性。

建议的解决方向

  1. 重新设计节点ID的处理方式,使其能够兼容带冒号的ID格式。

  2. 考虑创建一个专门的NodeID类来处理各种可能的ID格式,例如:

    class NodeID:
       def __init__(self, id_string):
           parts = id_string.split(':')
           self.base_id = parts[0]
           self.sub_id = ':'.join(parts[1:]) if len(parts) > 1 else None
  3. 更新BizyAirNodeIO和相关类中的节点ID验证和处理逻辑,以适应新的ID格式。

  4. 确保在整个BizyAir项目中统一使用新的节点ID处理方式,包括但不限于:

    • 节点初始化
    • 数据编码和解码
    • 节点间通信
    • 与ComfyUI核心的交互
  5. 添加向后兼容性支持,以确保现有的工作流和配置不会因此更改而破坏。

额外考虑

我们理解这可能是一个重大的改动,但我们相信这将大大提高BizyAir插件的可用性和与ComfyUI的兼容性,越早修改这个问题,后面遇到的问题可能会更少一些。当然,这个问题主要是跟ComfyUI的生态相关的,对于ComfyUI这个工具来说,Group Node也不是最主流,最多人使用的features,所以有待观望和讨论这个改进所带来的投入产出是否平衡。

复现步骤

  1. 在ComfyUI中创建一个包含BizyAir节点的工作流,如Examples中的 FLUX-schnell Text to Image(4 steps)工作流。
  2. 将该工作流转换为Group Node。
  3. 尝试复制或使用该Group Node。
  4. 观察到上述错误。

感谢您对这个问题的关注和处理。