EPS Technical Manual
07 / 64
Файлы
07
PART I · WORKFLOW ENGINEERING FOR COMFYUI

Switches, Selectors & Bypass Routing — как граф выбирает маршрут

Большой ComfyUI-граф перестаёт быть «кашей», когда разделяешь четыре разных механизма: group описывает модуль, bypass включает или исключает его из исполнения, selector выбирает один из маршрутов, а shared control задаёт authoritative value сразу нескольким переключателям.

CONFIRMEDЛогика selector tree подтверждена topology Hansen; поведение Fast Groups Bypasser подтверждено исходным кодом rgthree-comfy, где modeOff=4 используется как Comfy bypass.
LINKED CONTROL TREE

543 = 1 управляет четырьмя switches

NODE 5431 = FLUXshared INT control
459FLUX composite #672→ return 573
522raw SAM mask #524→ preview 508
552PPL FLUX #829→ resize 780 / crop 503
715 · RETURN / DOWNSTREAMoutputs BASE #79→ image2 of 552 · ignored now
NESTED SWITCH

При mode 1 node 552 выбирает свой image1 #829, поэтому output 715 не участвует. При mode 2 оба switches выбирают второй вход, и 715 передаёт SDXL decode #14 в 552.

01 · FOUR MECHANISMS

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
02 · MENTAL MODEL

Четыре вопроса, которые сразу распутывают routing

03 · HANSEN CASE

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
715Return / downstream sourceВложенный selector, который становится значим только когда downstream switch выбирает его ветку
04 · NESTED 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 нужно читать отдельно.

05 · BYPASS ≠ SELECT

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 sourceSELECTOR / SWITCH
Нужно одним значением перестроить несколько switchesSHARED CONTROL
Нужно просто визуально объединить related nodesGROUP
06 · RGTHREE

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, а внутренние ноды остаются внутри соответствующих групп.

CONFIRMED

rgthree implementation

FastGroupsBypasser использует LiteGraph.ALWAYS для enabled state и mode 4 для bypass; exposed actions: Bypass all, Enable all, Toggle all.

07 · DEBUG ORDER

Если «ветка не работает», проверяй routing раньше модели

  • Проверить, не находится ли нужная group в bypass.
  • Найти selector непосредственно перед точкой, где исчезает нужный результат.
  • Проследить linked control upstream до authoritative INT/FLOAT/STRING source.
  • Подписать input1 / input2 реальными источниками, а не абстрактными номерами.
  • Проверить nested selectors: выбран ли вообще upstream switch downstream-нодой.
  • Только после подтверждения route диагностировать sampler, model, prompt или mask.
08 · COMMON MISTAKES

Почему переключатели кажутся хаосом

Ошибка чтенияПравильная трактовка
Смотрим только на число 1/2 внутри switchСначала выясняем, что физически подключено к input1 / input2
Верим visible widget valueLinked input может переопределять stored widget value
Считаем connected branch активнойConnected не означает selected; нужен effective runtime route
Путаем bypass и selectorBypass меняет execution state, selector меняет data route
Меняем сразу несколько switches вручнуюИщем shared upstream control / single source of truth
09 · PRACTICE

Практика на 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.