EPS Technical Manual
09 / 64
Файлы
09
PRACTICE LAB · WORKFLOW ENGINEERING

Routing Sandbox: selector, bypass, lazy execution и cache без генеративных моделей

Первый практикум специально убирает SDXL, FLUX, VAE и модели из поля зрения. Здесь остаётся только логика графа: два источника данных, selector, output, Queue Prompt, bypass и наблюдение за тем, какая ветка реально требуется движку.

CONFIRMEDЛаборатория построена на уже установленном в ARCHVIZ_LAB ComfyUI-Easy-Use: textIndexSwitch использует lazy inputs, поэтому подходит для демонстрации selected route и dependency-driven execution.
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 · GOAL

Что ты должен почувствовать руками за 10–15 минут

Цель не в том, чтобы запомнить очередные названия nodes. Цель — увидеть разницу между CONNECTED, SELECTED, REQUIRED и EXECUTED.

После практикума большой Hansen-граф должен читаться уже не как паутина, а как набор веток, из которых selector выбирает текущий runtime route.

CONFIRMED

Главный вопрос

Не «куда идёт провод?», а «какой upstream сейчас действительно требуется выбранному output?»

CONFIRMED

Почему без моделей

Ни VRAM, ни sampler, ни prompt quality не должны отвлекать от routing logic.

02 · BUILD

Собери минимальный граф из четырёх функциональных частей

  • Создай два easy promptLine и подпиши группы ROUTE A и ROUTE B.
  • В A напиши ROUTE A · ORIGINAL. В B — ROUTE B · ORIGINAL.
  • Создай easy textIndexSwitch и подключи A → text0, B → text1.
  • Выход text подключи в easy showAnything. Это единственный output лаборатории.
  • Начальное значение selector: index = 0.

03 · EXPERIMENT A

CONNECTED ≠ SELECTED

CONFIRMED

Механика textIndexSwitch

Index выбирает один textN; lazy status запрашивает только соответствующий вход.

ДействиеОжидаемый outputЧто доказываем
index = 0 → Queue PromptROUTE A · ORIGINALA selected; B физически подключена, но не выбрана
index = 1 → Queue PromptROUTE B · ORIGINALSelector меняет effective route без переподключения проводов
вернуть index = 0ROUTE A · ORIGINALTopology не менялась; изменилось только control value
04 · EXPERIMENT B

CONNECTED ≠ REQUIRED

Оставь index = 0. Измени текст только в ROUTE B на ROUTE B · CHANGED и нажми Queue Prompt.

Главное наблюдение: output всё ещё должен показывать ROUTE A. Изменение невыбранной ветки не делает её частью текущего required path.

05 · EXPERIMENT C

REQUIRED ≠ обязательно пересчитано с нуля

Не меняя index и ROUTE A, нажми Queue Prompt ещё раз. Затем поменяй ROUTE A на ROUTE A · CHANGED и снова запусти.

Смысл опыта — привыкнуть разделять requirement graph и execution/cache. Один и тот же required route может частично использовать уже валидные результаты, пока изменение входа не инвалидирует соответствующий участок.

INFERRED

Что наблюдать в UI

Смотри, какие nodes реально подсвечиваются как выполняющиеся после изменения выбранной и невыбранной ветки; конкретная визуализация зависит от версии frontend.

06 · EXPERIMENT D

BYPASS — отдельная ось управления

Теперь намеренно переведи одну из source nodes или тестовую группу в bypass и посмотри, чем это отличается от простого выбора другого selector index.

Selector отвечает: какой вход использовать. Bypass отвечает: должна ли конкретная нода или группа работать в своём обычном режиме. Это не одно и то же состояние.

07 · TRANSFER TO HANSEN

После sandbox открой PEOPLE/PPL и задай те же четыре вопроса

  • Какая ветка CONNECTED?
  • Какая ветка SELECTED?
  • Какая ветка REQUIRED текущему output?
  • Что реально EXECUTED, а что могло прийти из cache?
SandboxHansen PEOPLE/PPL
indexmaster / linked selector value
ROUTE A / BFLUX person route / alternate route
textIndexSwitch459 / 522 / 552 selector family
showAnything outputreturn into downstream / final output
08 · PASS CRITERIA

Практикум пройден, когда ты можешь объяснить это без подсказки

  • Почему подключённая ветка может не участвовать в результате.
  • Почему selector не равен bypass.
  • Почему положение ноды слева или справа не задаёт порядок исполнения.
  • Почему изменение невыбранной ветки не обязательно влияет на текущий output.
  • Почему повторный Queue Prompt не означает полный пересчёт всего canvas.
  • Как найти effective runtime route в большом production workflow.
CONFIRMED

Критерий перехода дальше

Если эти шесть пунктов понятны на sandbox, можно переходить к Modules & I/O Contracts и затем разбирать Hansen уже как инженерный граф.