BASE CONFIG Lab: Fast Groups Bypasser как control plane графа
Второй практикум переносит routing logic на уровень целых групп. Задача — руками почувствовать разницу между topology, selected route и централизованным enable/bypass control до подключения SDXL, FLUX или других тяжёлых моделей.
Что меняется после LAB 01
LAB 01 учил выбирать маршрут внутри data flow. LAB 02 поднимается на уровень выше: теперь мы управляем не отдельным selector, а состоянием целых функциональных групп.
Это и есть первый настоящий control plane. BASE CONFIG не переносит IMAGE или MASK. Он меняет состояние тех модулей, через которые эти данные могут проходить.
Что Fast Groups Bypasser делает на самом деле
Fast Groups Bypasser — frontend/control node без обычного data input. Он сканирует группы workflow и создаёт строку Enable <group title> для каждой подходящей группы.
В состоянии ON nodes группы переводятся в normal execution mode. В состоянии OFF Bypasser использует mode 4 — Comfy bypass. Это отличается от Fast Groups Muter, у которого OFF соответствует NEVER/MUTE.
Важное ограничение restriction
max one / always one гарантируются при переключении через сам Fast Groups node. Если менять mode нод внутри групп вручную, состояние может разойтись с этой логикой.
| Property / Action | Назначение |
|---|---|
| matchTitle | Фильтрация групп по title; поддерживается строка/regex |
| matchColors | Фильтрация по group color |
| sort | position / alphanumeric / custom alphabet |
| showNav | Показывает стрелку быстрого перехода к группе |
| toggleRestriction | default / max one / always one |
| Bypass all | Перевести управляемые группы в bypass с учётом restriction |
| Enable all | Включить управляемые группы с учётом restriction |
| Toggle all | Инвертировать управляемые toggles с учётом restriction |
Собери control-plane поверх Routing Sandbox
Возьми LAB 01 как основу. Ноды оставляем простыми: две text-ветки → selector → output. Теперь добавляем группы и центральную панель управления.
- Создай группы ROUTE_A, ROUTE_B, SELECTOR и OUTPUT.
- Fast Groups Bypasser поставь отдельно, вне управляемых групп.
- В Properties Fast Groups Bypasser задай matchTitle = ^ROUTE_.
- Панель должна показывать только Enable ROUTE_A и Enable ROUTE_B.
- Оставь toggleRestriction = default для первого опыта.
- Начальный selector: index = 0.
Bypass невыбранной ветки
Что мы доказываем
Group enabled state и selector state независимы. Можно изменить availability невыбранной ветки, не меняя selected route.
| Состояние | Действие | Ожидаемый смысл |
|---|---|---|
| index = 0; A ON; B ON | Queue Prompt | Output зависит от ROUTE_A |
| index = 0; A ON; B OFF | Queue Prompt | ROUTE_B bypassed, но current selected route остаётся A |
| index = 0; A ON; B ON | Enable ROUTE_B | Topology прежняя; меняется только availability группы |
Сначала availability, потом selection
Верни обе группы в ON. Переключи selector на index = 1 и проверь ROUTE_B. Затем верни index = 0. Задача — привыкнуть читать систему двумя вопросами подряд: сначала «какие модули доступны?», потом «какой из доступных маршрутов выбран?».
max one и always one — это policy, а не data routing
Поставь toggleRestriction = max one. Переключая ROUTE_A и ROUTE_B именно через Fast Groups Bypasser, посмотри, как панель удерживает максимум одну включённую группу. Затем попробуй always one: панель должна стремиться оставить хотя бы одну группу включённой.
Не путай это с selector. Ограничение отвечает за допустимое состояние control plane, но не определяет само по себе, какой вход downstream selector выберет.
Не абсолютная блокировка
rgthree отдельно предупреждает: restriction применяется к действиям через Fast Groups node. Ручное изменение modes внутри групп может нарушить ожидаемое max-one/always-one состояние.
Фильтр групп — основа профессионального BASE CONFIG
Сделай вторую копию Fast Groups Bypasser. Первую оставь с matchTitle = ^ROUTE_. Для второй используй matchTitle = ^PROCESS_ после создания двух пустых учебных PROCESS-групп.
Так становится видно, что один большой workflow может иметь несколько control panels: например PPL CONFIG, PROCESS CONFIG и OUTPUT CONFIG. Это уже архитектурный приём, а не особенность конкретной модели.
Теперь прочитай BASE CONFIG Hansen как карту систем
После лаборатории большая жёлтая панель Hansen уже должна восприниматься не как набор загадочных yes/no. Это каталог функциональных подсистем production workflow.
- MODEL LOADERS — availability ресурсоёмких loaders.
- INPUTS — входной слой.
- CONTROL / SAMPLER CONFIGURATION — shared control layer.
- ControlNet PREPROCESSORS + EXTRAS — preprocessing subsystem.
- MASKS — mask subsystem.
- PPL FLUX Generate / SEGMENTATION / Composite / 3D Inpaint — независимые PEOPLE stages.
- Process SEGMENTATION / SDXL / FLUX / UPSCALE / ADD LOGO — processing stages.
- OUTPUT — terminal stage.
Следующий уровень — runtime profiles
Named profiles вроде MASK DEBUG, PEOPLE ONLY или FINAL FULL RUN — это наша архитектурная надстройка, а не встроенная функция Fast Groups Bypasser. Их смысл — заранее определить минимальный набор enabled modules для конкретной задачи.
| Profile | Идея |
|---|---|
| INPUT CHECK | INPUTS + OUTPUT/preview; тяжёлые process branches выключены |
| MASK DEBUG | INPUTS + preprocessors + masks + diagnostic output |
| PEOPLE LAB | только необходимые PPL stages и return checkpoint |
| BASE GENERATION | основной SDXL/ControlNet route без optional upscale/logo |
| FINAL FULL RUN | production route с финальными optional stages по задаче |
LAB 02 пройден, когда BASE CONFIG перестаёт быть магией
- Ты можешь объяснить, почему Fast Groups Bypasser не нуждается в обычном data cable.
- Ты различаешь ENABLE/BYPASS группы и SELECT конкретного маршрута.
- Ты понимаешь назначение matchTitle и можешь ограничить панель нужным семейством групп.
- Ты знаешь разницу между default, max one и always one.
- Ты можешь посмотреть на Hansen BASE CONFIG и назвать подсистемы, а не просто перечислить переключатели.
- Ты можешь предложить минимальный runtime profile для конкретного теста.
Следующий шаг
После LAB 02 переходим к LAB 03: Module Contract — INPUT → PROCESS → CHECKPOINT → RETURN. Там впервые соберём маленький production-style модуль с чёткой границей ответственности.