Commit Graph
13 Commits
Author SHA1 Message Date
grmchn 3f3fcf3a28 Add PoseData to pose_keypoint converter node 2025-12-13 15:10:42 +09:00
gear_machineandClaude 4523ed0b49 Temporarily disable KeyPoint Denoiser nodes due to Kalman filter stability issues
### Changes
- Comment out ProportionChangerKeypointDenoiser and ProportionChangerKeypointDenoiserAdvanced in nodes.py
- Keep full algorithm implementation in proportion_changer/keypoint_denoiser/ for future development

### Issues Identified
- Kalman filter observation acceptance rate too low (1.7-6.1%)
- Mahalanobis distances abnormally high (thousands to millions)
- Keypoint drift phenomenon causing human shape distortion
- Constant velocity model inappropriate for human motion

### Technical Details
- Root cause: Inappropriate process noise vs observation noise balance
- Secondary issues: Velocity model persistence causing drift
- Attempted fixes: Noise parameter tuning, velocity decay, gate threshold relaxation
- Result: Insufficient improvement, fundamental model revision needed

### Future Development
- Consider position-only models or adaptive filtering approaches
- Evaluate LSTM/Transformer-based alternatives for human motion
- Implement robust statistical methods (median filtering)
- Add motion type classification for specialized optimization

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-22 14:28:43 +09:00
gear_machineandClaude 045e769fa7 Fix node naming and input requirements for better UX
- Rename KeyPoint Denoiser nodes to shorter "Denoiser" names
- Move Advanced Denoiser to main ProportionChanger category
- Fix DWPose Render node: move pose_keypoint to required inputs
- Ensure proper parameter ordering for ComfyUI compatibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-22 07:49:07 +09:00
gear_machineandClaude d2a7ec38a5 Implement KeyPoint Denoiser with Kalman filter-based noise reduction (Issue024)
- Add sophisticated 7-stage denoising pipeline using Kalman filters
- Support temporal smoothing for dance video pose keypoints
- Include two ComfyUI node variants: basic and advanced parameter control
- Comprehensive error handling and fallback to original data on errors
- Performance: 4-8ms/frame with 90%+ observation acceptance rates

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 19:16:51 +09:00
gear_machineandClaude a070a2e852 Reorganize node display order in ComfyUI menu
Reorder NODE_CLASS_MAPPINGS to preferred sequence:
1. ProportionChanger DWPose Render
2. ProportionChanger DWPose Detector
3. ProportionChanger Reference
4. ProportionChanger Params
5. ProportionChanger Interpolator

This provides a more logical workflow order in ComfyUI's node menu.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 15:54:19 +09:00
gear_machineandClaude 7c70d7fc0f Fix Issue019: Remove deprecated DWPose detector nodes properly
- Remove ProportionChangerUniAnimateDWPoseDetector from nodes.py and mappings
- Remove ProportionChangerUniAnimateDWPoseDetector from proportion_changer module
- Delete ProportionChangerUltimateUniAnimateDWPoseDetector class (973 lines)
- Delete ProportionChangerDWPoseDetectorForPoseKeypoint class (462 lines)
- Clean up NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS
- Preserve ProportionChangerDWPoseDetector and ProportionChangerDWPoseRender
- Total: 908 lines removed, codebase significantly simplified

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 15:11:32 +09:00
gear_machineandClaude 93d1e1c31b Implement ProportionChanger Interpolator with simplified specification (Issue017)
- Add ProportionChangerInterpolator node with streamlined parameters
- Input: pose_keypoint (singular notation, batch processing supported)
- Parameters: method (simplified from interpolation_method), interpolation_frames (0-5)
- Fixed internal parameters: momentum_weight=0.5 for cleaner UI
- Support 4 interpolation methods: linear, ease_in_out, bezier, momentum
- Complete ComfyUI integration with proper node mappings
- Include comprehensive standalone test suite

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 14:21:23 +09:00
gear_machineandClaude 63724bfb59 Implement ProportionChanger Params node for direct POSE_KEYPOINT editing
✨ Features:
- Direct pose keypoint manipulation without image rendering
- Body part scaling: pelvis, torso, neck, head, shoulders, arms, legs
- Face detail adjustments: eye distance, eye/eyebrow height and scaling, mouth, nose, face shape
- Hand scaling with wrist-based reference
- Global transformations: overall scale, rotation, translation

🔧 Technical Implementation:
- Independent transformation calculations to prevent parameter interference
- Deep copy protection to avoid memory reference sharing issues
- ComfyUI cache bypass with IS_CHANGED method
- Hierarchical transformation order: pelvis → torso → neck → shoulders → arms/legs/head
- OpenPose standard face keypoint group definitions

🐛 Bug Fixes:
- Fixed shoulder_scale + arm_scale interference (parameters now apply independently)
- Resolved memory reference sharing causing persistent changes across runs
- Fixed overall_scale not applying due to missing condition check
- Implemented proper face keypoint processing (was placeholder)

📦 Files Added:
- proportion_changer/params_node.py: Main ProportionChangerParams node implementation
- Updated nodes.py and __init__.py for proper node registration

🎯 Usage:
Input: POSE_KEYPOINT → ProportionChanger Params → Output: Modified POSE_KEYPOINT
Compatible with all other ProportionChanger nodes for chained processing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 13:51:43 +09:00
gear_machineandClaude 9bdfc7354d Fix extra_pnginfo errors and implement debug log control system
- Fix extra_pnginfo type errors with automatic dict→list conversion
- Add environment variable PROPORTION_CHANGER_DEBUG for log control
- Replace print-based debug logs with conditional logging system
- Disable verbose debug output in legacy unianimate modules
- Resolve circular import issues with local debug_log implementations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 12:33:21 +09:00
gear_machineandClaude d585488833 Unify node names and variable naming conventions
- Rename ProportionChanger Ultimate → ProportionChanger Reference
- Rename ProportionChanger DWPose Detector for PoseKeypoint → ProportionChanger DWPose Detector
- Standardize variable names: processed_pose_keypoint → changed_pose_keypoint
- Unify parameter naming: pose_keypoints → pose_keypoint (singular)
- Convert input parameter names to lowercase: POSE_KEYPOINT → pose_keypoint
- Update all NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS
- Fix comment references to use new class names

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 11:30:25 +09:00
gear_machineandClaude 142f043a63 Fix import structure: resolve nodes.py/nodes/ directory naming conflict
- Rename nodes/ directory to proportion_changer/ following ComfyUI conventions
- Update __init__.py to use simple relative imports instead of importlib.util
- Fix nodes.py imports to reference .proportion_changer instead of .nodes
- Resolve ImportError caused by Python module vs package name collision
- Follow established ComfyUI custom node patterns (similar to adv_control/)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-17 05:44:00 +09:00
gear_machineandClaude 23e1458d32 Fix PoseKeypointPreview widget persistence and standalone execution
- Add unique_id and extra_pnginfo parameters for workflow persistence
- Implement Show Text-style workflow updating to preserve JSON data across reloads
- Add OUTPUT_NODE = True to enable standalone execution without downstream nodes
- Fix onConfigure to skip pretty_format widget value and only display JSON data
- Resolve "true" string display issue on page reload

Now PoseKeypointPreview works like Show Text:
- Displays without requiring downstream nodes
- Preserves JSON content across browser reloads
- Properly handles widget state management

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-16 18:50:09 +09:00
gear_machineandClaude 8cb0eab0d4 Add POSE_KEYPOINT utility nodes with UI display support
- Add pose_keypoint input node for JSON to POSE_KEYPOINT conversion
- Add pose_keypoint preview node with read-only text display
- Implement JavaScript frontend for text widget display
- Support toe keypoints (19-24) in normalized coordinate format
- Update module structure to support web assets

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-16 18:00:29 +09:00