Проблема: разрозненные стандарты управления движением
Создание видео с точным контролем камеры и объектов в ComfyUI сталкивается с серьезной проблемой: разные модели требуют совершенно разных форматов данных. Одни модели (например, Wan) требуют экстинзики камеры (camera extrinsics), другие — 2D-траекторий (screen tracks), а третьи (H3) — референсных видео и текстовых промптов. Раньше пользователю приходилось вручную конвертировать эти данные для каждой модели, что приводило к ошибкам и потере качества.
Решение: MotionScene как универсальный документ
Проект OmniCam (автор MajoorWaldi) вводит концепцию MotionScene — независимого от модели документа, описывающего сцену, камеры, объекты, слои движения и монтажные склейки. Этот формат становится «каноническим» представлением движения, которое затем компилируется в специфичный для целевой модели формат с помощью узла OmniCam Monitor.
Архитектура решения состоит из трех ключевых узлов:
- OmniCam Director: 3D-вьюпорт для авторинга сцены. Поддерживает навигацию в стиле Maya/Blender, ключевые кадры для камер и объектов, а также создание «плейблстов» (нейтральных прокси-видео).
- OmniCam Extractor: Позволяет извлечь движение из существующего видео (режим Camera Track с использованием DPVO/pycolmap) или реконструировать 3D-сцену из одного изображения (режим Scene Reconstruct на базе MoGe).
- OmniCam Monitor: Компилятор. Он преобразует MotionScene в нужный формат и проводит строгую проверку (preflight), блокируя запуск, если целевая модель несовместима с текущей сценой.
Технические детали и поддержка моделей
OmniCam строго контролирует контракты данных. Если целевая модель не может обработать определенное движение (например, склейку камер в профиле одной камеры), система выдаст ошибку, а не создаст битый файл. Ниже приведена таблица соответствия профилей Monitor и целевых моделей:
| Профиль Monitor | Семантика выхода | Выходной узел (Output) | Куда подключать |
|---|---|---|---|
| wan_camera_native | camera_embedding | camera_embedding | WanCameraImageToVideo.camera_conditions |
| wan_move_native | screen_tracks | native_tracks | WanMoveTrackToVideo.tracks |
| wan_track_native | screen_tracks | tracks_json | WanTrackToVideo.tracks |
| wanvideo_ati | screen_tracks | tracks_json | WanVideoATITracks.tracks |
| ltx25_motion_track | screen_tracks | tracks_json | LTXVDrawTracks.tracks |
| h3_native | reference_video | reference_frames | MiniMaxH3ReferenceToVideo.ref_videos |
| h3_api | reference_video | reference_video | MinimaxHailuo03ReferenceNode.reference_video |
Существует также специальный профиль external_reference_video, который не требует привязки к конкретному узлу и используется для моделей, для которых еще не создан профиль. Это позволяет избежать блокировки графа при использовании новых или нестандартных моделей.
Установка и требования
Плагин требует ComfyUI версии 0.31+ и Python 3.10–3.13. Установка возможна через ComfyUI Manager или вручную через git-клонирование. Важно отметить, что бэкенды для решения задач камеры (DPVO, pycolmap, OpenCV/SIFT) являются опциональными и устанавливаются отдельно, если требуется функция извлечения движения из видео. Сам узел Director и Playblast работают стабильно, хотя некоторые элементы интерфейса (Monitor profile set) помечены как экспериментальные.
Почему это важно
OmniCam устраняет необходимость ручного написания скриптов для конвертации траекторий между моделями. Разработчики получают единый интерфейс для управления сложными движениями (камера, объекты, слои), а пользователи — гарантию того, что их анимация будет корректно интерпретирована конкретной видео-моделью без потери данных на этапе компиляции.
Источник: Github ↗
