Graph Literacy — учимся читать не ноды, а конструкции
После Node Literacy следующий шаг — перестать воспринимать workflow как набор отдельных блоков. Graph Literacy учит узнавать повторяющиеся конструкции, ветвления, точки слияния, selectors и маршруты данных как предложения в языке графа.
Одна нода — буква, связка нод — конструкция
В большом workflow почти никогда не нужно запоминать все ноды по отдельности. Нужно узнавать типовые маршруты: загрузка модели, кодирование prompt, sampling, decode, preprocessing, segmentation, composite и output.
Когда конструкции становятся знакомыми, граф из сотен нод визуально сжимается до нескольких понятных систем.
Сначала найди главный путь данных
Data plane — это маршрут крупных объектов: IMAGE, LATENT, MASK, CONDITIONING и MODEL. Начинать чтение незнакомого графа лучше с основного IMAGE/LATENT пути от input к output, а мелкие controls разбирать позже.
Такой подход быстро показывает, где находится генерация, где локальная обработка, а где только управление параметрами.
Fan-out и fan-in показывают архитектуру задачи
Fan-out возникает, когда один source используется несколькими ветками: например, base image одновременно идёт в Depth, Canny, segmentation и preview. Fan-in возникает, когда несколько результатов снова объединяются в composite, selector или conditioning stack.
Это важные архитектурные точки: fan-out показывает повторное использование source, а fan-in — место, где независимые решения становятся единым результатом.
| Паттерн | Как выглядит | Что означает |
|---|---|---|
| Fan-out | 1 output → несколько inputs | Один source питает несколько веток |
| Fan-in | Несколько outputs → одна операция | Слияние результатов / controls |
| Serial chain | A → B → C → D | Последовательное преобразование |
| Parallel branches | A → B1 и A → B2 | Независимые альтернативные или вспомогательные процессы |
Selector меняет маршрут, а не обязательно данные
Routing-ноды часто выглядят второстепенными, но именно они определяют фактический runtime path. Selector может иметь несколько готовых входов и пропускать дальше только один из них.
Поэтому наличие связи в topology ещё не означает, что конкретная ветка участвует в текущем результате. Нужно отдельно различать connected, selected и executed.
| Состояние | Смысл |
|---|---|
| CONNECTED | Ветка физически подключена к графу |
| SELECTED | Selector действительно выбирает этот вход |
| EXECUTED | Ветка не bypassed и нужна текущему output |
| DIAGNOSTIC | Результат уходит только в preview / comparer |
Не все провода несут изображение
Визуально любой link похож на другой, но STRING, INT или FLOAT могут управлять маршрутом так же сильно, как IMAGE. Поэтому после первого прохода по data plane нужно сделать второй проход по control links.
Особое внимание — linked values. Подключённый INT/FLOAT может переопределять значение, которое видно внутри widget downstream-ноды.
Границу модуля видно по смыслу входа и выхода
Модуль — это не обязательно официальная ComfyUI subgraph-нода. В инженерном смысле модулем является законченная ветка с одной ответственностью и понятным contract.
Хороший модуль можно мысленно вырезать из Master Workflow, заменить тестовыми inputs и отдельно проверить его output.
Как проследить ветку в большом графе
- Начать с конечного preview/save/output интересующей ветки.
- Идти upstream по IMAGE/LATENT links до первого понятного source.
- Отдельно выписать MASK / CONDITIONING / MODEL inputs.
- Найти selectors и проверить, какой input выбран фактически.
- Найти linked INT/FLOAT/STRING controls, которые меняют поведение ветки.
- Отметить последний checkpoint до слияния с другими системами.
Практика: сжать большой граф до пяти предложений
Открой большой workflow и не пытайся сразу понять каждую ноду. Найди пять крупных конструкций и запиши их как короткие маршруты. Например: Input → ControlNet → SDXL; SDXL → Detail; PPL Generate → Segment → Composite; Result → FLUX; FLUX → Output.
Критерий готовности
Если человек может пересказать архитектуру графа 5–10 маршрутами, не перечисляя сотни nodes, он готов переходить к BASE CONFIG и control plane.