English | Deutsch | Español | Français | हिन्दी | Português | Русский | 日本語 | 한국어 | 中文 | 繁體中文

Version Last Commit License


# OpenPose Studio for ComfyUI 🤸 OpenPose Studio — это продвинутое расширение для ComfyUI, предназначенное для создания, редактирования, предпросмотра и организации поз OpenPose с помощью удобного и понятного интерфейса. Оно позволяет легко настраивать keypoints визуально, сохранять и загружать файлы поз, просматривать пресеты и галереи поз, управлять коллекциями, объединять несколько поз и экспортировать чистые JSON-данные для использования в ControlNet и других workflow, основанных на позах. --- ## Содержание - ✨ [Возможности](#возможности) - 📱 [Адаптивный мобильный интерфейс](#адаптивный-мобильный-интерфейс) - 📦 [Установка](#установка) - 🎯 [Использование](#использование) - 🖐️ [Редактирование рук](#редактирование-рук) - 🔧 [Nodes](#nodes) - ⌨️ [Управление и горячие клавиши редактора](#управление-и-горячие-клавиши-редактора) - 📋 [Спецификации формата](#спецификации-формата) - 🖼️ [Галерея и управление позами](#галерея-и-управление-позами) - 🔀 [Pose Merger](#pose-merger) - 🎨 [Render](#render) - 🖼️ [Фоновое изображение](#background-reference) - 🗺️ [Areas Input](#areas-input) - ⚠️ [Известные ограничения](#известные-ограничения) - 🔍 [Устранение неполадок](#устранение-неполадок) - 🤝 [Участие в разработке](#участие-в-разработке) - 💙 [Финансирование и поддержка](#финансирование-и-поддержка) - 📄 [Лицензия](#лицензия) --- ## Возможности ✨ **Основные возможности** - Редактирование keypoints OpenPose в реальном времени с визуальной обратной связью - Индивидуальное редактирование keypoints рук в отдельном увеличенном редакторе - Современный нативный движок рендеринга Canvas (быстрее, плавнее, меньше движущихся частей) - Интерактивный UX редактирования: чёткое активное выделение + предварительный выбор позы при наведении - Ограниченные трансформации, не допускающие выход keypoints за границы canvas - Импорт/экспорт JSON для отдельных поз и коллекций поз - Стандартный экспорт JSON OpenPose (совместим с другими инструментами) - Совместимость с legacy JSON (может загружать и правильно редактировать устаревший нестандартный JSON) ✨ **Расширенные возможности** - **Render Toggles**: Опциональный рендеринг Body / Hands / Face - **Pose Gallery**: Просмотр и предварительный просмотр поз из `poses/` - **Pose Collections**: Многопозиционные JSON-файлы, отображаемые как отдельные выбираемые позы - **Pose Merger**: Объединение нескольких JSON-файлов в организованные коллекции - **Quick Cleanup Actions**: Удаление keypoints Face и/или keypoints левой/правой руки при их наличии - **Optional Cleanup on Export**: Удаление keypoints Face и/или Hands при экспорте пакетов поз - **Background Overlay System**: Выбираемые режимы Contain/Cover с управлением непрозрачностью - **Undo**: Полная история редактирования в течение сессии ✨ **Работа с данными** - Автоматическое обнаружение файлов поз из `poses/` (включая подкаталоги) - Валидация и восстановление после ошибок для некорректных JSON-файлов - Поддержка частичных поз (подмножество keypoints тела) - Координаты в пиксельном пространстве, соответствующие файлам поз для полной совместимости ✨ **UI и интеграция** - Полностью адаптивный макет: подстраивается под любой размер окна в реальном времени и остаётся по центру - Автоматическое масштабирование, если canvas иначе не умещается на экране - Улучшенная визуализация canvas: фоновая сетка + центральные оси в стиле Blender - Сохранение состояния после перезапуска: режим просмотра галереи + настройки наложения фона восстанавливаются при запуске - Нативные интеграции ComfyUI: уведомления + диалоги (с безопасным fallback) ## Адаптивный мобильный интерфейс OpenPose Studio полностью адаптирован для мобильных браузеров и сенсорного управления. Editor сохраняет удобство работы с canvas на узких экранах, выводит инструменты Preset и COCO Keypoints в отдельных представлениях и предлагает компактную Gallery с несколькими вариантами плотности миниатюр.

Адаптивный мобильный интерфейс OpenPose Studio с представлениями Canvas, Preset, COCO Keypoints и Gallery

Редактирование canvas, элементы управления Preset, управление отсутствующими keypoints и режим Small Icons в Gallery на Android.

--- Если у вас есть идея новой функции, буду рад её услышать — возможно, мы сможем реализовать её быстро. Отправляйте отзывы, идеи или предложения через страницу Issues репозитория: https://github.com/andreszs/comfyui-openpose-studio/issues ## Установка ### Требования - ComfyUI (актуальная сборка) - Python 3.10+ ### Вариант 1: нативный Extension Manager (рекомендуется) 1. Откройте нативный **Extension Manager** в ComfyUI, затем **Nodes Manager**. 2. Найдите `openpose-studio` и выберите **OpenPose Studio**. 3. Нажмите **Install** и перезапустите ComfyUI после завершения установки.

Установка OpenPose Studio через нативный Extension Manager в ComfyUI

### Вариант 2: ручная установка Откройте терминал в `ComfyUI/custom_nodes/` и клонируйте репозиторий: ```bash git clone https://github.com/andreszs/comfyui-openpose-studio.git ``` После клонирования репозитория перезапустите ComfyUI. ### Проверка установки Убедитесь, что **OpenPose Studio** появился в меню нод в разделе `image > OpenPose Studio`. --- ## Использование ### Базовый рабочий процесс 1. Добавить node **OpenPose Studio** в рабочий процесс 2. Кликнуть по превью-canvas ноды, чтобы открыть UI редактора 3. Выбрать позу из пресетов или галереи для вставки на canvas 4. Настроить keypoints, перетаскивая их на canvas 5. Нажать **Apply** для рендеринга позы. Это создаст сериализованный JSON в ноде. 6. Подключить выход `image` к последующим image-нодам 7. Подключить выход `kps` к нодам, совместимым с ControlNet/OpenPose ### Предварительный просмотр редактора ![OpenPose Studio UI](../locales/ru/openpose-studio.png) ### Редактирование рук Импортированные руки OpenPose можно трансформировать целиком или настраивать по одному keypoint. Выберите руку на canvas, чтобы отобразить рамку трансформации, и используйте расположенные вокруг элементы управления для изменения размера, поворота, отражения или открытия отдельного редактора руки. ![Выбранная рука с элементами управления трансформацией и редактированием](../locales/ru/openpose-studio-hand-tools-2.png) Отдельный редактор также можно открыть с помощью значка карандаша рядом с **Left hand** или **Right hand** на боковой панели. В этом режиме перетаскивайте keypoints 1–20 для настройки пальцев; keypoint 0 остаётся заблокированным якорем руки. При наведении на строку боковой панели подсвечивается соответствующая точка. Кнопка подтверждения применяет всю сессию как одно отменяемое изменение, а кнопка закрытия или **Escape** отменяет её. ![Отдельный редактор keypoints руки](../locales/ru/openpose-studio-hand-editor-2.png) --- ## Nodes ### OpenPose Studio **Категория:** `image` - **Вход:** `Pose JSON` (STRING) — стандартный JSON в стиле OpenPose. - **Необязательные входы:** - `areas` (`CONDITIONING_AREAS`) — данные overlay областей; подключить выход `areas_out` ноды [Conditioning Pipeline (Combine)](https://github.com/andreszs/comfyui-lora-pipeline), чтобы визуализировать области кондиционирования на canvas - **Опции:** - `render body` — включить body в рендерированное изображение предпросмотра/вывода - `render hands` — включить hands в рендерированное изображение предпросмотра/вывода (если присутствуют в JSON) - `render face` — включить face в рендерированное изображение предпросмотра/вывода (если присутствует в JSON) - **Выходы:** - `IMAGE` — Рендерированная визуализация позы в виде RGB-изображения (float32, диапазон 0-1) - `JSON` — JSON в стиле OpenPose с размерами canvas и массивом people, содержащим данные keypoints - `KPS` — Данные keypoints в формате POSE_KEYPOINT, совместимом с ControlNet - **UI:** Кликнуть на превью ноды, чтобы открыть интерактивный редактор. Использовать кнопку **open editor** (значок карандаша) для прямого редактирования позы. #### Скриншот ноды ![OpenPose Studio node](../locales/ru/openpose-studio-node.png) --- ## Управление и горячие клавиши редактора ### Горячие клавиши | Управление | Действие | |---------|--------| | **Enter** | Применить позу и закрыть редактор | | **Escape** | Отмена и сброс изменений | | **Ctrl+Z** | Отменить последнее действие | | **Ctrl+Y** | Повторить последнее отменённое действие | | **Delete** | Удалить выбранный keypoint | ### Взаимодействие с canvas - **Клик**: Выбрать keypoint - **Перетаскивание**: Переместить keypoint в новое положение - **Прокрутка**: Масштабирование canvas (TO-DO) ### Background Reference Загрузка изображений-ссылок (например, анатомические руководства, фотографии) в качестве неразрушающих наложений при редактировании позы. Режим **Contain** для вписывания изображений в canvas, режим **Cover** для заполнения canvas. Прозрачность регулируется по необходимости. - **Load Image**: Импортировать изображение-ссылку с диска - **Contain/Cover**: Выбрать режим масштабирования - **Opacity**: Регулировать прозрачность (0-100%) > [!NOTE] > Фоновые изображения сохраняются в течение сессии ComfyUI, но **не** сохраняются в рабочих процессах. ### Areas Input Вход **areas** — это **необязательное** подключение, которое отображает границы областей кондиционирования на canvas во время редактирования позы. Подключите выход `areas_out` ноды [**Conditioning Pipeline (Combine)**](https://github.com/andreszs/comfyui-lora-pipeline) из репозитория [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline), чтобы визуализировать целевые регионы каждой области при позиционировании поз. ![Подключение входа areas — выход areas_out Conditioning Pipeline (Combine) подключён к входу areas OpenPose Studio](../locales/en/openpose-studio-areas-input.png) Каждая область отображается в виде подписанного значка на canvas. Нажмите на значок, чтобы **включить или отключить** соответствующую область отдельно, что позволяет сосредоточиться на регионах, важных для текущей позы. ![Areas Input](../locales/ru/openpose-studio-areas.png) Эта комбинация особенно полезна при создании workflows с несколькими персонажами: [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline) управляет кондиционированием по областям и назначением LoRA, тогда как OpenPose Studio обеспечивает точное позиционирование поз в каждом регионе. В результате получается простая и неразрушающая конфигурация, в которой LoRA как по областям, так и по позам могут применяться одновременно без взаимных помех. Если вы ещё не знакомы с кондиционированием на основе областей, расширение [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline) создано именно для такого типа workflow и отлично сочетается с этой нодой. Реальный пример совместного использования всех трёх репозиториев — кондиционирование областей, управление OpenPose и наложение стилей — можно найти в этом [пошаговом руководстве по workflow](https://www.andreszsogon.com/building-a-multi-character-comfyui-workflow-with-area-conditioning-openpose-control-and-style-layering/). --- ## Спецификации формата Этот редактор полностью поддерживает редактирование **OpenPose COCO-18 (body)** и индивидуальное редактирование **keypoints рук OpenPose**. Keypoints лица сохраняются и рендерятся, но остаются данными *pass-through* и пока не могут редактироваться по отдельности. ### Keypoints OpenPose COCO-18 (body) COCO-18 использует **18 keypoints тела**. Поза хранится как плоский массив с именем `pose_keypoints_2d` по шаблону: `[x0, y0, c0, x1, y1, c1, ...]` Где каждый keypoint имеет: - `x`, `y`: пиксельные координаты на canvas - `c`: достоверность (обычно `0..1`; `0` используется для «отсутствующих» точек) Порядок keypoints (индекс → название): | Индекс | Название | |------:|------| | 0 | Нос | | 1 | Шея | | 2 | Правое плечо | | 3 | Правый локоть | | 4 | Правое запястье | | 5 | Левое плечо | | 6 | Левый локоть | | 7 | Левое запястье | | 8 | Правое бедро | | 9 | Правое колено | | 10 | Правая лодыжка | | 11 | Левое бедро | | 12 | Левое колено | | 13 | Левая лодыжка | | 14 | Правый глаз | | 15 | Левый глаз | | 16 | Правое ухо | | 17 | Левое ухо | > [!NOTE] > **COCO** относится к соглашению/именованию набора данных *Common Objects in Context*, широко используемому в оценке позы. «COCO-18» здесь означает разметку body OpenPose с 18 keypoints. ### Минимальная структура JSON Типичный JSON в стиле OpenPose для одиночной позы включает размеры canvas и одну запись `people` с `pose_keypoints_2d`: ```json { "canvas_width": 512, "canvas_height": 512, "people": [ { "pose_keypoints_2d": [0, 0, 0, 0, 0, 0 /* ... 18 * 3 values total ... */] } ] } ``` > [!NOTE] > Редактор может обрабатывать частичные позы (часть keypoints отсутствует). Отсутствующие точки обычно представлены как 0,0,0. Также можно удалять дистальные keypoints с помощью Pose Editor. ### Дополнительное чтение - История и контекст: «What is OpenPose — Exploring a milestone in pose estimation» — доступная статья с объяснением появления OpenPose и его влияния на оценку позы: https://www.ultralytics.com/blog/what-is-openpose-exploring-a-milestone-in-pose-estimation ### Формат JSON: стандартный и legacy - **OpenPose Studio:** читает/записывает **стандартный JSON в стиле OpenPose** и также принимает старый legacy JSON. Практические заметки: - Вставка стандартного JSON в node OpenPose Studio немедленно отображает предпросмотр. --- ## Галерея и управление позами ### Обзор Вкладка **Gallery** обеспечивает визуальный просмотр всех доступных поз с миниатюрами предварительного просмотра в реальном времени. Автоматически обнаруживает и организует позы без ручной настройки. ![Pose Gallery](../locales/ru/openpose-studio-gallery-showcase.png) ### Режимы просмотра Gallery поддерживает четыре режима отображения: - **Large** — крупные миниатюры для быстрого визуального выбора - **Medium** — сбалансированный размер и плотность миниатюр - **Small** — плотная сетка значков, оптимизированная для узких и мобильных интерфейсов - **Tiles** — компактная сетка с дополнительными метаданными (например, **размер canvas**, **количество keypoints** и другие подробности позы) ### Функции - **Auto-discovery**: Сканирует каталог `poses/` при запуске - **Nested organization**: Имена подкаталогов становятся метками групп - **Live preview**: Рендеринг миниатюр в реальном времени для каждой позы - **Search/filter**: Поиск поз по имени или группе - **One-click load**: Выбор позы для загрузки в редактор ### Поддерживаемые типы файлов - **Single-pose JSON**: Отдельные JSON-файлы OpenPose - **Pose Collections**: Многопозиционные JSON-файлы (каждая поза отображается отдельно) - **Nested directories**: Позы в подкаталогах автоматически группируются ### Детерминированное поведение Порядок и обнаружение в галерее полностью детерминированы: - Без случайного перемешивания - Последовательная сортировка по алфавиту - Корневые позы перечислены первыми, затем сгруппированные позы - Немедленная перезагрузка всех JSON-поз при открытии окна редактора. --- ## Pose Merger ### Назначение Вкладка **Pose Merger** объединяет несколько отдельных JSON-файлов поз в организованные файлы коллекций поз. Это полезно для: - Преобразования больших библиотек поз в единые файлы - Очистки данных поз (удаление keypoints face/hand) - Реорганизации и переименования поз - Эффективного распространения пакетов поз ### Рабочий процесс 1. **Add Files**: Загрузить отдельные или коллекционные JSON-файлы 2. **Preview**: Каждая поза отображается с миниатюрой 3. **Configure**: Опционально исключить компоненты face/hand 4. **Export**: Сохранить как объединённую коллекцию или отдельные файлы ### Ключевые возможности | Функция | Применение | |---------|----------| | **Load Multiple Files** | Массовый импорт из файловой системы | | **Component Filtering** | Удаление ненужных данных face/hand | | **Collection Expansion** | Извлечение поз из существующих коллекций | | **Batch Renaming** | Присвоение значимых имён при экспорте | | **Selective Export** | Выбор включаемых поз | ### Варианты вывода - **Combined Collection**: Единый JSON со всеми позами - **Individual Files**: Один файл на позу (для совместимости) Оба формата вывода автоматически подхватываются Gallery и Pose Selector. --- ## Render Модуль **Render** позволяет настраивать, как OpenPose stickman отрисовывается при выполнении workflow. Он включает настройки стиля для body, hands и face, такие как толщина линий, радиус keypoint и цвет keypoint для hands/face. Настройки Render сохраняются локально в local storage этого браузера, а не в workflow. Их изменение влияет на последующие выполнения workflow. ![OpenPose Studio Render module](../locales/en/openpose-studio-render.png) --- ## Известные ограничения > [!NOTE] > Nodes 2.0 поддерживается. Если отсутствует canvas предпросмотра или кнопка редактора, проверьте кеш браузера, загрузку frontend и логи установки. ### Текущие ограничения и обходные пути 1. **Редактирование лица** - Keypoints лица сохраняются и рендерятся, но пока не могут редактироваться по отдельности на canvas. 2. **Согласованность разрешения** - Проблема: Pose Merger не унифицирует автоматически разрешение при экспорте коллекций - Статус: Требует тщательной реализации во избежание обрезки - Обходной путь: Предварительно масштабировать позы до целевого разрешения перед импортом 3. **Совместимость с Nodes 2.0** - Статус: Поддерживается в текущих версиях. - Примечание: Если UI редактора не появляется, наиболее вероятные причины — устаревший кеш браузера, ошибка загрузки frontend-модулей или неполная установка. - Диагностика: Полностью перезапустите ComfyUI, выполните жёсткое обновление браузера и проверьте консоль браузера вместе с логом запуска ComfyUI. ### Восстановление после ошибок Плагин включает защитную обработку ошибок: - Некорректные JSON-файлы тихо пропускаются в Gallery - Ошибки рендеринга возвращают пустые изображения вместо сбоя - Отсутствующие метаданные используют безопасные значения по умолчанию - Некорректные keypoints фильтруются при рендеринге --- ## Устранение неполадок ### Частые проблемы и решения **Позы не появляются в Gallery** ``` ✓ Убедиться, что файлы существуют в каталоге poses/ ✓ Проверить корректность JSON (использовать онлайн-валидатор JSON) ✓ Проверить расширение файла .json (чувствительно к регистру на Linux) ✓ Перезапустить ComfyUI для запуска обнаружения ✓ Проверить консоль браузера (F12) на наличие сообщений об ошибках ``` **Импорт JSON завершается ошибкой** ``` ✓ Проверить структуру JSON (должен иметь "pose_keypoints_2d" или аналог) ✓ Убедиться, что координаты — допустимые числа, а не строки ✓ Подтвердить минимум 18 keypoints для body-поз ✓ Проверить некорректные escape-последовательности в JSON ``` **Пустое выходное изображение** ``` ✓ Проверить, что поза выбрана и содержит допустимые keypoints ✓ Проверить размеры canvas (ширина/высота) в разумных пределах (100-2048px) ✓ Нажать Apply для рендеринга после внесения изменений ✓ Проверить наличие NaN или бесконечных значений в координатах ``` **Background reference не сохраняется** ``` ✓ Включить сторонние куки/хранилище в браузере ✓ Проверить настройки localStorage браузера ✓ Попробовать режим инкогнито для изоляции проблемы ✓ Очистить кэш браузера и попробовать снова ``` **Node не появляется в ComfyUI** ``` ✓ Проверить расположение клона: ComfyUI/custom_nodes/comfyui-openpose-studio ✓ Убедиться, что __init__.py существует и корректно импортируется ✓ Полностью перезапустить ComfyUI (не просто перезагрузить страницу) ✓ Проверить консоль ComfyUI на наличие ошибок импорта ``` --- ## Участие в разработке Рекомендации по вкладу, требования к pull request, архитектурные подробности и информацию о разработке см. в [CONTRIBUTING.md](../CONTRIBUTING.md). При использовании ИИ-агента для помощи в разработке убедитесь, что он прочёл [AGENTS.md](../AGENTS.md) перед внесением изменений в код. --- ## Финансирование и поддержка ### Почему ваша поддержка важна Этот плагин разрабатывается и поддерживается независимо, с регулярным использованием **платных ИИ-агентов** для ускорения отладки, тестирования и улучшения качества работы. Если вы находите его полезным, финансовая поддержка помогает поддерживать стабильный темп разработки. Ваш вклад помогает: * Финансировать ИИ-инструменты для более быстрых исправлений и новых функций * Покрывать текущее обслуживание и работу по совместимости с обновлениями ComfyUI * Предотвращать замедления разработки при достижении лимитов использования > [!TIP] > Нет возможности пожертвовать? Звезда GitHub ⭐ всё равно очень помогает, повышая видимость и привлекая больше пользователей. ### 💙 Поддержать этот проект

Ko-fi

Ko-fi Badge

Угостить кофе

PayPal

PayPal Badge

Открыть PayPal

USDC (только Arbitrum ⚠️)

USDC Badge

Показать адрес

Предпочитаете сканировать? Показать QR-коды
Ko-fi
Ko-fi QR Code
PayPal
PayPal QR Code
USDC (Arbitrum) ⚠️
USDC (Arbitrum) QR Code
Показать адрес USDC ```text 0xe36a336fC6cc9Daae657b4A380dA492AB9601e73 ``` > [!WARNING] > Отправляйте USDC только в сети Arbitrum One. Переводы в любой другой сети не дойдут и могут быть безвозвратно утеряны.
--- ## Лицензия Лицензия MIT — полный текст в файле [LICENSE](../LICENSE). **Краткое описание:** - ✓ Бесплатно для коммерческого использования - ✓ Бесплатно для частного использования - ✓ Изменение и распространение - ✓ Включить лицензию и уведомление об авторских правах --- ## Дополнительные ресурсы ### Связанные проекты - [ComfyUI](https://github.com/comfyanonymous/ComfyUI) - Основной фреймворк - [comfyui_controlnet_aux](https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet) - Поддержка ControlNet - [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) - Оригинальное обнаружение поз ### Документация - [ComfyUI Custom Nodes Guide](https://github.com/comfyanonymous/ComfyUI/blob/main/docs/) - [OpenPose Models & Keypoints](https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/02_Output.md) - [Canvas 2D API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) - Движок рендеринга ### Руководства по устранению неполадок - [ComfyUI Installation Issues](https://github.com/comfyanonymous/ComfyUI/wiki/Installation) - [Node Registration & Loading](https://github.com/comfyanonymous/ComfyUI/blob/main/docs/CONTRIBUTING.md) - [Browser Developer Tools](https://developer.chrome.com/docs/devtools/) --- **Поддерживается:** andreszs **Статус:** Активная разработка