- 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: 新增/更新相关回归测试
5.1 KiB
5.1 KiB
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槽位。 - 未选中的分支虽然不执行,但其连线仍需通过提交校验(类型、必填输入)。