Data Plane vs Control Plane — что течёт по графу и что им управляет
Профессиональный ComfyUI-граф легче читать, если разделить два слоя: data plane переносит изображения, latent, masks, models и conditioning; control plane задаёт режимы, selectors, параметры, enable/bypass и общий runtime profile.
Один граф содержит как минимум два разных типа логики
| Layer | Что несёт | Главный вопрос |
|---|---|---|
| DATA PLANE | IMAGE, MASK, LATENT, MODEL, CONDITIONING | Что сейчас обрабатывается? |
| CONTROL PLANE | INT, FLOAT, STRING, BOOLEAN, selectors, bypass | Какой маршрут и режим сейчас активен? |
Data plane показывает путь результата от input до output
При первом чтении большого workflow ищи крупные объекты. IMAGE переходит в preprocessors, MASK ограничивает область, LATENT идёт через sampler, MODEL и CONDITIONING обеспечивают генерацию. Это скелет вычисления.
Если удалить мысленно все маленькие control wires, должен остаться понятный маршрут данных.
Control plane формирует effective runtime state
Control plane может не менять пиксели напрямую, но определяет, какие pixels вообще попадут downstream. Он выбирает source, strength, steps, denoise, mode, resolution и active modules.
Поэтому маленький INT selector иногда важнее целой генеративной ветки: неверное значение просто выберет другой путь.
Видимое widget value не всегда является фактическим значением
Если input параметра связан с другой control-нодой, downstream widget может отображать сохранённое локальное значение, которое не определяет текущий runtime. Authoritative source находится upstream.
При диагностике selectors и shared controls всегда нужно трассировать link до источника, а не доверять только подписи внутри конечной ноды.
Hansen example
В текущем technical manual уже зафиксированы selectors, где linked input переопределяет stored widget value.
Большой граф лучше читать в два прохода
Topology и runtime path — не одно и то же
Topology отвечает: какие связи вообще существуют в сохранённом workflow. Effective runtime map отвечает: какие из этих связей реально определяют текущий результат с учётом selectors, linked controls и bypass state.
Это различие критично для аудита больших графов: connected branch может быть selected away, а сохранённый post-process может находиться в bypass.
Практика: нарисовать две карты одного workflow
- Карта A: оставить только IMAGE / MASK / LATENT / MODEL / CONDITIONING links.
- Карта B: выписать только selectors, INT/FLOAT/STRING controls и bypass switches.
- Для каждого selector записать его authoritative upstream value.
- Соединить карты и описать одной фразой effective runtime route.
Критерий готовности
Если пользователь может объяснить отдельно data route и control route, он готов переходить к module contracts и interface design.