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

Version Last Commit License


# OpenPose Studio for ComfyUI 🤸 OpenPose Studio é uma extensão avançada para ComfyUI que permite criar, editar, visualizar e organizar poses OpenPose com uma interface prática e fluida. Ela facilita o ajuste visual de keypoints, o salvamento e carregamento de arquivos de poses, a navegação por presets e galerias de poses, o gerenciamento de coleções, a fusão de múltiplas poses e a exportação de dados JSON limpos para uso com ControlNet e outros workflows guiados por poses. --- ## Índice - ✨ [Funcionalidades](#funcionalidades) - 📱 [Interface móvel responsiva](#interface-móvel-responsiva) - 📦 [Instalação](#instalação) - 🎯 [Uso](#uso) - 🖐️ [Edição de mãos](#edição-de-mãos) - 🔧 [Nodes](#nodes) - ⌨️ [Controles e atalhos do editor](#controles-e-atalhos-do-editor) - 📋 [Especificações de formato](#especificações-de-formato) - 🖼️ [Galeria e gerenciamento de poses](#galeria-e-gerenciamento-de-poses) - 🔀 [Pose Merger](#pose-merger) - 🎨 [Render](#render) - 🖼️ [Referência de fundo](#background-reference) - 🗺️ [Areas Input](#areas-input) - ⚠️ [Limitações conhecidas](#limitações-conhecidas) - 🔍 [Solução de problemas](#solução-de-problemas) - 🤝 [Contribuindo](#contribuindo) - 💙 [Financiamento e suporte](#financiamento-e-suporte) - 📄 [Licença](#licença) --- ## Funcionalidades ✨ **Capacidades principais** - Edição de keypoints OpenPose em tempo real com feedback visual - Edição individual de keypoints das mãos em um editor focado e ampliado - Motor de renderização Canvas nativo moderno (mais rápido, mais suave, menos peças móveis) - UX de edição interativa: seleção ativa clara + pré-seleção de pose no hover - Transformações restritas para que keypoints não fujam dos limites do canvas - Importação/exportação JSON para poses individuais e coleções de poses - Exportação JSON padrão OpenPose (portátil para outras ferramentas) - Compatibilidade JSON legacy (pode carregar e editar corretamente JSON não-padrão mais antigos) ✨ **Funcionalidades avançadas** - **Render Toggles**: Renderizar opcionalmente Body / Hands / Face - **Pose Gallery**: Navegar e visualizar poses de `poses/` - **Pose Collections**: Arquivos JSON multi-pose exibidos como poses individualmente selecionáveis - **Pose Merger**: Combinar múltiplos arquivos JSON em coleções organizadas - **Quick Cleanup Actions**: Remover keypoints Face e/ou keypoints de Mão esquerda/direita quando presentes - **Optional Cleanup on Export**: Remover keypoints Face e/ou Hands ao exportar pacotes de poses - **Background Overlay System**: Modos Contain/Cover selecionáveis com controle de opacidade - **Undo**: Histórico completo de edição durante a sessão ✨ **Manipulação de dados** - Descoberta automática de arquivos de pose em `poses/` (incluindo subdiretórios) - Validação e recuperação de erros para arquivos JSON malformados - Suporte a poses parciais (subconjunto de keypoints body) - Coordenadas em espaço de pixel correspondendo aos arquivos de pose para compatibilidade perfeita ✨ **UI e integração** - Layout totalmente responsivo: adapta-se em tempo real a qualquer tamanho de janela e permanece centralizado - Escalonamento automático quando o canvas não caberia na tela - Visuais aprimorados do canvas: grade de fundo + eixos centrais estilizados como no Blender - Persistência entre reinicializações: modo de visualização da galeria + configurações de overlay de fundo restauradas no lançamento - Integrações nativas do ComfyUI: toasts + diálogos (com fallback seguro) ## Interface móvel responsiva O OpenPose Studio é totalmente responsivo e compatível com controles por toque em navegadores móveis. O Editor mantém o canvas utilizável em telas estreitas, apresenta as ferramentas de Preset e COCO Keypoints como visualizações focadas e oferece uma Gallery compacta com várias densidades de miniaturas.

Interface móvel responsiva do OpenPose Studio com as visualizações Canvas, Preset, COCO Keypoints e Gallery

Edição no canvas, controles de Preset, gerenciamento de keypoints ausentes e visualização Small Icons da Gallery no Android.

--- Se você tiver uma ideia para uma nova funcionalidade, adoraria ouvi-la — podemos ser capazes de implementá-la rapidamente. Envie feedback, ideias ou sugestões pela página de Issues do repositório: https://github.com/andreszs/comfyui-openpose-studio/issues ## Instalação ### Requisitos - ComfyUI (build recente) - Python 3.10+ ### Opção 1: Extension Manager nativo (recomendada) 1. Abra o **Extension Manager** nativo do ComfyUI e depois o **Nodes Manager**. 2. Pesquise `openpose-studio` e selecione **OpenPose Studio**. 3. Clique em **Install** e reinicie o ComfyUI quando a instalação terminar.

Instalação do OpenPose Studio pelo Extension Manager nativo do ComfyUI

### Opção 2: Instalação manual Abra um terminal em `ComfyUI/custom_nodes/` e clone o repositório: ```bash git clone https://github.com/andreszs/comfyui-openpose-studio.git ``` Reinicie o ComfyUI depois de clonar o repositório. ### Verificar a instalação Confirme que **OpenPose Studio** aparece no menu de nodes em `image > OpenPose Studio`. --- ## Uso ### Workflow básico 1. Adicionar o node **OpenPose Studio** ao seu workflow 2. Clicar no canvas de pré-visualização do node para abrir a UI do editor 3. Selecionar uma pose dos presets ou da galeria para inserir no canvas 4. Ajustar os keypoints arrastando-os no canvas 5. Clicar em **Apply** para renderizar a pose. Isso criará o JSON serializado no node. 6. Conectar a saída `image` aos nodes de imagem subsequentes 7. Conectar a saída `kps` aos nodes compatíveis com ControlNet/OpenPose ### Pré-visualização do editor ![OpenPose Studio UI](../locales/pt/openpose-studio.png) ### Edição de mãos As mãos OpenPose importadas podem ser transformadas como um grupo ou refinadas keypoint por keypoint. Selecione uma mão no canvas para exibir sua caixa de transformação e use os controles ao redor para redimensionar, girar, espelhar ou abrir o editor focado de mãos. ![Mão selecionada com controles de transformação e edição](../locales/pt/openpose-studio-hand-tools-2.png) Você também pode abrir o editor focado diretamente pelo ícone de lápis ao lado de **Left hand** ou **Right hand** na barra lateral. Nessa visualização, arraste os keypoints 1–20 para ajustar os dedos; o keypoint 0 permanece bloqueado como âncora da mão. Passar o mouse sobre uma entrada da barra lateral destaca o ponto correspondente. Use o botão de confirmação para aplicar toda a sessão como uma única alteração que pode ser desfeita, ou o botão de fechar ou **Escape** para descartá-la. ![Editor focado de keypoints da mão](../locales/pt/openpose-studio-hand-editor-2.png) --- ## Nodes ### OpenPose Studio **Categoria:** `image` - **Entrada:** `Pose JSON` (STRING) — JSON padrão estilo OpenPose. - **Entradas opcionais:** - `areas` (`CONDITIONING_AREAS`) — dados de overlay de áreas; conectar a saída `areas_out` de um node [Conditioning Pipeline (Combine)](https://github.com/andreszs/comfyui-lora-pipeline) para visualizar as regiões de condicionamento no canvas - **Opções:** - `render body` — incluir body na imagem de pré-visualização/saída renderizada - `render hands` — incluir hands na imagem de pré-visualização/saída renderizada (se presentes no JSON) - `render face` — incluir face na imagem de pré-visualização/saída renderizada (se presente no JSON) - **Saídas:** - `IMAGE` — Visualização renderizada da pose como imagem RGB (float32, intervalo 0-1) - `JSON` — JSON estilo OpenPose com dimensões do canvas e array people contendo dados de keypoints - `KPS` — Dados de keypoints no formato POSE_KEYPOINT, compatível com ControlNet - **UI:** Clicar na pré-visualização do node para abrir o editor interativo. Usar o botão **open editor** (ícone de lápis) para editar a pose diretamente. #### Captura de tela do node ![OpenPose Studio node](../locales/pt/openpose-studio-node.png) --- ## Controles e atalhos do editor ### Atalhos de teclado | Controle | Ação | |---------|--------| | **Enter** | Aplicar pose e fechar o editor | | **Escape** | Cancelar e descartar alterações | | **Ctrl+Z** | Desfazer última ação | | **Ctrl+Y** | Refazer última ação desfeita | | **Delete** | Remover keypoint selecionado | ### Interações com o canvas - **Clique**: Selecionar keypoint - **Arrastar**: Mover keypoint para nova posição - **Scroll**: Zoom in/out no canvas (TO-DO) ### Background Reference Carregar imagens de referência (ex. guias de anatomia, referências fotográficas) como sobreposições não-destrutivas durante a edição de poses. Usar o modo **Contain** para ajustar imagens dentro do canvas ou o modo **Cover** para preencher o canvas. Ajustar a opacidade conforme necessário. - **Load Image**: Importar imagem de referência do disco - **Contain/Cover**: Escolher modo de escalonamento - **Opacity**: Ajustar transparência (0-100%) > [!NOTE] > Imagens de fundo persistem durante a sessão do ComfyUI mas **não** são salvas nos workflows. ### Areas Input A entrada **areas** é uma conexão **opcional** que sobrepõe os limites das áreas de condicionamento no canvas durante a edição de poses. Conecte a saída `areas_out` do node [**Conditioning Pipeline (Combine)**](https://github.com/andreszs/comfyui-lora-pipeline) do repositório [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline) para visualizar quais regiões cada área visa enquanto posiciona suas poses. ![Conexão da entrada areas — areas_out de Conditioning Pipeline (Combine) conectado à entrada areas do OpenPose Studio](../locales/en/openpose-studio-areas-input.png) Cada área é exibida como um badge rotulado no canvas. Clique em qualquer badge para **habilitar ou desabilitar** essa área individualmente, permitindo que você se concentre nas regiões relevantes para a pose atual. ![Areas Input](../locales/pt/openpose-studio-areas.png) Essa combinação é particularmente útil ao construir workflows com múltiplos personagens: o [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline) gerencia o condicionamento por área e a atribuição de LoRA, enquanto o OpenPose Studio mantém o posicionamento preciso das poses dentro de cada região. O resultado é uma configuração direta e não destrutiva onde LoRAs por área e por pose podem ser aplicados simultaneamente sem interferência. Se você ainda não conhece o condicionamento baseado em áreas, a extensão [ComfyUI-LoRA-Pipeline](https://github.com/andreszs/comfyui-lora-pipeline) foi projetada exatamente para esse tipo de workflow e se integra bem com este node. Para um exemplo real dos três repositórios trabalhando juntos — condicionamento por áreas, controle de OpenPose e aplicação de estilos em camadas — veja este [guia passo a passo do workflow](https://www.andreszsogon.com/building-a-multi-character-comfyui-workflow-with-area-conditioning-openpose-control-and-style-layering/). --- ## Especificações de formato Este editor oferece suporte completo à edição **OpenPose COCO-18 (body)** e à edição individual de **keypoints de mãos OpenPose**. Os keypoints de face são preservados e renderizados, mas continuam como dados *pass-through* e atualmente não podem ser editados individualmente. ### Keypoints OpenPose COCO-18 (body) COCO-18 usa **18 keypoints body**. A pose é armazenada como um array plano chamado `pose_keypoints_2d` com o padrão: `[x0, y0, c0, x1, y1, c1, ...]` Onde cada keypoint tem: - `x`, `y`: coordenadas em pixels no canvas - `c`: confiança (comumente `0..1`; `0` pode ser usado para pontos "ausentes") Ordem dos keypoints (índice → nome): | Índice | Nome | |------:|------| | 0 | Nariz | | 1 | Pescoço | | 2 | Ombro direito | | 3 | Cotovelo direito | | 4 | Pulso direito | | 5 | Ombro esquerdo | | 6 | Cotovelo esquerdo | | 7 | Pulso esquerdo | | 8 | Quadril direito | | 9 | Joelho direito | | 10 | Tornozelo direito | | 11 | Quadril esquerdo | | 12 | Joelho esquerdo | | 13 | Tornozelo esquerdo | | 14 | Olho direito | | 15 | Olho esquerdo | | 16 | Orelha direita | | 17 | Orelha esquerda | > [!NOTE] > **COCO** refere-se à convenção/nomenclatura de dataset *Common Objects in Context* amplamente usada em estimação de pose. "COCO-18" aqui significa o layout body do OpenPose com 18 keypoints. ### Estrutura JSON mínima Um JSON típico estilo OpenPose para uma pose individual inclui dimensões do canvas e uma entrada `people` com `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] > O editor pode lidar com poses parciais (alguns keypoints ausentes). Pontos ausentes são tipicamente representados como 0,0,0. Você também pode deletar keypoints distais usando o Pose Editor. ### Leitura adicional - História e contexto: "What is OpenPose — Exploring a milestone in pose estimation" — um artigo acessível explicando como o OpenPose foi introduzido e seu impacto na estimação de pose: https://www.ultralytics.com/blog/what-is-openpose-exploring-a-milestone-in-pose-estimation ### Formato JSON: Padrão vs Legacy - **OpenPose Studio:** lê/escreve **JSON padrão estilo OpenPose** e também aceita JSON legacy não-padrão antigo. Notas práticas: - Colar JSON padrão no node OpenPose Studio renderiza a pré-visualização imediatamente. --- ## Galeria e gerenciamento de poses ### Visão geral A aba **Gallery** fornece navegação visual de todas as poses disponíveis com miniaturas de pré-visualização ao vivo. Descobre e organiza poses automaticamente sem configuração manual. ![Pose Gallery](../locales/pt/openpose-studio-gallery-showcase.png) ### Modos de visualização A Gallery suporta quatro modos de exibição: - **Large** — pré-visualizações maiores para seleção visual rápida - **Medium** — tamanho e densidade de pré-visualização equilibrados - **Small** — grade densa de ícones otimizada para layouts estreitos e móveis - **Tiles** — grade compacta com metadados extras (ex. **tamanho do canvas**, **contagem de keypoints** e outros detalhes da pose) ### Funcionalidades - **Auto-discovery**: Varre o diretório `poses/` na inicialização - **Nested organization**: Nomes de subdiretórios tornam-se rótulos de grupo - **Live preview**: Renderização de miniaturas ao vivo para cada pose - **Search/filter**: Encontrar poses por nome ou grupo - **One-click load**: Selecionar uma pose para carregá-la no editor ### Tipos de arquivo suportados - **Single-pose JSON**: Arquivos JSON OpenPose individuais - **Pose Collections**: Arquivos JSON multi-pose (cada pose exibida separadamente) - **Nested directories**: Poses em subdiretórios automaticamente agrupadas ### Comportamento determinístico Ordenação e descoberta da galeria são totalmente determinísticas: - Sem embaralhamento aleatório - Classificação alfabética consistente - Poses raiz listadas primeiro, depois poses agrupadas - Recarregamento imediato de todas as poses JSON ao abrir a janela do Editor. --- ## Pose Merger ### Propósito A aba **Pose Merger** consolida múltiplos arquivos JSON de poses individuais em arquivos de coleção de poses organizados. Isso é útil para: - Converter grandes bibliotecas de poses em arquivos únicos - Limpar dados de poses (remover keypoints face/hand) - Reorganizar e renomear poses - Distribuir pacotes de poses eficientemente ### Workflow 1. **Add Files**: Carregar arquivos JSON individuais ou de coleção 2. **Preview**: Cada pose exibida com miniatura 3. **Configure**: Opcionalmente excluir componentes face/hand 4. **Export**: Salvar como coleção combinada ou arquivos individuais ### Capacidades principais | Funcionalidade | Caso de uso | |---------|----------| | **Load Multiple Files** | Importação em massa do sistema de arquivos | | **Component Filtering** | Remover dados desnecessários de face/hand | | **Collection Expansion** | Extrair poses de coleções existentes | | **Batch Renaming** | Atribuir nomes significativos durante o export | | **Selective Export** | Escolher quais poses incluir | ### Opções de saída - **Combined Collection**: JSON único com todas as poses - **Individual Files**: Um arquivo por pose (para compatibilidade) Ambos os formatos de saída são automaticamente detectados pela Gallery e pelo Pose Selector. --- ## Render O módulo **Render** permite personalizar como o stickman do OpenPose é renderizado quando o workflow é executado. Ele inclui controles de estilo para body, hands e face, como largura de linha, raio de keypoint e cor de keypoint para hands/face. As configurações de Render são salvas localmente no local storage deste navegador, não no workflow. Alterá-las afeta as próximas execuções do workflow. ![OpenPose Studio Render module](../locales/en/openpose-studio-render.png) --- ## Limitações conhecidas > [!NOTE] > Nodes 2.0 é suportado. Se o canvas de preview ou o botão do editor estiver ausente, verifique o cache do navegador, o carregamento do frontend e os logs de instalação. ### Limitações atuais e alternativas 1. **Edição de Face** - Os keypoints de face são preservados e renderizados, mas atualmente não podem ser editados individualmente no canvas. 2. **Consistência de resolução** - Problema: Pose Merger não unifica automaticamente a resolução em exports de coleções - Status: Requer implementação cuidadosa para evitar recorte - Alternativa: Pré-escalar as poses para a resolução alvo antes de importar 3. **Compatibilidade com Nodes 2.0** - Status: Suportado nas versões atuais. - Nota: Se a UI do editor não aparecer, as causas mais prováveis são cache antigo do navegador, falha ao carregar módulos do frontend ou instalação incompleta. - Diagnóstico: Reinicie o ComfyUI completamente, force a atualização do navegador e verifique o console do navegador junto com o log de inicialização do ComfyUI. ### Recuperação de erros O plugin inclui tratamento defensivo de erros: - Arquivos JSON inválidos são ignorados silenciosamente na Gallery - Erros de renderização retornam imagens em branco em vez de crashar - Metadados ausentes utilizam padrões seguros - Keypoints malformados são filtrados durante a renderização --- ## Solução de problemas ### Problemas comuns e soluções **Poses não aparecem na Gallery** ``` ✓ Confirmar que os arquivos existem no diretório poses/ ✓ Verificar se o JSON é válido (usar validador JSON online) ✓ Verificar se a extensão do arquivo é .json (diferencia maiúsculas/minúsculas no Linux) ✓ Reiniciar o ComfyUI para acionar a descoberta ✓ Verificar o console do navegador (F12) por mensagens de erro ``` **Importação JSON falha** ``` ✓ Validar a estrutura JSON (deve ter "pose_keypoints_2d" ou equivalente) ✓ Garantir que as coordenadas são números válidos, não strings ✓ Confirmar mínimo de 18 keypoints para poses body ✓ Verificar sequências de escape malformadas no JSON ``` **Imagem de saída em branco** ``` ✓ Verificar se a pose está selecionada e contém keypoints válidos ✓ Verificar as dimensões do canvas (largura/altura) razoáveis (100-2048px) ✓ Clicar em Apply para renderizar após fazer alterações ✓ Verificar por valores NaN ou infinitos nas coordenadas ``` **Background reference não persiste** ``` ✓ Habilitar cookies/armazenamento de terceiros no navegador ✓ Verificar configurações de localStorage do navegador ✓ Tentar modo incógnito para isolar o problema ✓ Limpar cache do navegador e tentar novamente ``` **Node não aparece no ComfyUI** ``` ✓ Verificar o local do clone: ComfyUI/custom_nodes/comfyui-openpose-studio ✓ Verificar se __init__.py existe e importa corretamente ✓ Reiniciar o ComfyUI completamente (não apenas recarregar a página) ✓ Verificar o console do ComfyUI por erros de importação ``` --- ## Contribuindo Para diretrizes de contribuição, diretrizes de pull request, detalhes de arquitetura e informações de desenvolvimento, ver [CONTRIBUTING.md](../CONTRIBUTING.md). Se usar um agente de IA para auxiliar no desenvolvimento, certifique-se de que ele leia [AGENTS.md](../AGENTS.md) antes de fazer qualquer alteração no código. --- ## Financiamento e suporte ### Por que seu suporte é importante Este plugin é desenvolvido e mantido de forma independente, com uso regular de **agentes de IA pagos** para acelerar depuração, testes e melhorias de qualidade de vida. Se você o achar útil, o suporte financeiro ajuda a manter o desenvolvimento avançando constantemente. Sua contribuição ajuda a: * Financiar ferramentas de IA para correções mais rápidas e novas funcionalidades * Cobrir manutenção contínua e trabalho de compatibilidade nas atualizações do ComfyUI * Prevenir desacelerações no desenvolvimento quando os limites de uso são atingidos > [!TIP] > Não pode doar? Uma estrela GitHub ⭐ ainda ajuda muito melhorando a visibilidade e alcançando mais usuários. ### 💙 Apoiar este projeto

Ko-fi

Ko-fi Badge

Pagar um café

PayPal

PayPal Badge

Abrir PayPal

USDC (somente Arbitrum ⚠️)

USDC Badge

Mostrar endereço

Prefere escanear? Mostrar QR codes
Ko-fi
Ko-fi QR Code
PayPal
PayPal QR Code
USDC (Arbitrum) ⚠️
USDC (Arbitrum) QR Code
Mostrar endereço USDC ```text 0xe36a336fC6cc9Daae657b4A380dA492AB9601e73 ``` > [!WARNING] > Enviar USDC somente na Arbitrum One. Transferências enviadas em qualquer outra rede não chegarão e podem ser permanentemente perdidas.
--- ## Licença Licença MIT — ver o arquivo [LICENSE](../LICENSE) para o texto completo. **Resumo:** - ✓ Gratuito para uso comercial - ✓ Gratuito para uso privado - ✓ Modificar e distribuir - ✓ Incluir licença e aviso de copyright --- ## Recursos adicionais ### Projetos relacionados - [ComfyUI](https://github.com/comfyanonymous/ComfyUI) - Framework principal - [comfyui_controlnet_aux](https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet) - Suporte ControlNet - [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) - Detecção de pose original ### Documentação - [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) - Motor de renderização ### Guias de solução de problemas - [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/) --- **Mantido por:** andreszs **Status:** Desenvolvimento ativo