Switches, Selectors & Bypass Routing — как граф выбирает маршрут
Большой ComfyUI-граф перестаёт быть «кашей», когда разделяешь четыре разных механизма: group описывает модуль, bypass включает или исключает его из исполнения, selector выбирает один из маршрутов, а shared control задаёт authoritative value сразу нескольким переключателям.
543 = 1 управляет четырьмя switches
При mode 1 node 552 выбирает свой image1 #829, поэтому output 715 не участвует. При mode 2 оба switches выбирают второй вход, и 715 передаёт SDXL decode #14 в 552.
Group, Bypass, Selector и Shared Control — это не одно и то же
Самая частая ошибка при чтении больших workflow — воспринимать любой переключатель как «вкл/выкл». На практике часть controls выбирает branch, часть меняет node mode, часть только передаёт числовое значение downstream.
Поэтому сначала определяй тип управления, и только потом пытайся понять конкретное значение 0/1/2.
| Mechanism | Главный вопрос | Что меняет |
|---|---|---|
| GROUP | Что это за модуль? | Организацию и границы функционального блока |
| BYPASS | Нужно ли этому модулю участвовать? | Execution state нод / группы |
| SELECTOR / SWITCH | Какой вход идёт дальше? | Active data route |
| SHARED CONTROL | Кто задаёт значение? | Authoritative INT / FLOAT / STRING для нескольких consumers |
Четыре вопроса, которые сразу распутывают routing
Node 543 — не «ещё одна цифра», а master selector PEOPLE/PPL
В Hansen workflow один linked INT control 543 управляет сразу несколькими selectors. Это означает, что изменение одного значения синхронно перестраивает несколько мест маршрута PEOPLE/PPL.
Поэтому stored widget value внутри отдельного switch нельзя считать главным, если его Input socket связан с 543. Authoritative value находится upstream в 543.
| Consumer | Что выбирает | Почему важно |
|---|---|---|
| 459 | Какой PPL composite возвращается в main pipeline | Определяет итоговый people route перед 573 → 67 → 57 |
| 522 | Какой mask/image representation идёт в alternative branch | Влияет на inpaint / preview route |
| 552 | Какой people source используется downstream | При mode 1 выбирается FLUX person 829; при alternative mode используется второй source |
| 715 | Return / downstream source | Вложенный selector, который становится значим только когда downstream switch выбирает его ветку |
Selector может быть подключён, но фактически не участвовать в текущем route
Node 715 подключён в graph topology, но при PEOPLE mode 1 downstream selector 552 выбирает свой первый вход — FLUX person 829. Значит output 715 существует в topology, но не определяет effective runtime route этого режима.
При alternative mode downstream selectors переходят на вторые входы, и тогда 715 становится частью реально используемого пути. Именно поэтому topology и effective runtime map нужно читать отдельно.
Bypass отвечает «исполнять ли», selector — «что передать дальше»
Selector работает на уровне маршрутизации данных: он выбирает один из доступных входов. Bypass работает на уровне execution state ноды или группы. Эти механизмы могут существовать одновременно и решают разные задачи.
В rgthree Fast Groups Bypasser официальный код переводит выключаемое состояние в mode 4, который прямо помечен как Comfy bypass. Этот node также предоставляет действия Bypass all, Enable all и Toggle all.
| Ситуация | Что использовать |
|---|---|
| Нужно временно исключить тяжёлый module из прогона | BYPASS / group bypass |
| Нужно выбрать SDXL source или FLUX source | SELECTOR / SWITCH |
| Нужно одним значением перестроить несколько switches | SHARED CONTROL |
| Нужно просто визуально объединить related nodes | GROUP |
Fast Groups Bypasser — панель управления execution state групп
Fast Groups Bypasser ищет groups в workflow и создаёт для них управляющие toggles. Это удобный control-plane layer: вместо ручного обхода десятков нод можно включать или bypass-ить целые functional blocks.
Для учебного графа это особенно полезно: BASE CONFIG может содержать только понятные toggles типа INPUT, MASKS, PPL, SDXL, FLUX, UPSCALE, а внутренние ноды остаются внутри соответствующих групп.
rgthree implementation
FastGroupsBypasser использует LiteGraph.ALWAYS для enabled state и mode 4 для bypass; exposed actions: Bypass all, Enable all, Toggle all.
Если «ветка не работает», проверяй routing раньше модели
- Проверить, не находится ли нужная group в bypass.
- Найти selector непосредственно перед точкой, где исчезает нужный результат.
- Проследить linked control upstream до authoritative INT/FLOAT/STRING source.
- Подписать input1 / input2 реальными источниками, а не абстрактными номерами.
- Проверить nested selectors: выбран ли вообще upstream switch downstream-нодой.
- Только после подтверждения route диагностировать sampler, model, prompt или mask.
Почему переключатели кажутся хаосом
| Ошибка чтения | Правильная трактовка |
|---|---|
| Смотрим только на число 1/2 внутри switch | Сначала выясняем, что физически подключено к input1 / input2 |
| Верим visible widget value | Linked input может переопределять stored widget value |
| Считаем connected branch активной | Connected не означает selected; нужен effective runtime route |
| Путаем bypass и selector | Bypass меняет execution state, selector меняет data route |
| Меняем сразу несколько switches вручную | Ищем shared upstream control / single source of truth |
Практика на Hansen: вручную распутать PEOPLE selector tree
- Найти node 543 и записать его текущее effective value.
- Проследить четыре links до 459, 522, 552 и 715.
- Для каждого selector выписать, что реально подключено к первому и второму входу.
- Отдельно нарисовать MODE 1 route и alternative route стрелками.
- Отметить, какие branches connected, но not selected в каждом режиме.
- После этого переключить один master value и проверить previews, не меняя модель, prompt или seed.