EPS Technical Manual
12 / 64
Файлы
12
PART I · WORKFLOW ENGINEERING FOR COMFYUI

Modules & Input/Output Contracts — проектируем ветки как заменяемые блоки

Профессиональный workflow легче строить и обслуживать, если каждая крупная ветка имеет одну ответственность, понятные входы, понятный выход и независимый checkpoint. Тогда Master Workflow превращается из монолита в систему модулей.

CONFIRMEDМодульный подход соответствует уже документированной структуре Hansen: SDXL, masks, PEOPLE/PPL, main FLUX и output образуют отдельные смысловые ветки с точками слияния и возврата.
01 · MODULE

Модуль — это законченная ответственность, а не просто цветная рамка

Группа становится инженерным модулем только тогда, когда можно сформулировать её задачу одной фразой, перечислить обязательные inputs и назвать один или несколько ожидаемых outputs.

Хороший модуль можно временно отделить от Master Workflow, подать тестовые входы, получить результат и понять, исправен ли он сам по себе.

02 · INPUT CONTRACT

Input contract говорит, что модуль имеет право ожидать

Нельзя проектировать ветку с неявными предположениями. Если модулю нужен IMAGE 1536 px, MASK того же canvas, MODEL определённого семейства и FLOAT denoise, это должно быть известно до подключения.

Input contract включает не только тип socket, но и форму данных: размер, batch, coordinate space, polarity, model family и обязательность параметра.

Contract fieldПример
TypeIMAGE / MASK / LATENT / MODEL
Dimensions1536 × 1024
Batch1 image / N masks
Coordinate spaceSame as BASE IMAGE
Model familySDXL / FLUX-compatible
Required / optionalBASE IMAGE required; reference optional
03 · OUTPUT CONTRACT

Output contract определяет, что downstream может безопасно получить

Output должен быть пригоден для следующего модуля без догадок. Если PEOPLE branch возвращает composited IMAGE того же canvas, downstream FLUX может использовать его как предсказуемый source. Если branch возвращает crop другого размера, это уже другой contract.

04 · RETURN CONTRACT

Return point — официальный выход ветки обратно в Master Workflow

У сложной ветки должен быть один хорошо читаемый return point. Это место, где локальная задача завершена и результат снова становится частью основного data plane.

Return point полезно маркировать отдельно: он облегчает extraction standalone JSON, debug и замену реализации модуля без перестройки всего downstream.

05 · RESPONSIBILITY

Один модуль — одна основная задача

МодульОтветственность
CONTROLNETСоздать/применить geometry guidance
SDXLПолучить base generation / img2img result
MASKSСформировать области защиты/изменения
PPLСоздать или заменить людей и вернуть composite
MAIN FLUXВыполнить controlled final refinement
UPSCALEУвеличить output с сохранением согласованности
OUTPUTСохранить / показать delivery result
06 · HIDDEN DEPENDENCIES

Неявная зависимость делает standalone-модуль ложным

Если ветка выглядит отдельной, но использует seed, size, prompt fragment или model object из далёкой части Master Workflow, она фактически не автономна. Перед extraction необходимо найти все такие external links.

Standalone JSON считается независимым только тогда, когда каждый обязательный external dependency заменён локальным input/control/loader либо явно указан в contract.

INFERRED

Extraction rule

Перед экспортом ветки строить список всех incoming links, которые пересекают границу выбранной группы; каждый link должен стать локальным dependency или явным input.

07 · MODULE CHECKPOINT

У каждого модуля должен быть собственный доказуемый результат

Если единственный preview находится в самом конце Master Workflow, невозможно быстро понять, какой module сломался. Поэтому локальный output модуля должен иметь Preview / MaskPreview / comparer или другой диагностический probe.

08 · MASTER BUILD

Master Workflow должен собираться как LEGO из изученных модулей

09 · PRACTICE

Практика: оформить contract для одной знакомой ветки

  • Выбрать одну ветку текущего workflow.
  • Сформулировать её ответственность одной строкой.
  • Выписать все external incoming links.
  • Для каждого input записать type, size/batch и required/optional.
  • Назвать один официальный output/return point.
  • Добавить checkpoint непосредственно перед return.
  • Проверить, можно ли заменить upstream тестовыми inputs и запустить ветку отдельно.