Files
1hew 161b87e870 feat(release): 发布 v4.1.0,新增 Any to Any 与计数节点,增强 IO 与动态端口
- feat(conversion): 新增 Any to Any 通配透传节点
- feat(int): 新增 Int Mask/Audio/Text Count,并统一计数共享层
- feat(logic): Multi Switch Select 支持 a/all 全选
- feat(io): Load PS 预览默认开启并抑制 psd_tools INFO 噪音;Save Audio 默认 mp3,播放器兼容 Nodes 2.0
- fix(multi): Multi String Join 的 string_1 改为纯插槽,修复动态端口错位
- refactor(shared): 复用 parse_pad_color / pad_to_rgb
- docs: 同步中英文节点文档、README 列表与 v4.1.0 日志
- test: 新增/更新相关回归测试
2026-10-23 22:21:26 +08:00

5.1 KiB
Raw Permalink Blame History

Multi Switch Select - 多输出多路选择路由

节点功能: Multi Switch Select 使用 1-based 的 select 编号表达式在动态 input_1..input_N 中选择一路或多路,并将每个选中输入的值输出到同编号的 output_k。未被选中的其他输出保持为 None;select 写 a 或 all 则一次选中全部已连接输入。

规则一致性: select 与 Image Batch Index 的 index 共用同一套解析器(utils/_index_range.py),区间写法完全一致;区别是这里按 1-based 解析、对结果去重升序输出,并额外支持 a / all 全选快捷写法(Image Batch Index 没有该写法)。

输入

参数名称 入端选择 数据类型 默认值 取值范围 描述
select - STRING 1 1..10 的编号/区间表达式,或 a / all 与 Image Batch Index 的 index 同一套写法,例如 1,3、1-3、[1,3]、[1,3)、:步长、负数;a / all 表示全部已连接输入
input_1 可选 ANY (*) - - 第一路输入
input_2…input_10 可选(动态) ANY (*) - - 其他候选输入

输出

输出名称 数据类型 描述
output_1…output_10 ANY (*) 仅 select 中列出的编号对应的 output_k 携带 input_k 的值,其余输出为 None

支持写法(与 Image Batch Index 相同)

写法 结果
1、1,3、1 3、1.3、1,3 单值或列表;.、、、空白等未知分隔符会被跳过
1-3、1 - 3 闭区间:1、2、3
1-5:2 步长 2:1、3、5
[1,3]、【1,3】 闭区间:1、2、3
[1,3) 左闭右开:1、2
(1,3] 左开右闭:2、3
(1,3) 开区间:2
[1,5]:2 步长 2:1、3、5
[1:3] 1 和 3(: 只表示步长,不会展开 1、2、3)
-1 最后一个已连接的 input;例如连接了 input_1..input_4 时是 input_4
[8,12] 越界部分丢弃,只保留 8、9、10
a、all、ALL 全部已连接输入:选中 1..N(N 为已连接的最大编号),大小写不敏感
  • [1:3] 不是区间:: 是步长语法的一部分;区间请写 [1,3] 或 1-3。
  • 只有 - 是区间分隔符;1~3 会得到 1 和 3,不是一个区间。
  • 负数按“当前已连接的最大 input 编号”解析:连接了 1..4 时 -1 = input_4、-4 = input_1。
  • 越界编号会被跳过;空输入或全部无效时不选任何输出(所有 output 为 None)。
  • 结果会去重并按升序输出;重复和书写顺序不影响最终选中的编号。
  • a / all 必须作为独立标记出现(由逗号、分号或空白分隔);a1、all1 这类写法仍按数字 1 解析。
  • 出现 a / all 时直接全选,同一表达式里的数字不再生效(all,2 仍是全部)。
  • 全选会保留 1..N 中的空槽位:已连接但为空的槽位、以及 N 以内未连接的槽位,对应 output_k 仍为 None。

功能说明

  • 多路选择:select=1,2,4 时 input_1、input_2、input_4 三路都会被求值,input_3 不会被求值。
  • 全选:select=a(或 all)等价于选中 1..N,同样按惰性求值,只请求真正已连接的输入。
  • 对应路由:input_k 只会输出到 output_k,编号关系固定。
  • 惰性求值:check_lazy_status 一次返回所有“已连接且尚未解析”的选中输入;未选中的分支不会加入执行图。
  • 空值保护:被选中但未连接的输入不会被请求,对应输出为 None,不会触发 NodeInputError。
  • 共享规则:与 Image Batch Index 共用 utils/_index_range.py,因此两处区间语法不会各自漂移。
  • 兼容旧值:之前保存的数字 select(如 2)仍可直接使用,ComfyUI 会把整数转换为字符串再交给节点。

典型用法

  • 多分支放行:select=1,2,4,只让第 1/2/4 路执行,第 3 路被跳过。
  • 连续区间:select=1-3,让第 1/2/3 路执行。
  • 只要 1 和 3:select=1,3 或 select=[1:3] 或 select=[1,3]:2。
  • 取最后一个已连接分支:select=-1。
  • 全部放行:select=all(或 a),让所有已连接分支都参与执行。
  • 动态路由:结合其他逻辑节点生成 select 字符串,切换不同资源或参数组合。

注意与建议

  • 未选中的输出是 None(不是空张量);连到这些 output_j 的下游节点仍会执行并收到 None,通常会在下游报错。请只连接当前 select 覆盖的输出。
  • 被选中但未连接的 input_k 不会触发上游执行,output_k 为 None。
  • 空或无效的 select 不会回退到 1,而是不选任何输出;需要默认选中第一路时请保留默认值 1。
  • 前端输出槽与动态输入数量同步(1..10);要使用 output_k,需要先存在或连接对应的 input_k 槽位。
  • 未选中的分支虽然不执行,但其连线仍需通过提交校验(类型、必填输入)。