Resolution, Coordinate Space & Batch Semantics — скрытая геометрия графа
Большая часть труднообъяснимых ошибок в production ComfyUI возникает не из-за модели, а из-за несовпадения размеров, coordinate space или batch cardinality. Этот раздел учит проверять геометрию данных до запуска тяжёлых генеративных стадий.
Перед соединением веток нужно проверить размер, координаты и cardinality
Одинаковый визуальный кадр может существовать в нескольких размерах
Base image, latent canvas, detection image, external depth, mask atlas и crop могут иметь разные resolution. Пока данные обрабатываются независимо, это допустимо. Проблема начинается в момент, когда координаты или mask из одного canvas применяются к другому.
Поэтому resize — это не косметическая операция. Он меняет систему координат downstream.
| Объект | Что проверить |
|---|---|
| IMAGE | width × height и aspect ratio |
| MASK | тот же canvas или явный resize |
| LATENT | ожидаемый model canvas / divisible constraints |
| BBOX / points | в координатах какого image они были вычислены |
| CROP | origin + width/height относительно исходного canvas |
BBOX имеет смысл только вместе с изображением, на котором он рассчитан
Bounding box — это не абстрактный прямоугольник. Координаты x/y привязаны к конкретным width/height. Если detection выполнялся после resize, bbox нельзя без преобразования применять к original image другого размера.
То же относится к placement masks, crops и points для segmentation.
Маска должна совпадать с тем canvas, которым она управляет
Даже правильная по смыслу маска становится неправильной, если была построена на другом resize/crop. Перед composite/inpaint нужно проверить dimensions и mapping маски на target image.
Для локального crop workflow полезно явно разделять local mask и full-scene mask — это разные contracts.
Batch — это количество элементов, а не просто «несколько картинок»
IMAGE может содержать batch N. MASK может содержать другой batch. Detection result может содержать список объектов. Downstream node должен понимать, как эти cardinalities сопоставляются.
Некоторые ноды broadcasting поддерживают, другие ожидают строгую пару 1:1. Нельзя предполагать поведение без проверки конкретной node implementation.
| Сценарий | Риск |
|---|---|
| 1 image + 1 mask | Базовый и обычно безопасный |
| N images + N masks | Нужно подтвердить порядок соответствия |
| N images + 1 mask | Нужна поддержка broadcasting или явное повторение |
| 1 image + N object masks | Возможен object batch / combined mask режим |
| N images + M bboxes | Опасно, если node индексирует bbox по image index |
Почему segmentation может падать при правильных моделях
В нашем Florence2 → SAM2 тесте Florence уже успешно нашла объекты, но downstream segmentation получила несогласованную cardinality: image batch содержал больше элементов, чем список bbox. Node индексировала bbox по image index и получила выход за границу массива.
Это пример важного принципа: ошибка после AI-model inference не обязательно означает проблему модели. Сначала проверяй data contract.
Сначала доказать single-image route, потом увеличивать batch
Для сложной detection/segmentation ветки правильный benchmark начинается с batch=1. После успешного single-image результата можно отдельно проверять multiple objects и только затем multi-image batch.
Resize должен иметь владельца и понятную точку в pipeline
Если каждая ветка произвольно resize-ит source, coordinate mapping быстро становится непрозрачным. Лучше иметь явные working canvases и подписывать, какая стадия владеет преобразованием размера.
Engineering rule
Стараться выполнять spatially-coupled операции — image/mask/bbox/composite — на одном named working canvas, либо документировать transform между canvas.
Практика: составить spatial ledger для одной ветки
Если хотя бы одна строка неизвестна, ветка ещё не готова к надёжной интеграции в Master Workflow.
| Stage | W×H | Batch | Coordinate owner |
|---|---|---|---|
| Input | заполнить | заполнить | BASE |
| Resize | заполнить | заполнить | WORKING CANVAS |
| Detection | заполнить | заполнить | DETECTION SPACE |
| Mask | заполнить | заполнить | MASK SPACE |
| Composite | заполнить | заполнить | DESTINATION SPACE |