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

Module Contract Lab: INPUT → PROCESS → CHECKPOINT → RETURN

Третий практикум превращает группу из визуальной рамки в инженерный модуль. Мы соберём маленькую ветку только на core ComfyUI nodes и явно зададим её input contract, responsibility, checkpoint и return point.

CONFIRMEDДля лаборатории используются базовые типы IMAGE и core nodes LoadImage, ImageInvert и PreviewImage. Генеративные модели не нужны: внимание остаётся на границах модуля и data contract.
01 · GOAL

Научиться видеть границу ответственности

В больших workflow одна из главных причин хаоса — неясно, где заканчивается одна задача и начинается следующая. LAB 03 заставляет провести эту границу буквально на canvas.

После упражнения ты должен уметь взять любую ветку Hansen и сформулировать: что она получает, что делает, где проверяется и что официально возвращает в Master Workflow.

02 · BUILD

Минимальный IMAGE-модуль без моделей

  • LoadImage оставь вне MODULE_01_INVERT: это upstream / Master Input.
  • ImageInvert помести внутрь группы MODULE_01_INVERT.
  • Первый PreviewImage помести внутрь группы и подпиши CHECKPOINT · MODULE RESULT.
  • Второй PreviewImage оставь снаружи и подпиши MASTER DOWNSTREAM / OUTPUT.
  • Один IMAGE output ImageInvert подключи одновременно к локальному checkpoint и downstream output.

03 · INPUT CONTRACT

Запиши contract до запуска

CONFIRMED

Почему это contract

Модуль не имеет права скрыто требовать prompt, model, seed или mask. Его единственная внешняя зависимость в этой лаборатории — IMAGE.

ПолеLAB 03
Required inputIMAGE
SourceMASTER INPUT · LoadImage
Dimensionsпринимаются от source image
Batchпередаётся вместе с IMAGE tensor
Coordinate spaceтот же canvas, что у входного IMAGE
Optional inputsнет
04 · ONE RESPONSIBILITY

Сформулируй задачу одной строкой

Ответственность MODULE_01_INVERT: принять IMAGE и вернуть инвертированный IMAGE. Всё. Он не загружает файл, не сохраняет delivery result, не выбирает route и не управляет другими группами.

Если описание модуля требует длинного предложения с несколькими независимыми задачами, граница, скорее всего, проведена плохо.

05 · CHECKPOINT

Checkpoint доказывает исправность модуля до downstream

Запусти workflow и сначала смотри только LOCAL CHECKPOINT. Не оценивай MASTER OUTPUT, пока локальный результат не доказан.

Это очень простое правило позже спасает часы в PPL, masks и main FLUX: локальная ветка должна уметь доказать собственный результат независимо от того, что происходит после return.

06 · RETURN CONTRACT

Return — это граница, а не обязательно отдельная нода

В LAB 03 return point — IMAGE link, который пересекает правую границу MODULE_01_INVERT и идёт в MASTER OUTPUT. Отдельная Return node не обязательна: важна однозначность интерфейса.

В большом production graph return полезно дополнительно маркировать reroute/label/note, особенно если module extraction планируется как standalone JSON.

Return fieldLAB 03
TypeIMAGE
MeaningProcessed module result
Canvassame logical image canvas as input
Downstream assumptionполучатель не должен знать внутреннюю реализацию module
07 · EXPERIMENT A

Replacement test: модуль должен быть заменяемым

Создай вторую группу MODULE_02_PASS_THROUGH. Её задача — вернуть исходный IMAGE без изменения. Затем поставь selector после двух module outputs и переключай MODULE_01_INVERT / MODULE_02_PASS_THROUGH.

Если downstream продолжает принимать один и тот же contract IMAGE, значит modules совместимы на уровне интерфейса, даже если делают совершенно разную внутреннюю работу.

08 · EXPERIMENT B

Поймай hidden dependency специально

Добавь внутрь MODULE_01 ещё один внешний control или source, но не вписывай его в contract. Теперь попробуй мысленно вырезать группу в standalone workflow. Сразу становится видно: branch уже не автономен.

Затем исправь contract: либо добавь dependency как явный module input, либо перенеси нужный control внутрь модуля. Это ровно тот аудит, который понадобится при extraction Hansen branches.

09 · TRANSFER TO HANSEN

Как этим читать любую ветку Hansen

LAB 03 вопросПример production branch
INPUT CONTRACT?BASE IMAGE / MASK / MODEL / prompt / controls
ONE RESPONSIBILITY?например Generate Person или Segment Person
LOCAL CHECKPOINT?raw generation / bbox / mask / clean cutout / composite
RETURN CONTRACT?IMAGE / MASK / LATENT, который возвращается downstream
HIDDEN DEPENDENCIES?shared seed, size, selector, loader, prompt fragment
10 · PASS CRITERIA

LAB 03 пройден, если ты можешь спроектировать модуль до нод

  • Ты сначала пишешь responsibility и contracts, а потом выбираешь nodes.
  • Ты отличаешь локальный checkpoint от финального Master output.
  • Ты можешь показать точный return point на canvas.
  • Ты умеешь найти incoming links, пересекающие границу module.
  • Ты понимаешь, почему два разных modules могут быть взаимозаменяемыми при одинаковом contract.
  • Ты можешь объяснить, почему hidden dependency ломает standalone extraction.
CONFIRMED

После трёх LAB

LAB 01 учит route selection; LAB 02 — centralized group control; LAB 03 — module boundaries. Вместе они дают минимальный практический фундамент для чтения Hansen production graph.